summaryrefslogtreecommitdiff
path: root/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729
diff options
context:
space:
mode:
Diffstat (limited to '2022-07-29-132358-6660-1@ba864816eb23_fix-20220729')
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/index.html189
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-062a69.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-069bf4.html1355
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-06c118.html1283
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-09b55a.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-0bc662.html1236
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-19ddc6.html3250
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2084b3.html898
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-24761d.html1355
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2dd8bc.html1355
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-489c44.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-4b9cac.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-534ad8.html1490
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-57e5d7.html1236
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-5a3c1b.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-68e8c1.html1490
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-86b9eb.html1490
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-88c30c.html1236
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-8aee73.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-958ab4.html1236
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-a25f69.html1236
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ac5343.html3250
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-b0e322.html1236
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ba3e4e.html1309
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-bdd56f.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-be2741.html1355
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-c2b391.html3250
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e0169c.html3250
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e73a25.html848
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fa48d9.html1490
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fc5910.html815
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/scanview.css62
-rw-r--r--2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/sorttable.js492
33 files changed, 43628 insertions, 0 deletions
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/index.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/index.html
new file mode 100644
index 0000000..f653b54
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/index.html
@@ -0,0 +1,189 @@
+<html>
+<head>
+<title>rootdir - scan-build results</title>
+<link type="text/css" rel="stylesheet" href="scanview.css"/>
+<script src="sorttable.js"></script>
+<script language='javascript' type="text/javascript">
+function SetDisplay(RowClass, DisplayVal)
+{
+ var Rows = document.getElementsByTagName("tr");
+ for ( var i = 0 ; i < Rows.length; ++i ) {
+ if (Rows[i].className == RowClass) {
+ Rows[i].style.display = DisplayVal;
+ }
+ }
+}
+
+function CopyCheckedStateToCheckButtons(SummaryCheckButton) {
+ var Inputs = document.getElementsByTagName("input");
+ for ( var i = 0 ; i < Inputs.length; ++i ) {
+ if (Inputs[i].type == "checkbox") {
+ if(Inputs[i] != SummaryCheckButton) {
+ Inputs[i].checked = SummaryCheckButton.checked;
+ Inputs[i].onclick();
+ }
+ }
+ }
+}
+
+function returnObjById( id ) {
+ if (document.getElementById)
+ var returnVar = document.getElementById(id);
+ else if (document.all)
+ var returnVar = document.all[id];
+ else if (document.layers)
+ var returnVar = document.layers[id];
+ return returnVar;
+}
+
+var NumUnchecked = 0;
+
+function ToggleDisplay(CheckButton, ClassName) {
+ if (CheckButton.checked) {
+ SetDisplay(ClassName, "");
+ if (--NumUnchecked == 0) {
+ returnObjById("AllBugsCheck").checked = true;
+ }
+ }
+ else {
+ SetDisplay(ClassName, "none");
+ NumUnchecked++;
+ returnObjById("AllBugsCheck").checked = false;
+ }
+}
+</script>
+<!-- SUMMARYENDHEAD -->
+</head>
+<body>
+<h1>rootdir - scan-build results</h1>
+
+<table>
+<tr><th>User:</th><td>root@b746def4d94c</td></tr>
+<tr><th>Working Directory:</th><td>/rootdir</td></tr>
+<tr><th>Command Line:</th><td>make -j 2</td></tr>
+<tr><th>Clang Version:</th><td>clang version 14.0.0 (Fedora 14.0.0-1.fc36)
+</td></tr>
+<tr><th>Date:</th><td>Fri Jul 29 13:23:58 2022</td></tr>
+</table>
+<h2>Bug Summary</h2><table>
+<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead>
+<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">30</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr>
+<tr><th>Logic error</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Out-of-bound access</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_out-of-bound_access');" checked/></center></td></tr>
+<tr><th>Memory error</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Memory leak</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_memory_error_memory_leak');" checked/></center></td></tr>
+<tr><th>Security</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Potential insecure memory buffer bounds restriction in call 'strcat'</td><td class="Q">4</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcat_');" checked/></center></td></tr>
+<tr><td class="SUMM_DESC">Potential insecure memory buffer bounds restriction in call 'strcpy'</td><td class="Q">4</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcpy_');" checked/></center></td></tr>
+<tr><th>Unused code</th><th colspan=2></th></tr>
+<tr><td class="SUMM_DESC">Dead assignment</td><td class="Q">18</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_unused_code_dead_assignment');" checked/></center></td></tr>
+<tr><td class="SUMM_DESC">Unreachable code</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_unused_code_unreachable_code');" checked/></center></td></tr>
+</table>
+<h2>Reports</h2>
+
+<table class="sortable" style="table-layout:automatic">
+<thead><tr>
+ <td>Bug Group</td>
+ <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind">&nbsp;&#x25BE;</span></td>
+ <td>File</td>
+ <td>Function/Method</td>
+ <td class="Q">Line</td>
+ <td class="Q">Path Length</td>
+ <td class="sorttable_nosort"></td>
+ <!-- REPORTBUGCOL -->
+</tr></thead>
+<tbody>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-watcher-x11.c</td><td class="DESC">connect_presence_watcher</td><td class="Q">467</td><td class="Q">1</td><td><a href="report-069bf4.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-069bf4.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>avers/gste-popsquares.c</td><td class="DESC">make_color_ramp</td><td class="Q">232</td><td class="Q">1</td><td><a href="report-06c118.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-06c118.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-window-x11.c</td><td class="DESC">spawn_on_window</td><td class="Q">1129</td><td class="Q">1</td><td><a href="report-19ddc6.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-19ddc6.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-watcher-x11.c</td><td class="DESC">disable_builtin_screensaver</td><td class="Q">599</td><td class="Q">1</td><td><a href="report-24761d.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-24761d.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-watcher-x11.c</td><td class="DESC">disable_builtin_screensaver</td><td class="Q">596</td><td class="Q">1</td><td><a href="report-2dd8bc.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-2dd8bc.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-auth-pam.c</td><td class="DESC">create_pam_handle</td><td class="Q">380</td><td class="Q">1</td><td><a href="report-534ad8.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-534ad8.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/mate-screensaver-command.c</td><td class="DESC">do_command</td><td class="Q">440</td><td class="Q">1</td><td><a href="report-57e5d7.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-57e5d7.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-auth-pam.c</td><td class="DESC">gs_auth_pam_verify_user</td><td class="Q">675</td><td class="Q">1</td><td><a href="report-68e8c1.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-68e8c1.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-auth-pam.c</td><td class="DESC">pam_conversation</td><td class="Q">255</td><td class="Q">1</td><td><a href="report-86b9eb.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-86b9eb.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/mate-screensaver-command.c</td><td class="DESC">do_command</td><td class="Q">340</td><td class="Q">1</td><td><a href="report-88c30c.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-88c30c.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/mate-screensaver-command.c</td><td class="DESC">do_command</td><td class="Q">430</td><td class="Q">1</td><td><a href="report-958ab4.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-958ab4.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/mate-screensaver-command.c</td><td class="DESC">do_command</td><td class="Q">435</td><td class="Q">1</td><td><a href="report-a25f69.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-a25f69.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-window-x11.c</td><td class="DESC">error_watch</td><td class="Q">1026</td><td class="Q">1</td><td><a href="report-ac5343.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-ac5343.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/mate-screensaver-command.c</td><td class="DESC">do_command</td><td class="Q">445</td><td class="Q">1</td><td><a href="report-b0e322.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-b0e322.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-watcher-x11.c</td><td class="DESC">disable_builtin_screensaver</td><td class="Q">597</td><td class="Q">1</td><td><a href="report-be2741.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-be2741.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-window-x11.c</td><td class="DESC">keyboard_command_watch</td><td class="Q">1362</td><td class="Q">1</td><td><a href="report-c2b391.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-c2b391.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-window-x11.c</td><td class="DESC">lock_command_watch</td><td class="Q">1630</td><td class="Q">1</td><td><a href="report-e0169c.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-e0169c.html" -->
+</tr>
+<tr class="bt_unused_code_dead_assignment"><td class="DESC">Unused code</td><td class="DESC">Dead assignment</td><td>rc/gs-auth-pam.c</td><td class="DESC">create_pam_handle</td><td class="Q">382</td><td class="Q">1</td><td><a href="report-fa48d9.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-fa48d9.html" -->
+</tr>
+<tr class="bt_memory_error_memory_leak"><td class="DESC">Memory error</td><td class="DESC">Memory leak</td><td>rc/mate-screensaver-command.c</td><td class="DESC">get_string_from_iter</td><td class="Q">327</td><td class="Q">27</td><td><a href="report-ba3e4e.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-ba3e4e.html" -->
+</tr>
+<tr class="bt_logic_error_out-of-bound_access"><td class="DESC">Logic error</td><td class="DESC">Out-of-bound access</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">91</td><td class="Q">17</td><td><a href="report-2084b3.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-2084b3.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcat_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcat'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">55</td><td class="Q">1</td><td><a href="report-489c44.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-489c44.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcat_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcat'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">118</td><td class="Q">1</td><td><a href="report-4b9cac.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-4b9cac.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcat_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcat'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">146</td><td class="Q">1</td><td><a href="report-5a3c1b.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-5a3c1b.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcat_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcat'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">61</td><td class="Q">1</td><td><a href="report-bdd56f.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-bdd56f.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcpy_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcpy'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">117</td><td class="Q">1</td><td><a href="report-062a69.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-062a69.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcpy_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcpy'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">60</td><td class="Q">1</td><td><a href="report-09b55a.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-09b55a.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcpy_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcpy'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">145</td><td class="Q">1</td><td><a href="report-8aee73.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-8aee73.html" -->
+</tr>
+<tr class="bt_security_potential_insecure_memory_buffer_bounds_restriction_in_call_strcpy_"><td class="DESC">Security</td><td class="DESC">Potential insecure memory buffer bounds restriction in call 'strcpy'</td><td>avers/xdg-user-dir-lookup.c</td><td class="DESC">xdg_user_dir_lookup</td><td class="Q">54</td><td class="Q">1</td><td><a href="report-e73a25.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-e73a25.html" -->
+</tr>
+<tr class="bt_unused_code_unreachable_code"><td class="DESC">Unused code</td><td class="DESC">Unreachable code</td><td>rc/mate-screensaver-command.c</td><td class="DESC">main</td><td class="Q">529</td><td class="Q">1</td><td><a href="report-0bc662.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-0bc662.html" -->
+</tr>
+<tr class="bt_unused_code_unreachable_code"><td class="DESC">Unused code</td><td class="DESC">Unreachable code</td><td>rc/test-fade.c</td><td class="DESC">main</td><td class="Q">94</td><td class="Q">1</td><td><a href="report-fc5910.html#EndPath">View Report</a></td>
+<!-- REPORTBUG id="report-fc5910.html" -->
+</tr>
+</tbody>
+</table>
+
+</body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-062a69.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-062a69.html
new file mode 100644
index 0000000..7b071a0
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-062a69.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcpy' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 062a69188f337e161cf7dd4dcf5b7987 -->
+
+<!-- BUGLINE 117 -->
+
+<!-- BUGCOLUMN 4 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 117, column 4</a><br />Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"117": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> strcat (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> <span class="mrange">strcpy</span> (user_dir, home_dir);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:25ex; max-width:52em">Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-069bf4.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-069bf4.html
new file mode 100644
index 0000000..0c495bf
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-069bf4.html
@@ -0,0 +1,1355 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-watcher-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'status' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-watcher-x11.c -->
+
+<!-- FILENAME gs-watcher-x11.c -->
+
+<!-- FUNCTIONNAME connect_presence_watcher -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 069bf403ec7b41bf42c8f6bc6a8572a5 -->
+
+<!-- BUGLINE 467 -->
+
+<!-- BUGCOLUMN 4 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-watcher-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 467, column 4</a><br />Value stored to 'status' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-watcher-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-watcher-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"467": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2008 Red Hat, Inc.</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;time.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-watcher.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_watcher_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean watchdog_timer (GSWatcher *watcher);</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>struct</span> GSWatcherPrivate</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>/* settings */</span></td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> guint enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> guint delta_notice_timeout;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='comment'>/* state */</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> guint active : 1;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> guint idle : 1;</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint idle_notice : 1;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> guint idle_id;</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> DBusGProxy *presence_proxy;</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> IDLE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> IDLE_NOTICE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWatcher, gs_watcher, G_TYPE_OBJECT)<span class='macro_popup'>static void gs_watcher_init (GSWatcher *self); static void gs_watcher_class_init<br> (GSWatcherClass *klass); static GType gs_watcher_get_type_once<br> (void); static gpointer gs_watcher_parent_class = ((void*)0)<br>; static gint GSWatcher_private_offset; static void gs_watcher_class_intern_init<br> (gpointer klass) { gs_watcher_parent_class = g_type_class_peek_parent<br> (klass); if (GSWatcher_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWatcher_private_offset); gs_watcher_class_init<br> ((GSWatcherClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_watcher_get_instance_private (GSWatcher *<br>self) { return (((gpointer) ((guint8*) (self) + (glong) (GSWatcher_private_offset<br>)))); } GType gs_watcher_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_watcher_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_watcher_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> (((GType) ((20) &lt;&lt; (2))), g_intern_static_string ("GSWatcher"<br>), sizeof (GSWatcherClass), (GClassInitFunc)(void (*)(void)) gs_watcher_class_intern_init<br>, sizeof (GSWatcher), (GInstanceInitFunc)(void (*)(void)) gs_watcher_init<br>, (GTypeFlags) 0); { {{ GSWatcher_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWatcherPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line">remove_watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">add_watchdog_timer (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">gs_watcher_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 115, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">set_status_text (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *text)</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> watcher-&gt;priv-&gt;status_message = g_strdup (text);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (watcher)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"status-message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line">gs_watcher_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> set_status_text (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 146, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line">gs_watcher_class_init (GSWatcherClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> object_class-&gt;finalize = gs_watcher_finalize;</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> object_class-&gt;get_property = gs_watcher_get_property;</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> object_class-&gt;set_property = gs_watcher_set_property;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> signals [IDLE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> signals [IDLE_NOTICE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-notice-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_notice_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_notice_changed<br>))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line">_gs_watcher_set_session_idle_notice (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> gboolean in_effect)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>if</span> (in_effect != watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> g_signal_emit (watcher, signals [IDLE_NOTICE_CHANGED], 0, in_effect, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle notice state: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 204, "Changing idle notice state: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = (in_effect != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle notice signal not handled: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 210, "Idle notice signal not handled: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line">_gs_watcher_set_session_idle (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean is_idle)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='keyword'>if</span> (is_idle != watcher-&gt;priv-&gt;idle)</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> g_signal_emit (watcher, signals [IDLE_CHANGED], 0, is_idle, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle state: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 231, "Changing idle state: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> watcher-&gt;priv-&gt;idle = (is_idle != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle changed signal not handled: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 237, "Idle changed signal not handled: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line">gs_watcher_get_active (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> gboolean active;</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> active = watcher-&gt;priv-&gt;active;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> <span class='keyword'>return</span> active;</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line">_gs_watcher_reset_state (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> watcher-&gt;priv-&gt;idle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line">_gs_watcher_set_active_internal (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (active != watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='comment'>/* reset state */</span></td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> _gs_watcher_reset_state (watcher);</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> watcher-&gt;priv-&gt;active = (active != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line">gs_watcher_set_active (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"turning watcher: %s"</span>, active ? <span class='string_literal'>"ON"</span> : <span class='string_literal'>"OFF"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 284, "turning watcher: %s"<br>, active ? "ON" : "OFF")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;active == active)</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is already %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='macro'>active ? <span class='string_literal'>"active"</span> : <span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;enabled)</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is disabled, cannot activate"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 295, "Idle detection is disabled, cannot activate"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> _gs_watcher_set_active_internal (watcher, active);</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line">gs_watcher_set_enabled (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;enabled != enabled)</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> gboolean is_active = gs_watcher_get_active (watcher);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> watcher-&gt;priv-&gt;enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='comment'>/* if we are disabling the watcher and we are</span></td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='comment'>active shut it down */</span></td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>if</span> (! enabled &amp;&amp; is_active)</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> _gs_watcher_set_active_internal (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">gs_watcher_get_enabled (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> gboolean enabled;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> enabled = watcher-&gt;priv-&gt;enabled;</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> <span class='keyword'>return</span> enabled;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line">on_idle_timeout (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> res = _gs_watcher_set_session_idle (watcher, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='comment'>/* try again if we failed i guess */</span></td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> <span class='keyword'>return</span> !res;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line">set_status (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> guint status)</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> gboolean is_idle;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"GSWatcher: not active, ignoring status changes"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 358, "GSWatcher: not active, ignoring status changes"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> is_idle = (status == 3);</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (!is_idle &amp;&amp; !watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> <span class='comment'>/* no change in idleness */</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='keyword'>if</span> (is_idle)</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, is_idle);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='comment'>/* queue an activation */</span></td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> watcher-&gt;priv-&gt;idle_id = g_timeout_add (watcher-&gt;priv-&gt;delta_notice_timeout,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> (GSourceFunc)on_idle_timeout,</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* cancel notice too */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> _gs_watcher_set_session_idle (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line">on_presence_status_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> guint status,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line">on_presence_status_text_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line">connect_presence_watcher (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> DBusGConnection *bus;</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> bus = dbus_g_bus_get (DBUS_BUS_SESSION, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>if</span> (bus == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_warning (<span class='string_literal'>"Unable to get session bus: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> watcher-&gt;priv-&gt;presence_proxy = dbus_g_proxy_new_for_name_owner (bus,</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager"</span>,</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> DBusGProxy *proxy;</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='macro'>G_TYPE_UINT<span class='macro_popup'>((GType) ((7) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_changed)<span class='macro_popup'>((GCallback) (on_presence_status_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_text_changed)<span class='macro_popup'>((GCallback) (on_presence_status_text_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> proxy = dbus_g_proxy_new_from_proxy (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='string_literal'>"org.freedesktop.DBus.Properties"</span>,</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>);</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>if</span> (proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> guint status;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text;</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> GValue value = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> status = <span class="mrange">0</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:25ex">Value stored to 'status' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> status_text = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status"</span>,</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> status = g_value_get_uint (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> g_value_unset (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status-text"</span>,</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status text: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> status_text = g_value_get_string (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_warning (<span class='string_literal'>"Failed to get session presence proxy: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line">gs_watcher_init (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> watcher-&gt;priv = gs_watcher_get_instance_private (watcher);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> watcher-&gt;priv-&gt;enabled = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> connect_presence_watcher (watcher);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='comment'>/* time before idle signal to send notice signal */</span></td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> watcher-&gt;priv-&gt;delta_notice_timeout = 10000;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> add_watchdog_timer (watcher, 600000);</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line">gs_watcher_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WATCHER (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> watcher = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='macro'>g_return_if_fail (watcher-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> remove_watchdog_timer (watcher);</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> g_object_unref (watcher-&gt;priv-&gt;presence_proxy);</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_watcher_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_watcher_parent_class)), (((GType) ((20) &lt;&lt; (2))<br>))))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"><span class='comment'>/* Figuring out what the appropriate XSetScreenSaver() parameters are</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>(one wouldn't expect this to be rocket science.)</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line">disable_builtin_screensaver (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> gboolean unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> <span class='keyword'>int</span> current_server_timeout, current_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> <span class='keyword'>int</span> current_prefer_blank, current_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> <span class='keyword'>int</span> desired_server_timeout, desired_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='keyword'>int</span> desired_prefer_blank, desired_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> XGetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> &amp;current_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> &amp;current_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> &amp;current_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> &amp;current_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> desired_server_timeout = current_server_timeout;</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> desired_server_interval = current_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> desired_prefer_blank = current_prefer_blank;</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> desired_allow_exp = current_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> desired_server_interval = 0;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='comment'>/* I suspect (but am not sure) that DontAllowExposures might have</span></td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>something to do with powering off the monitor as well, at least</span></td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='comment'>on some systems that don't support XDPMS? Who know... */</span></td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> desired_allow_exp = <span class='macro'>AllowExposures<span class='macro_popup'>1</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* When we're not using an extension, set the server-side timeout to 0,</span></td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='comment'>so that the server never gets involved with screen blanking, and we</span></td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>do it all ourselves. (However, when we *are* using an extension,</span></td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>we tell the server when to notify us, and rather than blanking the</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>screen, the server will send us an X event telling us to blank.)</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> desired_server_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (desired_server_timeout != current_server_timeout</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> || desired_server_interval != current_server_interval</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> || desired_prefer_blank != current_prefer_blank</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> || desired_allow_exp != current_allow_exp)</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"disabling server builtin screensaver:"<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> <span class='string_literal'><span class='macro'>" (xset s %d %d; xset s %s; xset s %s)"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='macro'>desired_server_timeout,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> <span class='macro'>desired_server_interval,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> <span class='macro'>(desired_prefer_blank ? <span class='string_literal'>"blank"</span> : <span class='string_literal'>"noblank"</span>),<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='macro'>(desired_allow_exp ? <span class='string_literal'>"expose"</span> : <span class='string_literal'>"noexpose"</span>))<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> XSetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> desired_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> desired_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> desired_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> desired_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> XSync (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='keyword'>if</span> (unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* Turn off the server builtin saver if it is now running. */</span></td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> XForceScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>ScreenSaverReset<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"><span class='comment'>/* This timer goes off every few minutes, whether the user is idle or not,</span></td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='comment'>to try and clean up anything that has gone wrong.</span></td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='comment'>It calls disable_builtin_screensaver() so that if xset has been used,</span></td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='comment'>or some other program (like xlock) has messed with the XSetScreenSaver()</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='comment'>settings, they will be set back to sensible values (if a server extension</span></td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='comment'>is in use, messing with xlock can cause the screensaver to never get a wakeup</span></td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> <span class='comment'>event, and could cause monitor power-saving to occur, and all manner of</span></td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> <span class='comment'>heinousness.)</span></td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line">watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> disable_builtin_screensaver (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line">GSWatcher *</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">gs_watcher_new (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> watcher = g_object_new (<span class='macro'>GS_TYPE_WATCHER<span class='macro_popup'>(gs_watcher_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WATCHER (watcher)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-06c118.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-06c118.html
new file mode 100644
index 0000000..f01c46d
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-06c118.html
@@ -0,0 +1,1283 @@
+<!doctype html>
+<html>
+<head>
+<title>gste-popsquares.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'wanted' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/savers/gste-popsquares.c -->
+
+<!-- FILENAME gste-popsquares.c -->
+
+<!-- FUNCTIONNAME make_color_ramp -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 06c11888eaf488617fc0c337c5924edb -->
+
+<!-- BUGLINE 232 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/gste-popsquares.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 232, column 3</a><br />Value stored to 'wanted' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gste-popsquares.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gste-popsquares.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"232": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8; tab-width: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2005 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "gs-theme-engine.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include "gste-popsquares.h"</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gste_popsquares_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> draw_frame (GSTEPopsquares *pop,</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> cairo_t *cr);</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> _square</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>int</span> x, y, w, h;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> color;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line">} square;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>struct</span> GSTEPopsquaresPrivate</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> guint timeout_id;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> <span class='keyword'>int</span> ncolors;</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>int</span> subdivision;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> GdkRGBA *colors;</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> square *squares;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GObjectClass *parent_class = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSTEPopsquares, gste_popsquares, GS_TYPE_THEME_ENGINE)<span class='macro_popup'>static void gste_popsquares_init (GSTEPopsquares *self); static<br> void gste_popsquares_class_init (GSTEPopsquaresClass *klass)<br>; static GType gste_popsquares_get_type_once (void); static gpointer<br> gste_popsquares_parent_class = ((void*)0); static gint GSTEPopsquares_private_offset<br>; static void gste_popsquares_class_intern_init (gpointer klass<br>) { gste_popsquares_parent_class = g_type_class_peek_parent (<br>klass); if (GSTEPopsquares_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSTEPopsquares_private_offset); gste_popsquares_class_init<br> ((GSTEPopsquaresClass*) klass); } __attribute__ ((__unused__<br>)) static inline gpointer gste_popsquares_get_instance_private<br> (GSTEPopsquares *self) { return (((gpointer) ((guint8*) (self<br>) + (glong) (GSTEPopsquares_private_offset)))); } GType gste_popsquares_get_type<br> (void) { static gsize static_g_define_type_id = 0; if ((__extension__<br> ({ _Static_assert (sizeof *(&amp;static_g_define_type_id) ==<br> sizeof (gpointer), "Expression evaluates to false"); (void) (<br>0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0));<br> (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gste_popsquares_get_type_once<br> (); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gste_popsquares_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> ((gs_theme_engine_get_type ()), g_intern_static_string ("GSTEPopsquares"<br>), sizeof (GSTEPopsquaresClass), (GClassInitFunc)(void (*)(void<br>)) gste_popsquares_class_intern_init, sizeof (GSTEPopsquares)<br>, (GInstanceInitFunc)(void (*)(void)) gste_popsquares_init, (<br>GTypeFlags) 0); { {{ GSTEPopsquares_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSTEPopsquaresPrivate)); };} } return<br> g_define_type_id; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line">hsv_to_rgb (<span class='keyword'>int</span> h,</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> <span class='keyword'>double</span> s,</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='keyword'>double</span> v,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='keyword'>double</span> *r,</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>double</span> *g,</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>double</span> *b)</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='keyword'>double</span> H, S, V, R, G, B;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>double</span> p1, p2, p3;</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='keyword'>double</span> f;</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (s &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> s = 0;</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>if</span> (v &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> v = 0;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>if</span> (s &gt; 1)</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> s = 1;</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> <span class='keyword'>if</span> (v &gt; 1)</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> v = 1;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> S = s;</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> V = v;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> H = (h % 360) / 60.0;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> i = H;</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> f = H - i;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p1 = V * (1 - S);</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> p2 = V * (1 - (S * f));</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> p3 = V * (1 - (S * (1 - f)));</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='keyword'>if</span> (i == 0)</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> R = V;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> G = p3;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> B = p1;</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (i == 1)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> R = p2;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> G = V;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> B = p1;</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (i == 2)</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> R = p1;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> G = V;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> B = p3;</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (i == 3)</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> R = p1;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> G = p2;</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> B = V;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (i == 4)</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> R = p3;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> G = p1;</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> B = V;</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> R = V;</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> G = p1;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> B = p2;</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> *r = R;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> *g = G;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> *b = B;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line">rgb_to_hsv (<span class='keyword'>double</span> r,</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>double</span> g,</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>double</span> b,</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> <span class='keyword'>int</span> *h,</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>double</span> *s,</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> <span class='keyword'>double</span> *v)</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>double</span> R, G, B, H, S, V;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> <span class='keyword'>double</span> cmax, cmin;</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>double</span> cmm;</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> <span class='keyword'>int</span> imax;</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> R = r;</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> G = g;</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> B = b;</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> cmax = R;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> cmin = G;</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> imax = 1;</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='keyword'>if</span> (cmax &lt; G)</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> cmax = G;</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> cmin = R;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> imax = 2;</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> <span class='keyword'>if</span> (cmax &lt; B)</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> cmax = B;</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> imax = 3;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='keyword'>if</span> (cmin &gt; B)</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> cmin = B;</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> cmm = cmax - cmin;</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> V = cmax;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='keyword'>if</span> (cmm == 0)</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> S = H = 0;</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> S = cmm / cmax;</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='keyword'>if</span> (imax == 1)</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> H = (G - B) / cmm;</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (imax == 2)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> H = 2.0 + (B - R) / cmm;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='comment'>/*if (imax == 3)*/</span></td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> H = 4.0 + (R - G) / cmm;</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (H &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> H += 6.0;</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> *h = (H * 60.0);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> *s = S;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> *v = V;</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">make_color_ramp (<span class='keyword'>int</span> h1,</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> <span class='keyword'>double</span> s1,</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> <span class='keyword'>double</span> v1,</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> <span class='keyword'>int</span> h2,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>double</span> s2,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> <span class='keyword'>double</span> v2,</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> GdkRGBA *colors,</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> <span class='keyword'>int</span> n_colors,</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> gboolean closed)</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> <span class='keyword'>double</span> dh, ds, dv; <span class='comment'>/* deltas */</span></td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='keyword'>int</span> ncolors, wanted;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> <span class='keyword'>int</span> total_ncolors = n_colors;</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> wanted = total_ncolors;</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> <span class='keyword'>if</span> (closed)</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> wanted = <span class="mrange">(wanted / 2) + 1</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">Value stored to 'wanted' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> ncolors = total_ncolors;</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> memset (colors, 0, n_colors * <span class='keyword'>sizeof</span> (*colors));</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (closed)</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> ncolors = (ncolors / 2) + 1;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='comment'>/* Note: unlike other routines in this module, this function assumes that</span></td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='comment'>if h1 and h2 are more than 180 degrees apart, then the desired direction</span></td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> <span class='comment'>is always from h1 to h2 (rather than the shorter path.) make_uniform</span></td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='comment'>depends on this.</span></td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> dh = ((<span class='keyword'>double</span>)h2 - (<span class='keyword'>double</span>)h1) / ncolors;</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> ds = (s2 - s1) / ncolors;</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> dv = (v2 - v1) / ncolors;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; ncolors; i++)</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> hsv_to_rgb ((<span class='keyword'>int</span>) (h1 + (i * dh)),</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> (s1 + (i * ds)),</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> (v1 + (i * dv)),</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> &amp;colors [i].red,</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> &amp;colors [i].green,</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> &amp;colors [i].blue);</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> colors [i].alpha = 1.0;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>if</span> (closed)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='keyword'>for</span> (i = ncolors; i &lt; n_colors; i++)</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> colors [i] = colors [n_colors - i];</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line">randomize_square_colors (square *squares,</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>int</span> nsquares,</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span class='keyword'>int</span> ncolors)</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> square *s;</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> s = squares;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; nsquares; i++)</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> s[i].color = g_random_int_range (0, ncolors);</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line">set_colors (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> GdkRGBA *fg,</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> GdkRGBA *bg)</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> GtkStyleContext *style;</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> style = gtk_widget_get_style_context (widget);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> gtk_style_context_save (style);</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> gtk_style_context_set_state (style, GTK_STATE_FLAG_SELECTED);</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> gtk_style_context_get_background_color (style,</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> gtk_style_context_get_state (style),</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> bg);</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> <span class='keyword'>if</span> (bg-&gt;alpha == 0.0)</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> gtk_style_context_add_class (style, <span class='macro'>GTK_STYLE_CLASS_VIEW<span class='macro_popup'>"view"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> gtk_style_context_get_background_color (style,</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> gtk_style_context_get_state (style),</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> bg);</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> gtk_style_context_restore (style);</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> fg-&gt;red = bg-&gt;red * 0.7;</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> fg-&gt;green = bg-&gt;green * 0.7;</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> fg-&gt;blue = bg-&gt;blue * 0.7;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> fg-&gt;alpha = bg-&gt;alpha;</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line">gste_popsquares_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> <span class='macro'>GSTE_POPSQUARES (object)<span class='macro_popup'>((((GSTEPopsquares*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gste_popsquares_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gste-popsquares.c", 330, ("property"), _glib__property_id,<br> _glib__pspec-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance<br>*) (_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name<br> ((((((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line">gste_popsquares_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='macro'>GSTE_POPSQUARES (object)<span class='macro_popup'>((((GSTEPopsquares*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gste_popsquares_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gste-popsquares.c", 346, ("property"), _glib__property_id,<br> _glib__pspec-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance<br>*) (_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name<br> ((((((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line">setup_squares (GSTEPopsquares *pop)</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>int</span> window_width;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> <span class='keyword'>int</span> window_height;</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='keyword'>int</span> nsquares;</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> <span class='keyword'>int</span> x, y;</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='keyword'>int</span> sw, sh, gw, gh;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> GdkWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> window = gs_theme_engine_get_window (<span class='macro'>GS_THEME_ENGINE (pop)<span class='macro_popup'>((((GSThemeEngine*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((pop)), ((gs_theme_engine_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> <span class='keyword'>if</span> (window == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> gs_theme_engine_get_window_size (<span class='macro'>GS_THEME_ENGINE (pop)<span class='macro_popup'>((((GSThemeEngine*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((pop)), ((gs_theme_engine_get_type ()))))))</span></span>, &amp;window_width, &amp;window_height);</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> sw = window_width / pop-&gt;priv-&gt;subdivision;</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> sh = window_height / pop-&gt;priv-&gt;subdivision;</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> gw = pop-&gt;priv-&gt;subdivision;</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> gh = pop-&gt;priv-&gt;subdivision;</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> nsquares = gw * gh;</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>if</span> (pop-&gt;priv-&gt;squares)</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> g_free (pop-&gt;priv-&gt;squares);</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> pop-&gt;priv-&gt;squares = <span class='macro'>g_new0 (square, nsquares)<span class='macro_popup'>((square *) g_malloc0_n ((nsquares), sizeof (square)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> <span class='keyword'>for</span> (y = 0; y &lt; gh; y++)</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (x = 0; x &lt; gw; x++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> square *s = (square *) &amp;pop-&gt;priv-&gt;squares [gw * y + x];</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> s-&gt;w = sw;</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> s-&gt;h = sh;</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> s-&gt;x = x * sw;</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> s-&gt;y = y * sh;</td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line">setup_colors (GSTEPopsquares *pop)</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> <span class='keyword'>double</span> s1, v1, s2, v2 = 0;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> <span class='keyword'>int</span> h1, h2 = 0;</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> <span class='keyword'>int</span> nsquares;</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> GdkRGBA fg;</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> GdkRGBA bg;</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> GdkWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> window = gs_theme_engine_get_window (<span class='macro'>GS_THEME_ENGINE (pop)<span class='macro_popup'>((((GSThemeEngine*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((pop)), ((gs_theme_engine_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> <span class='keyword'>if</span> (window == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> set_colors (<span class='macro'>GTK_WIDGET (pop)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((pop)), ((gtk_widget_get_type ()))))))</span></span>, &amp;fg, &amp;bg);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='keyword'>if</span> (pop-&gt;priv-&gt;colors)</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> g_free (pop-&gt;priv-&gt;colors);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> pop-&gt;priv-&gt;colors = <span class='macro'>g_new0 (GdkRGBA, pop-&gt;priv-&gt;ncolors)<span class='macro_popup'>((GdkRGBA *) g_malloc0_n ((pop-&gt;priv-&gt;ncolors), sizeof (<br>GdkRGBA)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> rgb_to_hsv (fg.red, fg.green, fg.blue, &amp;h1, &amp;s1, &amp;v1);</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> rgb_to_hsv (bg.red, bg.green, bg.blue, &amp;h2, &amp;s2, &amp;v2);</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> make_color_ramp (h1, s1, v1,</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> h2, s2, v2,</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> pop-&gt;priv-&gt;colors,</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> pop-&gt;priv-&gt;ncolors,</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> nsquares = pop-&gt;priv-&gt;subdivision * pop-&gt;priv-&gt;subdivision;</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> randomize_square_colors (pop-&gt;priv-&gt;squares, nsquares, pop-&gt;priv-&gt;ncolors);</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line">gste_popsquares_real_show (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> GSTEPopsquares *pop = <span class='macro'>GSTE_POPSQUARES (widget)<span class='macro_popup'>((((GSTEPopsquares*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gste_popsquares_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='comment'>/* start */</span></td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> setup_squares (pop);</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> setup_colors (pop);</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show)</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show (widget);</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line">gste_popsquares_real_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;draw) {</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;draw (widget, cr);</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> draw_frame (<span class='macro'>GSTE_POPSQUARES (widget)<span class='macro_popup'>((((GSTEPopsquares*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gste_popsquares_get_type ()))))))</span></span>, cr);</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line">gste_popsquares_real_configure (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> GdkEventConfigure *event)</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> GSTEPopsquares *pop = <span class='macro'>GSTE_POPSQUARES (widget)<span class='macro_popup'>((((GSTEPopsquares*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gste_popsquares_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> gboolean handled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='comment'>/* resize */</span></td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='comment'>/* just reset everything */</span></td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> setup_squares (pop);</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> setup_colors (pop);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='comment'>/* schedule a redraw */</span></td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> gtk_widget_queue_draw (widget);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;configure_event)</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> handled = <span class='macro'>GTK_WIDGET_CLASS (parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;configure_event (widget, event);</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>return</span> handled;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line">gste_popsquares_class_init (GSTEPopsquaresClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> GtkWidgetClass *widget_class = <span class='macro'>GTK_WIDGET_CLASS (klass)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> parent_class = g_type_class_peek_parent (klass);</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> object_class-&gt;finalize = gste_popsquares_finalize;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> object_class-&gt;get_property = gste_popsquares_get_property;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> object_class-&gt;set_property = gste_popsquares_set_property;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> widget_class-&gt;show = gste_popsquares_real_show;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> widget_class-&gt;draw = gste_popsquares_real_draw;</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> widget_class-&gt;configure_event = gste_popsquares_real_configure;</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line">draw_frame (GSTEPopsquares *pop,</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> <span class='keyword'>int</span> border = 1;</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> gboolean twitch = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>int</span> x, y;</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>int</span> gw, gh;</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>int</span> nsquares;</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>int</span> window_width;</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='keyword'>int</span> window_height;</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> GdkWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> window = gs_theme_engine_get_window (<span class='macro'>GS_THEME_ENGINE (pop)<span class='macro_popup'>((((GSThemeEngine*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((pop)), ((gs_theme_engine_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> <span class='keyword'>if</span> (window == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> gs_theme_engine_get_window_size (<span class='macro'>GS_THEME_ENGINE (pop)<span class='macro_popup'>((((GSThemeEngine*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((pop)), ((gs_theme_engine_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> &amp;window_width,</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> &amp;window_height);</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> gw = pop-&gt;priv-&gt;subdivision;</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> gh = pop-&gt;priv-&gt;subdivision;</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> nsquares = gw * gh;</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>for</span> (y = 0; y &lt; gh; y++)</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> <span class='keyword'>for</span> (x = 0; x &lt; gw; x++)</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> square *s = (square *) &amp;pop-&gt;priv-&gt;squares [gw * y + x];</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> gdk_cairo_set_source_rgba (cr, &amp;(pop-&gt;priv-&gt;colors [s-&gt;color]));</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> cairo_rectangle (cr, s-&gt;x, s-&gt;y,</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> border ? s-&gt;w - border : s-&gt;w,</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> border ? s-&gt;h - border : s-&gt;h);</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> cairo_fill (cr);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> s-&gt;color++;</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> <span class='keyword'>if</span> (s-&gt;color == pop-&gt;priv-&gt;ncolors)</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>if</span> (twitch &amp;&amp; ((g_random_int_range (0, 4)) == 0))</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> randomize_square_colors (pop-&gt;priv-&gt;squares, nsquares, pop-&gt;priv-&gt;ncolors);</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> s-&gt;color = g_random_int_range (0, pop-&gt;priv-&gt;ncolors);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line">draw_iter (GSTEPopsquares *pop)</td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (pop)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((pop)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line">gste_popsquares_init (GSTEPopsquares *pop)</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>int</span> delay;</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> pop-&gt;priv = gste_popsquares_get_instance_private (pop);</td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> pop-&gt;priv-&gt;ncolors = 128;</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> pop-&gt;priv-&gt;subdivision = 5;</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> delay = 25;</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> pop-&gt;priv-&gt;timeout_id = g_timeout_add (delay, (GSourceFunc)draw_iter, pop);</td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line">gste_popsquares_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> GSTEPopsquares *pop;</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do { if ((object != ((void*)0))) { } else { g_return_if_fail_warning<br> (((gchar*) 0), ((const char*) (__func__)), "object != NULL")<br>; return; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> <span class='macro'>g_return_if_fail (GSTE_IS_POPSQUARES (object))<span class='macro_popup'>do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance<br>*) ((object)); GType __t = ((gste_popsquares_get_type ())); gboolean<br> __r; if (!__inst) __r = (0); else if (__inst-&gt;g_class &amp;&amp;<br> __inst-&gt;g_class-&gt;g_type == __t) __r = (!(0)); else __r<br> = g_type_check_instance_is_a (__inst, __t); __r; })))))) { }<br> else { g_return_if_fail_warning (((gchar*) 0), ((const char*<br>) (__func__)), "GSTE_IS_POPSQUARES (object)"); return; } } while<br> (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> pop = <span class='macro'>GSTE_POPSQUARES (object)<span class='macro_popup'>((((GSTEPopsquares*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gste_popsquares_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> <span class='macro'>g_return_if_fail (pop-&gt;priv != NULL)<span class='macro_popup'>do { if ((pop-&gt;priv != ((void*)0))) { } else { g_return_if_fail_warning<br> (((gchar*) 0), ((const char*) (__func__)), "pop-&gt;priv != NULL"<br>); return; } } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> <span class='keyword'>if</span> (pop-&gt;priv-&gt;timeout_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> g_source_remove (pop-&gt;priv-&gt;timeout_id);</td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> pop-&gt;priv-&gt;timeout_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> g_free (pop-&gt;priv-&gt;squares);</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> g_free (pop-&gt;priv-&gt;colors);</td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((parent_class)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-09b55a.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-09b55a.html
new file mode 100644
index 0000000..c19f1cf
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-09b55a.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcpy' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 09b55aa57c9e58daaddbc7176b059416 -->
+
+<!-- BUGLINE 60 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 60, column 3</a><br />Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"60": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> strcat (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class="mrange">strcpy</span> (config_file, config_home);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex; max-width:52em">Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-0bc662.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-0bc662.html
new file mode 100644
index 0000000..8d8dcfd
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-0bc662.html
@@ -0,0 +1,1236 @@
+<!doctype html>
+<html>
+<head>
+<title>mate-screensaver-command.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC This statement is never executed -->
+
+<!-- BUGTYPE Unreachable code -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/mate-screensaver-command.c -->
+
+<!-- FILENAME mate-screensaver-command.c -->
+
+<!-- FUNCTIONNAME main -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 0bc6628fc93645ffffa3356e0cd639d2 -->
+
+<!-- BUGLINE 529 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/mate-screensaver-command.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 529, column 3</a><br />This statement is never executed</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name mate-screensaver-command.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c mate-screensaver-command.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"529": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;locale.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#define DBUS_API_SUBJECT_TO_CHANGE</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib-lowlevel.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#define <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span> "/org/mate/ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#define <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> gboolean do_quit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='keyword'>static</span> gboolean do_lock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean do_unlock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='keyword'>static</span> gboolean do_cycle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> gboolean do_activate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>static</span> gboolean do_deactivate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean do_version = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> gboolean do_poke = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> gboolean do_inhibit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> gboolean do_query = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>static</span> gboolean do_time = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_reason = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_application = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GOptionEntry entries [] =</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='string_literal'>"exit"</span>, 0, 0, G_OPTION_ARG_NONE, &amp;do_quit,</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Causes the screensaver to exit gracefully"</span>)<span class='macro_popup'>("Causes the screensaver to exit gracefully")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='string_literal'>"query"</span>, 'q', 0, G_OPTION_ARG_NONE, &amp;do_query,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the state of the screensaver"</span>)<span class='macro_popup'>("Query the state of the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='string_literal'>"time"</span>, 't', 0, G_OPTION_ARG_NONE, &amp;do_time,</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the length of time the screensaver has been active"</span>)<span class='macro_popup'>("Query the length of time the screensaver has been active")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='string_literal'>"lock"</span>, 'l', 0, G_OPTION_ARG_NONE, &amp;do_lock,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to lock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to lock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='string_literal'>"unlock"</span>, 'u', 0, G_OPTION_ARG_NONE, &amp;do_unlock,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to unlock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to unlock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='string_literal'>"cycle"</span>, 'c', 0, G_OPTION_ARG_NONE, &amp;do_cycle,</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then switch to another graphics demo"</span>)<span class='macro_popup'>("If the screensaver is active then switch to another graphics demo"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='string_literal'>"activate"</span>, 'a', 0, G_OPTION_ARG_NONE, &amp;do_activate,</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Turn the screensaver on (blank the screen)"</span>)<span class='macro_popup'>("Turn the screensaver on (blank the screen)")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='string_literal'>"deactivate"</span>, 'd', 0, G_OPTION_ARG_NONE, &amp;do_deactivate,</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then deactivate it (un-blank the screen)"</span>)<span class='macro_popup'>("If the screensaver is active then deactivate it (un-blank the screen)"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='string_literal'>"poke"</span>, 'p', 0, G_OPTION_ARG_NONE, &amp;do_poke,</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Poke the running screensaver to simulate user activity"</span>)<span class='macro_popup'>("Poke the running screensaver to simulate user activity")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='string_literal'>"inhibit"</span>, 'i', 0, G_OPTION_ARG_NONE, &amp;do_inhibit,</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Inhibit the screensaver from activating. Command blocks while inhibit is active."</span>)<span class='macro_popup'>("Inhibit the screensaver from activating. Command blocks while inhibit is active."<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='string_literal'>"application-name"</span>, 'n', 0, G_OPTION_ARG_STRING, &amp;inhibit_application,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The calling application that is inhibiting the screensaver"</span>)<span class='macro_popup'>("The calling application that is inhibiting the screensaver"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='string_literal'>"reason"</span>, 'r', 0, G_OPTION_ARG_STRING, &amp;inhibit_reason,</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The reason for inhibiting the screensaver"</span>)<span class='macro_popup'>("The reason for inhibiting the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='string_literal'>"version"</span>, 'V', 0, G_OPTION_ARG_NONE, &amp;do_version,</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Version of this application"</span>)<span class='macro_popup'>("Version of this application")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, 0, 0, G_OPTION_ARG_NONE, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='keyword'>static</span> GMainLoop *loop = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">screensaver_is_running (DBusConnection *connection)</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> gboolean exists;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> exists = dbus_bus_name_has_owner (connection, <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>return</span> exists;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line">screensaver_send_message_inhibit (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *application,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *reason)</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='string_literal'>"Inhibit"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;application);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;reason);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line">screensaver_send_message_bool (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gboolean value)</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_BOOLEAN<span class='macro_popup'>((int) 'b')</span></span>, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line">screensaver_send_message_void (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (! expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (!dbus_connection_send (connection, message, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> g_warning (<span class='string_literal'>"could not send message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> **</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">get_string_from_iter (DBusMessageIter *iter,</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>int</span> *num_elements)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='keyword'>int</span> count;</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>char</span> **buffer;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> *num_elements = 0;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> buffer = (<span class='keyword'>char</span> **)malloc (<span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * 8);</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> buffer[0] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span class='keyword'>while</span> (dbus_message_iter_get_arg_type (iter) == <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *value;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>char</span> *str;</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0 &amp;&amp; count != 0)</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 8));</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> dbus_message_iter_get_basic (iter, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> str = strdup (value);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>if</span> (str == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> buffer[count] = str;</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> dbus_message_iter_next (iter);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0)</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 1));</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> buffer[count] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> *num_elements = count;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='keyword'>return</span> buffer;</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">oom:</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> g_debug (<span class='string_literal'>"%s %d : error allocating memory\n"</span>, <span class='macro'>__FILE__<span class='macro_popup'>"mate-screensaver-command.c"</span></span>, <span class='macro'>__LINE__<span class='macro_popup'>327</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">do_command (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> DBusConnection *connection = data;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='keyword'>if</span> (do_quit)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Quit"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (do_query)</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> DBusMessageIter array;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is %s\n"</span>)<span class='macro_popup'>gettext ("The screensaver is %s\n")</span></span>, v ? <span class='macro'>_(<span class='string_literal'>"active"</span>)<span class='macro_popup'>gettext ("active")</span></span> : <span class='macro'>_(<span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gettext ("inactive")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetInhibitors"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> dbus_message_iter_recurse (&amp;iter, &amp;array);</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='keyword'>if</span> (dbus_message_iter_get_arg_type (&amp;array) == <span class='macro'>DBUS_TYPE_INVALID<span class='macro_popup'>((int) '\0')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not inhibited\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not inhibited\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> <span class='keyword'>char</span> **inhibitors;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> <span class='keyword'>int</span> num;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is being inhibited by:\n"</span>)<span class='macro_popup'>gettext ("The screensaver is being inhibited by:\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> inhibitors = get_string_from_iter (&amp;array, &amp;num);</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num; i++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_print (<span class='string_literal'>"\t%s\n"</span>, inhibitors[i]);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> g_strfreev (inhibitors);</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (do_time)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> dbus_int32_t t;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='keyword'>if</span> (v)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActiveTime"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;t);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver has been active for %d seconds.\n"</span>)<span class='macro_popup'>gettext ("The screensaver has been active for %d seconds.\n")</span></span>, t);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not currently active.\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not currently active.\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (do_lock)</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Lock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='keyword'>if</span> (do_unlock)</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Unlock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='keyword'>if</span> (do_cycle)</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Cycle"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='keyword'>if</span> (do_poke)</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"SimulateUserActivity"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (do_activate)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='keyword'>if</span> (do_deactivate)</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (do_inhibit)</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> reply = screensaver_send_message_inhibit (connection,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> inhibit_application ? inhibit_application : <span class='string_literal'>"Unknown"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> inhibit_reason ? inhibit_reason : <span class='string_literal'>"Unknown"</span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> g_main_loop_quit (loop);</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> DBusConnection *connection;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> DBusError dbus_error;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> GOptionContext *context;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> g_set_prgname (argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> (setlocale (<span class='macro'>LC_ALL<span class='macro_popup'>6</span></span>, <span class='string_literal'>""</span>) == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_warning (<span class='string_literal'>"Locale not understood by C library, internationalization will not work\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> context = g_option_context_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> retval = g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> g_option_context_free (context);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> <span class='keyword'>if</span> (! retval)</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> g_warning (<span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>if</span> (do_version)</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class="mrange">g_print</span> (<span class='string_literal'>"%s %s\n"</span>, argv [0], <span class='macro'>VERSION<span class='macro_popup'>"1.26.0"</span></span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">This statement is never executed</div></td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> dbus_error_init (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> connection = dbus_bus_get (DBUS_BUS_SESSION, &amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> <span class='keyword'>if</span> (! connection)</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> g_message (<span class='string_literal'>"Failed to connect to the D-BUS daemon: %s"</span>, dbus_error.message);</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> dbus_error_free (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> dbus_connection_setup_with_g_main (connection, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>if</span> (! screensaver_is_running (connection))</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_message (<span class='string_literal'>"Screensaver is not running!"</span>);</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> g_idle_add (do_command, connection);</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> loop = g_main_loop_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> g_main_loop_run (loop);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-19ddc6.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-19ddc6.html
new file mode 100644
index 0000000..52c376d
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-19ddc6.html
@@ -0,0 +1,3250 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-window-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'id' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-window-x11.c -->
+
+<!-- FILENAME gs-window-x11.c -->
+
+<!-- FUNCTIONNAME spawn_on_window -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 19ddc6ee460bc9ad1691abbbdb989923 -->
+
+<!-- BUGLINE 1129 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-window-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 1129, column 2</a><br />Value stored to 'id' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-window-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-window-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"1129": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2008 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;sys/wait.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkkeysyms.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;gtk/gtkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "gs-window.h"</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='directive'>#include &lt;X11/extensions/shape.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean popup_dialog_idle (gpointer data);</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_dialog_finish (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> remove_command_watches (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DIALOG_RESPONSE_CANCEL,</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> DIALOG_RESPONSE_OK</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'>#define <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span> 16</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#define <span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span> 30</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"><span class='directive'>#define <span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span> <span class='macro'>LIBEXECDIR<span class='macro_popup'>"/usr/local/libexec"</span></span> "/mate-screensaver-dialog"</span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='keyword'>struct</span> GSWindowPrivate</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> GdkMonitor *monitor;</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> guint obscured : 1;</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> guint dialog_up : 1;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> guint lock_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> guint user_switch_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> guint logout_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> guint keyboard_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> guint64 logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> <span class='keyword'>char</span> *logout_command;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>char</span> *keyboard_command;</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> GtkWidget *drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GtkWidget *lock_box;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> GtkWidget *lock_socket;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> GtkWidget *keyboard_socket;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> GtkWidget *info_bar;</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> GtkWidget *info_content;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> cairo_surface_t *background_surface;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> guint popup_dialog_idle_id;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> guint dialog_map_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint dialog_unmap_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> guint dialog_response_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> guint info_bar_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> gint lock_pid;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gint lock_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> gint dialog_response;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> gboolean dialog_quit_requested;</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gboolean dialog_shake_in_progress;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> gint keyboard_pid;</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> gint keyboard_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> GList *key_events;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> gdouble last_x;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> gdouble last_y;</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> GTimer *timer;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='keyword'>int</span> shape_event_base;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> ACTIVITY,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> DEACTIVATED,</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWindow, gs_window, GTK_TYPE_WINDOW)<span class='macro_popup'>static void gs_window_init (GSWindow *self); static void gs_window_class_init<br> (GSWindowClass *klass); static GType gs_window_get_type_once<br> (void); static gpointer gs_window_parent_class = ((void*)0);<br> static gint GSWindow_private_offset; static void gs_window_class_intern_init<br> (gpointer klass) { gs_window_parent_class = g_type_class_peek_parent<br> (klass); if (GSWindow_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWindow_private_offset); gs_window_class_init (<br>(GSWindowClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_window_get_instance_private (GSWindow *self<br>) { return (((gpointer) ((guint8*) (self) + (glong) (GSWindow_private_offset<br>)))); } GType gs_window_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_window_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_window_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> ((gtk_window_get_type ()), g_intern_static_string ("GSWindow"<br>), sizeof (GSWindowClass), (GClassInitFunc)(void (*)(void)) gs_window_class_intern_init<br>, sizeof (GSWindow), (GInstanceInitFunc)(void (*)(void)) gs_window_init<br>, (GTypeFlags) 0); { {{ GSWindow_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWindowPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line">set_invisible_cursor (GdkWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> gboolean invisible)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> GdkCursor *cursor = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>if</span> (invisible)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> display = gdk_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> cursor = gdk_cursor_new_for_display (display, GDK_BLANK_CURSOR);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> gdk_window_set_cursor (window, cursor);</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (cursor)</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_object_unref (cursor);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"><span class='comment'>/* derived from tomboy */</span></td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line">gs_window_override_user_time (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> guint32 ev_time = gtk_get_current_event_time ();</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='keyword'>if</span> (ev_time == 0)</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> gint ev_mask = gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> <span class='keyword'>if</span> (!(ev_mask &amp; GDK_PROPERTY_CHANGE_MASK))</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gtk_widget_add_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> GDK_PROPERTY_CHANGE_MASK);</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='comment'>* NOTE: Last resort for D-BUS or other non-interactive</span></td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='comment'>* openings. Causes roundtrip to server. Lame.</span></td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> ev_time = gdk_x11_get_server_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>));</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> gdk_x11_window_set_user_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), ev_time);</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line">clear_children (Window window)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> Window root;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> Window parent;</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> Window *children;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>int</span> n_children;</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> children = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> status = XQueryTree (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, window, &amp;root, &amp;parent, &amp;children, &amp;n_children);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> <span class='keyword'>if</span> (status == 0)</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>while</span> (n_children)</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> Window child;</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> child = children [--n_children];</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> XClearWindow (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, child);</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> clear_children (child);</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line">widget_clear_all_children (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> GdkWindow *w;</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing all child windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 235, "Clearing all child windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> display = gtk_widget_get_display (widget);</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> w = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> clear_children (<span class='macro'>GDK_WINDOW_XID (w)<span class='macro_popup'>(gdk_x11_window_get_xid (w))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line">gs_window_set_background_surface (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> cairo_surface_t *surface)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> window-&gt;priv-&gt;background_surface = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> <span class='keyword'>if</span> (surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> window-&gt;priv-&gt;background_surface = cairo_surface_reference (surface);</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line">gs_window_clear (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing widgets"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 274, "Clearing widgets"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='comment'>/* If a screensaver theme adds child windows</span></td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> <span class='comment'>we need to clear them too */</span></td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> widget_clear_all_children (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (window-&gt;priv-&gt;drawing_area))</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> gtk_widget_queue_draw (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> widget_clear_all_children (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> gdk_display_flush (display);</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"><span class='keyword'>static</span> cairo_region_t *</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line">get_outside_region (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>int</span> num_monitors;</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> cairo_region_t *region;</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> region = cairo_region_create ();</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> num_monitors = gdk_display_get_n_monitors (display);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num_monitors; i++)</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> GdkMonitor *mon = gdk_display_get_monitor (display, i);</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='keyword'>if</span> (mon != window-&gt;priv-&gt;monitor)</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> cairo_rectangle_int_t rectangle;</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> gdk_monitor_get_geometry (mon, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> rectangle.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> rectangle.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> rectangle.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> rectangle.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> cairo_region_union_rectangle (region, &amp;rectangle);</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='keyword'>return</span> region;</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">update_geometry (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> cairo_region_t *outside_region;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> cairo_region_t *monitor_region;</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> outside_region = get_outside_region (window);</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> gdk_monitor_get_geometry (window-&gt;priv-&gt;monitor, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"got geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> monitor_region = cairo_region_create_rectangle ((<span class='keyword'>const</span> cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> cairo_region_subtract (monitor_region, outside_region);</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> cairo_region_destroy (outside_region);</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> cairo_region_get_extents (monitor_region, (cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> cairo_region_destroy (monitor_region);</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"using geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> window-&gt;priv-&gt;geometry.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> window-&gt;priv-&gt;geometry.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> window-&gt;priv-&gt;geometry.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> window-&gt;priv-&gt;geometry.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line">monitor_geometry_notify (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> GParamSpec *pspec,</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got monitor geometry notify signal"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 371, "Got monitor geometry notify signal"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"><span class='comment'>/* copied from panel-toplevel.c */</span></td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line">gs_window_move_resize_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> gboolean move,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> gboolean resize)</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> GtkWidget *widget;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> GdkWindow *gdkwindow;</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> gdkwindow = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='macro'>g_assert (gtk_widget_get_realized (widget))<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Move and/or resize window: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (move &amp;&amp; resize)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> gdk_window_move_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> window-&gt;priv-&gt;geometry.y,</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (move)</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> gdk_window_move (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> window-&gt;priv-&gt;geometry.y);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (resize)</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> gdk_window_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line">gs_window_real_unrealize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (monitor, monitor_geometry_notify,<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize)</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize (widget);</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"><span class='comment'>/* copied from gdk */</span></td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"><span class='keyword'>extern</span> <span class='keyword'>char</span> **environ;</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"><span class='keyword'>static</span> gchar **</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line">spawn_make_environment_for_display (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> gchar **envp)</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> gchar **retval = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> <span class='keyword'>const</span> gchar *display_name;</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> gint display_index = -1;</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> gint i, env_len;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='macro'>g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='keyword'>if</span> (envp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> envp = environ;</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>for</span> (env_len = 0; envp[env_len]; env_len++)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='keyword'>if</span> (strncmp (envp[env_len], <span class='string_literal'>"DISPLAY"</span>, strlen (<span class='string_literal'>"DISPLAY"</span>)) == 0)</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> display_index = env_len;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> retval = <span class='macro'>g_new (<span class='keyword'>char</span> *, env_len + 1)<span class='macro_popup'>((char * *) g_malloc_n ((env_len + 1), sizeof (char *)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> retval[env_len] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> display_name = gdk_display_get_name (display);</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; env_len; i++)</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (i == display_index)</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> retval[i] = g_strconcat (<span class='string_literal'>"DISPLAY="</span>, display_name, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> retval[i] = g_strdup (envp[i]);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> <span class='macro'>g_assert (i == env_len)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line">spawn_command_line_on_display_sync (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>const</span> gchar *command_line,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='keyword'>char</span> **standard_output,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='keyword'>char</span> **standard_error,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>int</span> *exit_status,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>char</span> **argv = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='keyword'>char</span> **envp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='macro'>g_return_val_if_fail (command_line != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command_line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;argv, error))</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> envp = spawn_make_environment_for_display (display, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> retval = g_spawn_sync (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> standard_output,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> standard_error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> exit_status,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> error);</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> GdkVisual *</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">get_best_visual_for_display (GdkDisplay *display)</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>char</span> *std_output;</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>int</span> exit_status;</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> v;</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> visual = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> std_output = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> res = spawn_command_line_on_display_sync (display,</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH<span class='macro_popup'>"/usr/local/libexec/mate-screensaver-gl-helper"</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> &amp;std_output,</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> &amp;exit_status,</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not run command '%s': %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (std_output, <span class='string_literal'>"0x%lx %c"</span>, &amp;v, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> <span class='keyword'>if</span> (v != 0)</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> VisualID visual_id;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> visual_id = (VisualID) v;</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> visual = gdk_x11_screen_lookup_visual (screen, visual_id);</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Found best GL visual for display %s: 0x%x"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='macro'>gdk_display_get_name (display),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='macro'>(<span class='keyword'>unsigned</span> <span class='keyword'>int</span>) visual_id)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> g_free (std_output);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>g_object_ref (visual)<span class='macro_popup'>((__typeof__ (visual)) (g_object_ref) (visual))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line">widget_set_best_visual (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='macro'>g_return_if_fail (widget != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> visual = get_best_visual_for_display (gtk_widget_get_display (widget));</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='keyword'>if</span> (visual != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> gtk_widget_set_visual (widget, visual);</td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> g_object_unref (visual);</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line">gs_window_real_realize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> widget_set_best_visual (widget);</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize)</td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize (widget);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> gs_window_override_user_time (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> gs_window_move_resize_window (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='macro'>g_signal_connect (monitor,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='string_literal'><span class='macro'>"notify::geometry"</span>,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='macro'>G_CALLBACK (monitor_geometry_notify),<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"><span class='comment'>/* every so often we should raise the window in case</span></td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='comment'>another window has somehow gotten on top */</span></td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> GtkWidget *widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> gdk_window_focus (gtk_widget_get_window (widget), <span class='macro'>GDK_CURRENT_TIME<span class='macro_popup'>0L</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line">remove_watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> g_source_remove (window-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line">add_watchdog_timer (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line">remove_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> g_source_remove (window-&gt;priv-&gt;popup_dialog_idle_id);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line">add_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = g_idle_add (popup_dialog_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line">emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_signal_emit (window, signals [DEACTIVATED], 0);</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line">add_emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> g_idle_add ((GSourceFunc)emit_deactivated_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line">gs_window_raise (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> GdkWindow *win;</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Raising screensaver window"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 662, "Raising screensaver window"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> win = gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> gdk_window_raise (win);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line">x11_window_is_ours (Window window)</td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> GdkWindow *gwindow;</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> gwindow = gdk_x11_window_lookup_for_display (gdk_display_get_default (), window);</td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (gwindow &amp;&amp; (window != <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line">unshape_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> gdk_window_shape_combine_region (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>),</td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line">gs_window_xevent (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> GdkXEvent *xevent)</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> XEvent *ev;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> ev = xevent;</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> <span class='comment'>/* MapNotify is used to tell us when new windows are mapped.</span></td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='comment'>ConfigureNofify is used to tell us when windows are raised. */</span></td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='keyword'>switch</span> (ev-&gt;xany.type)</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>MapNotify<span class='macro_popup'>19</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> XMapEvent *xme = &amp;ev-&gt;xmap;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xme-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 719, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>ConfigureNotify<span class='macro_popup'>22</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> XConfigureEvent *xce = &amp;ev-&gt;xconfigure;</td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xce-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 734, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> <span class='comment'>/* extension events */</span></td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"> <span class='keyword'>if</span> (ev-&gt;xany.type == (window-&gt;priv-&gt;shape_event_base + <span class='macro'>ShapeNotify<span class='macro_popup'>0</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='comment'>/*XShapeEvent *xse = (XShapeEvent *) ev;*/</span></td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> unshape_window (window);</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Window was reshaped!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 746, "Window was reshaped!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"><span class='keyword'>static</span> GdkFilterReturn</td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line">xevent_filter (GdkXEvent *xevent,</td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> GdkEvent *event,</td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> gs_window_xevent (window, xevent);</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>return</span> GDK_FILTER_CONTINUE;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">select_popup_events (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> XWindowAttributes attr;</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> display = gdk_display_get_default ();</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> memset (&amp;attr, 0, <span class='keyword'>sizeof</span> (attr));</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> XGetWindowAttributes (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, &amp;attr);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> events = <span class='macro'>SubstructureNotifyMask<span class='macro_popup'>(1L&lt;&lt;19)</span></span> | attr.your_event_mask;</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> XSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line">window_select_shape_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> <span class='keyword'>int</span> shape_error_base;</td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> <span class='keyword'>if</span> (XShapeQueryExtension (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, &amp;window-&gt;priv-&gt;shape_event_base, &amp;shape_error_base)) {</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> events = <span class='macro'>ShapeNotifyMask<span class='macro_popup'>(1L &lt;&lt; 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> XShapeSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window)))<span class='macro_popup'>(gdk_x11_window_get_xid (gtk_widget_get_window (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">gs_window_real_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"> GSWindow *window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line"> cairo_surface_t *bg_surface = window-&gt;priv-&gt;background_surface;</td></tr>
+<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> <span class='keyword'>if</span> (bg_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> cairo_set_source_surface (cr, bg_surface, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line">gs_window_real_show (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show)</td></tr>
+<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show (widget);</td></tr>
+<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> gs_window_clear (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (widget), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> window-&gt;priv-&gt;timer = g_timer_new ();</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> add_watchdog_timer (window, 30000);</td></tr>
+<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> select_popup_events ();</td></tr>
+<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> window_select_shape_events (window);</td></tr>
+<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> gdk_window_add_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line">set_info_text_and_icon (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon_name,</td></tr>
+<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *primary_text,</td></tr>
+<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *secondary_text)</td></tr>
+<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> GtkWidget *content_area;</td></tr>
+<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> GtkWidget *hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> GtkWidget *image;</td></tr>
+<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> gchar *primary_markup;</td></tr>
+<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> gchar *secondary_markup;</td></tr>
+<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> GtkWidget *primary_label;</td></tr>
+<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> GtkWidget *secondary_label;</td></tr>
+<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> hbox_content = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);</td></tr>
+<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> gtk_widget_show (hbox_content);</td></tr>
+<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="874"><td class="num" id="LN874">874</td><td class="line"> image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_DIALOG);</td></tr>
+<tr class="codeline" data-linenumber="875"><td class="num" id="LN875">875</td><td class="line"> gtk_widget_show (image);</td></tr>
+<tr class="codeline" data-linenumber="876"><td class="num" id="LN876">876</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, image, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="877"><td class="num" id="LN877">877</td><td class="line"> gtk_widget_set_valign (image, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="878"><td class="num" id="LN878">878</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="879"><td class="num" id="LN879">879</td><td class="line"> vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);</td></tr>
+<tr class="codeline" data-linenumber="880"><td class="num" id="LN880">880</td><td class="line"> gtk_widget_show (vbox);</td></tr>
+<tr class="codeline" data-linenumber="881"><td class="num" id="LN881">881</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, vbox, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="882"><td class="num" id="LN882">882</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="883"><td class="num" id="LN883">883</td><td class="line"> primary_markup = g_strdup_printf (<span class='string_literal'>"&lt;b&gt;%s&lt;/b&gt;"</span>, primary_text);</td></tr>
+<tr class="codeline" data-linenumber="884"><td class="num" id="LN884">884</td><td class="line"> primary_label = gtk_label_new (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="885"><td class="num" id="LN885">885</td><td class="line"> g_free (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="886"><td class="num" id="LN886">886</td><td class="line"> gtk_widget_show (primary_label);</td></tr>
+<tr class="codeline" data-linenumber="887"><td class="num" id="LN887">887</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, primary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="888"><td class="num" id="LN888">888</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="889"><td class="num" id="LN889">889</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="890"><td class="num" id="LN890">890</td><td class="line"> gtk_widget_set_halign (primary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="891"><td class="num" id="LN891">891</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="892"><td class="num" id="LN892">892</td><td class="line"> <span class='keyword'>if</span> (secondary_text != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="893"><td class="num" id="LN893">893</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="894"><td class="num" id="LN894">894</td><td class="line"> secondary_markup = g_strdup_printf (<span class='string_literal'>"&lt;small&gt;%s&lt;/small&gt;"</span>,</td></tr>
+<tr class="codeline" data-linenumber="895"><td class="num" id="LN895">895</td><td class="line"> secondary_text);</td></tr>
+<tr class="codeline" data-linenumber="896"><td class="num" id="LN896">896</td><td class="line"> secondary_label = gtk_label_new (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="897"><td class="num" id="LN897">897</td><td class="line"> g_free (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="898"><td class="num" id="LN898">898</td><td class="line"> gtk_widget_show (secondary_label);</td></tr>
+<tr class="codeline" data-linenumber="899"><td class="num" id="LN899">899</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, secondary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="900"><td class="num" id="LN900">900</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="901"><td class="num" id="LN901">901</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="902"><td class="num" id="LN902">902</td><td class="line"> gtk_widget_set_halign (secondary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="903"><td class="num" id="LN903">903</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="904"><td class="num" id="LN904">904</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="905"><td class="num" id="LN905">905</td><td class="line"> <span class='comment'>/* remove old content */</span></td></tr>
+<tr class="codeline" data-linenumber="906"><td class="num" id="LN906">906</td><td class="line"> content_area = gtk_info_bar_get_content_area (<span class='macro'>GTK_INFO_BAR (window-&gt;priv-&gt;info_bar)<span class='macro_popup'>((((GtkInfoBar*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;info_bar)), ((gtk_info_bar_get_type(<br>)))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="907"><td class="num" id="LN907">907</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_content != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="908"><td class="num" id="LN908">908</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="909"><td class="num" id="LN909">909</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (content_area)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_content);</td></tr>
+<tr class="codeline" data-linenumber="910"><td class="num" id="LN910">910</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="911"><td class="num" id="LN911">911</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (content_area)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="912"><td class="num" id="LN912">912</td><td class="line"> hbox_content,</td></tr>
+<tr class="codeline" data-linenumber="913"><td class="num" id="LN913">913</td><td class="line"> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="914"><td class="num" id="LN914">914</td><td class="line"> window-&gt;priv-&gt;info_content = hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="915"><td class="num" id="LN915">915</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="916"><td class="num" id="LN916">916</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="917"><td class="num" id="LN917">917</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="918"><td class="num" id="LN918">918</td><td class="line">info_bar_timeout (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="919"><td class="num" id="LN919">919</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="920"><td class="num" id="LN920">920</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="921"><td class="num" id="LN921">921</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="922"><td class="num" id="LN922">922</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="923"><td class="num" id="LN923">923</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="924"><td class="num" id="LN924">924</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="925"><td class="num" id="LN925">925</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="926"><td class="num" id="LN926">926</td><td class="line">gs_window_show_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="927"><td class="num" id="LN927">927</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *summary,</td></tr>
+<tr class="codeline" data-linenumber="928"><td class="num" id="LN928">928</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *body,</td></tr>
+<tr class="codeline" data-linenumber="929"><td class="num" id="LN929">929</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon)</td></tr>
+<tr class="codeline" data-linenumber="930"><td class="num" id="LN930">930</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="931"><td class="num" id="LN931">931</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="932"><td class="num" id="LN932">932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="933"><td class="num" id="LN933">933</td><td class="line"> set_info_text_and_icon (window,</td></tr>
+<tr class="codeline" data-linenumber="934"><td class="num" id="LN934">934</td><td class="line"> icon,</td></tr>
+<tr class="codeline" data-linenumber="935"><td class="num" id="LN935">935</td><td class="line"> summary,</td></tr>
+<tr class="codeline" data-linenumber="936"><td class="num" id="LN936">936</td><td class="line"> body);</td></tr>
+<tr class="codeline" data-linenumber="937"><td class="num" id="LN937">937</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="938"><td class="num" id="LN938">938</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="939"><td class="num" id="LN939">939</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="940"><td class="num" id="LN940">940</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="941"><td class="num" id="LN941">941</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="942"><td class="num" id="LN942">942</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="943"><td class="num" id="LN943">943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="944"><td class="num" id="LN944">944</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = g_timeout_add_seconds (<span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="945"><td class="num" id="LN945">945</td><td class="line"> (GSourceFunc)info_bar_timeout,</td></tr>
+<tr class="codeline" data-linenumber="946"><td class="num" id="LN946">946</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="947"><td class="num" id="LN947">947</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="948"><td class="num" id="LN948">948</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="949"><td class="num" id="LN949">949</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="950"><td class="num" id="LN950">950</td><td class="line">gs_window_show (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="951"><td class="num" id="LN951">951</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="952"><td class="num" id="LN952">952</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="953"><td class="num" id="LN953">953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="954"><td class="num" id="LN954">954</td><td class="line"> gtk_widget_show (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="955"><td class="num" id="LN955">955</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="956"><td class="num" id="LN956">956</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="957"><td class="num" id="LN957">957</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="958"><td class="num" id="LN958">958</td><td class="line">gs_window_real_hide (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="959"><td class="num" id="LN959">959</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="960"><td class="num" id="LN960">960</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="961"><td class="num" id="LN961">961</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="962"><td class="num" id="LN962">962</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="963"><td class="num" id="LN963">963</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="964"><td class="num" id="LN964">964</td><td class="line"> gdk_window_remove_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="965"><td class="num" id="LN965">965</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="966"><td class="num" id="LN966">966</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="967"><td class="num" id="LN967">967</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="968"><td class="num" id="LN968">968</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide)</td></tr>
+<tr class="codeline" data-linenumber="969"><td class="num" id="LN969">969</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="970"><td class="num" id="LN970">970</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="971"><td class="num" id="LN971">971</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="972"><td class="num" id="LN972">972</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="973"><td class="num" id="LN973">973</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="974"><td class="num" id="LN974">974</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="975"><td class="num" id="LN975">975</td><td class="line">gs_window_destroy (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="976"><td class="num" id="LN976">976</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="977"><td class="num" id="LN977">977</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="978"><td class="num" id="LN978">978</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="979"><td class="num" id="LN979">979</td><td class="line"> gs_window_cancel_unlock_request (window);</td></tr>
+<tr class="codeline" data-linenumber="980"><td class="num" id="LN980">980</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="981"><td class="num" id="LN981">981</td><td class="line"> gtk_widget_destroy (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="982"><td class="num" id="LN982">982</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="983"><td class="num" id="LN983">983</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="984"><td class="num" id="LN984">984</td><td class="line">GdkWindow *</td></tr>
+<tr class="codeline" data-linenumber="985"><td class="num" id="LN985">985</td><td class="line">gs_window_get_gdk_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="986"><td class="num" id="LN986">986</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="987"><td class="num" id="LN987">987</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="988"><td class="num" id="LN988">988</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="989"><td class="num" id="LN989">989</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="990"><td class="num" id="LN990">990</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="991"><td class="num" id="LN991">991</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="992"><td class="num" id="LN992">992</td><td class="line">GtkWidget *</td></tr>
+<tr class="codeline" data-linenumber="993"><td class="num" id="LN993">993</td><td class="line">gs_window_get_drawing_area (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="994"><td class="num" id="LN994">994</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="995"><td class="num" id="LN995">995</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="996"><td class="num" id="LN996">996</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="997"><td class="num" id="LN997">997</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="998"><td class="num" id="LN998">998</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="999"><td class="num" id="LN999">999</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1000"><td class="num" id="LN1000">1000</td><td class="line"><span class='comment'>/* just for debugging */</span></td></tr>
+<tr class="codeline" data-linenumber="1001"><td class="num" id="LN1001">1001</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1002"><td class="num" id="LN1002">1002</td><td class="line">error_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1003"><td class="num" id="LN1003">1003</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1004"><td class="num" id="LN1004">1004</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1005"><td class="num" id="LN1005">1005</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1006"><td class="num" id="LN1006">1006</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1007"><td class="num" id="LN1007">1007</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1008"><td class="num" id="LN1008">1008</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1009"><td class="num" id="LN1009">1009</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1010"><td class="num" id="LN1010">1010</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1011"><td class="num" id="LN1011">1011</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1012"><td class="num" id="LN1012">1012</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1013"><td class="num" id="LN1013">1013</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1014"><td class="num" id="LN1014">1014</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1015"><td class="num" id="LN1015">1015</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1016"><td class="num" id="LN1016">1016</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1017"><td class="num" id="LN1017">1017</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1018"><td class="num" id="LN1018">1018</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1019"><td class="num" id="LN1019">1019</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1020"><td class="num" id="LN1020">1020</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command error output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1020, "command error output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1021"><td class="num" id="LN1021">1021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1022"><td class="num" id="LN1022">1022</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1023"><td class="num" id="LN1023">1023</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1024"><td class="num" id="LN1024">1024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1025"><td class="num" id="LN1025">1025</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1026"><td class="num" id="LN1026">1026</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1027"><td class="num" id="LN1027">1027</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1027, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1028"><td class="num" id="LN1028">1028</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1029"><td class="num" id="LN1029">1029</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1030"><td class="num" id="LN1030">1030</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1031"><td class="num" id="LN1031">1031</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1032"><td class="num" id="LN1032">1032</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1033"><td class="num" id="LN1033">1033</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1034"><td class="num" id="LN1034">1034</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1035"><td class="num" id="LN1035">1035</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1036"><td class="num" id="LN1036">1036</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1037"><td class="num" id="LN1037">1037</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1038"><td class="num" id="LN1038">1038</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1039"><td class="num" id="LN1039">1039</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1040"><td class="num" id="LN1040">1040</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1041"><td class="num" id="LN1041">1041</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1042"><td class="num" id="LN1042">1042</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1043"><td class="num" id="LN1043">1043</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1044"><td class="num" id="LN1044">1044</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1045"><td class="num" id="LN1045">1045</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1046"><td class="num" id="LN1046">1046</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1047"><td class="num" id="LN1047">1047</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1048"><td class="num" id="LN1048">1048</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1049"><td class="num" id="LN1049">1049</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1050"><td class="num" id="LN1050">1050</td><td class="line">spawn_on_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1051"><td class="num" id="LN1051">1051</td><td class="line"> <span class='keyword'>char</span> *command,</td></tr>
+<tr class="codeline" data-linenumber="1052"><td class="num" id="LN1052">1052</td><td class="line"> <span class='keyword'>int</span> *pid,</td></tr>
+<tr class="codeline" data-linenumber="1053"><td class="num" id="LN1053">1053</td><td class="line"> GIOFunc watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1054"><td class="num" id="LN1054">1054</td><td class="line"> gpointer user_data,</td></tr>
+<tr class="codeline" data-linenumber="1055"><td class="num" id="LN1055">1055</td><td class="line"> gint *watch_id)</td></tr>
+<tr class="codeline" data-linenumber="1056"><td class="num" id="LN1056">1056</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1057"><td class="num" id="LN1057">1057</td><td class="line"> <span class='keyword'>int</span> argc;</td></tr>
+<tr class="codeline" data-linenumber="1058"><td class="num" id="LN1058">1058</td><td class="line"> <span class='keyword'>char</span> **argv;</td></tr>
+<tr class="codeline" data-linenumber="1059"><td class="num" id="LN1059">1059</td><td class="line"> <span class='keyword'>char</span> **envp;</td></tr>
+<tr class="codeline" data-linenumber="1060"><td class="num" id="LN1060">1060</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="1061"><td class="num" id="LN1061">1061</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1062"><td class="num" id="LN1062">1062</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="1063"><td class="num" id="LN1063">1063</td><td class="line"> <span class='keyword'>int</span> standard_output;</td></tr>
+<tr class="codeline" data-linenumber="1064"><td class="num" id="LN1064">1064</td><td class="line"> <span class='keyword'>int</span> standard_error;</td></tr>
+<tr class="codeline" data-linenumber="1065"><td class="num" id="LN1065">1065</td><td class="line"> <span class='keyword'>int</span> child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1066"><td class="num" id="LN1066">1066</td><td class="line"> <span class='keyword'>int</span> id;</td></tr>
+<tr class="codeline" data-linenumber="1067"><td class="num" id="LN1067">1067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1068"><td class="num" id="LN1068">1068</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1069"><td class="num" id="LN1069">1069</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command, &amp;argc, &amp;argv, &amp;error))</td></tr>
+<tr class="codeline" data-linenumber="1070"><td class="num" id="LN1070">1070</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1071"><td class="num" id="LN1071">1071</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not parse command: %s"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1071, "Could not parse command: %s"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1072"><td class="num" id="LN1072">1072</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1073"><td class="num" id="LN1073">1073</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1074"><td class="num" id="LN1074">1074</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1075"><td class="num" id="LN1075">1075</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1076"><td class="num" id="LN1076">1076</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1077"><td class="num" id="LN1077">1077</td><td class="line"> envp = spawn_make_environment_for_display (gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1078"><td class="num" id="LN1078">1078</td><td class="line"> result = g_spawn_async_with_pipes (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1079"><td class="num" id="LN1079">1079</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="1080"><td class="num" id="LN1080">1080</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="1081"><td class="num" id="LN1081">1081</td><td class="line"> G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="1082"><td class="num" id="LN1082">1082</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1083"><td class="num" id="LN1083">1083</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1084"><td class="num" id="LN1084">1084</td><td class="line"> &amp;child_pid,</td></tr>
+<tr class="codeline" data-linenumber="1085"><td class="num" id="LN1085">1085</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1086"><td class="num" id="LN1086">1086</td><td class="line"> &amp;standard_output,</td></tr>
+<tr class="codeline" data-linenumber="1087"><td class="num" id="LN1087">1087</td><td class="line"> &amp;standard_error,</td></tr>
+<tr class="codeline" data-linenumber="1088"><td class="num" id="LN1088">1088</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1089"><td class="num" id="LN1089">1089</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1090"><td class="num" id="LN1090">1090</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1091"><td class="num" id="LN1091">1091</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1092"><td class="num" id="LN1092">1092</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command '%s': %s"</span>, command, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1092, "Could not start command '%s': %s"<br>, command, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1093"><td class="num" id="LN1093">1093</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1094"><td class="num" id="LN1094">1094</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1095"><td class="num" id="LN1095">1095</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1096"><td class="num" id="LN1096">1096</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1097"><td class="num" id="LN1097">1097</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1098"><td class="num" id="LN1098">1098</td><td class="line"> <span class='keyword'>if</span> (pid != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1099"><td class="num" id="LN1099">1099</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1100"><td class="num" id="LN1100">1100</td><td class="line"> *pid = child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1101"><td class="num" id="LN1101">1101</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1102"><td class="num" id="LN1102">1102</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1103"><td class="num" id="LN1103">1103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1104"><td class="num" id="LN1104">1104</td><td class="line"> g_spawn_close_pid (child_pid);</td></tr>
+<tr class="codeline" data-linenumber="1105"><td class="num" id="LN1105">1105</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1106"><td class="num" id="LN1106">1106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1107"><td class="num" id="LN1107">1107</td><td class="line"> <span class='comment'>/* output channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1108"><td class="num" id="LN1108">1108</td><td class="line"> channel = g_io_channel_unix_new (standard_output);</td></tr>
+<tr class="codeline" data-linenumber="1109"><td class="num" id="LN1109">1109</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1110"><td class="num" id="LN1110">1110</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1111"><td class="num" id="LN1111">1111</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1112"><td class="num" id="LN1112">1112</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1113"><td class="num" id="LN1113">1113</td><td class="line"> id = g_io_add_watch (channel,</td></tr>
+<tr class="codeline" data-linenumber="1114"><td class="num" id="LN1114">1114</td><td class="line"> G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr>
+<tr class="codeline" data-linenumber="1115"><td class="num" id="LN1115">1115</td><td class="line"> watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1116"><td class="num" id="LN1116">1116</td><td class="line"> user_data);</td></tr>
+<tr class="codeline" data-linenumber="1117"><td class="num" id="LN1117">1117</td><td class="line"> <span class='keyword'>if</span> (watch_id != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1118"><td class="num" id="LN1118">1118</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1119"><td class="num" id="LN1119">1119</td><td class="line"> *watch_id = id;</td></tr>
+<tr class="codeline" data-linenumber="1120"><td class="num" id="LN1120">1120</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1121"><td class="num" id="LN1121">1121</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1122"><td class="num" id="LN1122">1122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1123"><td class="num" id="LN1123">1123</td><td class="line"> <span class='comment'>/* error channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1124"><td class="num" id="LN1124">1124</td><td class="line"> channel = g_io_channel_unix_new (standard_error);</td></tr>
+<tr class="codeline" data-linenumber="1125"><td class="num" id="LN1125">1125</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1126"><td class="num" id="LN1126">1126</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1127"><td class="num" id="LN1127">1127</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1128"><td class="num" id="LN1128">1128</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1129"><td class="num" id="LN1129">1129</td><td class="line"> id = <span class="mrange">g_io_add_watch (channel,</td></tr></span>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex">Value stored to 'id' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="1130"><td class="num" id="LN1130">1130</td><td class="line"> <span class="mrange">G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr></span>
+<tr class="codeline" data-linenumber="1131"><td class="num" id="LN1131">1131</td><td class="line"> <span class="mrange">error_watch,</td></tr></span>
+<tr class="codeline" data-linenumber="1132"><td class="num" id="LN1132">1132</td><td class="line"> <span class="mrange"><span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</span>;</td></tr>
+<tr class="codeline" data-linenumber="1133"><td class="num" id="LN1133">1133</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1134"><td class="num" id="LN1134">1134</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1135"><td class="num" id="LN1135">1135</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1136"><td class="num" id="LN1136">1136</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="1137"><td class="num" id="LN1137">1137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1138"><td class="num" id="LN1138">1138</td><td class="line"> <span class='keyword'>return</span> result;</td></tr>
+<tr class="codeline" data-linenumber="1139"><td class="num" id="LN1139">1139</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1140"><td class="num" id="LN1140">1140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1141"><td class="num" id="LN1141">1141</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1142"><td class="num" id="LN1142">1142</td><td class="line">lock_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1143"><td class="num" id="LN1143">1143</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1144"><td class="num" id="LN1144">1144</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1145"><td class="num" id="LN1145">1145</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1146"><td class="num" id="LN1146">1146</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1147"><td class="num" id="LN1147">1147</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1148"><td class="num" id="LN1148">1148</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1149"><td class="num" id="LN1149">1149</td><td class="line">lock_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1150"><td class="num" id="LN1150">1150</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1151"><td class="num" id="LN1151">1151</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1152"><td class="num" id="LN1152">1152</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1153"><td class="num" id="LN1153">1153</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1154"><td class="num" id="LN1154">1154</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1155"><td class="num" id="LN1155">1155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1156"><td class="num" id="LN1156">1156</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1157"><td class="num" id="LN1157">1157</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1158"><td class="num" id="LN1158">1158</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1159"><td class="num" id="LN1159">1159</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1160"><td class="num" id="LN1160">1160</td><td class="line">keyboard_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1161"><td class="num" id="LN1161">1161</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1162"><td class="num" id="LN1162">1162</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1163"><td class="num" id="LN1163">1163</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1164"><td class="num" id="LN1164">1164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1165"><td class="num" id="LN1165">1165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1166"><td class="num" id="LN1166">1166</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1167"><td class="num" id="LN1167">1167</td><td class="line">keyboard_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1168"><td class="num" id="LN1168">1168</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1169"><td class="num" id="LN1169">1169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1170"><td class="num" id="LN1170">1170</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1171"><td class="num" id="LN1171">1171</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_widget_get_type<br> ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1172"><td class="num" id="LN1172">1172</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1173"><td class="num" id="LN1173">1173</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1174"><td class="num" id="LN1174">1174</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1175"><td class="num" id="LN1175">1175</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1176"><td class="num" id="LN1176">1176</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1177"><td class="num" id="LN1177">1177</td><td class="line">keyboard_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1178"><td class="num" id="LN1178">1178</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1179"><td class="num" id="LN1179">1179</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1180"><td class="num" id="LN1180">1180</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1181"><td class="num" id="LN1181">1181</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1182"><td class="num" id="LN1182">1182</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1183"><td class="num" id="LN1183">1183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1184"><td class="num" id="LN1184">1184</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1185"><td class="num" id="LN1185">1185</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1186"><td class="num" id="LN1186">1186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1187"><td class="num" id="LN1187">1187</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1188"><td class="num" id="LN1188">1188</td><td class="line">forward_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1189"><td class="num" id="LN1189">1189</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1190"><td class="num" id="LN1190">1190</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1191"><td class="num" id="LN1191">1191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1192"><td class="num" id="LN1192">1192</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1193"><td class="num" id="LN1193">1193</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1194"><td class="num" id="LN1194">1194</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1195"><td class="num" id="LN1195">1195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1196"><td class="num" id="LN1196">1196</td><td class="line"> gtk_window_propagate_key_event (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="1197"><td class="num" id="LN1197">1197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1198"><td class="num" id="LN1198">1198</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1199"><td class="num" id="LN1199">1199</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1200"><td class="num" id="LN1200">1200</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1201"><td class="num" id="LN1201">1201</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1202"><td class="num" id="LN1202">1202</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1203"><td class="num" id="LN1203">1203</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1204"><td class="num" id="LN1204">1204</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1205"><td class="num" id="LN1205">1205</td><td class="line">remove_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1206"><td class="num" id="LN1206">1206</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1207"><td class="num" id="LN1207">1207</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1208"><td class="num" id="LN1208">1208</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1209"><td class="num" id="LN1209">1209</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events)</td></tr>
+<tr class="codeline" data-linenumber="1210"><td class="num" id="LN1210">1210</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1211"><td class="num" id="LN1211">1211</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1212"><td class="num" id="LN1212">1212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1213"><td class="num" id="LN1213">1213</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1214"><td class="num" id="LN1214">1214</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1215"><td class="num" id="LN1215">1215</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1216"><td class="num" id="LN1216">1216</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1217"><td class="num" id="LN1217">1217</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1218"><td class="num" id="LN1218">1218</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1219"><td class="num" id="LN1219">1219</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1220"><td class="num" id="LN1220">1220</td><td class="line">lock_socket_show (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1221"><td class="num" id="LN1221">1221</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1222"><td class="num" id="LN1222">1222</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1223"><td class="num" id="LN1223">1223</td><td class="line"> gtk_widget_child_focus (window-&gt;priv-&gt;lock_socket, GTK_DIR_TAB_FORWARD);</td></tr>
+<tr class="codeline" data-linenumber="1224"><td class="num" id="LN1224">1224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1225"><td class="num" id="LN1225">1225</td><td class="line"> <span class='comment'>/* send queued events to the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="1226"><td class="num" id="LN1226">1226</td><td class="line"> forward_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1227"><td class="num" id="LN1227">1227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1228"><td class="num" id="LN1228">1228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1229"><td class="num" id="LN1229">1229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1230"><td class="num" id="LN1230">1230</td><td class="line">lock_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1231"><td class="num" id="LN1231">1231</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1232"><td class="num" id="LN1232">1232</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1233"><td class="num" id="LN1233">1233</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_show, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_show), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1234"><td class="num" id="LN1234">1234</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1235"><td class="num" id="LN1235">1235</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1236"><td class="num" id="LN1236">1236</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1237"><td class="num" id="LN1237">1237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1238"><td class="num" id="LN1238">1238</td><td class="line"> window-&gt;priv-&gt;lock_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1239"><td class="num" id="LN1239">1239</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1240"><td class="num" id="LN1240">1240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1241"><td class="num" id="LN1241">1241</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1242"><td class="num" id="LN1242">1242</td><td class="line">create_keyboard_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1243"><td class="num" id="LN1243">1243</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1244"><td class="num" id="LN1244">1244</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1245"><td class="num" id="LN1245">1245</td><td class="line"> <span class='keyword'>int</span> height;</td></tr>
+<tr class="codeline" data-linenumber="1246"><td class="num" id="LN1246">1246</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1247"><td class="num" id="LN1247">1247</td><td class="line"> height = (<span class='macro'>HeightOfScreen (gdk_x11_screen_get_xscreen (gtk_widget_get_screen (GTK_WIDGET (window))))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (gtk_widget_get_screen (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))-&gt;height)</span></span>) / 4;</td></tr>
+<tr class="codeline" data-linenumber="1248"><td class="num" id="LN1248">1248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1249"><td class="num" id="LN1249">1249</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1250"><td class="num" id="LN1250">1250</td><td class="line"> gtk_widget_set_size_request (window-&gt;priv-&gt;keyboard_socket, -1, height);</td></tr>
+<tr class="codeline" data-linenumber="1251"><td class="num" id="LN1251">1251</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1252"><td class="num" id="LN1252">1252</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1253"><td class="num" id="LN1253">1253</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1254"><td class="num" id="LN1254">1254</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1255"><td class="num" id="LN1255">1255</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1256"><td class="num" id="LN1256">1256</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1257"><td class="num" id="LN1257">1257</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1258"><td class="num" id="LN1258">1258</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;keyboard_socket, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1259"><td class="num" id="LN1259">1259</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1260"><td class="num" id="LN1260">1260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1261"><td class="num" id="LN1261">1261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1262"><td class="num" id="LN1262">1262</td><td class="line"><span class='comment'>/* adapted from gspawn.c */</span></td></tr>
+<tr class="codeline" data-linenumber="1263"><td class="num" id="LN1263">1263</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="1264"><td class="num" id="LN1264">1264</td><td class="line">wait_on_child (<span class='keyword'>int</span> pid)</td></tr>
+<tr class="codeline" data-linenumber="1265"><td class="num" id="LN1265">1265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1266"><td class="num" id="LN1266">1266</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1267"><td class="num" id="LN1267">1267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1268"><td class="num" id="LN1268">1268</td><td class="line">wait_again:</td></tr>
+<tr class="codeline" data-linenumber="1269"><td class="num" id="LN1269">1269</td><td class="line"> <span class='keyword'>if</span> (waitpid (pid, &amp;status, 0) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1270"><td class="num" id="LN1270">1270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1271"><td class="num" id="LN1271">1271</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINTR<span class='macro_popup'>4</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1272"><td class="num" id="LN1272">1272</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1273"><td class="num" id="LN1273">1273</td><td class="line"> <span class='keyword'>goto</span> wait_again;</td></tr>
+<tr class="codeline" data-linenumber="1274"><td class="num" id="LN1274">1274</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1275"><td class="num" id="LN1275">1275</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>ECHILD<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1276"><td class="num" id="LN1276">1276</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1277"><td class="num" id="LN1277">1277</td><td class="line"> ; <span class='comment'>/* do nothing, child already reaped */</span></td></tr>
+<tr class="codeline" data-linenumber="1278"><td class="num" id="LN1278">1278</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1279"><td class="num" id="LN1279">1279</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1280"><td class="num" id="LN1280">1280</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1281"><td class="num" id="LN1281">1281</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"waitpid () should not fail in 'GSWindow'"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1281, "waitpid () should not fail in 'GSWindow'"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1282"><td class="num" id="LN1282">1282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1283"><td class="num" id="LN1283">1283</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1284"><td class="num" id="LN1284">1284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1285"><td class="num" id="LN1285">1285</td><td class="line"> <span class='keyword'>return</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1286"><td class="num" id="LN1286">1286</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1287"><td class="num" id="LN1287">1287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1288"><td class="num" id="LN1288">1288</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1289"><td class="num" id="LN1289">1289</td><td class="line">kill_keyboard_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1290"><td class="num" id="LN1290">1290</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1291"><td class="num" id="LN1291">1291</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1292"><td class="num" id="LN1292">1292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1293"><td class="num" id="LN1293">1293</td><td class="line"> signal_pid (window-&gt;priv-&gt;keyboard_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1294"><td class="num" id="LN1294">1294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1295"><td class="num" id="LN1295">1295</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1296"><td class="num" id="LN1296">1296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1297"><td class="num" id="LN1297">1297</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1298"><td class="num" id="LN1298">1298</td><td class="line">kill_dialog_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1299"><td class="num" id="LN1299">1299</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1300"><td class="num" id="LN1300">1300</td><td class="line"> <span class='comment'>/* If a dialog is up we need to signal it</span></td></tr>
+<tr class="codeline" data-linenumber="1301"><td class="num" id="LN1301">1301</td><td class="line"> <span class='comment'>and wait on it */</span></td></tr>
+<tr class="codeline" data-linenumber="1302"><td class="num" id="LN1302">1302</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1303"><td class="num" id="LN1303">1303</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1304"><td class="num" id="LN1304">1304</td><td class="line"> signal_pid (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1305"><td class="num" id="LN1305">1305</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1306"><td class="num" id="LN1306">1306</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1307"><td class="num" id="LN1307">1307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1308"><td class="num" id="LN1308">1308</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1309"><td class="num" id="LN1309">1309</td><td class="line">keyboard_command_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1310"><td class="num" id="LN1310">1310</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1311"><td class="num" id="LN1311">1311</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1312"><td class="num" id="LN1312">1312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1313"><td class="num" id="LN1313">1313</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1314"><td class="num" id="LN1314">1314</td><td class="line"> kill_keyboard_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1315"><td class="num" id="LN1315">1315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1316"><td class="num" id="LN1316">1316</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Keyboard finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1316, "Keyboard finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1317"><td class="num" id="LN1317">1317</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1318"><td class="num" id="LN1318">1318</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1319"><td class="num" id="LN1319">1319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1320"><td class="num" id="LN1320">1320</td><td class="line"> wait_on_child (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1321"><td class="num" id="LN1321">1321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1322"><td class="num" id="LN1322">1322</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1323"><td class="num" id="LN1323">1323</td><td class="line"> window-&gt;priv-&gt;keyboard_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1324"><td class="num" id="LN1324">1324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1325"><td class="num" id="LN1325">1325</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1326"><td class="num" id="LN1326">1326</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1327"><td class="num" id="LN1327">1327</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1328"><td class="num" id="LN1328">1328</td><td class="line">keyboard_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1329"><td class="num" id="LN1329">1329</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1330"><td class="num" id="LN1330">1330</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1331"><td class="num" id="LN1331">1331</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1332"><td class="num" id="LN1332">1332</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1333"><td class="num" id="LN1333">1333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1334"><td class="num" id="LN1334">1334</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1335"><td class="num" id="LN1335">1335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1336"><td class="num" id="LN1336">1336</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1337"><td class="num" id="LN1337">1337</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1338"><td class="num" id="LN1338">1338</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1339"><td class="num" id="LN1339">1339</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1340"><td class="num" id="LN1340">1340</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1341"><td class="num" id="LN1341">1341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1342"><td class="num" id="LN1342">1342</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1343"><td class="num" id="LN1343">1343</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1344"><td class="num" id="LN1344">1344</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1345"><td class="num" id="LN1345">1345</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1346"><td class="num" id="LN1346">1346</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1347"><td class="num" id="LN1347">1347</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1348"><td class="num" id="LN1348">1348</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1349"><td class="num" id="LN1349">1349</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1350"><td class="num" id="LN1350">1350</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1351"><td class="num" id="LN1351">1351</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"keyboard command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1351, "keyboard command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1352"><td class="num" id="LN1352">1352</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1353"><td class="num" id="LN1353">1353</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1354"><td class="num" id="LN1354">1354</td><td class="line"> create_keyboard_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1355"><td class="num" id="LN1355">1355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1356"><td class="num" id="LN1356">1356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1357"><td class="num" id="LN1357">1357</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1358"><td class="num" id="LN1358">1358</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1359"><td class="num" id="LN1359">1359</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1360"><td class="num" id="LN1360">1360</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1361"><td class="num" id="LN1361">1361</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1362"><td class="num" id="LN1362">1362</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1363"><td class="num" id="LN1363">1363</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1363, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1364"><td class="num" id="LN1364">1364</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1365"><td class="num" id="LN1365">1365</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1366"><td class="num" id="LN1366">1366</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1367"><td class="num" id="LN1367">1367</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1368"><td class="num" id="LN1368">1368</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1369"><td class="num" id="LN1369">1369</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1370"><td class="num" id="LN1370">1370</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1371"><td class="num" id="LN1371">1371</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1372"><td class="num" id="LN1372">1372</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1373"><td class="num" id="LN1373">1373</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1374"><td class="num" id="LN1374">1374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1375"><td class="num" id="LN1375">1375</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1376"><td class="num" id="LN1376">1376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1377"><td class="num" id="LN1377">1377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1378"><td class="num" id="LN1378">1378</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1379"><td class="num" id="LN1379">1379</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1380"><td class="num" id="LN1380">1380</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1381"><td class="num" id="LN1381">1381</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1382"><td class="num" id="LN1382">1382</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1383"><td class="num" id="LN1383">1383</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1384"><td class="num" id="LN1384">1384</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1385"><td class="num" id="LN1385">1385</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1386"><td class="num" id="LN1386">1386</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1387"><td class="num" id="LN1387">1387</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1388"><td class="num" id="LN1388">1388</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1389"><td class="num" id="LN1389">1389</td><td class="line">embed_keyboard (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1390"><td class="num" id="LN1390">1390</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1391"><td class="num" id="LN1391">1391</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="1392"><td class="num" id="LN1392">1392</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1393"><td class="num" id="LN1393">1393</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;keyboard_enabled</td></tr>
+<tr class="codeline" data-linenumber="1394"><td class="num" id="LN1394">1394</td><td class="line"> || window-&gt;priv-&gt;keyboard_command == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1395"><td class="num" id="LN1395">1395</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1396"><td class="num" id="LN1396">1396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1397"><td class="num" id="LN1397">1397</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Adding embedded keyboard widget"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1397, "Adding embedded keyboard widget"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1398"><td class="num" id="LN1398">1398</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1399"><td class="num" id="LN1399">1399</td><td class="line"> <span class='comment'>/* FIXME: verify command is safe */</span></td></tr>
+<tr class="codeline" data-linenumber="1400"><td class="num" id="LN1400">1400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1401"><td class="num" id="LN1401">1401</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Running command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1401, "Running command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1402"><td class="num" id="LN1402">1402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1403"><td class="num" id="LN1403">1403</td><td class="line"> res = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1404"><td class="num" id="LN1404">1404</td><td class="line"> window-&gt;priv-&gt;keyboard_command,</td></tr>
+<tr class="codeline" data-linenumber="1405"><td class="num" id="LN1405">1405</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_pid,</td></tr>
+<tr class="codeline" data-linenumber="1406"><td class="num" id="LN1406">1406</td><td class="line"> (GIOFunc)keyboard_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1407"><td class="num" id="LN1407">1407</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1408"><td class="num" id="LN1408">1408</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1409"><td class="num" id="LN1409">1409</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="1410"><td class="num" id="LN1410">1410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1411"><td class="num" id="LN1411">1411</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1411, "Could not start command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1412"><td class="num" id="LN1412">1412</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1413"><td class="num" id="LN1413">1413</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1414"><td class="num" id="LN1414">1414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1415"><td class="num" id="LN1415">1415</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1416"><td class="num" id="LN1416">1416</td><td class="line">create_lock_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1417"><td class="num" id="LN1417">1417</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1418"><td class="num" id="LN1418">1418</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1419"><td class="num" id="LN1419">1419</td><td class="line"> window-&gt;priv-&gt;lock_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1420"><td class="num" id="LN1420">1420</td><td class="line"> window-&gt;priv-&gt;lock_box = gtk_grid_new ();</td></tr>
+<tr class="codeline" data-linenumber="1421"><td class="num" id="LN1421">1421</td><td class="line"> gtk_widget_set_halign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1422"><td class="num" id="LN1422">1422</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1423"><td class="num" id="LN1423">1423</td><td class="line"> gtk_widget_set_valign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1424"><td class="num" id="LN1424">1424</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1425"><td class="num" id="LN1425">1425</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;lock_box);</td></tr>
+<tr class="codeline" data-linenumber="1426"><td class="num" id="LN1426">1426</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;lock_box, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1427"><td class="num" id="LN1427">1427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1428"><td class="num" id="LN1428">1428</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_container_get_type<br> ()))))))</span></span>, window-&gt;priv-&gt;lock_socket);</td></tr>
+<tr class="codeline" data-linenumber="1429"><td class="num" id="LN1429">1429</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1430"><td class="num" id="LN1430">1430</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"show"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1431"><td class="num" id="LN1431">1431</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_show), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1432"><td class="num" id="LN1432">1432</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1433"><td class="num" id="LN1433">1433</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1434"><td class="num" id="LN1434">1434</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1435"><td class="num" id="LN1435">1435</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1436"><td class="num" id="LN1436">1436</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1437"><td class="num" id="LN1437">1437</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1438"><td class="num" id="LN1438">1438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1439"><td class="num" id="LN1439">1439</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;lock_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1440"><td class="num" id="LN1440">1440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1441"><td class="num" id="LN1441">1441</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1442"><td class="num" id="LN1442">1442</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1443"><td class="num" id="LN1443">1443</td><td class="line"> embed_keyboard (window);</td></tr>
+<tr class="codeline" data-linenumber="1444"><td class="num" id="LN1444">1444</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1445"><td class="num" id="LN1445">1445</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1446"><td class="num" id="LN1446">1446</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1447"><td class="num" id="LN1447">1447</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1448"><td class="num" id="LN1448">1448</td><td class="line">gs_window_dialog_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1449"><td class="num" id="LN1449">1449</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1450"><td class="num" id="LN1450">1450</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1451"><td class="num" id="LN1451">1451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1452"><td class="num" id="LN1452">1452</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Dialog finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1452, "Dialog finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1453"><td class="num" id="LN1453">1453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1454"><td class="num" id="LN1454">1454</td><td class="line"> <span class='comment'>/* make sure we finish the keyboard thing too */</span></td></tr>
+<tr class="codeline" data-linenumber="1455"><td class="num" id="LN1455">1455</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1456"><td class="num" id="LN1456">1456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1457"><td class="num" id="LN1457">1457</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1458"><td class="num" id="LN1458">1458</td><td class="line"> kill_dialog_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1459"><td class="num" id="LN1459">1459</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1460"><td class="num" id="LN1460">1460</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1461"><td class="num" id="LN1461">1461</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1462"><td class="num" id="LN1462">1462</td><td class="line"> wait_on_child (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1463"><td class="num" id="LN1463">1463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1464"><td class="num" id="LN1464">1464</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1465"><td class="num" id="LN1465">1465</td><td class="line"> window-&gt;priv-&gt;lock_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1466"><td class="num" id="LN1466">1466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1467"><td class="num" id="LN1467">1467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1468"><td class="num" id="LN1468">1468</td><td class="line"> <span class='comment'>/* remove events for the case were we failed to show socket */</span></td></tr>
+<tr class="codeline" data-linenumber="1469"><td class="num" id="LN1469">1469</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1470"><td class="num" id="LN1470">1470</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1471"><td class="num" id="LN1471">1471</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1472"><td class="num" id="LN1472">1472</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1473"><td class="num" id="LN1473">1473</td><td class="line">maybe_kill_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1474"><td class="num" id="LN1474">1474</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1475"><td class="num" id="LN1475">1475</td><td class="line"> <span class='keyword'>if</span> (!window-&gt;priv-&gt;dialog_shake_in_progress</td></tr>
+<tr class="codeline" data-linenumber="1476"><td class="num" id="LN1476">1476</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;dialog_quit_requested</td></tr>
+<tr class="codeline" data-linenumber="1477"><td class="num" id="LN1477">1477</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1478"><td class="num" id="LN1478">1478</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1479"><td class="num" id="LN1479">1479</td><td class="line"> kill (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1480"><td class="num" id="LN1480">1480</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1481"><td class="num" id="LN1481">1481</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1482"><td class="num" id="LN1482">1482</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1483"><td class="num" id="LN1483">1483</td><td class="line"><span class='comment'>/* very rudimentary animation for indicating an auth failure */</span></td></tr>
+<tr class="codeline" data-linenumber="1484"><td class="num" id="LN1484">1484</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1485"><td class="num" id="LN1485">1485</td><td class="line">shake_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1486"><td class="num" id="LN1486">1486</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1487"><td class="num" id="LN1487">1487</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="1488"><td class="num" id="LN1488">1488</td><td class="line"> guint start, end;</td></tr>
+<tr class="codeline" data-linenumber="1489"><td class="num" id="LN1489">1489</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1490"><td class="num" id="LN1490">1490</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1491"><td class="num" id="LN1491">1491</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1492"><td class="num" id="LN1492">1492</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; 8; i++)</td></tr>
+<tr class="codeline" data-linenumber="1493"><td class="num" id="LN1493">1493</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1494"><td class="num" id="LN1494">1494</td><td class="line"> <span class='keyword'>if</span> (i % 2 == 0)</td></tr>
+<tr class="codeline" data-linenumber="1495"><td class="num" id="LN1495">1495</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1496"><td class="num" id="LN1496">1496</td><td class="line"> start = 30;</td></tr>
+<tr class="codeline" data-linenumber="1497"><td class="num" id="LN1497">1497</td><td class="line"> end = 0;</td></tr>
+<tr class="codeline" data-linenumber="1498"><td class="num" id="LN1498">1498</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1499"><td class="num" id="LN1499">1499</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1500"><td class="num" id="LN1500">1500</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1501"><td class="num" id="LN1501">1501</td><td class="line"> start = 0;</td></tr>
+<tr class="codeline" data-linenumber="1502"><td class="num" id="LN1502">1502</td><td class="line"> end = 30;</td></tr>
+<tr class="codeline" data-linenumber="1503"><td class="num" id="LN1503">1503</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1504"><td class="num" id="LN1504">1504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1505"><td class="num" id="LN1505">1505</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_box)</td></tr>
+<tr class="codeline" data-linenumber="1506"><td class="num" id="LN1506">1506</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1507"><td class="num" id="LN1507">1507</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1508"><td class="num" id="LN1508">1508</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1509"><td class="num" id="LN1509">1509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1510"><td class="num" id="LN1510">1510</td><td class="line"> gtk_widget_set_margin_start (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1511"><td class="num" id="LN1511">1511</td><td class="line"> start);</td></tr>
+<tr class="codeline" data-linenumber="1512"><td class="num" id="LN1512">1512</td><td class="line"> gtk_widget_set_margin_end (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1513"><td class="num" id="LN1513">1513</td><td class="line"> end);</td></tr>
+<tr class="codeline" data-linenumber="1514"><td class="num" id="LN1514">1514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1515"><td class="num" id="LN1515">1515</td><td class="line"> <span class='keyword'>while</span> (gtk_events_pending ())</td></tr>
+<tr class="codeline" data-linenumber="1516"><td class="num" id="LN1516">1516</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1517"><td class="num" id="LN1517">1517</td><td class="line"> gtk_main_iteration ();</td></tr>
+<tr class="codeline" data-linenumber="1518"><td class="num" id="LN1518">1518</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1519"><td class="num" id="LN1519">1519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1520"><td class="num" id="LN1520">1520</td><td class="line"> g_usleep (10000);</td></tr>
+<tr class="codeline" data-linenumber="1521"><td class="num" id="LN1521">1521</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1522"><td class="num" id="LN1522">1522</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1523"><td class="num" id="LN1523">1523</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1524"><td class="num" id="LN1524">1524</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1525"><td class="num" id="LN1525">1525</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1526"><td class="num" id="LN1526">1526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1527"><td class="num" id="LN1527">1527</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1528"><td class="num" id="LN1528">1528</td><td class="line">window_set_dialog_up (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1529"><td class="num" id="LN1529">1529</td><td class="line"> gboolean dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1530"><td class="num" id="LN1530">1530</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1531"><td class="num" id="LN1531">1531</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_up == dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1532"><td class="num" id="LN1532">1532</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1533"><td class="num" id="LN1533">1533</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1534"><td class="num" id="LN1534">1534</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1535"><td class="num" id="LN1535">1535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1536"><td class="num" id="LN1536">1536</td><td class="line"> window-&gt;priv-&gt;dialog_up = (dialog_up != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1537"><td class="num" id="LN1537">1537</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"dialog-up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1538"><td class="num" id="LN1538">1538</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1539"><td class="num" id="LN1539">1539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1540"><td class="num" id="LN1540">1540</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1541"><td class="num" id="LN1541">1541</td><td class="line">popdown_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1542"><td class="num" id="LN1542">1542</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1543"><td class="num" id="LN1543">1543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1544"><td class="num" id="LN1544">1544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1545"><td class="num" id="LN1545">1545</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1546"><td class="num" id="LN1546">1546</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1547"><td class="num" id="LN1547">1547</td><td class="line"> gs_window_clear (window);</td></tr>
+<tr class="codeline" data-linenumber="1548"><td class="num" id="LN1548">1548</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1549"><td class="num" id="LN1549">1549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1550"><td class="num" id="LN1550">1550</td><td class="line"> window_set_dialog_up (window, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1551"><td class="num" id="LN1551">1551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1552"><td class="num" id="LN1552">1552</td><td class="line"> <span class='comment'>/* reset the pointer positions */</span></td></tr>
+<tr class="codeline" data-linenumber="1553"><td class="num" id="LN1553">1553</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="1554"><td class="num" id="LN1554">1554</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="1555"><td class="num" id="LN1555">1555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1556"><td class="num" id="LN1556">1556</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_box != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1557"><td class="num" id="LN1557">1557</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1558"><td class="num" id="LN1558">1558</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1559"><td class="num" id="LN1559">1559</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1560"><td class="num" id="LN1560">1560</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1561"><td class="num" id="LN1561">1561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1562"><td class="num" id="LN1562">1562</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1563"><td class="num" id="LN1563">1563</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="1564"><td class="num" id="LN1564">1564</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1565"><td class="num" id="LN1565">1565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1566"><td class="num" id="LN1566">1566</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1567"><td class="num" id="LN1567">1567</td><td class="line">lock_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1568"><td class="num" id="LN1568">1568</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1569"><td class="num" id="LN1569">1569</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1570"><td class="num" id="LN1570">1570</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1571"><td class="num" id="LN1571">1571</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1572"><td class="num" id="LN1572">1572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1573"><td class="num" id="LN1573">1573</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1574"><td class="num" id="LN1574">1574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1575"><td class="num" id="LN1575">1575</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1576"><td class="num" id="LN1576">1576</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1577"><td class="num" id="LN1577">1577</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1578"><td class="num" id="LN1578">1578</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1579"><td class="num" id="LN1579">1579</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1580"><td class="num" id="LN1580">1580</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1581"><td class="num" id="LN1581">1581</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1582"><td class="num" id="LN1582">1582</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1583"><td class="num" id="LN1583">1583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1584"><td class="num" id="LN1584">1584</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1585"><td class="num" id="LN1585">1585</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1586"><td class="num" id="LN1586">1586</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1587"><td class="num" id="LN1587">1587</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1587, "command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1588"><td class="num" id="LN1588">1588</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1589"><td class="num" id="LN1589">1589</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"WINDOW ID="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1590"><td class="num" id="LN1590">1590</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1591"><td class="num" id="LN1591">1591</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1592"><td class="num" id="LN1592">1592</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1593"><td class="num" id="LN1593">1593</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" WINDOW ID= %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1594"><td class="num" id="LN1594">1594</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1595"><td class="num" id="LN1595">1595</td><td class="line"> create_lock_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1596"><td class="num" id="LN1596">1596</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1597"><td class="num" id="LN1597">1597</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1598"><td class="num" id="LN1598">1598</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1599"><td class="num" id="LN1599">1599</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1600"><td class="num" id="LN1600">1600</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE=AUTH FAILED"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1601"><td class="num" id="LN1601">1601</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1602"><td class="num" id="LN1602">1602</td><td class="line"> shake_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1603"><td class="num" id="LN1603">1603</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1604"><td class="num" id="LN1604">1604</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1605"><td class="num" id="LN1605">1605</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1606"><td class="num" id="LN1606">1606</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1607"><td class="num" id="LN1607">1607</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE=OK"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1608"><td class="num" id="LN1608">1608</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1609"><td class="num" id="LN1609">1609</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got OK response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1609, "Got OK response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1610"><td class="num" id="LN1610">1610</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_OK;</td></tr>
+<tr class="codeline" data-linenumber="1611"><td class="num" id="LN1611">1611</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1612"><td class="num" id="LN1612">1612</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1613"><td class="num" id="LN1613">1613</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1614"><td class="num" id="LN1614">1614</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got CANCEL response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1614, "Got CANCEL response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1615"><td class="num" id="LN1615">1615</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_CANCEL;</td></tr>
+<tr class="codeline" data-linenumber="1616"><td class="num" id="LN1616">1616</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1617"><td class="num" id="LN1617">1617</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1618"><td class="num" id="LN1618">1618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1619"><td class="num" id="LN1619">1619</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"REQUEST QUIT"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1620"><td class="num" id="LN1620">1620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1621"><td class="num" id="LN1621">1621</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got request for quit"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1621, "Got request for quit"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1622"><td class="num" id="LN1622">1622</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1623"><td class="num" id="LN1623">1623</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1624"><td class="num" id="LN1624">1624</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1625"><td class="num" id="LN1625">1625</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1626"><td class="num" id="LN1626">1626</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1627"><td class="num" id="LN1627">1627</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1628"><td class="num" id="LN1628">1628</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1629"><td class="num" id="LN1629">1629</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1630"><td class="num" id="LN1630">1630</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1631"><td class="num" id="LN1631">1631</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1631, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1632"><td class="num" id="LN1632">1632</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1633"><td class="num" id="LN1633">1633</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1634"><td class="num" id="LN1634">1634</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1635"><td class="num" id="LN1635">1635</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1636"><td class="num" id="LN1636">1636</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1637"><td class="num" id="LN1637">1637</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1638"><td class="num" id="LN1638">1638</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1639"><td class="num" id="LN1639">1639</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1640"><td class="num" id="LN1640">1640</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1641"><td class="num" id="LN1641">1641</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1642"><td class="num" id="LN1642">1642</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1643"><td class="num" id="LN1643">1643</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1644"><td class="num" id="LN1644">1644</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1645"><td class="num" id="LN1645">1645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1646"><td class="num" id="LN1646">1646</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1647"><td class="num" id="LN1647">1647</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1648"><td class="num" id="LN1648">1648</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1649"><td class="num" id="LN1649">1649</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1650"><td class="num" id="LN1650">1650</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_response == DIALOG_RESPONSE_OK)</td></tr>
+<tr class="codeline" data-linenumber="1651"><td class="num" id="LN1651">1651</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1652"><td class="num" id="LN1652">1652</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1653"><td class="num" id="LN1653">1653</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1654"><td class="num" id="LN1654">1654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1655"><td class="num" id="LN1655">1655</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1656"><td class="num" id="LN1656">1656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1657"><td class="num" id="LN1657">1657</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1658"><td class="num" id="LN1658">1658</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1659"><td class="num" id="LN1659">1659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1660"><td class="num" id="LN1660">1660</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1661"><td class="num" id="LN1661">1661</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1662"><td class="num" id="LN1662">1662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1663"><td class="num" id="LN1663">1663</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1664"><td class="num" id="LN1664">1664</td><td class="line">is_logout_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1665"><td class="num" id="LN1665">1665</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1666"><td class="num" id="LN1666">1666</td><td class="line"> <span class='keyword'>double</span> elapsed;</td></tr>
+<tr class="codeline" data-linenumber="1667"><td class="num" id="LN1667">1667</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1668"><td class="num" id="LN1668">1668</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1669"><td class="num" id="LN1669">1669</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1670"><td class="num" id="LN1670">1670</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1671"><td class="num" id="LN1671">1671</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1672"><td class="num" id="LN1672">1672</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1673"><td class="num" id="LN1673">1673</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_command)</td></tr>
+<tr class="codeline" data-linenumber="1674"><td class="num" id="LN1674">1674</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1675"><td class="num" id="LN1675">1675</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1676"><td class="num" id="LN1676">1676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1677"><td class="num" id="LN1677">1677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1678"><td class="num" id="LN1678">1678</td><td class="line"> elapsed = g_timer_elapsed (window-&gt;priv-&gt;timer, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1679"><td class="num" id="LN1679">1679</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1680"><td class="num" id="LN1680">1680</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;logout_timeout &lt; (elapsed * 1000))</td></tr>
+<tr class="codeline" data-linenumber="1681"><td class="num" id="LN1681">1681</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1682"><td class="num" id="LN1682">1682</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1683"><td class="num" id="LN1683">1683</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1684"><td class="num" id="LN1684">1684</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1685"><td class="num" id="LN1685">1685</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1686"><td class="num" id="LN1686">1686</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1687"><td class="num" id="LN1687">1687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1688"><td class="num" id="LN1688">1688</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1689"><td class="num" id="LN1689">1689</td><td class="line">is_user_switch_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1690"><td class="num" id="LN1690">1690</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1691"><td class="num" id="LN1691">1691</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;user_switch_enabled;</td></tr>
+<tr class="codeline" data-linenumber="1692"><td class="num" id="LN1692">1692</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1693"><td class="num" id="LN1693">1693</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1694"><td class="num" id="LN1694">1694</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1695"><td class="num" id="LN1695">1695</td><td class="line">popup_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1696"><td class="num" id="LN1696">1696</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1697"><td class="num" id="LN1697">1697</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1698"><td class="num" id="LN1698">1698</td><td class="line"> GString *command;</td></tr>
+<tr class="codeline" data-linenumber="1699"><td class="num" id="LN1699">1699</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1700"><td class="num" id="LN1700">1700</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Popping up dialog"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1700, "Popping up dialog"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1701"><td class="num" id="LN1701">1701</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1702"><td class="num" id="LN1702">1702</td><td class="line"> command = g_string_new (<span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1703"><td class="num" id="LN1703">1703</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1704"><td class="num" id="LN1704">1704</td><td class="line"> <span class='keyword'>if</span> (is_logout_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1705"><td class="num" id="LN1705">1705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1706"><td class="num" id="LN1706">1706</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-logout"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1707"><td class="num" id="LN1707">1707</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --logout-command='%s'"</span>, window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1708"><td class="num" id="LN1708">1708</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1709"><td class="num" id="LN1709">1709</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1710"><td class="num" id="LN1710">1710</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;status_message)</td></tr>
+<tr class="codeline" data-linenumber="1711"><td class="num" id="LN1711">1711</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1712"><td class="num" id="LN1712">1712</td><td class="line"> <span class='keyword'>char</span> *quoted;</td></tr>
+<tr class="codeline" data-linenumber="1713"><td class="num" id="LN1713">1713</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1714"><td class="num" id="LN1714">1714</td><td class="line"> quoted = g_shell_quote (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1715"><td class="num" id="LN1715">1715</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --status-message=%s"</span>, quoted);</td></tr>
+<tr class="codeline" data-linenumber="1716"><td class="num" id="LN1716">1716</td><td class="line"> g_free (quoted);</td></tr>
+<tr class="codeline" data-linenumber="1717"><td class="num" id="LN1717">1717</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1718"><td class="num" id="LN1718">1718</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1719"><td class="num" id="LN1719">1719</td><td class="line"> <span class='keyword'>if</span> (is_user_switch_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1720"><td class="num" id="LN1720">1720</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1721"><td class="num" id="LN1721">1721</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-switch"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1722"><td class="num" id="LN1722">1722</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1723"><td class="num" id="LN1723">1723</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1724"><td class="num" id="LN1724">1724</td><td class="line"> <span class='keyword'>if</span> (gs_debug_enabled ())</td></tr>
+<tr class="codeline" data-linenumber="1725"><td class="num" id="LN1725">1725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1726"><td class="num" id="LN1726">1726</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --verbose"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1727"><td class="num" id="LN1727">1727</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1728"><td class="num" id="LN1728">1728</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1729"><td class="num" id="LN1729">1729</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1730"><td class="num" id="LN1730">1730</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1731"><td class="num" id="LN1731">1731</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1732"><td class="num" id="LN1732">1732</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1733"><td class="num" id="LN1733">1733</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1734"><td class="num" id="LN1734">1734</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1735"><td class="num" id="LN1735">1735</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1736"><td class="num" id="LN1736">1736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1737"><td class="num" id="LN1737">1737</td><td class="line"> result = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1738"><td class="num" id="LN1738">1738</td><td class="line"> command-&gt;str,</td></tr>
+<tr class="codeline" data-linenumber="1739"><td class="num" id="LN1739">1739</td><td class="line"> &amp;window-&gt;priv-&gt;lock_pid,</td></tr>
+<tr class="codeline" data-linenumber="1740"><td class="num" id="LN1740">1740</td><td class="line"> (GIOFunc)lock_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1741"><td class="num" id="LN1741">1741</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1742"><td class="num" id="LN1742">1742</td><td class="line"> &amp;window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1743"><td class="num" id="LN1743">1743</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1744"><td class="num" id="LN1744">1744</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1745"><td class="num" id="LN1745">1745</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, command-&gt;str)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1745, "Could not start command: %s"<br>, command-&gt;str)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1746"><td class="num" id="LN1746">1746</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1747"><td class="num" id="LN1747">1747</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1748"><td class="num" id="LN1748">1748</td><td class="line"> g_string_free (command, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1749"><td class="num" id="LN1749">1749</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1750"><td class="num" id="LN1750">1750</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1751"><td class="num" id="LN1751">1751</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1752"><td class="num" id="LN1752">1752</td><td class="line">popup_dialog_idle (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1753"><td class="num" id="LN1753">1753</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1754"><td class="num" id="LN1754">1754</td><td class="line"> GSWindow *window = data;</td></tr>
+<tr class="codeline" data-linenumber="1755"><td class="num" id="LN1755">1755</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1756"><td class="num" id="LN1756">1756</td><td class="line"> popup_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1757"><td class="num" id="LN1757">1757</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1758"><td class="num" id="LN1758">1758</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1759"><td class="num" id="LN1759">1759</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1760"><td class="num" id="LN1760">1760</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1761"><td class="num" id="LN1761">1761</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1762"><td class="num" id="LN1762">1762</td><td class="line">gs_window_request_unlock (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1763"><td class="num" id="LN1763">1763</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1764"><td class="num" id="LN1764">1764</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1765"><td class="num" id="LN1765">1765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1766"><td class="num" id="LN1766">1766</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Requesting unlock"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1766, "Requesting unlock"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1767"><td class="num" id="LN1767">1767</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1768"><td class="num" id="LN1768">1768</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_visible (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="1769"><td class="num" id="LN1769">1769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1770"><td class="num" id="LN1770">1770</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Request unlock but window is not visible!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1770, "Request unlock but window is not visible!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1771"><td class="num" id="LN1771">1771</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1772"><td class="num" id="LN1772">1772</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1773"><td class="num" id="LN1773">1773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1774"><td class="num" id="LN1774">1774</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1775"><td class="num" id="LN1775">1775</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1776"><td class="num" id="LN1776">1776</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1777"><td class="num" id="LN1777">1777</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1778"><td class="num" id="LN1778">1778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1779"><td class="num" id="LN1779">1779</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1780"><td class="num" id="LN1780">1780</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1781"><td class="num" id="LN1781">1781</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1782"><td class="num" id="LN1782">1782</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1783"><td class="num" id="LN1783">1783</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1784"><td class="num" id="LN1784">1784</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1785"><td class="num" id="LN1785">1785</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1786"><td class="num" id="LN1786">1786</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id == 0)</td></tr>
+<tr class="codeline" data-linenumber="1787"><td class="num" id="LN1787">1787</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1788"><td class="num" id="LN1788">1788</td><td class="line"> add_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1789"><td class="num" id="LN1789">1789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1790"><td class="num" id="LN1790">1790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1791"><td class="num" id="LN1791">1791</td><td class="line"> window_set_dialog_up (window, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1792"><td class="num" id="LN1792">1792</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1793"><td class="num" id="LN1793">1793</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1794"><td class="num" id="LN1794">1794</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1795"><td class="num" id="LN1795">1795</td><td class="line">gs_window_cancel_unlock_request (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1796"><td class="num" id="LN1796">1796</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1797"><td class="num" id="LN1797">1797</td><td class="line"> <span class='comment'>/* FIXME: This is a bit of a hammer approach...</span></td></tr>
+<tr class="codeline" data-linenumber="1798"><td class="num" id="LN1798">1798</td><td class="line"> <span class='comment'>* Maybe we should send a delete-event to</span></td></tr>
+<tr class="codeline" data-linenumber="1799"><td class="num" id="LN1799">1799</td><td class="line"> <span class='comment'>* the plug?</span></td></tr>
+<tr class="codeline" data-linenumber="1800"><td class="num" id="LN1800">1800</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1801"><td class="num" id="LN1801">1801</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1802"><td class="num" id="LN1802">1802</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1803"><td class="num" id="LN1803">1803</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1804"><td class="num" id="LN1804">1804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1805"><td class="num" id="LN1805">1805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1806"><td class="num" id="LN1806">1806</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1807"><td class="num" id="LN1807">1807</td><td class="line">gs_window_set_lock_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1808"><td class="num" id="LN1808">1808</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1809"><td class="num" id="LN1809">1809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1810"><td class="num" id="LN1810">1810</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1811"><td class="num" id="LN1811">1811</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1812"><td class="num" id="LN1812">1812</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_enabled == lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1813"><td class="num" id="LN1813">1813</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1814"><td class="num" id="LN1814">1814</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1815"><td class="num" id="LN1815">1815</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1816"><td class="num" id="LN1816">1816</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1817"><td class="num" id="LN1817">1817</td><td class="line"> window-&gt;priv-&gt;lock_enabled = (lock_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1818"><td class="num" id="LN1818">1818</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"lock-enabled"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1819"><td class="num" id="LN1819">1819</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1820"><td class="num" id="LN1820">1820</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1821"><td class="num" id="LN1821">1821</td><td class="line">GdkDisplay *</td></tr>
+<tr class="codeline" data-linenumber="1822"><td class="num" id="LN1822">1822</td><td class="line">gs_window_get_display (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1823"><td class="num" id="LN1823">1823</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1824"><td class="num" id="LN1824">1824</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1825"><td class="num" id="LN1825">1825</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1826"><td class="num" id="LN1826">1826</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1827"><td class="num" id="LN1827">1827</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1828"><td class="num" id="LN1828">1828</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1829"><td class="num" id="LN1829">1829</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1830"><td class="num" id="LN1830">1830</td><td class="line">gs_window_set_keyboard_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1831"><td class="num" id="LN1831">1831</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="1832"><td class="num" id="LN1832">1832</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1833"><td class="num" id="LN1833">1833</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1834"><td class="num" id="LN1834">1834</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1835"><td class="num" id="LN1835">1835</td><td class="line"> window-&gt;priv-&gt;keyboard_enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1836"><td class="num" id="LN1836">1836</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1837"><td class="num" id="LN1837">1837</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1838"><td class="num" id="LN1838">1838</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1839"><td class="num" id="LN1839">1839</td><td class="line">gs_window_set_keyboard_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1840"><td class="num" id="LN1840">1840</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1841"><td class="num" id="LN1841">1841</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1842"><td class="num" id="LN1842">1842</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1843"><td class="num" id="LN1843">1843</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1844"><td class="num" id="LN1844">1844</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="1845"><td class="num" id="LN1845">1845</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1846"><td class="num" id="LN1846">1846</td><td class="line"> <span class='keyword'>if</span> (command != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1847"><td class="num" id="LN1847">1847</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1848"><td class="num" id="LN1848">1848</td><td class="line"> window-&gt;priv-&gt;keyboard_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1849"><td class="num" id="LN1849">1849</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1850"><td class="num" id="LN1850">1850</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1851"><td class="num" id="LN1851">1851</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1852"><td class="num" id="LN1852">1852</td><td class="line"> window-&gt;priv-&gt;keyboard_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1853"><td class="num" id="LN1853">1853</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1854"><td class="num" id="LN1854">1854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1855"><td class="num" id="LN1855">1855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1856"><td class="num" id="LN1856">1856</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1857"><td class="num" id="LN1857">1857</td><td class="line">gs_window_set_logout_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1858"><td class="num" id="LN1858">1858</td><td class="line"> gboolean logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1859"><td class="num" id="LN1859">1859</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1860"><td class="num" id="LN1860">1860</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1861"><td class="num" id="LN1861">1861</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1862"><td class="num" id="LN1862">1862</td><td class="line"> window-&gt;priv-&gt;logout_enabled = (logout_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1863"><td class="num" id="LN1863">1863</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1864"><td class="num" id="LN1864">1864</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1865"><td class="num" id="LN1865">1865</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1866"><td class="num" id="LN1866">1866</td><td class="line">gs_window_set_user_switch_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1867"><td class="num" id="LN1867">1867</td><td class="line"> gboolean user_switch_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1868"><td class="num" id="LN1868">1868</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1869"><td class="num" id="LN1869">1869</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1870"><td class="num" id="LN1870">1870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1871"><td class="num" id="LN1871">1871</td><td class="line"> window-&gt;priv-&gt;user_switch_enabled = (user_switch_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1872"><td class="num" id="LN1872">1872</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1873"><td class="num" id="LN1873">1873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1874"><td class="num" id="LN1874">1874</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1875"><td class="num" id="LN1875">1875</td><td class="line">gs_window_set_logout_timeout (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1876"><td class="num" id="LN1876">1876</td><td class="line"> glong logout_timeout)</td></tr>
+<tr class="codeline" data-linenumber="1877"><td class="num" id="LN1877">1877</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1878"><td class="num" id="LN1878">1878</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1879"><td class="num" id="LN1879">1879</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1880"><td class="num" id="LN1880">1880</td><td class="line"> <span class='keyword'>if</span> (logout_timeout &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1881"><td class="num" id="LN1881">1881</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1882"><td class="num" id="LN1882">1882</td><td class="line"> window-&gt;priv-&gt;logout_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="1883"><td class="num" id="LN1883">1883</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1884"><td class="num" id="LN1884">1884</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1885"><td class="num" id="LN1885">1885</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1886"><td class="num" id="LN1886">1886</td><td class="line"> window-&gt;priv-&gt;logout_timeout = logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="1887"><td class="num" id="LN1887">1887</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1888"><td class="num" id="LN1888">1888</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1889"><td class="num" id="LN1889">1889</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1890"><td class="num" id="LN1890">1890</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1891"><td class="num" id="LN1891">1891</td><td class="line">gs_window_set_logout_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1892"><td class="num" id="LN1892">1892</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1893"><td class="num" id="LN1893">1893</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1894"><td class="num" id="LN1894">1894</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1895"><td class="num" id="LN1895">1895</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1896"><td class="num" id="LN1896">1896</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1897"><td class="num" id="LN1897">1897</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1898"><td class="num" id="LN1898">1898</td><td class="line"> <span class='keyword'>if</span> (command)</td></tr>
+<tr class="codeline" data-linenumber="1899"><td class="num" id="LN1899">1899</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1900"><td class="num" id="LN1900">1900</td><td class="line"> window-&gt;priv-&gt;logout_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1901"><td class="num" id="LN1901">1901</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1902"><td class="num" id="LN1902">1902</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1903"><td class="num" id="LN1903">1903</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1904"><td class="num" id="LN1904">1904</td><td class="line"> window-&gt;priv-&gt;logout_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1905"><td class="num" id="LN1905">1905</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1906"><td class="num" id="LN1906">1906</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1907"><td class="num" id="LN1907">1907</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1908"><td class="num" id="LN1908">1908</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1909"><td class="num" id="LN1909">1909</td><td class="line">gs_window_set_status_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1910"><td class="num" id="LN1910">1910</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_message)</td></tr>
+<tr class="codeline" data-linenumber="1911"><td class="num" id="LN1911">1911</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1912"><td class="num" id="LN1912">1912</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1913"><td class="num" id="LN1913">1913</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1914"><td class="num" id="LN1914">1914</td><td class="line"> g_free (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1915"><td class="num" id="LN1915">1915</td><td class="line"> window-&gt;priv-&gt;status_message = g_strdup (status_message);</td></tr>
+<tr class="codeline" data-linenumber="1916"><td class="num" id="LN1916">1916</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1917"><td class="num" id="LN1917">1917</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1918"><td class="num" id="LN1918">1918</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1919"><td class="num" id="LN1919">1919</td><td class="line">gs_window_set_monitor (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1920"><td class="num" id="LN1920">1920</td><td class="line"> GdkMonitor *monitor)</td></tr>
+<tr class="codeline" data-linenumber="1921"><td class="num" id="LN1921">1921</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1922"><td class="num" id="LN1922">1922</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1923"><td class="num" id="LN1923">1923</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1924"><td class="num" id="LN1924">1924</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;monitor == monitor)</td></tr>
+<tr class="codeline" data-linenumber="1925"><td class="num" id="LN1925">1925</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1926"><td class="num" id="LN1926">1926</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1927"><td class="num" id="LN1927">1927</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1928"><td class="num" id="LN1928">1928</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1929"><td class="num" id="LN1929">1929</td><td class="line"> window-&gt;priv-&gt;monitor = monitor;</td></tr>
+<tr class="codeline" data-linenumber="1930"><td class="num" id="LN1930">1930</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1931"><td class="num" id="LN1931">1931</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1932"><td class="num" id="LN1932">1932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1933"><td class="num" id="LN1933">1933</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"monitor"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1934"><td class="num" id="LN1934">1934</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1935"><td class="num" id="LN1935">1935</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1936"><td class="num" id="LN1936">1936</td><td class="line">GdkMonitor *</td></tr>
+<tr class="codeline" data-linenumber="1937"><td class="num" id="LN1937">1937</td><td class="line">gs_window_get_monitor (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1938"><td class="num" id="LN1938">1938</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1939"><td class="num" id="LN1939">1939</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1940"><td class="num" id="LN1940">1940</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1941"><td class="num" id="LN1941">1941</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="1942"><td class="num" id="LN1942">1942</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1943"><td class="num" id="LN1943">1943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1944"><td class="num" id="LN1944">1944</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1945"><td class="num" id="LN1945">1945</td><td class="line">gs_window_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1946"><td class="num" id="LN1946">1946</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1947"><td class="num" id="LN1947">1947</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1948"><td class="num" id="LN1948">1948</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1949"><td class="num" id="LN1949">1949</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1950"><td class="num" id="LN1950">1950</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1951"><td class="num" id="LN1951">1951</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1952"><td class="num" id="LN1952">1952</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1953"><td class="num" id="LN1953">1953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1954"><td class="num" id="LN1954">1954</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1955"><td class="num" id="LN1955">1955</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1956"><td class="num" id="LN1956">1956</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1957"><td class="num" id="LN1957">1957</td><td class="line"> gs_window_set_lock_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1958"><td class="num" id="LN1958">1958</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1959"><td class="num" id="LN1959">1959</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1960"><td class="num" id="LN1960">1960</td><td class="line"> gs_window_set_keyboard_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1961"><td class="num" id="LN1961">1961</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1962"><td class="num" id="LN1962">1962</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1963"><td class="num" id="LN1963">1963</td><td class="line"> gs_window_set_keyboard_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1964"><td class="num" id="LN1964">1964</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1965"><td class="num" id="LN1965">1965</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1966"><td class="num" id="LN1966">1966</td><td class="line"> gs_window_set_logout_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1967"><td class="num" id="LN1967">1967</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1968"><td class="num" id="LN1968">1968</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1969"><td class="num" id="LN1969">1969</td><td class="line"> gs_window_set_logout_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1970"><td class="num" id="LN1970">1970</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1971"><td class="num" id="LN1971">1971</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="1972"><td class="num" id="LN1972">1972</td><td class="line"> gs_window_set_status_message (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1973"><td class="num" id="LN1973">1973</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1974"><td class="num" id="LN1974">1974</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="1975"><td class="num" id="LN1975">1975</td><td class="line"> gs_window_set_logout_timeout (self, g_value_get_long (value));</td></tr>
+<tr class="codeline" data-linenumber="1976"><td class="num" id="LN1976">1976</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1977"><td class="num" id="LN1977">1977</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="1978"><td class="num" id="LN1978">1978</td><td class="line"> gs_window_set_monitor (self, g_value_get_pointer (value));</td></tr>
+<tr class="codeline" data-linenumber="1979"><td class="num" id="LN1979">1979</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1980"><td class="num" id="LN1980">1980</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1981"><td class="num" id="LN1981">1981</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 1981, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1982"><td class="num" id="LN1982">1982</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1983"><td class="num" id="LN1983">1983</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1984"><td class="num" id="LN1984">1984</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1985"><td class="num" id="LN1985">1985</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1986"><td class="num" id="LN1986">1986</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1987"><td class="num" id="LN1987">1987</td><td class="line">gs_window_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1988"><td class="num" id="LN1988">1988</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1989"><td class="num" id="LN1989">1989</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1990"><td class="num" id="LN1990">1990</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1991"><td class="num" id="LN1991">1991</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1992"><td class="num" id="LN1992">1992</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1993"><td class="num" id="LN1993">1993</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1994"><td class="num" id="LN1994">1994</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1995"><td class="num" id="LN1995">1995</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1996"><td class="num" id="LN1996">1996</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1997"><td class="num" id="LN1997">1997</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1998"><td class="num" id="LN1998">1998</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1999"><td class="num" id="LN1999">1999</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;lock_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2000"><td class="num" id="LN2000">2000</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2001"><td class="num" id="LN2001">2001</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2002"><td class="num" id="LN2002">2002</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;keyboard_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2003"><td class="num" id="LN2003">2003</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2004"><td class="num" id="LN2004">2004</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2005"><td class="num" id="LN2005">2005</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2006"><td class="num" id="LN2006">2006</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2007"><td class="num" id="LN2007">2007</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2008"><td class="num" id="LN2008">2008</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;logout_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2009"><td class="num" id="LN2009">2009</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2010"><td class="num" id="LN2010">2010</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2011"><td class="num" id="LN2011">2011</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2012"><td class="num" id="LN2012">2012</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2013"><td class="num" id="LN2013">2013</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="2014"><td class="num" id="LN2014">2014</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="2015"><td class="num" id="LN2015">2015</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2016"><td class="num" id="LN2016">2016</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="2017"><td class="num" id="LN2017">2017</td><td class="line"> g_value_set_long (value, self-&gt;priv-&gt;logout_timeout);</td></tr>
+<tr class="codeline" data-linenumber="2018"><td class="num" id="LN2018">2018</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2019"><td class="num" id="LN2019">2019</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="2020"><td class="num" id="LN2020">2020</td><td class="line"> g_value_set_pointer (value, (gpointer) self-&gt;priv-&gt;monitor);</td></tr>
+<tr class="codeline" data-linenumber="2021"><td class="num" id="LN2021">2021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2022"><td class="num" id="LN2022">2022</td><td class="line"> <span class='keyword'>case</span> PROP_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2023"><td class="num" id="LN2023">2023</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;obscured);</td></tr>
+<tr class="codeline" data-linenumber="2024"><td class="num" id="LN2024">2024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2025"><td class="num" id="LN2025">2025</td><td class="line"> <span class='keyword'>case</span> PROP_DIALOG_UP:</td></tr>
+<tr class="codeline" data-linenumber="2026"><td class="num" id="LN2026">2026</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;dialog_up);</td></tr>
+<tr class="codeline" data-linenumber="2027"><td class="num" id="LN2027">2027</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2028"><td class="num" id="LN2028">2028</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2029"><td class="num" id="LN2029">2029</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 2029, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2030"><td class="num" id="LN2030">2030</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2031"><td class="num" id="LN2031">2031</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2032"><td class="num" id="LN2032">2032</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2033"><td class="num" id="LN2033">2033</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2034"><td class="num" id="LN2034">2034</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2035"><td class="num" id="LN2035">2035</td><td class="line">queue_key_event (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2036"><td class="num" id="LN2036">2036</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2037"><td class="num" id="LN2037">2037</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2038"><td class="num" id="LN2038">2038</td><td class="line"> <span class='comment'>/* Eat the first return, enter, escape, or space */</span></td></tr>
+<tr class="codeline" data-linenumber="2039"><td class="num" id="LN2039">2039</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;key_events == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2040"><td class="num" id="LN2040">2040</td><td class="line"> &amp;&amp; (event-&gt;keyval == <span class='macro'>GDK_KEY_Return<span class='macro_popup'>0xff0d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2041"><td class="num" id="LN2041">2041</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_KP_Enter<span class='macro_popup'>0xff8d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2042"><td class="num" id="LN2042">2042</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_Escape<span class='macro_popup'>0xff1b</span></span></td></tr>
+<tr class="codeline" data-linenumber="2043"><td class="num" id="LN2043">2043</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_space<span class='macro_popup'>0x020</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2044"><td class="num" id="LN2044">2044</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2045"><td class="num" id="LN2045">2045</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2046"><td class="num" id="LN2046">2046</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2047"><td class="num" id="LN2047">2047</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2048"><td class="num" id="LN2048">2048</td><td class="line"> <span class='comment'>/* Only cache MAX_QUEUED_EVENTS key events. If there are any more than this then</span></td></tr>
+<tr class="codeline" data-linenumber="2049"><td class="num" id="LN2049">2049</td><td class="line"> <span class='comment'>something is wrong */</span></td></tr>
+<tr class="codeline" data-linenumber="2050"><td class="num" id="LN2050">2050</td><td class="line"> <span class='comment'>/* Don't queue keys that may cause focus navigation in the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="2051"><td class="num" id="LN2051">2051</td><td class="line"> <span class='keyword'>if</span> (g_list_length (window-&gt;priv-&gt;key_events) &lt; <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span></td></tr>
+<tr class="codeline" data-linenumber="2052"><td class="num" id="LN2052">2052</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Tab<span class='macro_popup'>0xff09</span></span></td></tr>
+<tr class="codeline" data-linenumber="2053"><td class="num" id="LN2053">2053</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Up<span class='macro_popup'>0xff52</span></span></td></tr>
+<tr class="codeline" data-linenumber="2054"><td class="num" id="LN2054">2054</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Down<span class='macro_popup'>0xff54</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2055"><td class="num" id="LN2055">2055</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2056"><td class="num" id="LN2056">2056</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_prepend (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="2057"><td class="num" id="LN2057">2057</td><td class="line"> gdk_event_copy ((GdkEvent *)event));</td></tr>
+<tr class="codeline" data-linenumber="2058"><td class="num" id="LN2058">2058</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2059"><td class="num" id="LN2059">2059</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2060"><td class="num" id="LN2060">2060</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2061"><td class="num" id="LN2061">2061</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2062"><td class="num" id="LN2062">2062</td><td class="line">maybe_handle_activity (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2063"><td class="num" id="LN2063">2063</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2064"><td class="num" id="LN2064">2064</td><td class="line"> gboolean handled;</td></tr>
+<tr class="codeline" data-linenumber="2065"><td class="num" id="LN2065">2065</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2066"><td class="num" id="LN2066">2066</td><td class="line"> handled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2067"><td class="num" id="LN2067">2067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2068"><td class="num" id="LN2068">2068</td><td class="line"> <span class='comment'>/* if we already have a socket then don't bother */</span></td></tr>
+<tr class="codeline" data-linenumber="2069"><td class="num" id="LN2069">2069</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_socket</td></tr>
+<tr class="codeline" data-linenumber="2070"><td class="num" id="LN2070">2070</td><td class="line"> &amp;&amp; gtk_widget_get_sensitive (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2071"><td class="num" id="LN2071">2071</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2072"><td class="num" id="LN2072">2072</td><td class="line"> g_signal_emit (window, signals [ACTIVITY], 0, &amp;handled);</td></tr>
+<tr class="codeline" data-linenumber="2073"><td class="num" id="LN2073">2073</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2074"><td class="num" id="LN2074">2074</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2075"><td class="num" id="LN2075">2075</td><td class="line"> <span class='keyword'>return</span> handled;</td></tr>
+<tr class="codeline" data-linenumber="2076"><td class="num" id="LN2076">2076</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2077"><td class="num" id="LN2077">2077</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2078"><td class="num" id="LN2078">2078</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2079"><td class="num" id="LN2079">2079</td><td class="line">gs_window_real_key_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2080"><td class="num" id="LN2080">2080</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2081"><td class="num" id="LN2081">2081</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2082"><td class="num" id="LN2082">2082</td><td class="line"> <span class='comment'>/*g_message ("KEY PRESS state: %u keyval %u", event-&gt;state, event-&gt;keyval);*/</span></td></tr>
+<tr class="codeline" data-linenumber="2083"><td class="num" id="LN2083">2083</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2084"><td class="num" id="LN2084">2084</td><td class="line"> <span class='comment'>/* Ignore brightness keys */</span></td></tr>
+<tr class="codeline" data-linenumber="2085"><td class="num" id="LN2085">2085</td><td class="line"> <span class='keyword'>if</span> (event-&gt;hardware_keycode == 101 || event-&gt;hardware_keycode == 212)</td></tr>
+<tr class="codeline" data-linenumber="2086"><td class="num" id="LN2086">2086</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2087"><td class="num" id="LN2087">2087</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Ignoring brightness keys"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2087, "Ignoring brightness keys"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2088"><td class="num" id="LN2088">2088</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2089"><td class="num" id="LN2089">2089</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2090"><td class="num" id="LN2090">2090</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2091"><td class="num" id="LN2091">2091</td><td class="line"> maybe_handle_activity (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2092"><td class="num" id="LN2092">2092</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2093"><td class="num" id="LN2093">2093</td><td class="line"> queue_key_event (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="2094"><td class="num" id="LN2094">2094</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2095"><td class="num" id="LN2095">2095</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event)</td></tr>
+<tr class="codeline" data-linenumber="2096"><td class="num" id="LN2096">2096</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2097"><td class="num" id="LN2097">2097</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event (widget, event);</td></tr>
+<tr class="codeline" data-linenumber="2098"><td class="num" id="LN2098">2098</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2099"><td class="num" id="LN2099">2099</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2100"><td class="num" id="LN2100">2100</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2101"><td class="num" id="LN2101">2101</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2102"><td class="num" id="LN2102">2102</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2103"><td class="num" id="LN2103">2103</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2104"><td class="num" id="LN2104">2104</td><td class="line">gs_window_real_motion_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2105"><td class="num" id="LN2105">2105</td><td class="line"> GdkEventMotion *event)</td></tr>
+<tr class="codeline" data-linenumber="2106"><td class="num" id="LN2106">2106</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2107"><td class="num" id="LN2107">2107</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2108"><td class="num" id="LN2108">2108</td><td class="line"> gdouble distance;</td></tr>
+<tr class="codeline" data-linenumber="2109"><td class="num" id="LN2109">2109</td><td class="line"> gdouble min_distance;</td></tr>
+<tr class="codeline" data-linenumber="2110"><td class="num" id="LN2110">2110</td><td class="line"> gdouble min_percentage = 0.1;</td></tr>
+<tr class="codeline" data-linenumber="2111"><td class="num" id="LN2111">2111</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="2112"><td class="num" id="LN2112">2112</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="2113"><td class="num" id="LN2113">2113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2114"><td class="num" id="LN2114">2114</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2115"><td class="num" id="LN2115">2115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2116"><td class="num" id="LN2116">2116</td><td class="line"> display = gs_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="2117"><td class="num" id="LN2117">2117</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2118"><td class="num" id="LN2118">2118</td><td class="line"> min_distance = <span class='macro'>WidthOfScreen (gdk_x11_screen_get_xscreen (screen))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (screen))-&gt;width)</span></span> * min_percentage;</td></tr>
+<tr class="codeline" data-linenumber="2119"><td class="num" id="LN2119">2119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2120"><td class="num" id="LN2120">2120</td><td class="line"> <span class='comment'>/* if the last position was not set then don't detect motion */</span></td></tr>
+<tr class="codeline" data-linenumber="2121"><td class="num" id="LN2121">2121</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;last_x &lt; 0 || window-&gt;priv-&gt;last_y &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2122"><td class="num" id="LN2122">2122</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2123"><td class="num" id="LN2123">2123</td><td class="line"> window-&gt;priv-&gt;last_x = event-&gt;x;</td></tr>
+<tr class="codeline" data-linenumber="2124"><td class="num" id="LN2124">2124</td><td class="line"> window-&gt;priv-&gt;last_y = event-&gt;y;</td></tr>
+<tr class="codeline" data-linenumber="2125"><td class="num" id="LN2125">2125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2126"><td class="num" id="LN2126">2126</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2127"><td class="num" id="LN2127">2127</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2128"><td class="num" id="LN2128">2128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2129"><td class="num" id="LN2129">2129</td><td class="line"> <span class='comment'>/* just an approximate distance */</span></td></tr>
+<tr class="codeline" data-linenumber="2130"><td class="num" id="LN2130">2130</td><td class="line"> distance = <span class='macro'>MAX (ABS (window-&gt;priv-&gt;last_x - event-&gt;x),<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2131"><td class="num" id="LN2131">2131</td><td class="line"> <span class='macro'>ABS (window-&gt;priv-&gt;last_y - event-&gt;y))<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2132"><td class="num" id="LN2132">2132</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2133"><td class="num" id="LN2133">2133</td><td class="line"> <span class='keyword'>if</span> (distance &gt; min_distance)</td></tr>
+<tr class="codeline" data-linenumber="2134"><td class="num" id="LN2134">2134</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2135"><td class="num" id="LN2135">2135</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2136"><td class="num" id="LN2136">2136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2137"><td class="num" id="LN2137">2137</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2138"><td class="num" id="LN2138">2138</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2139"><td class="num" id="LN2139">2139</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2140"><td class="num" id="LN2140">2140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2141"><td class="num" id="LN2141">2141</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2142"><td class="num" id="LN2142">2142</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2143"><td class="num" id="LN2143">2143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2144"><td class="num" id="LN2144">2144</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2145"><td class="num" id="LN2145">2145</td><td class="line">gs_window_real_button_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2146"><td class="num" id="LN2146">2146</td><td class="line"> GdkEventButton *event)</td></tr>
+<tr class="codeline" data-linenumber="2147"><td class="num" id="LN2147">2147</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2148"><td class="num" id="LN2148">2148</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2149"><td class="num" id="LN2149">2149</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2150"><td class="num" id="LN2150">2150</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2151"><td class="num" id="LN2151">2151</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2152"><td class="num" id="LN2152">2152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2153"><td class="num" id="LN2153">2153</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2154"><td class="num" id="LN2154">2154</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2155"><td class="num" id="LN2155">2155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2156"><td class="num" id="LN2156">2156</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2157"><td class="num" id="LN2157">2157</td><td class="line">gs_window_real_scroll_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2158"><td class="num" id="LN2158">2158</td><td class="line"> GdkEventScroll *event)</td></tr>
+<tr class="codeline" data-linenumber="2159"><td class="num" id="LN2159">2159</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2160"><td class="num" id="LN2160">2160</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2161"><td class="num" id="LN2161">2161</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2162"><td class="num" id="LN2162">2162</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2163"><td class="num" id="LN2163">2163</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2164"><td class="num" id="LN2164">2164</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2165"><td class="num" id="LN2165">2165</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2166"><td class="num" id="LN2166">2166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2167"><td class="num" id="LN2167">2167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2168"><td class="num" id="LN2168">2168</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2169"><td class="num" id="LN2169">2169</td><td class="line">gs_window_real_size_request (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2170"><td class="num" id="LN2170">2170</td><td class="line"> GtkRequisition *requisition)</td></tr>
+<tr class="codeline" data-linenumber="2171"><td class="num" id="LN2171">2171</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2172"><td class="num" id="LN2172">2172</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2173"><td class="num" id="LN2173">2173</td><td class="line"> GtkBin *bin;</td></tr>
+<tr class="codeline" data-linenumber="2174"><td class="num" id="LN2174">2174</td><td class="line"> GtkWidget *child;</td></tr>
+<tr class="codeline" data-linenumber="2175"><td class="num" id="LN2175">2175</td><td class="line"> GdkRectangle old_geometry;</td></tr>
+<tr class="codeline" data-linenumber="2176"><td class="num" id="LN2176">2176</td><td class="line"> <span class='keyword'>int</span> position_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2177"><td class="num" id="LN2177">2177</td><td class="line"> <span class='keyword'>int</span> size_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2178"><td class="num" id="LN2178">2178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2179"><td class="num" id="LN2179">2179</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2180"><td class="num" id="LN2180">2180</td><td class="line"> bin = <span class='macro'>GTK_BIN (widget)<span class='macro_popup'>((((GtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gtk_bin_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2181"><td class="num" id="LN2181">2181</td><td class="line"> child = gtk_bin_get_child (bin);</td></tr>
+<tr class="codeline" data-linenumber="2182"><td class="num" id="LN2182">2182</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2183"><td class="num" id="LN2183">2183</td><td class="line"> <span class='keyword'>if</span> (child &amp;&amp; gtk_widget_get_visible (child))</td></tr>
+<tr class="codeline" data-linenumber="2184"><td class="num" id="LN2184">2184</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2185"><td class="num" id="LN2185">2185</td><td class="line"> gtk_widget_get_preferred_size (child, requisition, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2186"><td class="num" id="LN2186">2186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2187"><td class="num" id="LN2187">2187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2188"><td class="num" id="LN2188">2188</td><td class="line"> old_geometry = window-&gt;priv-&gt;geometry;</td></tr>
+<tr class="codeline" data-linenumber="2189"><td class="num" id="LN2189">2189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2190"><td class="num" id="LN2190">2190</td><td class="line"> update_geometry (window);</td></tr>
+<tr class="codeline" data-linenumber="2191"><td class="num" id="LN2191">2191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2192"><td class="num" id="LN2192">2192</td><td class="line"> requisition-&gt;width = window-&gt;priv-&gt;geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="2193"><td class="num" id="LN2193">2193</td><td class="line"> requisition-&gt;height = window-&gt;priv-&gt;geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="2194"><td class="num" id="LN2194">2194</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2195"><td class="num" id="LN2195">2195</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_realized (widget))</td></tr>
+<tr class="codeline" data-linenumber="2196"><td class="num" id="LN2196">2196</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2197"><td class="num" id="LN2197">2197</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2198"><td class="num" id="LN2198">2198</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2199"><td class="num" id="LN2199">2199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2200"><td class="num" id="LN2200">2200</td><td class="line"> <span class='keyword'>if</span> (old_geometry.width != window-&gt;priv-&gt;geometry.width ||</td></tr>
+<tr class="codeline" data-linenumber="2201"><td class="num" id="LN2201">2201</td><td class="line"> old_geometry.height != window-&gt;priv-&gt;geometry.height)</td></tr>
+<tr class="codeline" data-linenumber="2202"><td class="num" id="LN2202">2202</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2203"><td class="num" id="LN2203">2203</td><td class="line"> size_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2204"><td class="num" id="LN2204">2204</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2205"><td class="num" id="LN2205">2205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2206"><td class="num" id="LN2206">2206</td><td class="line"> <span class='keyword'>if</span> (old_geometry.x != window-&gt;priv-&gt;geometry.x ||</td></tr>
+<tr class="codeline" data-linenumber="2207"><td class="num" id="LN2207">2207</td><td class="line"> old_geometry.y != window-&gt;priv-&gt;geometry.y)</td></tr>
+<tr class="codeline" data-linenumber="2208"><td class="num" id="LN2208">2208</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2209"><td class="num" id="LN2209">2209</td><td class="line"> position_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2210"><td class="num" id="LN2210">2210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2211"><td class="num" id="LN2211">2211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2212"><td class="num" id="LN2212">2212</td><td class="line"> gs_window_move_resize_window (window, position_changed, size_changed);</td></tr>
+<tr class="codeline" data-linenumber="2213"><td class="num" id="LN2213">2213</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2214"><td class="num" id="LN2214">2214</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2215"><td class="num" id="LN2215">2215</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2216"><td class="num" id="LN2216">2216</td><td class="line">gs_window_real_get_preferred_width (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2217"><td class="num" id="LN2217">2217</td><td class="line"> gint *minimal_width,</td></tr>
+<tr class="codeline" data-linenumber="2218"><td class="num" id="LN2218">2218</td><td class="line"> gint *natural_width)</td></tr>
+<tr class="codeline" data-linenumber="2219"><td class="num" id="LN2219">2219</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2220"><td class="num" id="LN2220">2220</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2221"><td class="num" id="LN2221">2221</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2222"><td class="num" id="LN2222">2222</td><td class="line"> *minimal_width = *natural_width = requisition.width;</td></tr>
+<tr class="codeline" data-linenumber="2223"><td class="num" id="LN2223">2223</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2224"><td class="num" id="LN2224">2224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2225"><td class="num" id="LN2225">2225</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2226"><td class="num" id="LN2226">2226</td><td class="line">gs_window_real_get_preferred_height (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2227"><td class="num" id="LN2227">2227</td><td class="line"> gint *minimal_height,</td></tr>
+<tr class="codeline" data-linenumber="2228"><td class="num" id="LN2228">2228</td><td class="line"> gint *natural_height)</td></tr>
+<tr class="codeline" data-linenumber="2229"><td class="num" id="LN2229">2229</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2230"><td class="num" id="LN2230">2230</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2231"><td class="num" id="LN2231">2231</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2232"><td class="num" id="LN2232">2232</td><td class="line"> *minimal_height = *natural_height = requisition.height;</td></tr>
+<tr class="codeline" data-linenumber="2233"><td class="num" id="LN2233">2233</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2234"><td class="num" id="LN2234">2234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2235"><td class="num" id="LN2235">2235</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2236"><td class="num" id="LN2236">2236</td><td class="line">gs_window_real_grab_broken (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2237"><td class="num" id="LN2237">2237</td><td class="line"> GdkEventGrabBroken *event)</td></tr>
+<tr class="codeline" data-linenumber="2238"><td class="num" id="LN2238">2238</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2239"><td class="num" id="LN2239">2239</td><td class="line"> <span class='keyword'>if</span> (event-&gt;grab_window != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2240"><td class="num" id="LN2240">2240</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2241"><td class="num" id="LN2241">2241</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab on window %X"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2242"><td class="num" id="LN2242">2242</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2243"><td class="num" id="LN2243">2243</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2244"><td class="num" id="LN2244">2244</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;grab_window))<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2245"><td class="num" id="LN2245">2245</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2246"><td class="num" id="LN2246">2246</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="2247"><td class="num" id="LN2247">2247</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2248"><td class="num" id="LN2248">2248</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab is outside application"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2249"><td class="num" id="LN2249">2249</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2250"><td class="num" id="LN2250">2250</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2251"><td class="num" id="LN2251">2251</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2252"><td class="num" id="LN2252">2252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2253"><td class="num" id="LN2253">2253</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2254"><td class="num" id="LN2254">2254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2255"><td class="num" id="LN2255">2255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2256"><td class="num" id="LN2256">2256</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2257"><td class="num" id="LN2257">2257</td><td class="line">gs_window_is_obscured (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2258"><td class="num" id="LN2258">2258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2259"><td class="num" id="LN2259">2259</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2260"><td class="num" id="LN2260">2260</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2261"><td class="num" id="LN2261">2261</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;obscured;</td></tr>
+<tr class="codeline" data-linenumber="2262"><td class="num" id="LN2262">2262</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2263"><td class="num" id="LN2263">2263</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2264"><td class="num" id="LN2264">2264</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2265"><td class="num" id="LN2265">2265</td><td class="line">gs_window_is_dialog_up (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2266"><td class="num" id="LN2266">2266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2267"><td class="num" id="LN2267">2267</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2268"><td class="num" id="LN2268">2268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2269"><td class="num" id="LN2269">2269</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;dialog_up;</td></tr>
+<tr class="codeline" data-linenumber="2270"><td class="num" id="LN2270">2270</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2271"><td class="num" id="LN2271">2271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2272"><td class="num" id="LN2272">2272</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2273"><td class="num" id="LN2273">2273</td><td class="line">window_set_obscured (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2274"><td class="num" id="LN2274">2274</td><td class="line"> gboolean obscured)</td></tr>
+<tr class="codeline" data-linenumber="2275"><td class="num" id="LN2275">2275</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2276"><td class="num" id="LN2276">2276</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;obscured == obscured)</td></tr>
+<tr class="codeline" data-linenumber="2277"><td class="num" id="LN2277">2277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2278"><td class="num" id="LN2278">2278</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2279"><td class="num" id="LN2279">2279</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2280"><td class="num" id="LN2280">2280</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2281"><td class="num" id="LN2281">2281</td><td class="line"> window-&gt;priv-&gt;obscured = (obscured != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2282"><td class="num" id="LN2282">2282</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"obscured"</span>);</td></tr>
+<tr class="codeline" data-linenumber="2283"><td class="num" id="LN2283">2283</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2284"><td class="num" id="LN2284">2284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2285"><td class="num" id="LN2285">2285</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2286"><td class="num" id="LN2286">2286</td><td class="line">gs_window_real_visibility_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2287"><td class="num" id="LN2287">2287</td><td class="line"> GdkEventVisibility *event)</td></tr>
+<tr class="codeline" data-linenumber="2288"><td class="num" id="LN2288">2288</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2289"><td class="num" id="LN2289">2289</td><td class="line"> <span class='keyword'>switch</span> (event-&gt;state)</td></tr>
+<tr class="codeline" data-linenumber="2290"><td class="num" id="LN2290">2290</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2291"><td class="num" id="LN2291">2291</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_FULLY_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2292"><td class="num" id="LN2292">2292</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2293"><td class="num" id="LN2293">2293</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2294"><td class="num" id="LN2294">2294</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_PARTIAL:</td></tr>
+<tr class="codeline" data-linenumber="2295"><td class="num" id="LN2295">2295</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2296"><td class="num" id="LN2296">2296</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_UNOBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2297"><td class="num" id="LN2297">2297</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2298"><td class="num" id="LN2298">2298</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2299"><td class="num" id="LN2299">2299</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2300"><td class="num" id="LN2300">2300</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2301"><td class="num" id="LN2301">2301</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2302"><td class="num" id="LN2302">2302</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2303"><td class="num" id="LN2303">2303</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2304"><td class="num" id="LN2304">2304</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2305"><td class="num" id="LN2305">2305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2306"><td class="num" id="LN2306">2306</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2307"><td class="num" id="LN2307">2307</td><td class="line">gs_window_class_init (GSWindowClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="2308"><td class="num" id="LN2308">2308</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2309"><td class="num" id="LN2309">2309</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2310"><td class="num" id="LN2310">2310</td><td class="line"> GtkWidgetClass *widget_class = <span class='macro'>GTK_WIDGET_CLASS (klass)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2311"><td class="num" id="LN2311">2311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2312"><td class="num" id="LN2312">2312</td><td class="line"> object_class-&gt;finalize = gs_window_finalize;</td></tr>
+<tr class="codeline" data-linenumber="2313"><td class="num" id="LN2313">2313</td><td class="line"> object_class-&gt;get_property = gs_window_get_property;</td></tr>
+<tr class="codeline" data-linenumber="2314"><td class="num" id="LN2314">2314</td><td class="line"> object_class-&gt;set_property = gs_window_set_property;</td></tr>
+<tr class="codeline" data-linenumber="2315"><td class="num" id="LN2315">2315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2316"><td class="num" id="LN2316">2316</td><td class="line"> widget_class-&gt;show = gs_window_real_show;</td></tr>
+<tr class="codeline" data-linenumber="2317"><td class="num" id="LN2317">2317</td><td class="line"> widget_class-&gt;hide = gs_window_real_hide;</td></tr>
+<tr class="codeline" data-linenumber="2318"><td class="num" id="LN2318">2318</td><td class="line"> widget_class-&gt;draw = gs_window_real_draw;</td></tr>
+<tr class="codeline" data-linenumber="2319"><td class="num" id="LN2319">2319</td><td class="line"> widget_class-&gt;realize = gs_window_real_realize;</td></tr>
+<tr class="codeline" data-linenumber="2320"><td class="num" id="LN2320">2320</td><td class="line"> widget_class-&gt;unrealize = gs_window_real_unrealize;</td></tr>
+<tr class="codeline" data-linenumber="2321"><td class="num" id="LN2321">2321</td><td class="line"> widget_class-&gt;key_press_event = gs_window_real_key_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2322"><td class="num" id="LN2322">2322</td><td class="line"> widget_class-&gt;motion_notify_event = gs_window_real_motion_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2323"><td class="num" id="LN2323">2323</td><td class="line"> widget_class-&gt;button_press_event = gs_window_real_button_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2324"><td class="num" id="LN2324">2324</td><td class="line"> widget_class-&gt;scroll_event = gs_window_real_scroll_event;</td></tr>
+<tr class="codeline" data-linenumber="2325"><td class="num" id="LN2325">2325</td><td class="line"> widget_class-&gt;get_preferred_width = gs_window_real_get_preferred_width;</td></tr>
+<tr class="codeline" data-linenumber="2326"><td class="num" id="LN2326">2326</td><td class="line"> widget_class-&gt;get_preferred_height = gs_window_real_get_preferred_height;</td></tr>
+<tr class="codeline" data-linenumber="2327"><td class="num" id="LN2327">2327</td><td class="line"> widget_class-&gt;grab_broken_event = gs_window_real_grab_broken;</td></tr>
+<tr class="codeline" data-linenumber="2328"><td class="num" id="LN2328">2328</td><td class="line"> widget_class-&gt;visibility_notify_event = gs_window_real_visibility_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2329"><td class="num" id="LN2329">2329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2330"><td class="num" id="LN2330">2330</td><td class="line"> signals [ACTIVITY] =</td></tr>
+<tr class="codeline" data-linenumber="2331"><td class="num" id="LN2331">2331</td><td class="line"> g_signal_new (<span class='string_literal'>"activity"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2332"><td class="num" id="LN2332">2332</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2333"><td class="num" id="LN2333">2333</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2334"><td class="num" id="LN2334">2334</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, activity)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, activity))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2335"><td class="num" id="LN2335">2335</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2336"><td class="num" id="LN2336">2336</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2337"><td class="num" id="LN2337">2337</td><td class="line"> gs_marshal_BOOLEAN__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2338"><td class="num" id="LN2338">2338</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2339"><td class="num" id="LN2339">2339</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2340"><td class="num" id="LN2340">2340</td><td class="line"> signals [DEACTIVATED] =</td></tr>
+<tr class="codeline" data-linenumber="2341"><td class="num" id="LN2341">2341</td><td class="line"> g_signal_new (<span class='string_literal'>"deactivated"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2342"><td class="num" id="LN2342">2342</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2343"><td class="num" id="LN2343">2343</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2344"><td class="num" id="LN2344">2344</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, deactivated)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, deactivated))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2345"><td class="num" id="LN2345">2345</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2346"><td class="num" id="LN2346">2346</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2347"><td class="num" id="LN2347">2347</td><td class="line"> g_cclosure_marshal_VOID__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2348"><td class="num" id="LN2348">2348</td><td class="line"> <span class='macro'>G_TYPE_NONE<span class='macro_popup'>((GType) ((1) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2349"><td class="num" id="LN2349">2349</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2350"><td class="num" id="LN2350">2350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2351"><td class="num" id="LN2351">2351</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2352"><td class="num" id="LN2352">2352</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="2353"><td class="num" id="LN2353">2353</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"obscured"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2354"><td class="num" id="LN2354">2354</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2355"><td class="num" id="LN2355">2355</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2356"><td class="num" id="LN2356">2356</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2357"><td class="num" id="LN2357">2357</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2358"><td class="num" id="LN2358">2358</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2359"><td class="num" id="LN2359">2359</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="2360"><td class="num" id="LN2360">2360</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"dialog-up"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2361"><td class="num" id="LN2361">2361</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2362"><td class="num" id="LN2362">2362</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2363"><td class="num" id="LN2363">2363</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2364"><td class="num" id="LN2364">2364</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2365"><td class="num" id="LN2365">2365</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2366"><td class="num" id="LN2366">2366</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2367"><td class="num" id="LN2367">2367</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"lock-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2368"><td class="num" id="LN2368">2368</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2369"><td class="num" id="LN2369">2369</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2370"><td class="num" id="LN2370">2370</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2371"><td class="num" id="LN2371">2371</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2372"><td class="num" id="LN2372">2372</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2373"><td class="num" id="LN2373">2373</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2374"><td class="num" id="LN2374">2374</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"logout-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2375"><td class="num" id="LN2375">2375</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2376"><td class="num" id="LN2376">2376</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2377"><td class="num" id="LN2377">2377</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2378"><td class="num" id="LN2378">2378</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2379"><td class="num" id="LN2379">2379</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2380"><td class="num" id="LN2380">2380</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="2381"><td class="num" id="LN2381">2381</td><td class="line"> g_param_spec_long (<span class='string_literal'>"logout-timeout"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2382"><td class="num" id="LN2382">2382</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2383"><td class="num" id="LN2383">2383</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2384"><td class="num" id="LN2384">2384</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="2385"><td class="num" id="LN2385">2385</td><td class="line"> <span class='macro'>G_MAXLONG<span class='macro_popup'>9223372036854775807L</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2386"><td class="num" id="LN2386">2386</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="2387"><td class="num" id="LN2387">2387</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2388"><td class="num" id="LN2388">2388</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2389"><td class="num" id="LN2389">2389</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2390"><td class="num" id="LN2390">2390</td><td class="line"> g_param_spec_string (<span class='string_literal'>"logout-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2391"><td class="num" id="LN2391">2391</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2392"><td class="num" id="LN2392">2392</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2393"><td class="num" id="LN2393">2393</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2394"><td class="num" id="LN2394">2394</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2395"><td class="num" id="LN2395">2395</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2396"><td class="num" id="LN2396">2396</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="2397"><td class="num" id="LN2397">2397</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2398"><td class="num" id="LN2398">2398</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2399"><td class="num" id="LN2399">2399</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2400"><td class="num" id="LN2400">2400</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2401"><td class="num" id="LN2401">2401</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2402"><td class="num" id="LN2402">2402</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2403"><td class="num" id="LN2403">2403</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2404"><td class="num" id="LN2404">2404</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"keyboard-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2405"><td class="num" id="LN2405">2405</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2406"><td class="num" id="LN2406">2406</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2407"><td class="num" id="LN2407">2407</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2408"><td class="num" id="LN2408">2408</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2409"><td class="num" id="LN2409">2409</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2410"><td class="num" id="LN2410">2410</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2411"><td class="num" id="LN2411">2411</td><td class="line"> g_param_spec_string (<span class='string_literal'>"keyboard-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2412"><td class="num" id="LN2412">2412</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2413"><td class="num" id="LN2413">2413</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2414"><td class="num" id="LN2414">2414</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2415"><td class="num" id="LN2415">2415</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2416"><td class="num" id="LN2416">2416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2417"><td class="num" id="LN2417">2417</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2418"><td class="num" id="LN2418">2418</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="2419"><td class="num" id="LN2419">2419</td><td class="line"> g_param_spec_pointer (<span class='string_literal'>"monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2420"><td class="num" id="LN2420">2420</td><td class="line"> <span class='string_literal'>"Gdk monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2421"><td class="num" id="LN2421">2421</td><td class="line"> <span class='string_literal'>"The monitor (in terms of Gdk) which the window is on"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2422"><td class="num" id="LN2422">2422</td><td class="line"> G_PARAM_READWRITE | G_PARAM_CONSTRUCT));</td></tr>
+<tr class="codeline" data-linenumber="2423"><td class="num" id="LN2423">2423</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2424"><td class="num" id="LN2424">2424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2425"><td class="num" id="LN2425">2425</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2426"><td class="num" id="LN2426">2426</td><td class="line">create_info_bar (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2427"><td class="num" id="LN2427">2427</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2428"><td class="num" id="LN2428">2428</td><td class="line"> window-&gt;priv-&gt;info_bar = gtk_info_bar_new ();</td></tr>
+<tr class="codeline" data-linenumber="2429"><td class="num" id="LN2429">2429</td><td class="line"> gtk_widget_set_no_show_all (window-&gt;priv-&gt;info_bar, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2430"><td class="num" id="LN2430">2430</td><td class="line"> gtk_box_pack_end (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_bar, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2431"><td class="num" id="LN2431">2431</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2432"><td class="num" id="LN2432">2432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2433"><td class="num" id="LN2433">2433</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2434"><td class="num" id="LN2434">2434</td><td class="line">on_drawing_area_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2435"><td class="num" id="LN2435">2435</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="2436"><td class="num" id="LN2436">2436</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2437"><td class="num" id="LN2437">2437</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="2438"><td class="num" id="LN2438">2438</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="2439"><td class="num" id="LN2439">2439</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="2440"><td class="num" id="LN2440">2440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2441"><td class="num" id="LN2441">2441</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2442"><td class="num" id="LN2442">2442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2443"><td class="num" id="LN2443">2443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2444"><td class="num" id="LN2444">2444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2445"><td class="num" id="LN2445">2445</td><td class="line">gs_window_init (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2446"><td class="num" id="LN2446">2446</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2447"><td class="num" id="LN2447">2447</td><td class="line"> window-&gt;priv = gs_window_get_instance_private (window);</td></tr>
+<tr class="codeline" data-linenumber="2448"><td class="num" id="LN2448">2448</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2449"><td class="num" id="LN2449">2449</td><td class="line"> window-&gt;priv-&gt;geometry.x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2450"><td class="num" id="LN2450">2450</td><td class="line"> window-&gt;priv-&gt;geometry.y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2451"><td class="num" id="LN2451">2451</td><td class="line"> window-&gt;priv-&gt;geometry.width = -1;</td></tr>
+<tr class="codeline" data-linenumber="2452"><td class="num" id="LN2452">2452</td><td class="line"> window-&gt;priv-&gt;geometry.height = -1;</td></tr>
+<tr class="codeline" data-linenumber="2453"><td class="num" id="LN2453">2453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2454"><td class="num" id="LN2454">2454</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2455"><td class="num" id="LN2455">2455</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2456"><td class="num" id="LN2456">2456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2457"><td class="num" id="LN2457">2457</td><td class="line"> gtk_window_set_decorated (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2458"><td class="num" id="LN2458">2458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2459"><td class="num" id="LN2459">2459</td><td class="line"> gtk_window_set_skip_taskbar_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2460"><td class="num" id="LN2460">2460</td><td class="line"> gtk_window_set_skip_pager_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2461"><td class="num" id="LN2461">2461</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2462"><td class="num" id="LN2462">2462</td><td class="line"> gtk_window_set_keep_above (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2463"><td class="num" id="LN2463">2463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2464"><td class="num" id="LN2464">2464</td><td class="line"> gtk_window_fullscreen (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2465"><td class="num" id="LN2465">2465</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2466"><td class="num" id="LN2466">2466</td><td class="line"> gtk_widget_set_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2467"><td class="num" id="LN2467">2467</td><td class="line"> gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2468"><td class="num" id="LN2468">2468</td><td class="line"> | GDK_POINTER_MOTION_MASK</td></tr>
+<tr class="codeline" data-linenumber="2469"><td class="num" id="LN2469">2469</td><td class="line"> | GDK_BUTTON_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2470"><td class="num" id="LN2470">2470</td><td class="line"> | GDK_BUTTON_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2471"><td class="num" id="LN2471">2471</td><td class="line"> | GDK_KEY_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2472"><td class="num" id="LN2472">2472</td><td class="line"> | GDK_KEY_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2473"><td class="num" id="LN2473">2473</td><td class="line"> | GDK_EXPOSURE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2474"><td class="num" id="LN2474">2474</td><td class="line"> | GDK_VISIBILITY_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2475"><td class="num" id="LN2475">2475</td><td class="line"> | GDK_ENTER_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2476"><td class="num" id="LN2476">2476</td><td class="line"> | GDK_LEAVE_NOTIFY_MASK);</td></tr>
+<tr class="codeline" data-linenumber="2477"><td class="num" id="LN2477">2477</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2478"><td class="num" id="LN2478">2478</td><td class="line"> window-&gt;priv-&gt;vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);</td></tr>
+<tr class="codeline" data-linenumber="2479"><td class="num" id="LN2479">2479</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2480"><td class="num" id="LN2480">2480</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2481"><td class="num" id="LN2481">2481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2482"><td class="num" id="LN2482">2482</td><td class="line"> window-&gt;priv-&gt;drawing_area = gtk_drawing_area_new ();</td></tr>
+<tr class="codeline" data-linenumber="2483"><td class="num" id="LN2483">2483</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="2484"><td class="num" id="LN2484">2484</td><td class="line"> gtk_widget_set_app_paintable (window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2485"><td class="num" id="LN2485">2485</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2486"><td class="num" id="LN2486">2486</td><td class="line"> window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2487"><td class="num" id="LN2487">2487</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;drawing_area,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2488"><td class="num" id="LN2488">2488</td><td class="line"> <span class='string_literal'><span class='macro'>"draw"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2489"><td class="num" id="LN2489">2489</td><td class="line"> <span class='macro'>G_CALLBACK (on_drawing_area_draw),<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2490"><td class="num" id="LN2490">2490</td><td class="line"> <span class='macro'>NULL)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2491"><td class="num" id="LN2491">2491</td><td class="line"> create_info_bar (window);</td></tr>
+<tr class="codeline" data-linenumber="2492"><td class="num" id="LN2492">2492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2493"><td class="num" id="LN2493">2493</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2494"><td class="num" id="LN2494">2494</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2495"><td class="num" id="LN2495">2495</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2496"><td class="num" id="LN2496">2496</td><td class="line">remove_command_watches (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2497"><td class="num" id="LN2497">2497</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2498"><td class="num" id="LN2498">2498</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2499"><td class="num" id="LN2499">2499</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2500"><td class="num" id="LN2500">2500</td><td class="line"> g_source_remove (window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2501"><td class="num" id="LN2501">2501</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2502"><td class="num" id="LN2502">2502</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2503"><td class="num" id="LN2503">2503</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2504"><td class="num" id="LN2504">2504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2505"><td class="num" id="LN2505">2505</td><td class="line"> g_source_remove (window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2506"><td class="num" id="LN2506">2506</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2507"><td class="num" id="LN2507">2507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2508"><td class="num" id="LN2508">2508</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2509"><td class="num" id="LN2509">2509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2510"><td class="num" id="LN2510">2510</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2511"><td class="num" id="LN2511">2511</td><td class="line">gs_window_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="2512"><td class="num" id="LN2512">2512</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2513"><td class="num" id="LN2513">2513</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2514"><td class="num" id="LN2514">2514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2515"><td class="num" id="LN2515">2515</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2516"><td class="num" id="LN2516">2516</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2517"><td class="num" id="LN2517">2517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2518"><td class="num" id="LN2518">2518</td><td class="line"> window = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2519"><td class="num" id="LN2519">2519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2520"><td class="num" id="LN2520">2520</td><td class="line"> <span class='macro'>g_return_if_fail (window-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2521"><td class="num" id="LN2521">2521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2522"><td class="num" id="LN2522">2522</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2523"><td class="num" id="LN2523">2523</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2524"><td class="num" id="LN2524">2524</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2525"><td class="num" id="LN2525">2525</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2526"><td class="num" id="LN2526">2526</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2527"><td class="num" id="LN2527">2527</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="2528"><td class="num" id="LN2528">2528</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2529"><td class="num" id="LN2529">2529</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2530"><td class="num" id="LN2530">2530</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2531"><td class="num" id="LN2531">2531</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="2532"><td class="num" id="LN2532">2532</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="2533"><td class="num" id="LN2533">2533</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2534"><td class="num" id="LN2534">2534</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="2535"><td class="num" id="LN2535">2535</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2536"><td class="num" id="LN2536">2536</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="2537"><td class="num" id="LN2537">2537</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2538"><td class="num" id="LN2538">2538</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2539"><td class="num" id="LN2539">2539</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="2540"><td class="num" id="LN2540">2540</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2541"><td class="num" id="LN2541">2541</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="2542"><td class="num" id="LN2542">2542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2543"><td class="num" id="LN2543">2543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="2544"><td class="num" id="LN2544">2544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2545"><td class="num" id="LN2545">2545</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface)</td></tr>
+<tr class="codeline" data-linenumber="2546"><td class="num" id="LN2546">2546</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2547"><td class="num" id="LN2547">2547</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="2548"><td class="num" id="LN2548">2548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2549"><td class="num" id="LN2549">2549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2550"><td class="num" id="LN2550">2550</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), (((GType) ((20) &lt;&lt; (2)))<br>)))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="2551"><td class="num" id="LN2551">2551</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2552"><td class="num" id="LN2552">2552</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2553"><td class="num" id="LN2553">2553</td><td class="line">GSWindow *</td></tr>
+<tr class="codeline" data-linenumber="2554"><td class="num" id="LN2554">2554</td><td class="line">gs_window_new (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="2555"><td class="num" id="LN2555">2555</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="2556"><td class="num" id="LN2556">2556</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2557"><td class="num" id="LN2557">2557</td><td class="line"> GObject *result;</td></tr>
+<tr class="codeline" data-linenumber="2558"><td class="num" id="LN2558">2558</td><td class="line"> GdkDisplay *display = gdk_monitor_get_display (monitor);</td></tr>
+<tr class="codeline" data-linenumber="2559"><td class="num" id="LN2559">2559</td><td class="line"> GdkScreen *screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2560"><td class="num" id="LN2560">2560</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2561"><td class="num" id="LN2561">2561</td><td class="line"> result = g_object_new (<span class='macro'>GS_TYPE_WINDOW<span class='macro_popup'>(gs_window_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2562"><td class="num" id="LN2562">2562</td><td class="line"> <span class='string_literal'>"type"</span>, GTK_WINDOW_POPUP,</td></tr>
+<tr class="codeline" data-linenumber="2563"><td class="num" id="LN2563">2563</td><td class="line"> <span class='string_literal'>"screen"</span>, screen,</td></tr>
+<tr class="codeline" data-linenumber="2564"><td class="num" id="LN2564">2564</td><td class="line"> <span class='string_literal'>"monitor"</span>, monitor,</td></tr>
+<tr class="codeline" data-linenumber="2565"><td class="num" id="LN2565">2565</td><td class="line"> <span class='string_literal'>"lock-enabled"</span>, lock_enabled,</td></tr>
+<tr class="codeline" data-linenumber="2566"><td class="num" id="LN2566">2566</td><td class="line"> <span class='string_literal'>"app-paintable"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2567"><td class="num" id="LN2567">2567</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2568"><td class="num" id="LN2568">2568</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2569"><td class="num" id="LN2569">2569</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WINDOW (result)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((result)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2570"><td class="num" id="LN2570">2570</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2084b3.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2084b3.html
new file mode 100644
index 0000000..4c9ff0e
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2084b3.html
@@ -0,0 +1,898 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Out of bound memory access (accessed memory precedes memory block) -->
+
+<!-- BUGTYPE Out-of-bound access -->
+
+<!-- BUGCATEGORY Logic error -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 2084b32c38f88953c95279e3b2b4ace6 -->
+
+<!-- BUGLINE 91 -->
+
+<!-- BUGCOLUMN 10 -->
+
+<!-- BUGPATHLENGTH 17 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 91, column 10</a><br />Out of bound memory access (accessed memory precedes memory block)</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"35": 1, "36": 1, "37": 1, "38": 1, "39": 1, "40": 1, "41": 1, "42": 1, "43": 1, "45": 1, "47": 1, "50": 1, "51": 1, "53": 1, "54": 1, "55": 1, "64": 1, "65": 1, "66": 1, "69": 1, "70": 1, "73": 1, "74": 1, "77": 1, "78": 1, "81": 1, "83": 1, "84": 1, "86": 1, "87": 1, "89": 1, "91": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+ <path class="arrow" id="arrow0"/>
+ <path class="arrow" id="arrow1"/>
+ <path class="arrow" id="arrow2"/>
+ <path class="arrow" id="arrow3"/>
+ <path class="arrow" id="arrow4"/>
+ <path class="arrow" id="arrow5"/>
+ <path class="arrow" id="arrow6"/>
+ <path class="arrow" id="arrow7"/>
+ <path class="arrow" id="arrow8"/>
+ <path class="arrow" id="arrow9"/>
+ <path class="arrow" id="arrow10"/>
+ <path class="arrow" id="arrow11"/>
+ <path class="arrow" id="arrow12"/>
+ <path class="arrow" id="arrow13"/>
+ <path class="arrow" id="arrow14"/>
+ <path class="arrow" id="arrow15"/>
+ <path class="arrow" id="arrow16"/>
+ <path class="arrow" id="arrow17"/>
+ <path class="arrow" id="arrow18"/>
+ <path class="arrow" id="arrow19"/>
+ <path class="arrow" id="arrow20"/>
+ <path class="arrow" id="arrow21"/>
+ <path class="arrow" id="arrow22"/>
+ <path class="arrow" id="arrow23"/>
+ <path class="arrow" id="arrow24"/>
+ <path class="arrow" id="arrow25"/>
+ <path class="arrow" id="arrow26"/>
+ <path class="arrow" id="arrow27"/>
+ <path class="arrow" id="arrow28"/>
+ <path class="arrow" id="arrow29"/>
+ <path class="arrow" id="arrow30"/>
+ <path class="arrow" id="arrow31"/>
+ <path class="arrow" id="arrow32"/>
+ <path class="arrow" id="arrow33"/>
+ <path class="arrow" id="arrow34"/>
+ <path class="arrow" id="arrow35"/>
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 36,32,24,23,20,17,14,13,10,9,8,6,5,3,2,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> <span id="start35">FILE</span> *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span id="start34"><span id="end35"><span class='keyword'>if</span></span></span> (<span id="start33"><span id="end34"><span class='variable'>home_dir<table class='variable_popup'><tbody><tr><td valign='top'><div class='PathIndex PathIndexPopUp'>0.1</div></td><td>'home_dir' is not equal to NULL</td></tr></tbody></table></span></span></span> == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path1" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">1</div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path2" title="Next event (2)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> <span id="start30"><span id="end31"><span id="start32"><span id="end33">config_home</span></span></span></span> = getenv (<span id="start31"><span id="end32"><span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr></span></span>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span id="start29"><span id="end30"><span class='keyword'>if</span></span></span> (<span id="start28"><span id="end29"><span class='variable'>config_home<table class='variable_popup'><tbody><tr><td valign='top'><div class='PathIndex PathIndexPopUp'>1.1</div></td><td>'config_home' is equal to NULL</td></tr></tbody></table></span></span></span> == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> <span id="start27"><span id="end28">config_file</span></span> = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> <span id="start26"><span id="end27">strcat</span></span> (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span id="start25"><span id="end26">file</span></span> = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span id="start24"><span id="end25"><span class='keyword'>if</span></span></span> (<span id="start23"><span class="mrange"><span id="end24">file</span></span> == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path2" class="msg msgEvent" style="margin-left:13ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">2</div></td><td><div class="PathNav"><a href="#Path1" title="Previous event (1)">&#x2190;</a></div></td><td>Assuming 'file' is not equal to NULL</td><td><div class="PathNav"><a href="#Path3" title="Next event (3)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path3" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">3</div></td><td><div class="PathNav"><a href="#Path2" title="Previous event (2)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path4" title="Next event (4)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span id="start22"><span id="end23">user_dir</span></span> = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span id="start21"><span id="end22"><span class='keyword'>while</span></span></span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path4" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">4</div></td><td><div class="PathNav"><a href="#Path3" title="Previous event (3)">&#x2190;</a></div></td><td>Loop condition is true. Entering loop body</td><td><div class="PathNav"><a href="#Path5" title="Next event (5)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span id="start18"><span id="end19"><span id="start20"><span id="end21">size_t</span></span></span></span> len = strlen (<span id="start19"><span id="end20">buffer</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span id="start17"><span id="end18"><span class='keyword'>if</span></span></span> (<span id="start16"><span class="mrange"><span id="end17">len</span></span> != 0</span> &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path5" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">5</div></td><td><div class="PathNav"><a href="#Path4" title="Previous event (4)">&#x2190;</a></div></td><td>Assuming 'len' is equal to 0</td><td><div class="PathNav"><a href="#Path6" title="Next event (6)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span id="start15"><span id="end16">p</span></span> = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span id="start14"><span id="end15"><span class='keyword'>while</span></span></span> (<span id="start11"><span id="end12"><span id="start13"><span class="mrange"><span id="end14">*</span></span></span></span>p == ' ' || <span id="start12"><span class="mrange"><span id="end13">*</span></span>p == '</span>\t')</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path6" class="msg msgEvent" style="margin-left:24ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">6</div></td><td><div class="PathNav"><a href="#Path5" title="Previous event (5)">&#x2190;</a></div></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path7" title="Next event (7)">&#x2192;</a></div></td></tr></table></div></td></tr></span>
+<tr><td class="num"></td><td class="line"><div id="Path7" class="msg msgEvent" style="margin-left:37ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">7</div></td><td><div class="PathNav"><a href="#Path6" title="Previous event (6)">&#x2190;</a></div></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path8" title="Next event (8)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path8" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">8</div></td><td><div class="PathNav"><a href="#Path7" title="Previous event (7)">&#x2190;</a></div></td><td>Loop condition is false. Execution continues on line 81</td><td><div class="PathNav"><a href="#Path9" title="Next event (9)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span id="start10"><span id="end11"><span class='keyword'>if</span></span></span> (<span id="start8"><span class="mrange"><span id="end9">strncmp</span></span> (<span id="start9"><span id="end10">p</span></span>, <span class='string_literal'>"XDG_"</span>, 4) != 0</span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path9" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">9</div></td><td><div class="PathNav"><a href="#Path8" title="Previous event (8)">&#x2190;</a></div></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path10" title="Next event (10)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path10" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">10</div></td><td><div class="PathNav"><a href="#Path9" title="Previous event (9)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path11" title="Next event (11)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span id="start7"><span id="end8">p</span></span> += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span id="start6"><span id="end7"><span class='keyword'>if</span></span></span> (<span id="start5"><span class="mrange"><span id="end6">strncmp</span></span> (p, type, strlen (type)) != 0</span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path11" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">11</div></td><td><div class="PathNav"><a href="#Path10" title="Previous event (10)">&#x2190;</a></div></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path12" title="Next event (12)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path12" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">12</div></td><td><div class="PathNav"><a href="#Path11" title="Previous event (11)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path13" title="Next event (13)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> <span id="start4"><span id="end5">p</span></span> += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span id="start3"><span id="end4"><span class='keyword'>if</span></span></span> (<span id="start2"><span class="mrange"><span id="end3">strncmp</span></span> (p, <span class='string_literal'>"_DIR"</span>, 4) != 0</span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path13" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">13</div></td><td><div class="PathNav"><a href="#Path12" title="Previous event (12)">&#x2190;</a></div></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path14" title="Next event (14)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path14" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">14</div></td><td><div class="PathNav"><a href="#Path13" title="Previous event (13)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#EndPath" title="Next event (15)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span id="start1"><span id="end2">p</span></span> += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span id="start0"><span id="end1"><span class='keyword'>while</span></span></span> (<span class="mrange"><span id="end0">*</span>p</span> == ' ' || *p == '\t')</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:24ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">15</div></td><td><div class="PathNav"><a href="#Path14" title="Previous event (14)">&#x2190;</a></div></td><td>Out of bound memory access (accessed memory precedes memory block)</td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-24761d.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-24761d.html
new file mode 100644
index 0000000..d14383e
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-24761d.html
@@ -0,0 +1,1355 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-watcher-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'desired_allow_exp' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-watcher-x11.c -->
+
+<!-- FILENAME gs-watcher-x11.c -->
+
+<!-- FUNCTIONNAME disable_builtin_screensaver -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 24761d4646b117d5ecd0e895edb9ef2a -->
+
+<!-- BUGLINE 599 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-watcher-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 599, column 2</a><br />Value stored to 'desired_allow_exp' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-watcher-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-watcher-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"599": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2008 Red Hat, Inc.</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;time.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-watcher.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_watcher_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean watchdog_timer (GSWatcher *watcher);</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>struct</span> GSWatcherPrivate</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>/* settings */</span></td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> guint enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> guint delta_notice_timeout;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='comment'>/* state */</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> guint active : 1;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> guint idle : 1;</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint idle_notice : 1;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> guint idle_id;</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> DBusGProxy *presence_proxy;</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> IDLE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> IDLE_NOTICE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWatcher, gs_watcher, G_TYPE_OBJECT)<span class='macro_popup'>static void gs_watcher_init (GSWatcher *self); static void gs_watcher_class_init<br> (GSWatcherClass *klass); static GType gs_watcher_get_type_once<br> (void); static gpointer gs_watcher_parent_class = ((void*)0)<br>; static gint GSWatcher_private_offset; static void gs_watcher_class_intern_init<br> (gpointer klass) { gs_watcher_parent_class = g_type_class_peek_parent<br> (klass); if (GSWatcher_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWatcher_private_offset); gs_watcher_class_init<br> ((GSWatcherClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_watcher_get_instance_private (GSWatcher *<br>self) { return (((gpointer) ((guint8*) (self) + (glong) (GSWatcher_private_offset<br>)))); } GType gs_watcher_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_watcher_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_watcher_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> (((GType) ((20) &lt;&lt; (2))), g_intern_static_string ("GSWatcher"<br>), sizeof (GSWatcherClass), (GClassInitFunc)(void (*)(void)) gs_watcher_class_intern_init<br>, sizeof (GSWatcher), (GInstanceInitFunc)(void (*)(void)) gs_watcher_init<br>, (GTypeFlags) 0); { {{ GSWatcher_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWatcherPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line">remove_watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">add_watchdog_timer (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">gs_watcher_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 115, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">set_status_text (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *text)</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> watcher-&gt;priv-&gt;status_message = g_strdup (text);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (watcher)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"status-message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line">gs_watcher_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> set_status_text (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 146, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line">gs_watcher_class_init (GSWatcherClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> object_class-&gt;finalize = gs_watcher_finalize;</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> object_class-&gt;get_property = gs_watcher_get_property;</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> object_class-&gt;set_property = gs_watcher_set_property;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> signals [IDLE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> signals [IDLE_NOTICE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-notice-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_notice_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_notice_changed<br>))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line">_gs_watcher_set_session_idle_notice (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> gboolean in_effect)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>if</span> (in_effect != watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> g_signal_emit (watcher, signals [IDLE_NOTICE_CHANGED], 0, in_effect, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle notice state: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 204, "Changing idle notice state: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = (in_effect != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle notice signal not handled: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 210, "Idle notice signal not handled: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line">_gs_watcher_set_session_idle (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean is_idle)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='keyword'>if</span> (is_idle != watcher-&gt;priv-&gt;idle)</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> g_signal_emit (watcher, signals [IDLE_CHANGED], 0, is_idle, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle state: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 231, "Changing idle state: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> watcher-&gt;priv-&gt;idle = (is_idle != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle changed signal not handled: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 237, "Idle changed signal not handled: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line">gs_watcher_get_active (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> gboolean active;</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> active = watcher-&gt;priv-&gt;active;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> <span class='keyword'>return</span> active;</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line">_gs_watcher_reset_state (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> watcher-&gt;priv-&gt;idle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line">_gs_watcher_set_active_internal (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (active != watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='comment'>/* reset state */</span></td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> _gs_watcher_reset_state (watcher);</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> watcher-&gt;priv-&gt;active = (active != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line">gs_watcher_set_active (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"turning watcher: %s"</span>, active ? <span class='string_literal'>"ON"</span> : <span class='string_literal'>"OFF"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 284, "turning watcher: %s"<br>, active ? "ON" : "OFF")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;active == active)</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is already %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='macro'>active ? <span class='string_literal'>"active"</span> : <span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;enabled)</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is disabled, cannot activate"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 295, "Idle detection is disabled, cannot activate"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> _gs_watcher_set_active_internal (watcher, active);</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line">gs_watcher_set_enabled (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;enabled != enabled)</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> gboolean is_active = gs_watcher_get_active (watcher);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> watcher-&gt;priv-&gt;enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='comment'>/* if we are disabling the watcher and we are</span></td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='comment'>active shut it down */</span></td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>if</span> (! enabled &amp;&amp; is_active)</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> _gs_watcher_set_active_internal (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">gs_watcher_get_enabled (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> gboolean enabled;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> enabled = watcher-&gt;priv-&gt;enabled;</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> <span class='keyword'>return</span> enabled;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line">on_idle_timeout (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> res = _gs_watcher_set_session_idle (watcher, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='comment'>/* try again if we failed i guess */</span></td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> <span class='keyword'>return</span> !res;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line">set_status (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> guint status)</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> gboolean is_idle;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"GSWatcher: not active, ignoring status changes"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 358, "GSWatcher: not active, ignoring status changes"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> is_idle = (status == 3);</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (!is_idle &amp;&amp; !watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> <span class='comment'>/* no change in idleness */</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='keyword'>if</span> (is_idle)</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, is_idle);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='comment'>/* queue an activation */</span></td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> watcher-&gt;priv-&gt;idle_id = g_timeout_add (watcher-&gt;priv-&gt;delta_notice_timeout,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> (GSourceFunc)on_idle_timeout,</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* cancel notice too */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> _gs_watcher_set_session_idle (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line">on_presence_status_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> guint status,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line">on_presence_status_text_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line">connect_presence_watcher (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> DBusGConnection *bus;</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> bus = dbus_g_bus_get (DBUS_BUS_SESSION, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>if</span> (bus == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_warning (<span class='string_literal'>"Unable to get session bus: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> watcher-&gt;priv-&gt;presence_proxy = dbus_g_proxy_new_for_name_owner (bus,</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager"</span>,</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> DBusGProxy *proxy;</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='macro'>G_TYPE_UINT<span class='macro_popup'>((GType) ((7) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_changed)<span class='macro_popup'>((GCallback) (on_presence_status_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_text_changed)<span class='macro_popup'>((GCallback) (on_presence_status_text_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> proxy = dbus_g_proxy_new_from_proxy (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='string_literal'>"org.freedesktop.DBus.Properties"</span>,</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>);</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>if</span> (proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> guint status;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text;</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> GValue value = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> status = 0;</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> status_text = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status"</span>,</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> status = g_value_get_uint (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> g_value_unset (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status-text"</span>,</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status text: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> status_text = g_value_get_string (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_warning (<span class='string_literal'>"Failed to get session presence proxy: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line">gs_watcher_init (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> watcher-&gt;priv = gs_watcher_get_instance_private (watcher);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> watcher-&gt;priv-&gt;enabled = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> connect_presence_watcher (watcher);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='comment'>/* time before idle signal to send notice signal */</span></td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> watcher-&gt;priv-&gt;delta_notice_timeout = 10000;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> add_watchdog_timer (watcher, 600000);</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line">gs_watcher_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WATCHER (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> watcher = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='macro'>g_return_if_fail (watcher-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> remove_watchdog_timer (watcher);</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> g_object_unref (watcher-&gt;priv-&gt;presence_proxy);</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_watcher_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_watcher_parent_class)), (((GType) ((20) &lt;&lt; (2))<br>))))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"><span class='comment'>/* Figuring out what the appropriate XSetScreenSaver() parameters are</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>(one wouldn't expect this to be rocket science.)</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line">disable_builtin_screensaver (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> gboolean unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> <span class='keyword'>int</span> current_server_timeout, current_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> <span class='keyword'>int</span> current_prefer_blank, current_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> <span class='keyword'>int</span> desired_server_timeout, desired_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='keyword'>int</span> desired_prefer_blank, desired_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> XGetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> &amp;current_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> &amp;current_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> &amp;current_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> &amp;current_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> desired_server_timeout = current_server_timeout;</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> desired_server_interval = current_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> desired_prefer_blank = current_prefer_blank;</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> desired_allow_exp = <span class="mrange">current_allow_exp</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex">Value stored to 'desired_allow_exp' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> desired_server_interval = 0;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='comment'>/* I suspect (but am not sure) that DontAllowExposures might have</span></td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>something to do with powering off the monitor as well, at least</span></td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='comment'>on some systems that don't support XDPMS? Who know... */</span></td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> desired_allow_exp = <span class='macro'>AllowExposures<span class='macro_popup'>1</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* When we're not using an extension, set the server-side timeout to 0,</span></td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='comment'>so that the server never gets involved with screen blanking, and we</span></td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>do it all ourselves. (However, when we *are* using an extension,</span></td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>we tell the server when to notify us, and rather than blanking the</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>screen, the server will send us an X event telling us to blank.)</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> desired_server_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (desired_server_timeout != current_server_timeout</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> || desired_server_interval != current_server_interval</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> || desired_prefer_blank != current_prefer_blank</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> || desired_allow_exp != current_allow_exp)</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"disabling server builtin screensaver:"<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> <span class='string_literal'><span class='macro'>" (xset s %d %d; xset s %s; xset s %s)"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='macro'>desired_server_timeout,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> <span class='macro'>desired_server_interval,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> <span class='macro'>(desired_prefer_blank ? <span class='string_literal'>"blank"</span> : <span class='string_literal'>"noblank"</span>),<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='macro'>(desired_allow_exp ? <span class='string_literal'>"expose"</span> : <span class='string_literal'>"noexpose"</span>))<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> XSetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> desired_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> desired_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> desired_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> desired_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> XSync (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='keyword'>if</span> (unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* Turn off the server builtin saver if it is now running. */</span></td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> XForceScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>ScreenSaverReset<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"><span class='comment'>/* This timer goes off every few minutes, whether the user is idle or not,</span></td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='comment'>to try and clean up anything that has gone wrong.</span></td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='comment'>It calls disable_builtin_screensaver() so that if xset has been used,</span></td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='comment'>or some other program (like xlock) has messed with the XSetScreenSaver()</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='comment'>settings, they will be set back to sensible values (if a server extension</span></td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='comment'>is in use, messing with xlock can cause the screensaver to never get a wakeup</span></td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> <span class='comment'>event, and could cause monitor power-saving to occur, and all manner of</span></td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> <span class='comment'>heinousness.)</span></td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line">watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> disable_builtin_screensaver (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line">GSWatcher *</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">gs_watcher_new (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> watcher = g_object_new (<span class='macro'>GS_TYPE_WATCHER<span class='macro_popup'>(gs_watcher_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WATCHER (watcher)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2dd8bc.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2dd8bc.html
new file mode 100644
index 0000000..10d4f2b
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-2dd8bc.html
@@ -0,0 +1,1355 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-watcher-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'desired_server_timeout' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-watcher-x11.c -->
+
+<!-- FILENAME gs-watcher-x11.c -->
+
+<!-- FUNCTIONNAME disable_builtin_screensaver -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 2dd8bcbf8aa81770b44f11c719e8f411 -->
+
+<!-- BUGLINE 596 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-watcher-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 596, column 2</a><br />Value stored to 'desired_server_timeout' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-watcher-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-watcher-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"596": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2008 Red Hat, Inc.</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;time.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-watcher.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_watcher_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean watchdog_timer (GSWatcher *watcher);</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>struct</span> GSWatcherPrivate</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>/* settings */</span></td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> guint enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> guint delta_notice_timeout;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='comment'>/* state */</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> guint active : 1;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> guint idle : 1;</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint idle_notice : 1;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> guint idle_id;</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> DBusGProxy *presence_proxy;</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> IDLE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> IDLE_NOTICE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWatcher, gs_watcher, G_TYPE_OBJECT)<span class='macro_popup'>static void gs_watcher_init (GSWatcher *self); static void gs_watcher_class_init<br> (GSWatcherClass *klass); static GType gs_watcher_get_type_once<br> (void); static gpointer gs_watcher_parent_class = ((void*)0)<br>; static gint GSWatcher_private_offset; static void gs_watcher_class_intern_init<br> (gpointer klass) { gs_watcher_parent_class = g_type_class_peek_parent<br> (klass); if (GSWatcher_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWatcher_private_offset); gs_watcher_class_init<br> ((GSWatcherClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_watcher_get_instance_private (GSWatcher *<br>self) { return (((gpointer) ((guint8*) (self) + (glong) (GSWatcher_private_offset<br>)))); } GType gs_watcher_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_watcher_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_watcher_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> (((GType) ((20) &lt;&lt; (2))), g_intern_static_string ("GSWatcher"<br>), sizeof (GSWatcherClass), (GClassInitFunc)(void (*)(void)) gs_watcher_class_intern_init<br>, sizeof (GSWatcher), (GInstanceInitFunc)(void (*)(void)) gs_watcher_init<br>, (GTypeFlags) 0); { {{ GSWatcher_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWatcherPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line">remove_watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">add_watchdog_timer (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">gs_watcher_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 115, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">set_status_text (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *text)</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> watcher-&gt;priv-&gt;status_message = g_strdup (text);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (watcher)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"status-message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line">gs_watcher_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> set_status_text (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 146, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line">gs_watcher_class_init (GSWatcherClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> object_class-&gt;finalize = gs_watcher_finalize;</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> object_class-&gt;get_property = gs_watcher_get_property;</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> object_class-&gt;set_property = gs_watcher_set_property;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> signals [IDLE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> signals [IDLE_NOTICE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-notice-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_notice_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_notice_changed<br>))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line">_gs_watcher_set_session_idle_notice (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> gboolean in_effect)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>if</span> (in_effect != watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> g_signal_emit (watcher, signals [IDLE_NOTICE_CHANGED], 0, in_effect, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle notice state: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 204, "Changing idle notice state: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = (in_effect != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle notice signal not handled: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 210, "Idle notice signal not handled: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line">_gs_watcher_set_session_idle (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean is_idle)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='keyword'>if</span> (is_idle != watcher-&gt;priv-&gt;idle)</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> g_signal_emit (watcher, signals [IDLE_CHANGED], 0, is_idle, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle state: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 231, "Changing idle state: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> watcher-&gt;priv-&gt;idle = (is_idle != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle changed signal not handled: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 237, "Idle changed signal not handled: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line">gs_watcher_get_active (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> gboolean active;</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> active = watcher-&gt;priv-&gt;active;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> <span class='keyword'>return</span> active;</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line">_gs_watcher_reset_state (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> watcher-&gt;priv-&gt;idle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line">_gs_watcher_set_active_internal (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (active != watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='comment'>/* reset state */</span></td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> _gs_watcher_reset_state (watcher);</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> watcher-&gt;priv-&gt;active = (active != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line">gs_watcher_set_active (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"turning watcher: %s"</span>, active ? <span class='string_literal'>"ON"</span> : <span class='string_literal'>"OFF"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 284, "turning watcher: %s"<br>, active ? "ON" : "OFF")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;active == active)</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is already %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='macro'>active ? <span class='string_literal'>"active"</span> : <span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;enabled)</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is disabled, cannot activate"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 295, "Idle detection is disabled, cannot activate"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> _gs_watcher_set_active_internal (watcher, active);</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line">gs_watcher_set_enabled (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;enabled != enabled)</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> gboolean is_active = gs_watcher_get_active (watcher);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> watcher-&gt;priv-&gt;enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='comment'>/* if we are disabling the watcher and we are</span></td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='comment'>active shut it down */</span></td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>if</span> (! enabled &amp;&amp; is_active)</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> _gs_watcher_set_active_internal (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">gs_watcher_get_enabled (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> gboolean enabled;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> enabled = watcher-&gt;priv-&gt;enabled;</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> <span class='keyword'>return</span> enabled;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line">on_idle_timeout (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> res = _gs_watcher_set_session_idle (watcher, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='comment'>/* try again if we failed i guess */</span></td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> <span class='keyword'>return</span> !res;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line">set_status (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> guint status)</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> gboolean is_idle;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"GSWatcher: not active, ignoring status changes"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 358, "GSWatcher: not active, ignoring status changes"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> is_idle = (status == 3);</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (!is_idle &amp;&amp; !watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> <span class='comment'>/* no change in idleness */</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='keyword'>if</span> (is_idle)</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, is_idle);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='comment'>/* queue an activation */</span></td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> watcher-&gt;priv-&gt;idle_id = g_timeout_add (watcher-&gt;priv-&gt;delta_notice_timeout,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> (GSourceFunc)on_idle_timeout,</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* cancel notice too */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> _gs_watcher_set_session_idle (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line">on_presence_status_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> guint status,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line">on_presence_status_text_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line">connect_presence_watcher (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> DBusGConnection *bus;</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> bus = dbus_g_bus_get (DBUS_BUS_SESSION, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>if</span> (bus == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_warning (<span class='string_literal'>"Unable to get session bus: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> watcher-&gt;priv-&gt;presence_proxy = dbus_g_proxy_new_for_name_owner (bus,</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager"</span>,</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> DBusGProxy *proxy;</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='macro'>G_TYPE_UINT<span class='macro_popup'>((GType) ((7) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_changed)<span class='macro_popup'>((GCallback) (on_presence_status_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_text_changed)<span class='macro_popup'>((GCallback) (on_presence_status_text_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> proxy = dbus_g_proxy_new_from_proxy (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='string_literal'>"org.freedesktop.DBus.Properties"</span>,</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>);</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>if</span> (proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> guint status;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text;</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> GValue value = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> status = 0;</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> status_text = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status"</span>,</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> status = g_value_get_uint (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> g_value_unset (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status-text"</span>,</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status text: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> status_text = g_value_get_string (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_warning (<span class='string_literal'>"Failed to get session presence proxy: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line">gs_watcher_init (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> watcher-&gt;priv = gs_watcher_get_instance_private (watcher);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> watcher-&gt;priv-&gt;enabled = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> connect_presence_watcher (watcher);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='comment'>/* time before idle signal to send notice signal */</span></td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> watcher-&gt;priv-&gt;delta_notice_timeout = 10000;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> add_watchdog_timer (watcher, 600000);</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line">gs_watcher_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WATCHER (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> watcher = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='macro'>g_return_if_fail (watcher-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> remove_watchdog_timer (watcher);</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> g_object_unref (watcher-&gt;priv-&gt;presence_proxy);</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_watcher_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_watcher_parent_class)), (((GType) ((20) &lt;&lt; (2))<br>))))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"><span class='comment'>/* Figuring out what the appropriate XSetScreenSaver() parameters are</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>(one wouldn't expect this to be rocket science.)</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line">disable_builtin_screensaver (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> gboolean unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> <span class='keyword'>int</span> current_server_timeout, current_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> <span class='keyword'>int</span> current_prefer_blank, current_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> <span class='keyword'>int</span> desired_server_timeout, desired_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='keyword'>int</span> desired_prefer_blank, desired_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> XGetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> &amp;current_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> &amp;current_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> &amp;current_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> &amp;current_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> desired_server_timeout = <span class="mrange">current_server_timeout</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex">Value stored to 'desired_server_timeout' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> desired_server_interval = current_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> desired_prefer_blank = current_prefer_blank;</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> desired_allow_exp = current_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> desired_server_interval = 0;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='comment'>/* I suspect (but am not sure) that DontAllowExposures might have</span></td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>something to do with powering off the monitor as well, at least</span></td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='comment'>on some systems that don't support XDPMS? Who know... */</span></td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> desired_allow_exp = <span class='macro'>AllowExposures<span class='macro_popup'>1</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* When we're not using an extension, set the server-side timeout to 0,</span></td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='comment'>so that the server never gets involved with screen blanking, and we</span></td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>do it all ourselves. (However, when we *are* using an extension,</span></td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>we tell the server when to notify us, and rather than blanking the</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>screen, the server will send us an X event telling us to blank.)</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> desired_server_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (desired_server_timeout != current_server_timeout</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> || desired_server_interval != current_server_interval</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> || desired_prefer_blank != current_prefer_blank</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> || desired_allow_exp != current_allow_exp)</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"disabling server builtin screensaver:"<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> <span class='string_literal'><span class='macro'>" (xset s %d %d; xset s %s; xset s %s)"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='macro'>desired_server_timeout,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> <span class='macro'>desired_server_interval,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> <span class='macro'>(desired_prefer_blank ? <span class='string_literal'>"blank"</span> : <span class='string_literal'>"noblank"</span>),<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='macro'>(desired_allow_exp ? <span class='string_literal'>"expose"</span> : <span class='string_literal'>"noexpose"</span>))<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> XSetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> desired_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> desired_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> desired_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> desired_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> XSync (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='keyword'>if</span> (unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* Turn off the server builtin saver if it is now running. */</span></td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> XForceScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>ScreenSaverReset<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"><span class='comment'>/* This timer goes off every few minutes, whether the user is idle or not,</span></td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='comment'>to try and clean up anything that has gone wrong.</span></td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='comment'>It calls disable_builtin_screensaver() so that if xset has been used,</span></td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='comment'>or some other program (like xlock) has messed with the XSetScreenSaver()</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='comment'>settings, they will be set back to sensible values (if a server extension</span></td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='comment'>is in use, messing with xlock can cause the screensaver to never get a wakeup</span></td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> <span class='comment'>event, and could cause monitor power-saving to occur, and all manner of</span></td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> <span class='comment'>heinousness.)</span></td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line">watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> disable_builtin_screensaver (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line">GSWatcher *</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">gs_watcher_new (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> watcher = g_object_new (<span class='macro'>GS_TYPE_WATCHER<span class='macro_popup'>(gs_watcher_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WATCHER (watcher)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-489c44.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-489c44.html
new file mode 100644
index 0000000..e252395
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-489c44.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcat' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 489c44872faeed646204d8d5ae5691d6 -->
+
+<!-- BUGLINE 55 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 55, column 3</a><br />Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"55": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> <span class="mrange">strcat</span> (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex; max-width:52em">Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-4b9cac.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-4b9cac.html
new file mode 100644
index 0000000..9022c79
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-4b9cac.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcat' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 4b9cac630a89842c899a693d0b8af11e -->
+
+<!-- BUGLINE 118 -->
+
+<!-- BUGCOLUMN 4 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 118, column 4</a><br />Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"118": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> strcat (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class="mrange">strcat</span> (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:25ex; max-width:52em">Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-534ad8.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-534ad8.html
new file mode 100644
index 0000000..e290a6e
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-534ad8.html
@@ -0,0 +1,1490 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-auth-pam.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'status' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-auth-pam.c -->
+
+<!-- FILENAME gs-auth-pam.c -->
+
+<!-- FUNCTIONNAME create_pam_handle -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 534ad83cd81a8870d030e3f321e819c9 -->
+
+<!-- BUGLINE 380 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-auth-pam.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 380, column 2</a><br />Value stored to 'status' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-auth-pam.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-auth-pam.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"380": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2006 Ray Strode &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2003 Bill Nottingham &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* Copyright (c) 1993-2003 Jamie Zawinski &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_UNISTD_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'># include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include &lt;pwd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include &lt;grp.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include &lt;security/pam_appl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include &lt;signal.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='directive'>#include &lt;glib/gstdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='directive'>#include "gs-auth.h"</span></td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='directive'>#include "gs-auth-pam.h"</span></td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"><span class='comment'>/* Some time between Red Hat 4.2 and 7.0, the words were transposed</span></td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class='comment'>in the various PAM_x_CRED macro names. Yay!</span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"><span class='directive'>#ifndef <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'># define <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span> PAM_CRED_REFRESH</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"><span class='directive'>#ifdef HAVE_PAM_FAIL_DELAY</span></td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='comment'>/* We handle delays ourself.*/</span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='comment'>/* Don't set this to 0 (Linux bug workaround.) */</span></td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> pam_fail_delay ((pamh), 1)</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"><span class='directive'>#else /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> /* */</span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"><span class='directive'>#endif /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"><span class='comment'>/* On SunOS 5.6, and on Linux with PAM 0.64, pam_strerror() takes two args.</span></td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='comment'>On some other Linux systems with some other version of PAM (e.g.,</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='comment'>whichever Debian release comes with a 2.2.5 kernel) it takes one arg.</span></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='comment'>I can't tell which is more "recent" or "correct" behavior, so configure</span></td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>figures out which is in use for us. Shoot me!</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"><span class='directive'>#ifdef <span class='macro'>PAM_STRERROR_TWO_ARGS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((pamh), (status))</span></td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='directive'>#else /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((status))</span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='directive'>#endif /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> gboolean verbose_enabled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"><span class='keyword'>static</span> pam_handle_t *pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"><span class='keyword'>static</span> gboolean did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"><span class='keyword'>struct</span> pam_closure</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *username;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> GSAuthMessageFunc cb_func;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> gpointer cb_data;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='keyword'>int</span> signal_fd;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> <span class='keyword'>int</span> result;</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>struct</span> pam_closure *closure;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>char</span> **resp;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gboolean should_interrupt_stack;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">} GsAuthMessageHandlerData;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"><span class='keyword'>static</span> GCond message_handled_condition;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"><span class='keyword'>static</span> GMutex message_handler_mutex;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line">GQuark</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line">gs_auth_error_quark (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='keyword'>static</span> GQuark quark = 0;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>if</span> (! quark)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> quark = g_quark_from_static_string (<span class='string_literal'>"gs_auth_error"</span>);</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>return</span> quark;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">gs_auth_set_verbose (gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> verbose_enabled = enabled;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">gs_auth_get_verbose (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>return</span> verbose_enabled;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">auth_message_handler (GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> <span class='keyword'>char</span> **response,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> *response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (style)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_ON:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_OFF:</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>if</span> (msg != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> &amp;&amp; g_str_has_prefix (msg, <span class='macro'>_(<span class='string_literal'>"Password:"</span>)<span class='macro_popup'>gettext ("Password:")</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> did_we_ask_for_password = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_ERROR_MSG:</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_TEXT_INFO:</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> <span class='macro'>g_assert_not_reached ()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line">gs_auth_queued_message_handler (gpointer user_data)</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> GsAuthMessageHandlerData *data = user_data;</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_message (<span class='string_literal'>"Waiting for lock"</span>);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> g_message (<span class='string_literal'>"Waiting for response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> res = data-&gt;closure-&gt;cb_func (data-&gt;style,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> data-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> data-&gt;resp,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> data-&gt;closure-&gt;cb_data);</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> data-&gt;should_interrupt_stack = res == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> g_cond_signal (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> g_message (<span class='string_literal'>"Got response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line">gs_auth_run_message_handler (<span class='keyword'>struct</span> pam_closure *c,</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='keyword'>char</span> **resp)</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> GsAuthMessageHandlerData data;</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> data.closure = c;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> data.style = style;</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> data.msg = msg;</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> data.resp = resp;</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> data.should_interrupt_stack = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='comment'>/* Queue the callback in the gui (the main) thread</span></td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> g_idle_add (gs_auth_queued_message_handler, &amp;data);</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> g_message (<span class='string_literal'>"Waiting for respose to message style %d: '%s'"</span>, style, msg);</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> <span class='comment'>/* Wait for the response</span></td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> g_cond_wait (&amp;message_handled_condition,</td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> &amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> g_message (<span class='string_literal'>"Got respose to message style %d: interrupt:%d"</span>, style, data.should_interrupt_stack);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> <span class='keyword'>return</span> data.should_interrupt_stack == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line">pam_conversation (<span class='keyword'>int</span> nmsgs,</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>struct</span> pam_message **msg,</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>struct</span> pam_response **resp,</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> <span class='keyword'>void</span> *closure)</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> <span class='keyword'>int</span> replies = 0;</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>struct</span> pam_response *reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>struct</span> pam_closure *c = (<span class='keyword'>struct</span> pam_closure *) closure;</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> <span class='keyword'>int</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> reply = (<span class='keyword'>struct</span> pam_response *) calloc (nmsgs, <span class='keyword'>sizeof</span> (*reply));</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='keyword'>if</span> (reply == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> res = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> ret = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='keyword'>for</span> (replies = 0; replies &lt; nmsgs &amp;&amp; ret == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>; replies++)</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> <span class='keyword'>char</span> *utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> style = pam_style_to_gs_style (msg [replies]-&gt;msg_style);</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> utf8_msg = g_locale_to_utf8 (msg [replies]-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> <span class='comment'>/* if we couldn't convert text from locale then</span></td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='comment'>* assume utf-8 and hope for the best */</span></td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> <span class='keyword'>if</span> (utf8_msg == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>char</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>char</span> *q;</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> utf8_msg = g_strdup (msg [replies]-&gt;msg);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> p = utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>while</span> (*p != '\0' &amp;&amp; !g_utf8_validate ((<span class='keyword'>const</span> <span class='keyword'>char</span> *)p, -1, (<span class='keyword'>const</span> <span class='keyword'>char</span> **)&amp;q))</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> *q = '?';</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> p = q + 1;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* handle message locally first */</span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> auth_message_handler (style,</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> &amp;reply [replies].resp,</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> <span class='keyword'>if</span> (c-&gt;cb_func != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_message (<span class='string_literal'>"Handling message style %d: '%s'"</span>, style, utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='comment'>/* blocks until the gui responds</span></td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> res = gs_auth_run_message_handler (c,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> style,</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> &amp;reply [replies].resp);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> g_message (<span class='string_literal'>"Msg handler returned %d"</span>, res);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='comment'>/* If the handler returns FALSE - interrupt the PAM stack */</span></td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> reply [replies].resp_retcode = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt;= replies; i++)</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> free (reply [i].resp);</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> free (reply);</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> ret = <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> g_free (utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> *resp = reply;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line">close_pam_handle (<span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> status2 = pam_end (pam_handle, status);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> g_message (<span class='string_literal'>" pam_end (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> (status2 == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='string_literal'>"Success"</span> : <span class='string_literal'>"Failure"</span>));</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line">create_pam_handle (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>struct</span> pam_conv *conv,</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> <span class='keyword'>int</span> *status_code)</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *service = <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>char</span> *disp;</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> g_warning (<span class='string_literal'>"create_pam_handle: Stale pam handle around, cleaning up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> close_pam_handle (<span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> <span class='comment'>/* init things */</span></td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> status = <span class="mrange">-1</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex">Value stored to 'status' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> disp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* Initialize a PAM session for the user */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> ((status = pam_start (service, username, conv, &amp;pam_handle)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Unable to establish service %s: %s\n"</span>)<span class='macro_popup'>gettext ("Unable to establish service %s: %s\n")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>PAM_STRERROR (NULL, status)<span class='macro_popup'>pam_strerror((((void*)0)), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> g_message (<span class='string_literal'>"pam_start (\"%s\", \"%s\", ...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> username,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> disp = g_strdup (display);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> <span class='keyword'>if</span> (disp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> disp = g_strdup (<span class='string_literal'>":0.0"</span>);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> <span class='keyword'>if</span> ((status = pam_set_item (pam_handle, <span class='macro'>PAM_TTY<span class='macro_popup'>3</span></span>, disp)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Can't set PAM_TTY=%s"</span>)<span class='macro_popup'>gettext ("Can't set PAM_TTY=%s")</span></span>, display);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> g_cond_init (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> g_mutex_init (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free (disp);</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line">set_pam_error (GError **error,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (status == <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span> || status == <span class='macro'>PAM_USER_UNKNOWN<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> <span class='keyword'>if</span> (did_we_ask_for_password)</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Incorrect password."</span>)<span class='macro_popup'>gettext ("Incorrect password.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Authentication failed."</span>)<span class='macro_popup'>gettext ("Authentication failed.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> GS_AUTH_ERROR_AUTH_ERROR,</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> msg);</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> g_free (msg);</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"Not permitted to gain access at this time."</span>)<span class='macro_popup'>gettext ("Not permitted to gain access at this time.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"No longer permitted to access the system."</span>)<span class='macro_popup'>gettext ("No longer permitted to access the system.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line">gs_auth_thread_func (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> <span class='keyword'>int</span> auth_operation_fd;</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> <span class='keyword'>static</span> <span class='keyword'>const</span> <span class='keyword'>int</span> flags = 0;</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='keyword'>struct</span> timespec timeout;</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> sigset_t set;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>void</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> auth_operation_fd = <span class='macro'>GPOINTER_TO_INT (data)<span class='macro_popup'>((gint) (glong) (data))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> timeout.tv_sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> timeout.tv_nsec = 1;</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> set = block_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> status = pam_authenticate (pam_handle, flags);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> sigtimedwait (&amp;set, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;timeout);</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> unblock_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_message (<span class='string_literal'>" pam_authenticate (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>if</span> ((status = pam_get_item (pam_handle, <span class='macro'>PAM_USER<span class='macro_popup'>2</span></span>, &amp;p)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='comment'>/* is not really an auth problem, but it will</span></td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> <span class='comment'>pretty much look as such, it shouldn't really</span></td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='comment'>happen */</span></td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='comment'>/* We don't actually care if the account modules fail or succeed,</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='comment'>* but we need to run them anyway because certain pam modules</span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='comment'>* depend on side effects of the account modules getting run.</span></td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> status2 = pam_acct_mgmt (pam_handle, 0);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> g_message (<span class='string_literal'>"pam_acct_mgmt (...) ==&gt; %d (%s)\n"</span>,</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> <span class='comment'>/* FIXME: should we handle these? */</span></td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>switch</span> (status2)</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_NEW_AUTHTOK_REQD<span class='macro_popup'>12</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_AUTHINFO_UNAVAIL<span class='macro_popup'>9</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='keyword'>default</span> :</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='comment'>/* Each time we successfully authenticate, refresh credentials,</span></td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='comment'>for Kerberos/AFS/DCE/etc. If this fails, just ignore that</span></td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>failure and blunder along; it shouldn't matter.</span></td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> <span class='comment'>Note: this used to be PAM_REFRESH_CRED instead of</span></td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='comment'>PAM_REINITIALIZE_CRED, but Jason Heiss &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>says that the Linux PAM library ignores that one, and only refreshes</span></td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>credentials when using PAM_REINITIALIZE_CRED.</span></td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> status2 = pam_setcred (pam_handle, <span class='macro'>PAM_REINITIALIZE_CRED<span class='macro_popup'>0x0008U</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> g_message (<span class='string_literal'>" pam_setcred (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> <span class='comment'>/* we're done, close the fd and wake up the main</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>* loop</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> close (auth_operation_fd);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GINT_TO_POINTER (status)<span class='macro_popup'>((gpointer) (glong) (status))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line">gs_auth_loop_quit (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> gboolean *thread_done)</td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> *thread_done = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> gtk_main_quit ();</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">gs_auth_pam_verify_user (pam_handle_t *handle,</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>int</span> *status)</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> GThread *auth_thread;</td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> guint watch_id;</td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>int</span> auth_operation_fds[2];</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='keyword'>int</span> auth_status;</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> gboolean thread_done;</td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> channel = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> auth_status = <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>/* This pipe gives us a set of fds we can hook into</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>* the event loop to be notified when our helper thread</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>* is ready to be reaped.</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='keyword'>if</span> (pipe (auth_operation_fds) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[0], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[1], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> channel = g_io_channel_unix_new (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='comment'>/* we use a recursive main loop to process ui events</span></td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> <span class='comment'>* while we wait on a thread to handle the blocking parts</span></td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='comment'>* of pam authentication.</span></td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> thread_done = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> watch_id = g_io_add_watch (channel, G_IO_ERR | G_IO_HUP,</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> (GIOFunc) gs_auth_loop_quit, &amp;thread_done);</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> auth_thread = g_thread_new (<span class='string_literal'>"auththread"</span>,</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> gs_auth_thread_func,</td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='macro'>GINT_TO_POINTER (auth_operation_fds[1])<span class='macro_popup'>((gpointer) (glong) (auth_operation_fds[1]))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='keyword'>if</span> (auth_thread == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> gtk_main ();</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>/* if the event loop was quit before the thread is done then we can't</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> <span class='comment'>* reap the thread without blocking on it finishing. The</span></td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='comment'>* thread may not ever finish though if the pam module is blocking.</span></td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> <span class='comment'>* The only time the event loop is going to stop when the thread isn't</span></td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='comment'>* done, however, is if the dialog quits early (from, e.g., "cancel"),</span></td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> <span class='comment'>* so we can just exit. An alternative option would be to switch to</span></td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>* using pthreads directly and calling pthread_cancel.</span></td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (!thread_done)</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> raise (<span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> auth_status = <span class='macro'>GPOINTER_TO_INT (g_thread_join (auth_thread))<span class='macro_popup'>((gint) (glong) (g_thread_join (auth_thread)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='keyword'>if</span> (watch_id != 0 &amp;&amp; !thread_done)</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> g_source_remove (watch_id);</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (channel != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>if</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> *status = auth_status;</td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> <span class='keyword'>return</span> auth_status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line">gs_auth_verify_user (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> GSAuthMessageFunc func,</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> gpointer data,</td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>int</span> status = -1;</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='keyword'>struct</span> pam_conv conv;</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='keyword'>struct</span> pam_closure c;</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> <span class='keyword'>struct</span> passwd *pwent;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> pwent = getpwnam (username);</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> <span class='keyword'>if</span> (pwent == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> c.username = username;</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> c.cb_func = func;</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> c.cb_data = data;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> conv.conv = &amp;pam_conversation;</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> conv.appdata_ptr = (<span class='keyword'>void</span> *) &amp;c;</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> <span class='comment'>/* Initialize PAM. */</span></td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> create_pam_handle (username, display, &amp;conv, &amp;status);</td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> pam_set_item (pam_handle, <span class='macro'>PAM_USER_PROMPT<span class='macro_popup'>9</span></span>, <span class='macro'>_(<span class='string_literal'>"Username:"</span>)<span class='macro_popup'>gettext ("Username:")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> <span class='macro'>PAM_NO_DELAY(pam_handle)<span class='macro_popup'>pam_fail_delay ((pam_handle), 1)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! gs_auth_pam_verify_user (pam_handle, &amp;status))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> set_pam_error (error, status);</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> close_pam_handle (status);</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> <span class='keyword'>return</span> (status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span> : <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line">gs_auth_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line">gs_auth_priv_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> <span class='comment'>/* We have nothing to do at init-time.</span></td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> <span class='comment'>However, we might as well do some error checking.</span></td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> <span class='comment'>If "/etc/pam.d" exists and is a directory, but "/etc/pam.d/xlock"</span></td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"> <span class='comment'>does not exist, warn that PAM probably isn't going to work.</span></td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> <span class='comment'>This is a priv-init instead of a non-priv init in case the directory</span></td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> <span class='comment'>is unreadable or something (don't know if that actually happens.)</span></td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> dir [] = <span class='string_literal'>"/etc/pam.d"</span>;</td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file [] = <span class='string_literal'>"/etc/pam.d/"</span> <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file2 [] = <span class='string_literal'>"/etc/pam.conf"</span>;</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> <span class='keyword'>struct</span> stat st;</td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (dir, &amp;st) == 0 &amp;&amp; st.st_mode &amp; <span class='macro'>S_IFDIR<span class='macro_popup'>0040000</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file, &amp;st) != 0)</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> g_warning (<span class='string_literal'>"%s does not exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> file);</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file2, &amp;st) == 0)</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> FILE *f = <span class='macro'>g_fopen<span class='macro_popup'>fopen</span></span> (file2, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='keyword'>if</span> (f)</td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> gboolean ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> <span class='keyword'>char</span> buf[255];</td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> <span class='keyword'>while</span> (fgets (buf, <span class='keyword'>sizeof</span>(buf), f))</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> <span class='keyword'>if</span> (strstr (buf, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> fclose (f);</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> <span class='keyword'>if</span> (!ok)</td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> g_warning (<span class='string_literal'>"%s does not list the `%s' service.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> file2, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> <span class='comment'>/* else warn about file2 existing but being unreadable? */</span></td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> g_warning (<span class='string_literal'>"Neither %s nor %s exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> file2, file);</td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> <span class='comment'>/* Return true anyway, just in case. */</span></td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-57e5d7.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-57e5d7.html
new file mode 100644
index 0000000..b5c4293
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-57e5d7.html
@@ -0,0 +1,1236 @@
+<!doctype html>
+<html>
+<head>
+<title>mate-screensaver-command.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'reply' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/mate-screensaver-command.c -->
+
+<!-- FILENAME mate-screensaver-command.c -->
+
+<!-- FUNCTIONNAME do_command -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 57e5d7752e7201567832c6188395e69a -->
+
+<!-- BUGLINE 440 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/mate-screensaver-command.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 440, column 3</a><br />Value stored to 'reply' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name mate-screensaver-command.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c mate-screensaver-command.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"440": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;locale.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#define DBUS_API_SUBJECT_TO_CHANGE</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib-lowlevel.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#define <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span> "/org/mate/ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#define <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> gboolean do_quit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='keyword'>static</span> gboolean do_lock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean do_unlock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='keyword'>static</span> gboolean do_cycle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> gboolean do_activate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>static</span> gboolean do_deactivate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean do_version = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> gboolean do_poke = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> gboolean do_inhibit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> gboolean do_query = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>static</span> gboolean do_time = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_reason = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_application = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GOptionEntry entries [] =</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='string_literal'>"exit"</span>, 0, 0, G_OPTION_ARG_NONE, &amp;do_quit,</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Causes the screensaver to exit gracefully"</span>)<span class='macro_popup'>("Causes the screensaver to exit gracefully")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='string_literal'>"query"</span>, 'q', 0, G_OPTION_ARG_NONE, &amp;do_query,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the state of the screensaver"</span>)<span class='macro_popup'>("Query the state of the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='string_literal'>"time"</span>, 't', 0, G_OPTION_ARG_NONE, &amp;do_time,</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the length of time the screensaver has been active"</span>)<span class='macro_popup'>("Query the length of time the screensaver has been active")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='string_literal'>"lock"</span>, 'l', 0, G_OPTION_ARG_NONE, &amp;do_lock,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to lock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to lock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='string_literal'>"unlock"</span>, 'u', 0, G_OPTION_ARG_NONE, &amp;do_unlock,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to unlock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to unlock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='string_literal'>"cycle"</span>, 'c', 0, G_OPTION_ARG_NONE, &amp;do_cycle,</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then switch to another graphics demo"</span>)<span class='macro_popup'>("If the screensaver is active then switch to another graphics demo"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='string_literal'>"activate"</span>, 'a', 0, G_OPTION_ARG_NONE, &amp;do_activate,</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Turn the screensaver on (blank the screen)"</span>)<span class='macro_popup'>("Turn the screensaver on (blank the screen)")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='string_literal'>"deactivate"</span>, 'd', 0, G_OPTION_ARG_NONE, &amp;do_deactivate,</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then deactivate it (un-blank the screen)"</span>)<span class='macro_popup'>("If the screensaver is active then deactivate it (un-blank the screen)"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='string_literal'>"poke"</span>, 'p', 0, G_OPTION_ARG_NONE, &amp;do_poke,</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Poke the running screensaver to simulate user activity"</span>)<span class='macro_popup'>("Poke the running screensaver to simulate user activity")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='string_literal'>"inhibit"</span>, 'i', 0, G_OPTION_ARG_NONE, &amp;do_inhibit,</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Inhibit the screensaver from activating. Command blocks while inhibit is active."</span>)<span class='macro_popup'>("Inhibit the screensaver from activating. Command blocks while inhibit is active."<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='string_literal'>"application-name"</span>, 'n', 0, G_OPTION_ARG_STRING, &amp;inhibit_application,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The calling application that is inhibiting the screensaver"</span>)<span class='macro_popup'>("The calling application that is inhibiting the screensaver"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='string_literal'>"reason"</span>, 'r', 0, G_OPTION_ARG_STRING, &amp;inhibit_reason,</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The reason for inhibiting the screensaver"</span>)<span class='macro_popup'>("The reason for inhibiting the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='string_literal'>"version"</span>, 'V', 0, G_OPTION_ARG_NONE, &amp;do_version,</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Version of this application"</span>)<span class='macro_popup'>("Version of this application")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, 0, 0, G_OPTION_ARG_NONE, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='keyword'>static</span> GMainLoop *loop = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">screensaver_is_running (DBusConnection *connection)</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> gboolean exists;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> exists = dbus_bus_name_has_owner (connection, <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>return</span> exists;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line">screensaver_send_message_inhibit (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *application,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *reason)</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='string_literal'>"Inhibit"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;application);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;reason);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line">screensaver_send_message_bool (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gboolean value)</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_BOOLEAN<span class='macro_popup'>((int) 'b')</span></span>, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line">screensaver_send_message_void (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (! expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (!dbus_connection_send (connection, message, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> g_warning (<span class='string_literal'>"could not send message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> **</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">get_string_from_iter (DBusMessageIter *iter,</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>int</span> *num_elements)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='keyword'>int</span> count;</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>char</span> **buffer;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> *num_elements = 0;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> buffer = (<span class='keyword'>char</span> **)malloc (<span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * 8);</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> buffer[0] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span class='keyword'>while</span> (dbus_message_iter_get_arg_type (iter) == <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *value;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>char</span> *str;</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0 &amp;&amp; count != 0)</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 8));</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> dbus_message_iter_get_basic (iter, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> str = strdup (value);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>if</span> (str == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> buffer[count] = str;</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> dbus_message_iter_next (iter);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0)</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 1));</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> buffer[count] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> *num_elements = count;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='keyword'>return</span> buffer;</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">oom:</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> g_debug (<span class='string_literal'>"%s %d : error allocating memory\n"</span>, <span class='macro'>__FILE__<span class='macro_popup'>"mate-screensaver-command.c"</span></span>, <span class='macro'>__LINE__<span class='macro_popup'>327</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">do_command (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> DBusConnection *connection = data;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='keyword'>if</span> (do_quit)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Quit"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (do_query)</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> DBusMessageIter array;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is %s\n"</span>)<span class='macro_popup'>gettext ("The screensaver is %s\n")</span></span>, v ? <span class='macro'>_(<span class='string_literal'>"active"</span>)<span class='macro_popup'>gettext ("active")</span></span> : <span class='macro'>_(<span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gettext ("inactive")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetInhibitors"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> dbus_message_iter_recurse (&amp;iter, &amp;array);</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='keyword'>if</span> (dbus_message_iter_get_arg_type (&amp;array) == <span class='macro'>DBUS_TYPE_INVALID<span class='macro_popup'>((int) '\0')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not inhibited\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not inhibited\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> <span class='keyword'>char</span> **inhibitors;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> <span class='keyword'>int</span> num;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is being inhibited by:\n"</span>)<span class='macro_popup'>gettext ("The screensaver is being inhibited by:\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> inhibitors = get_string_from_iter (&amp;array, &amp;num);</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num; i++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_print (<span class='string_literal'>"\t%s\n"</span>, inhibitors[i]);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> g_strfreev (inhibitors);</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (do_time)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> dbus_int32_t t;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='keyword'>if</span> (v)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActiveTime"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;t);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver has been active for %d seconds.\n"</span>)<span class='macro_popup'>gettext ("The screensaver has been active for %d seconds.\n")</span></span>, t);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not currently active.\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not currently active.\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (do_lock)</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Lock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='keyword'>if</span> (do_unlock)</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Unlock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='keyword'>if</span> (do_cycle)</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> reply = <span class="mrange">screensaver_send_message_void (connection, <span class='string_literal'>"Cycle"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">Value stored to 'reply' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='keyword'>if</span> (do_poke)</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"SimulateUserActivity"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (do_activate)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='keyword'>if</span> (do_deactivate)</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (do_inhibit)</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> reply = screensaver_send_message_inhibit (connection,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> inhibit_application ? inhibit_application : <span class='string_literal'>"Unknown"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> inhibit_reason ? inhibit_reason : <span class='string_literal'>"Unknown"</span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> g_main_loop_quit (loop);</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> DBusConnection *connection;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> DBusError dbus_error;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> GOptionContext *context;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> g_set_prgname (argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> (setlocale (<span class='macro'>LC_ALL<span class='macro_popup'>6</span></span>, <span class='string_literal'>""</span>) == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_warning (<span class='string_literal'>"Locale not understood by C library, internationalization will not work\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> context = g_option_context_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> retval = g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> g_option_context_free (context);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> <span class='keyword'>if</span> (! retval)</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> g_warning (<span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>if</span> (do_version)</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> g_print (<span class='string_literal'>"%s %s\n"</span>, argv [0], <span class='macro'>VERSION<span class='macro_popup'>"1.26.0"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> dbus_error_init (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> connection = dbus_bus_get (DBUS_BUS_SESSION, &amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> <span class='keyword'>if</span> (! connection)</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> g_message (<span class='string_literal'>"Failed to connect to the D-BUS daemon: %s"</span>, dbus_error.message);</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> dbus_error_free (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> dbus_connection_setup_with_g_main (connection, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>if</span> (! screensaver_is_running (connection))</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_message (<span class='string_literal'>"Screensaver is not running!"</span>);</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> g_idle_add (do_command, connection);</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> loop = g_main_loop_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> g_main_loop_run (loop);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-5a3c1b.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-5a3c1b.html
new file mode 100644
index 0000000..fdaa625
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-5a3c1b.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcat' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 5a3c1b279e09ff20dfa3c2981dd20cc2 -->
+
+<!-- BUGLINE 146 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 146, column 3</a><br />Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"146": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> strcat (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> <span class="mrange">strcat</span> (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex; max-width:52em">Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-68e8c1.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-68e8c1.html
new file mode 100644
index 0000000..3f183ca
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-68e8c1.html
@@ -0,0 +1,1490 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-auth-pam.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'watch_id' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-auth-pam.c -->
+
+<!-- FILENAME gs-auth-pam.c -->
+
+<!-- FUNCTIONNAME gs_auth_pam_verify_user -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 68e8c17e5ae1a107cb2db1a74db99ad9 -->
+
+<!-- BUGLINE 675 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-auth-pam.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 675, column 3</a><br />Value stored to 'watch_id' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-auth-pam.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-auth-pam.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"675": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2006 Ray Strode &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2003 Bill Nottingham &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* Copyright (c) 1993-2003 Jamie Zawinski &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_UNISTD_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'># include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include &lt;pwd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include &lt;grp.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include &lt;security/pam_appl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include &lt;signal.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='directive'>#include &lt;glib/gstdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='directive'>#include "gs-auth.h"</span></td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='directive'>#include "gs-auth-pam.h"</span></td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"><span class='comment'>/* Some time between Red Hat 4.2 and 7.0, the words were transposed</span></td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class='comment'>in the various PAM_x_CRED macro names. Yay!</span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"><span class='directive'>#ifndef <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'># define <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span> PAM_CRED_REFRESH</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"><span class='directive'>#ifdef HAVE_PAM_FAIL_DELAY</span></td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='comment'>/* We handle delays ourself.*/</span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='comment'>/* Don't set this to 0 (Linux bug workaround.) */</span></td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> pam_fail_delay ((pamh), 1)</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"><span class='directive'>#else /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> /* */</span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"><span class='directive'>#endif /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"><span class='comment'>/* On SunOS 5.6, and on Linux with PAM 0.64, pam_strerror() takes two args.</span></td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='comment'>On some other Linux systems with some other version of PAM (e.g.,</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='comment'>whichever Debian release comes with a 2.2.5 kernel) it takes one arg.</span></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='comment'>I can't tell which is more "recent" or "correct" behavior, so configure</span></td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>figures out which is in use for us. Shoot me!</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"><span class='directive'>#ifdef <span class='macro'>PAM_STRERROR_TWO_ARGS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((pamh), (status))</span></td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='directive'>#else /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((status))</span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='directive'>#endif /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> gboolean verbose_enabled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"><span class='keyword'>static</span> pam_handle_t *pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"><span class='keyword'>static</span> gboolean did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"><span class='keyword'>struct</span> pam_closure</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *username;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> GSAuthMessageFunc cb_func;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> gpointer cb_data;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='keyword'>int</span> signal_fd;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> <span class='keyword'>int</span> result;</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>struct</span> pam_closure *closure;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>char</span> **resp;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gboolean should_interrupt_stack;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">} GsAuthMessageHandlerData;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"><span class='keyword'>static</span> GCond message_handled_condition;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"><span class='keyword'>static</span> GMutex message_handler_mutex;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line">GQuark</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line">gs_auth_error_quark (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='keyword'>static</span> GQuark quark = 0;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>if</span> (! quark)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> quark = g_quark_from_static_string (<span class='string_literal'>"gs_auth_error"</span>);</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>return</span> quark;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">gs_auth_set_verbose (gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> verbose_enabled = enabled;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">gs_auth_get_verbose (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>return</span> verbose_enabled;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">auth_message_handler (GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> <span class='keyword'>char</span> **response,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> *response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (style)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_ON:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_OFF:</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>if</span> (msg != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> &amp;&amp; g_str_has_prefix (msg, <span class='macro'>_(<span class='string_literal'>"Password:"</span>)<span class='macro_popup'>gettext ("Password:")</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> did_we_ask_for_password = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_ERROR_MSG:</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_TEXT_INFO:</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> <span class='macro'>g_assert_not_reached ()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line">gs_auth_queued_message_handler (gpointer user_data)</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> GsAuthMessageHandlerData *data = user_data;</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_message (<span class='string_literal'>"Waiting for lock"</span>);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> g_message (<span class='string_literal'>"Waiting for response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> res = data-&gt;closure-&gt;cb_func (data-&gt;style,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> data-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> data-&gt;resp,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> data-&gt;closure-&gt;cb_data);</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> data-&gt;should_interrupt_stack = res == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> g_cond_signal (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> g_message (<span class='string_literal'>"Got response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line">gs_auth_run_message_handler (<span class='keyword'>struct</span> pam_closure *c,</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='keyword'>char</span> **resp)</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> GsAuthMessageHandlerData data;</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> data.closure = c;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> data.style = style;</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> data.msg = msg;</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> data.resp = resp;</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> data.should_interrupt_stack = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='comment'>/* Queue the callback in the gui (the main) thread</span></td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> g_idle_add (gs_auth_queued_message_handler, &amp;data);</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> g_message (<span class='string_literal'>"Waiting for respose to message style %d: '%s'"</span>, style, msg);</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> <span class='comment'>/* Wait for the response</span></td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> g_cond_wait (&amp;message_handled_condition,</td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> &amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> g_message (<span class='string_literal'>"Got respose to message style %d: interrupt:%d"</span>, style, data.should_interrupt_stack);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> <span class='keyword'>return</span> data.should_interrupt_stack == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line">pam_conversation (<span class='keyword'>int</span> nmsgs,</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>struct</span> pam_message **msg,</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>struct</span> pam_response **resp,</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> <span class='keyword'>void</span> *closure)</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> <span class='keyword'>int</span> replies = 0;</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>struct</span> pam_response *reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>struct</span> pam_closure *c = (<span class='keyword'>struct</span> pam_closure *) closure;</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> <span class='keyword'>int</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> reply = (<span class='keyword'>struct</span> pam_response *) calloc (nmsgs, <span class='keyword'>sizeof</span> (*reply));</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='keyword'>if</span> (reply == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> res = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> ret = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='keyword'>for</span> (replies = 0; replies &lt; nmsgs &amp;&amp; ret == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>; replies++)</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> <span class='keyword'>char</span> *utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> style = pam_style_to_gs_style (msg [replies]-&gt;msg_style);</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> utf8_msg = g_locale_to_utf8 (msg [replies]-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> <span class='comment'>/* if we couldn't convert text from locale then</span></td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='comment'>* assume utf-8 and hope for the best */</span></td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> <span class='keyword'>if</span> (utf8_msg == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>char</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>char</span> *q;</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> utf8_msg = g_strdup (msg [replies]-&gt;msg);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> p = utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>while</span> (*p != '\0' &amp;&amp; !g_utf8_validate ((<span class='keyword'>const</span> <span class='keyword'>char</span> *)p, -1, (<span class='keyword'>const</span> <span class='keyword'>char</span> **)&amp;q))</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> *q = '?';</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> p = q + 1;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* handle message locally first */</span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> auth_message_handler (style,</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> &amp;reply [replies].resp,</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> <span class='keyword'>if</span> (c-&gt;cb_func != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_message (<span class='string_literal'>"Handling message style %d: '%s'"</span>, style, utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='comment'>/* blocks until the gui responds</span></td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> res = gs_auth_run_message_handler (c,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> style,</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> &amp;reply [replies].resp);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> g_message (<span class='string_literal'>"Msg handler returned %d"</span>, res);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='comment'>/* If the handler returns FALSE - interrupt the PAM stack */</span></td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> reply [replies].resp_retcode = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt;= replies; i++)</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> free (reply [i].resp);</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> free (reply);</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> ret = <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> g_free (utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> *resp = reply;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line">close_pam_handle (<span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> status2 = pam_end (pam_handle, status);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> g_message (<span class='string_literal'>" pam_end (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> (status2 == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='string_literal'>"Success"</span> : <span class='string_literal'>"Failure"</span>));</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line">create_pam_handle (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>struct</span> pam_conv *conv,</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> <span class='keyword'>int</span> *status_code)</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *service = <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>char</span> *disp;</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> g_warning (<span class='string_literal'>"create_pam_handle: Stale pam handle around, cleaning up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> close_pam_handle (<span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> <span class='comment'>/* init things */</span></td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> status = -1;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> disp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* Initialize a PAM session for the user */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> ((status = pam_start (service, username, conv, &amp;pam_handle)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Unable to establish service %s: %s\n"</span>)<span class='macro_popup'>gettext ("Unable to establish service %s: %s\n")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>PAM_STRERROR (NULL, status)<span class='macro_popup'>pam_strerror((((void*)0)), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> g_message (<span class='string_literal'>"pam_start (\"%s\", \"%s\", ...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> username,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> disp = g_strdup (display);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> <span class='keyword'>if</span> (disp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> disp = g_strdup (<span class='string_literal'>":0.0"</span>);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> <span class='keyword'>if</span> ((status = pam_set_item (pam_handle, <span class='macro'>PAM_TTY<span class='macro_popup'>3</span></span>, disp)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Can't set PAM_TTY=%s"</span>)<span class='macro_popup'>gettext ("Can't set PAM_TTY=%s")</span></span>, display);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> g_cond_init (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> g_mutex_init (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free (disp);</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line">set_pam_error (GError **error,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (status == <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span> || status == <span class='macro'>PAM_USER_UNKNOWN<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> <span class='keyword'>if</span> (did_we_ask_for_password)</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Incorrect password."</span>)<span class='macro_popup'>gettext ("Incorrect password.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Authentication failed."</span>)<span class='macro_popup'>gettext ("Authentication failed.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> GS_AUTH_ERROR_AUTH_ERROR,</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> msg);</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> g_free (msg);</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"Not permitted to gain access at this time."</span>)<span class='macro_popup'>gettext ("Not permitted to gain access at this time.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"No longer permitted to access the system."</span>)<span class='macro_popup'>gettext ("No longer permitted to access the system.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line">gs_auth_thread_func (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> <span class='keyword'>int</span> auth_operation_fd;</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> <span class='keyword'>static</span> <span class='keyword'>const</span> <span class='keyword'>int</span> flags = 0;</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='keyword'>struct</span> timespec timeout;</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> sigset_t set;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>void</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> auth_operation_fd = <span class='macro'>GPOINTER_TO_INT (data)<span class='macro_popup'>((gint) (glong) (data))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> timeout.tv_sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> timeout.tv_nsec = 1;</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> set = block_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> status = pam_authenticate (pam_handle, flags);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> sigtimedwait (&amp;set, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;timeout);</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> unblock_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_message (<span class='string_literal'>" pam_authenticate (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>if</span> ((status = pam_get_item (pam_handle, <span class='macro'>PAM_USER<span class='macro_popup'>2</span></span>, &amp;p)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='comment'>/* is not really an auth problem, but it will</span></td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> <span class='comment'>pretty much look as such, it shouldn't really</span></td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='comment'>happen */</span></td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='comment'>/* We don't actually care if the account modules fail or succeed,</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='comment'>* but we need to run them anyway because certain pam modules</span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='comment'>* depend on side effects of the account modules getting run.</span></td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> status2 = pam_acct_mgmt (pam_handle, 0);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> g_message (<span class='string_literal'>"pam_acct_mgmt (...) ==&gt; %d (%s)\n"</span>,</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> <span class='comment'>/* FIXME: should we handle these? */</span></td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>switch</span> (status2)</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_NEW_AUTHTOK_REQD<span class='macro_popup'>12</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_AUTHINFO_UNAVAIL<span class='macro_popup'>9</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='keyword'>default</span> :</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='comment'>/* Each time we successfully authenticate, refresh credentials,</span></td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='comment'>for Kerberos/AFS/DCE/etc. If this fails, just ignore that</span></td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>failure and blunder along; it shouldn't matter.</span></td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> <span class='comment'>Note: this used to be PAM_REFRESH_CRED instead of</span></td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='comment'>PAM_REINITIALIZE_CRED, but Jason Heiss &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>says that the Linux PAM library ignores that one, and only refreshes</span></td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>credentials when using PAM_REINITIALIZE_CRED.</span></td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> status2 = pam_setcred (pam_handle, <span class='macro'>PAM_REINITIALIZE_CRED<span class='macro_popup'>0x0008U</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> g_message (<span class='string_literal'>" pam_setcred (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> <span class='comment'>/* we're done, close the fd and wake up the main</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>* loop</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> close (auth_operation_fd);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GINT_TO_POINTER (status)<span class='macro_popup'>((gpointer) (glong) (status))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line">gs_auth_loop_quit (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> gboolean *thread_done)</td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> *thread_done = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> gtk_main_quit ();</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">gs_auth_pam_verify_user (pam_handle_t *handle,</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>int</span> *status)</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> GThread *auth_thread;</td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> guint watch_id;</td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>int</span> auth_operation_fds[2];</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='keyword'>int</span> auth_status;</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> gboolean thread_done;</td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> channel = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> auth_status = <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>/* This pipe gives us a set of fds we can hook into</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>* the event loop to be notified when our helper thread</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>* is ready to be reaped.</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='keyword'>if</span> (pipe (auth_operation_fds) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[0], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[1], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> channel = g_io_channel_unix_new (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='comment'>/* we use a recursive main loop to process ui events</span></td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> <span class='comment'>* while we wait on a thread to handle the blocking parts</span></td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='comment'>* of pam authentication.</span></td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> thread_done = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> watch_id = g_io_add_watch (channel, G_IO_ERR | G_IO_HUP,</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> (GIOFunc) gs_auth_loop_quit, &amp;thread_done);</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> auth_thread = g_thread_new (<span class='string_literal'>"auththread"</span>,</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> gs_auth_thread_func,</td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='macro'>GINT_TO_POINTER (auth_operation_fds[1])<span class='macro_popup'>((gpointer) (glong) (auth_operation_fds[1]))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='keyword'>if</span> (auth_thread == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> gtk_main ();</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>/* if the event loop was quit before the thread is done then we can't</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> <span class='comment'>* reap the thread without blocking on it finishing. The</span></td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='comment'>* thread may not ever finish though if the pam module is blocking.</span></td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> <span class='comment'>* The only time the event loop is going to stop when the thread isn't</span></td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='comment'>* done, however, is if the dialog quits early (from, e.g., "cancel"),</span></td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> <span class='comment'>* so we can just exit. An alternative option would be to switch to</span></td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>* using pthreads directly and calling pthread_cancel.</span></td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (!thread_done)</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> raise (<span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> auth_status = <span class='macro'>GPOINTER_TO_INT (g_thread_join (auth_thread))<span class='macro_popup'>((gint) (glong) (g_thread_join (auth_thread)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='keyword'>if</span> (watch_id != 0 &amp;&amp; !thread_done)</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> g_source_remove (watch_id);</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> watch_id = <span class="mrange">0</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">Value stored to 'watch_id' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (channel != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>if</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> *status = auth_status;</td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> <span class='keyword'>return</span> auth_status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line">gs_auth_verify_user (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> GSAuthMessageFunc func,</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> gpointer data,</td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>int</span> status = -1;</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='keyword'>struct</span> pam_conv conv;</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='keyword'>struct</span> pam_closure c;</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> <span class='keyword'>struct</span> passwd *pwent;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> pwent = getpwnam (username);</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> <span class='keyword'>if</span> (pwent == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> c.username = username;</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> c.cb_func = func;</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> c.cb_data = data;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> conv.conv = &amp;pam_conversation;</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> conv.appdata_ptr = (<span class='keyword'>void</span> *) &amp;c;</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> <span class='comment'>/* Initialize PAM. */</span></td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> create_pam_handle (username, display, &amp;conv, &amp;status);</td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> pam_set_item (pam_handle, <span class='macro'>PAM_USER_PROMPT<span class='macro_popup'>9</span></span>, <span class='macro'>_(<span class='string_literal'>"Username:"</span>)<span class='macro_popup'>gettext ("Username:")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> <span class='macro'>PAM_NO_DELAY(pam_handle)<span class='macro_popup'>pam_fail_delay ((pam_handle), 1)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! gs_auth_pam_verify_user (pam_handle, &amp;status))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> set_pam_error (error, status);</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> close_pam_handle (status);</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> <span class='keyword'>return</span> (status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span> : <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line">gs_auth_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line">gs_auth_priv_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> <span class='comment'>/* We have nothing to do at init-time.</span></td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> <span class='comment'>However, we might as well do some error checking.</span></td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> <span class='comment'>If "/etc/pam.d" exists and is a directory, but "/etc/pam.d/xlock"</span></td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"> <span class='comment'>does not exist, warn that PAM probably isn't going to work.</span></td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> <span class='comment'>This is a priv-init instead of a non-priv init in case the directory</span></td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> <span class='comment'>is unreadable or something (don't know if that actually happens.)</span></td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> dir [] = <span class='string_literal'>"/etc/pam.d"</span>;</td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file [] = <span class='string_literal'>"/etc/pam.d/"</span> <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file2 [] = <span class='string_literal'>"/etc/pam.conf"</span>;</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> <span class='keyword'>struct</span> stat st;</td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (dir, &amp;st) == 0 &amp;&amp; st.st_mode &amp; <span class='macro'>S_IFDIR<span class='macro_popup'>0040000</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file, &amp;st) != 0)</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> g_warning (<span class='string_literal'>"%s does not exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> file);</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file2, &amp;st) == 0)</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> FILE *f = <span class='macro'>g_fopen<span class='macro_popup'>fopen</span></span> (file2, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='keyword'>if</span> (f)</td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> gboolean ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> <span class='keyword'>char</span> buf[255];</td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> <span class='keyword'>while</span> (fgets (buf, <span class='keyword'>sizeof</span>(buf), f))</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> <span class='keyword'>if</span> (strstr (buf, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> fclose (f);</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> <span class='keyword'>if</span> (!ok)</td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> g_warning (<span class='string_literal'>"%s does not list the `%s' service.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> file2, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> <span class='comment'>/* else warn about file2 existing but being unreadable? */</span></td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> g_warning (<span class='string_literal'>"Neither %s nor %s exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> file2, file);</td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> <span class='comment'>/* Return true anyway, just in case. */</span></td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-86b9eb.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-86b9eb.html
new file mode 100644
index 0000000..d32a79d
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-86b9eb.html
@@ -0,0 +1,1490 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-auth-pam.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'res' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-auth-pam.c -->
+
+<!-- FILENAME gs-auth-pam.c -->
+
+<!-- FUNCTIONNAME pam_conversation -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 86b9ebddc005a0348dd95a1922cbf297 -->
+
+<!-- BUGLINE 255 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-auth-pam.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 255, column 2</a><br />Value stored to 'res' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-auth-pam.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-auth-pam.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"255": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2006 Ray Strode &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2003 Bill Nottingham &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* Copyright (c) 1993-2003 Jamie Zawinski &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_UNISTD_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'># include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include &lt;pwd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include &lt;grp.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include &lt;security/pam_appl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include &lt;signal.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='directive'>#include &lt;glib/gstdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='directive'>#include "gs-auth.h"</span></td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='directive'>#include "gs-auth-pam.h"</span></td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"><span class='comment'>/* Some time between Red Hat 4.2 and 7.0, the words were transposed</span></td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class='comment'>in the various PAM_x_CRED macro names. Yay!</span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"><span class='directive'>#ifndef <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'># define <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span> PAM_CRED_REFRESH</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"><span class='directive'>#ifdef HAVE_PAM_FAIL_DELAY</span></td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='comment'>/* We handle delays ourself.*/</span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='comment'>/* Don't set this to 0 (Linux bug workaround.) */</span></td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> pam_fail_delay ((pamh), 1)</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"><span class='directive'>#else /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> /* */</span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"><span class='directive'>#endif /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"><span class='comment'>/* On SunOS 5.6, and on Linux with PAM 0.64, pam_strerror() takes two args.</span></td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='comment'>On some other Linux systems with some other version of PAM (e.g.,</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='comment'>whichever Debian release comes with a 2.2.5 kernel) it takes one arg.</span></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='comment'>I can't tell which is more "recent" or "correct" behavior, so configure</span></td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>figures out which is in use for us. Shoot me!</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"><span class='directive'>#ifdef <span class='macro'>PAM_STRERROR_TWO_ARGS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((pamh), (status))</span></td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='directive'>#else /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((status))</span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='directive'>#endif /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> gboolean verbose_enabled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"><span class='keyword'>static</span> pam_handle_t *pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"><span class='keyword'>static</span> gboolean did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"><span class='keyword'>struct</span> pam_closure</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *username;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> GSAuthMessageFunc cb_func;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> gpointer cb_data;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='keyword'>int</span> signal_fd;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> <span class='keyword'>int</span> result;</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>struct</span> pam_closure *closure;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>char</span> **resp;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gboolean should_interrupt_stack;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">} GsAuthMessageHandlerData;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"><span class='keyword'>static</span> GCond message_handled_condition;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"><span class='keyword'>static</span> GMutex message_handler_mutex;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line">GQuark</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line">gs_auth_error_quark (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='keyword'>static</span> GQuark quark = 0;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>if</span> (! quark)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> quark = g_quark_from_static_string (<span class='string_literal'>"gs_auth_error"</span>);</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>return</span> quark;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">gs_auth_set_verbose (gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> verbose_enabled = enabled;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">gs_auth_get_verbose (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>return</span> verbose_enabled;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">auth_message_handler (GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> <span class='keyword'>char</span> **response,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> *response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (style)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_ON:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_OFF:</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>if</span> (msg != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> &amp;&amp; g_str_has_prefix (msg, <span class='macro'>_(<span class='string_literal'>"Password:"</span>)<span class='macro_popup'>gettext ("Password:")</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> did_we_ask_for_password = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_ERROR_MSG:</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_TEXT_INFO:</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> <span class='macro'>g_assert_not_reached ()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line">gs_auth_queued_message_handler (gpointer user_data)</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> GsAuthMessageHandlerData *data = user_data;</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_message (<span class='string_literal'>"Waiting for lock"</span>);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> g_message (<span class='string_literal'>"Waiting for response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> res = data-&gt;closure-&gt;cb_func (data-&gt;style,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> data-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> data-&gt;resp,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> data-&gt;closure-&gt;cb_data);</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> data-&gt;should_interrupt_stack = res == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> g_cond_signal (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> g_message (<span class='string_literal'>"Got response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line">gs_auth_run_message_handler (<span class='keyword'>struct</span> pam_closure *c,</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='keyword'>char</span> **resp)</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> GsAuthMessageHandlerData data;</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> data.closure = c;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> data.style = style;</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> data.msg = msg;</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> data.resp = resp;</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> data.should_interrupt_stack = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='comment'>/* Queue the callback in the gui (the main) thread</span></td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> g_idle_add (gs_auth_queued_message_handler, &amp;data);</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> g_message (<span class='string_literal'>"Waiting for respose to message style %d: '%s'"</span>, style, msg);</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> <span class='comment'>/* Wait for the response</span></td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> g_cond_wait (&amp;message_handled_condition,</td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> &amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> g_message (<span class='string_literal'>"Got respose to message style %d: interrupt:%d"</span>, style, data.should_interrupt_stack);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> <span class='keyword'>return</span> data.should_interrupt_stack == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line">pam_conversation (<span class='keyword'>int</span> nmsgs,</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>struct</span> pam_message **msg,</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>struct</span> pam_response **resp,</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> <span class='keyword'>void</span> *closure)</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> <span class='keyword'>int</span> replies = 0;</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>struct</span> pam_response *reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>struct</span> pam_closure *c = (<span class='keyword'>struct</span> pam_closure *) closure;</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> <span class='keyword'>int</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> reply = (<span class='keyword'>struct</span> pam_response *) calloc (nmsgs, <span class='keyword'>sizeof</span> (*reply));</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='keyword'>if</span> (reply == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> res = <span class="mrange"><span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex">Value stored to 'res' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> ret = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='keyword'>for</span> (replies = 0; replies &lt; nmsgs &amp;&amp; ret == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>; replies++)</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> <span class='keyword'>char</span> *utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> style = pam_style_to_gs_style (msg [replies]-&gt;msg_style);</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> utf8_msg = g_locale_to_utf8 (msg [replies]-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> <span class='comment'>/* if we couldn't convert text from locale then</span></td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='comment'>* assume utf-8 and hope for the best */</span></td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> <span class='keyword'>if</span> (utf8_msg == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>char</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>char</span> *q;</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> utf8_msg = g_strdup (msg [replies]-&gt;msg);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> p = utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>while</span> (*p != '\0' &amp;&amp; !g_utf8_validate ((<span class='keyword'>const</span> <span class='keyword'>char</span> *)p, -1, (<span class='keyword'>const</span> <span class='keyword'>char</span> **)&amp;q))</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> *q = '?';</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> p = q + 1;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* handle message locally first */</span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> auth_message_handler (style,</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> &amp;reply [replies].resp,</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> <span class='keyword'>if</span> (c-&gt;cb_func != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_message (<span class='string_literal'>"Handling message style %d: '%s'"</span>, style, utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='comment'>/* blocks until the gui responds</span></td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> res = gs_auth_run_message_handler (c,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> style,</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> &amp;reply [replies].resp);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> g_message (<span class='string_literal'>"Msg handler returned %d"</span>, res);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='comment'>/* If the handler returns FALSE - interrupt the PAM stack */</span></td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> reply [replies].resp_retcode = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt;= replies; i++)</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> free (reply [i].resp);</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> free (reply);</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> ret = <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> g_free (utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> *resp = reply;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line">close_pam_handle (<span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> status2 = pam_end (pam_handle, status);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> g_message (<span class='string_literal'>" pam_end (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> (status2 == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='string_literal'>"Success"</span> : <span class='string_literal'>"Failure"</span>));</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line">create_pam_handle (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>struct</span> pam_conv *conv,</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> <span class='keyword'>int</span> *status_code)</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *service = <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>char</span> *disp;</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> g_warning (<span class='string_literal'>"create_pam_handle: Stale pam handle around, cleaning up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> close_pam_handle (<span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> <span class='comment'>/* init things */</span></td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> status = -1;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> disp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* Initialize a PAM session for the user */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> ((status = pam_start (service, username, conv, &amp;pam_handle)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Unable to establish service %s: %s\n"</span>)<span class='macro_popup'>gettext ("Unable to establish service %s: %s\n")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>PAM_STRERROR (NULL, status)<span class='macro_popup'>pam_strerror((((void*)0)), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> g_message (<span class='string_literal'>"pam_start (\"%s\", \"%s\", ...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> username,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> disp = g_strdup (display);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> <span class='keyword'>if</span> (disp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> disp = g_strdup (<span class='string_literal'>":0.0"</span>);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> <span class='keyword'>if</span> ((status = pam_set_item (pam_handle, <span class='macro'>PAM_TTY<span class='macro_popup'>3</span></span>, disp)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Can't set PAM_TTY=%s"</span>)<span class='macro_popup'>gettext ("Can't set PAM_TTY=%s")</span></span>, display);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> g_cond_init (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> g_mutex_init (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free (disp);</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line">set_pam_error (GError **error,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (status == <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span> || status == <span class='macro'>PAM_USER_UNKNOWN<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> <span class='keyword'>if</span> (did_we_ask_for_password)</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Incorrect password."</span>)<span class='macro_popup'>gettext ("Incorrect password.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Authentication failed."</span>)<span class='macro_popup'>gettext ("Authentication failed.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> GS_AUTH_ERROR_AUTH_ERROR,</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> msg);</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> g_free (msg);</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"Not permitted to gain access at this time."</span>)<span class='macro_popup'>gettext ("Not permitted to gain access at this time.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"No longer permitted to access the system."</span>)<span class='macro_popup'>gettext ("No longer permitted to access the system.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line">gs_auth_thread_func (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> <span class='keyword'>int</span> auth_operation_fd;</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> <span class='keyword'>static</span> <span class='keyword'>const</span> <span class='keyword'>int</span> flags = 0;</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='keyword'>struct</span> timespec timeout;</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> sigset_t set;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>void</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> auth_operation_fd = <span class='macro'>GPOINTER_TO_INT (data)<span class='macro_popup'>((gint) (glong) (data))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> timeout.tv_sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> timeout.tv_nsec = 1;</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> set = block_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> status = pam_authenticate (pam_handle, flags);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> sigtimedwait (&amp;set, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;timeout);</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> unblock_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_message (<span class='string_literal'>" pam_authenticate (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>if</span> ((status = pam_get_item (pam_handle, <span class='macro'>PAM_USER<span class='macro_popup'>2</span></span>, &amp;p)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='comment'>/* is not really an auth problem, but it will</span></td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> <span class='comment'>pretty much look as such, it shouldn't really</span></td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='comment'>happen */</span></td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='comment'>/* We don't actually care if the account modules fail or succeed,</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='comment'>* but we need to run them anyway because certain pam modules</span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='comment'>* depend on side effects of the account modules getting run.</span></td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> status2 = pam_acct_mgmt (pam_handle, 0);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> g_message (<span class='string_literal'>"pam_acct_mgmt (...) ==&gt; %d (%s)\n"</span>,</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> <span class='comment'>/* FIXME: should we handle these? */</span></td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>switch</span> (status2)</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_NEW_AUTHTOK_REQD<span class='macro_popup'>12</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_AUTHINFO_UNAVAIL<span class='macro_popup'>9</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='keyword'>default</span> :</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='comment'>/* Each time we successfully authenticate, refresh credentials,</span></td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='comment'>for Kerberos/AFS/DCE/etc. If this fails, just ignore that</span></td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>failure and blunder along; it shouldn't matter.</span></td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> <span class='comment'>Note: this used to be PAM_REFRESH_CRED instead of</span></td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='comment'>PAM_REINITIALIZE_CRED, but Jason Heiss &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>says that the Linux PAM library ignores that one, and only refreshes</span></td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>credentials when using PAM_REINITIALIZE_CRED.</span></td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> status2 = pam_setcred (pam_handle, <span class='macro'>PAM_REINITIALIZE_CRED<span class='macro_popup'>0x0008U</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> g_message (<span class='string_literal'>" pam_setcred (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> <span class='comment'>/* we're done, close the fd and wake up the main</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>* loop</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> close (auth_operation_fd);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GINT_TO_POINTER (status)<span class='macro_popup'>((gpointer) (glong) (status))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line">gs_auth_loop_quit (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> gboolean *thread_done)</td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> *thread_done = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> gtk_main_quit ();</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">gs_auth_pam_verify_user (pam_handle_t *handle,</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>int</span> *status)</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> GThread *auth_thread;</td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> guint watch_id;</td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>int</span> auth_operation_fds[2];</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='keyword'>int</span> auth_status;</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> gboolean thread_done;</td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> channel = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> auth_status = <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>/* This pipe gives us a set of fds we can hook into</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>* the event loop to be notified when our helper thread</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>* is ready to be reaped.</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='keyword'>if</span> (pipe (auth_operation_fds) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[0], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[1], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> channel = g_io_channel_unix_new (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='comment'>/* we use a recursive main loop to process ui events</span></td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> <span class='comment'>* while we wait on a thread to handle the blocking parts</span></td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='comment'>* of pam authentication.</span></td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> thread_done = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> watch_id = g_io_add_watch (channel, G_IO_ERR | G_IO_HUP,</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> (GIOFunc) gs_auth_loop_quit, &amp;thread_done);</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> auth_thread = g_thread_new (<span class='string_literal'>"auththread"</span>,</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> gs_auth_thread_func,</td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='macro'>GINT_TO_POINTER (auth_operation_fds[1])<span class='macro_popup'>((gpointer) (glong) (auth_operation_fds[1]))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='keyword'>if</span> (auth_thread == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> gtk_main ();</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>/* if the event loop was quit before the thread is done then we can't</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> <span class='comment'>* reap the thread without blocking on it finishing. The</span></td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='comment'>* thread may not ever finish though if the pam module is blocking.</span></td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> <span class='comment'>* The only time the event loop is going to stop when the thread isn't</span></td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='comment'>* done, however, is if the dialog quits early (from, e.g., "cancel"),</span></td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> <span class='comment'>* so we can just exit. An alternative option would be to switch to</span></td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>* using pthreads directly and calling pthread_cancel.</span></td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (!thread_done)</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> raise (<span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> auth_status = <span class='macro'>GPOINTER_TO_INT (g_thread_join (auth_thread))<span class='macro_popup'>((gint) (glong) (g_thread_join (auth_thread)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='keyword'>if</span> (watch_id != 0 &amp;&amp; !thread_done)</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> g_source_remove (watch_id);</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (channel != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>if</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> *status = auth_status;</td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> <span class='keyword'>return</span> auth_status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line">gs_auth_verify_user (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> GSAuthMessageFunc func,</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> gpointer data,</td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>int</span> status = -1;</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='keyword'>struct</span> pam_conv conv;</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='keyword'>struct</span> pam_closure c;</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> <span class='keyword'>struct</span> passwd *pwent;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> pwent = getpwnam (username);</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> <span class='keyword'>if</span> (pwent == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> c.username = username;</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> c.cb_func = func;</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> c.cb_data = data;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> conv.conv = &amp;pam_conversation;</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> conv.appdata_ptr = (<span class='keyword'>void</span> *) &amp;c;</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> <span class='comment'>/* Initialize PAM. */</span></td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> create_pam_handle (username, display, &amp;conv, &amp;status);</td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> pam_set_item (pam_handle, <span class='macro'>PAM_USER_PROMPT<span class='macro_popup'>9</span></span>, <span class='macro'>_(<span class='string_literal'>"Username:"</span>)<span class='macro_popup'>gettext ("Username:")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> <span class='macro'>PAM_NO_DELAY(pam_handle)<span class='macro_popup'>pam_fail_delay ((pam_handle), 1)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! gs_auth_pam_verify_user (pam_handle, &amp;status))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> set_pam_error (error, status);</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> close_pam_handle (status);</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> <span class='keyword'>return</span> (status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span> : <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line">gs_auth_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line">gs_auth_priv_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> <span class='comment'>/* We have nothing to do at init-time.</span></td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> <span class='comment'>However, we might as well do some error checking.</span></td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> <span class='comment'>If "/etc/pam.d" exists and is a directory, but "/etc/pam.d/xlock"</span></td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"> <span class='comment'>does not exist, warn that PAM probably isn't going to work.</span></td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> <span class='comment'>This is a priv-init instead of a non-priv init in case the directory</span></td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> <span class='comment'>is unreadable or something (don't know if that actually happens.)</span></td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> dir [] = <span class='string_literal'>"/etc/pam.d"</span>;</td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file [] = <span class='string_literal'>"/etc/pam.d/"</span> <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file2 [] = <span class='string_literal'>"/etc/pam.conf"</span>;</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> <span class='keyword'>struct</span> stat st;</td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (dir, &amp;st) == 0 &amp;&amp; st.st_mode &amp; <span class='macro'>S_IFDIR<span class='macro_popup'>0040000</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file, &amp;st) != 0)</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> g_warning (<span class='string_literal'>"%s does not exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> file);</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file2, &amp;st) == 0)</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> FILE *f = <span class='macro'>g_fopen<span class='macro_popup'>fopen</span></span> (file2, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='keyword'>if</span> (f)</td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> gboolean ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> <span class='keyword'>char</span> buf[255];</td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> <span class='keyword'>while</span> (fgets (buf, <span class='keyword'>sizeof</span>(buf), f))</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> <span class='keyword'>if</span> (strstr (buf, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> fclose (f);</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> <span class='keyword'>if</span> (!ok)</td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> g_warning (<span class='string_literal'>"%s does not list the `%s' service.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> file2, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> <span class='comment'>/* else warn about file2 existing but being unreadable? */</span></td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> g_warning (<span class='string_literal'>"Neither %s nor %s exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> file2, file);</td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> <span class='comment'>/* Return true anyway, just in case. */</span></td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-88c30c.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-88c30c.html
new file mode 100644
index 0000000..a1550c4
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-88c30c.html
@@ -0,0 +1,1236 @@
+<!doctype html>
+<html>
+<head>
+<title>mate-screensaver-command.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'reply' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/mate-screensaver-command.c -->
+
+<!-- FILENAME mate-screensaver-command.c -->
+
+<!-- FUNCTIONNAME do_command -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 88c30c9284fefac0c79ccaec36559d32 -->
+
+<!-- BUGLINE 340 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/mate-screensaver-command.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 340, column 3</a><br />Value stored to 'reply' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name mate-screensaver-command.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c mate-screensaver-command.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"340": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;locale.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#define DBUS_API_SUBJECT_TO_CHANGE</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib-lowlevel.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#define <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span> "/org/mate/ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#define <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> gboolean do_quit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='keyword'>static</span> gboolean do_lock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean do_unlock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='keyword'>static</span> gboolean do_cycle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> gboolean do_activate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>static</span> gboolean do_deactivate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean do_version = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> gboolean do_poke = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> gboolean do_inhibit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> gboolean do_query = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>static</span> gboolean do_time = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_reason = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_application = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GOptionEntry entries [] =</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='string_literal'>"exit"</span>, 0, 0, G_OPTION_ARG_NONE, &amp;do_quit,</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Causes the screensaver to exit gracefully"</span>)<span class='macro_popup'>("Causes the screensaver to exit gracefully")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='string_literal'>"query"</span>, 'q', 0, G_OPTION_ARG_NONE, &amp;do_query,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the state of the screensaver"</span>)<span class='macro_popup'>("Query the state of the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='string_literal'>"time"</span>, 't', 0, G_OPTION_ARG_NONE, &amp;do_time,</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the length of time the screensaver has been active"</span>)<span class='macro_popup'>("Query the length of time the screensaver has been active")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='string_literal'>"lock"</span>, 'l', 0, G_OPTION_ARG_NONE, &amp;do_lock,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to lock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to lock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='string_literal'>"unlock"</span>, 'u', 0, G_OPTION_ARG_NONE, &amp;do_unlock,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to unlock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to unlock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='string_literal'>"cycle"</span>, 'c', 0, G_OPTION_ARG_NONE, &amp;do_cycle,</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then switch to another graphics demo"</span>)<span class='macro_popup'>("If the screensaver is active then switch to another graphics demo"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='string_literal'>"activate"</span>, 'a', 0, G_OPTION_ARG_NONE, &amp;do_activate,</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Turn the screensaver on (blank the screen)"</span>)<span class='macro_popup'>("Turn the screensaver on (blank the screen)")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='string_literal'>"deactivate"</span>, 'd', 0, G_OPTION_ARG_NONE, &amp;do_deactivate,</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then deactivate it (un-blank the screen)"</span>)<span class='macro_popup'>("If the screensaver is active then deactivate it (un-blank the screen)"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='string_literal'>"poke"</span>, 'p', 0, G_OPTION_ARG_NONE, &amp;do_poke,</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Poke the running screensaver to simulate user activity"</span>)<span class='macro_popup'>("Poke the running screensaver to simulate user activity")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='string_literal'>"inhibit"</span>, 'i', 0, G_OPTION_ARG_NONE, &amp;do_inhibit,</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Inhibit the screensaver from activating. Command blocks while inhibit is active."</span>)<span class='macro_popup'>("Inhibit the screensaver from activating. Command blocks while inhibit is active."<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='string_literal'>"application-name"</span>, 'n', 0, G_OPTION_ARG_STRING, &amp;inhibit_application,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The calling application that is inhibiting the screensaver"</span>)<span class='macro_popup'>("The calling application that is inhibiting the screensaver"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='string_literal'>"reason"</span>, 'r', 0, G_OPTION_ARG_STRING, &amp;inhibit_reason,</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The reason for inhibiting the screensaver"</span>)<span class='macro_popup'>("The reason for inhibiting the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='string_literal'>"version"</span>, 'V', 0, G_OPTION_ARG_NONE, &amp;do_version,</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Version of this application"</span>)<span class='macro_popup'>("Version of this application")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, 0, 0, G_OPTION_ARG_NONE, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='keyword'>static</span> GMainLoop *loop = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">screensaver_is_running (DBusConnection *connection)</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> gboolean exists;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> exists = dbus_bus_name_has_owner (connection, <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>return</span> exists;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line">screensaver_send_message_inhibit (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *application,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *reason)</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='string_literal'>"Inhibit"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;application);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;reason);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line">screensaver_send_message_bool (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gboolean value)</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_BOOLEAN<span class='macro_popup'>((int) 'b')</span></span>, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line">screensaver_send_message_void (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (! expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (!dbus_connection_send (connection, message, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> g_warning (<span class='string_literal'>"could not send message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> **</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">get_string_from_iter (DBusMessageIter *iter,</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>int</span> *num_elements)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='keyword'>int</span> count;</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>char</span> **buffer;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> *num_elements = 0;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> buffer = (<span class='keyword'>char</span> **)malloc (<span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * 8);</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> buffer[0] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span class='keyword'>while</span> (dbus_message_iter_get_arg_type (iter) == <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *value;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>char</span> *str;</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0 &amp;&amp; count != 0)</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 8));</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> dbus_message_iter_get_basic (iter, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> str = strdup (value);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>if</span> (str == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> buffer[count] = str;</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> dbus_message_iter_next (iter);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0)</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 1));</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> buffer[count] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> *num_elements = count;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='keyword'>return</span> buffer;</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">oom:</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> g_debug (<span class='string_literal'>"%s %d : error allocating memory\n"</span>, <span class='macro'>__FILE__<span class='macro_popup'>"mate-screensaver-command.c"</span></span>, <span class='macro'>__LINE__<span class='macro_popup'>327</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">do_command (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> DBusConnection *connection = data;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='keyword'>if</span> (do_quit)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> reply = <span class="mrange">screensaver_send_message_void (connection, <span class='string_literal'>"Quit"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">Value stored to 'reply' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (do_query)</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> DBusMessageIter array;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is %s\n"</span>)<span class='macro_popup'>gettext ("The screensaver is %s\n")</span></span>, v ? <span class='macro'>_(<span class='string_literal'>"active"</span>)<span class='macro_popup'>gettext ("active")</span></span> : <span class='macro'>_(<span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gettext ("inactive")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetInhibitors"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> dbus_message_iter_recurse (&amp;iter, &amp;array);</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='keyword'>if</span> (dbus_message_iter_get_arg_type (&amp;array) == <span class='macro'>DBUS_TYPE_INVALID<span class='macro_popup'>((int) '\0')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not inhibited\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not inhibited\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> <span class='keyword'>char</span> **inhibitors;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> <span class='keyword'>int</span> num;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is being inhibited by:\n"</span>)<span class='macro_popup'>gettext ("The screensaver is being inhibited by:\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> inhibitors = get_string_from_iter (&amp;array, &amp;num);</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num; i++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_print (<span class='string_literal'>"\t%s\n"</span>, inhibitors[i]);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> g_strfreev (inhibitors);</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (do_time)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> dbus_int32_t t;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='keyword'>if</span> (v)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActiveTime"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;t);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver has been active for %d seconds.\n"</span>)<span class='macro_popup'>gettext ("The screensaver has been active for %d seconds.\n")</span></span>, t);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not currently active.\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not currently active.\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (do_lock)</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Lock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='keyword'>if</span> (do_unlock)</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Unlock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='keyword'>if</span> (do_cycle)</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Cycle"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='keyword'>if</span> (do_poke)</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"SimulateUserActivity"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (do_activate)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='keyword'>if</span> (do_deactivate)</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (do_inhibit)</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> reply = screensaver_send_message_inhibit (connection,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> inhibit_application ? inhibit_application : <span class='string_literal'>"Unknown"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> inhibit_reason ? inhibit_reason : <span class='string_literal'>"Unknown"</span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> g_main_loop_quit (loop);</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> DBusConnection *connection;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> DBusError dbus_error;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> GOptionContext *context;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> g_set_prgname (argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> (setlocale (<span class='macro'>LC_ALL<span class='macro_popup'>6</span></span>, <span class='string_literal'>""</span>) == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_warning (<span class='string_literal'>"Locale not understood by C library, internationalization will not work\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> context = g_option_context_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> retval = g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> g_option_context_free (context);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> <span class='keyword'>if</span> (! retval)</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> g_warning (<span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>if</span> (do_version)</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> g_print (<span class='string_literal'>"%s %s\n"</span>, argv [0], <span class='macro'>VERSION<span class='macro_popup'>"1.26.0"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> dbus_error_init (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> connection = dbus_bus_get (DBUS_BUS_SESSION, &amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> <span class='keyword'>if</span> (! connection)</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> g_message (<span class='string_literal'>"Failed to connect to the D-BUS daemon: %s"</span>, dbus_error.message);</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> dbus_error_free (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> dbus_connection_setup_with_g_main (connection, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>if</span> (! screensaver_is_running (connection))</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_message (<span class='string_literal'>"Screensaver is not running!"</span>);</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> g_idle_add (do_command, connection);</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> loop = g_main_loop_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> g_main_loop_run (loop);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-8aee73.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-8aee73.html
new file mode 100644
index 0000000..38d859c
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-8aee73.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcpy' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 8aee7318787626c69a1a37793b24e90f -->
+
+<!-- BUGLINE 145 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 145, column 3</a><br />Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"145": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> strcat (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class="mrange">strcpy</span> (user_dir, home_dir);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex; max-width:52em">Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-958ab4.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-958ab4.html
new file mode 100644
index 0000000..c15d869
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-958ab4.html
@@ -0,0 +1,1236 @@
+<!doctype html>
+<html>
+<head>
+<title>mate-screensaver-command.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'reply' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/mate-screensaver-command.c -->
+
+<!-- FILENAME mate-screensaver-command.c -->
+
+<!-- FUNCTIONNAME do_command -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 958ab416ef367333abda36a3d3563b92 -->
+
+<!-- BUGLINE 430 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/mate-screensaver-command.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 430, column 3</a><br />Value stored to 'reply' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name mate-screensaver-command.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c mate-screensaver-command.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"430": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;locale.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#define DBUS_API_SUBJECT_TO_CHANGE</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib-lowlevel.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#define <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span> "/org/mate/ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#define <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> gboolean do_quit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='keyword'>static</span> gboolean do_lock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean do_unlock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='keyword'>static</span> gboolean do_cycle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> gboolean do_activate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>static</span> gboolean do_deactivate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean do_version = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> gboolean do_poke = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> gboolean do_inhibit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> gboolean do_query = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>static</span> gboolean do_time = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_reason = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_application = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GOptionEntry entries [] =</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='string_literal'>"exit"</span>, 0, 0, G_OPTION_ARG_NONE, &amp;do_quit,</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Causes the screensaver to exit gracefully"</span>)<span class='macro_popup'>("Causes the screensaver to exit gracefully")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='string_literal'>"query"</span>, 'q', 0, G_OPTION_ARG_NONE, &amp;do_query,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the state of the screensaver"</span>)<span class='macro_popup'>("Query the state of the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='string_literal'>"time"</span>, 't', 0, G_OPTION_ARG_NONE, &amp;do_time,</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the length of time the screensaver has been active"</span>)<span class='macro_popup'>("Query the length of time the screensaver has been active")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='string_literal'>"lock"</span>, 'l', 0, G_OPTION_ARG_NONE, &amp;do_lock,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to lock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to lock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='string_literal'>"unlock"</span>, 'u', 0, G_OPTION_ARG_NONE, &amp;do_unlock,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to unlock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to unlock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='string_literal'>"cycle"</span>, 'c', 0, G_OPTION_ARG_NONE, &amp;do_cycle,</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then switch to another graphics demo"</span>)<span class='macro_popup'>("If the screensaver is active then switch to another graphics demo"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='string_literal'>"activate"</span>, 'a', 0, G_OPTION_ARG_NONE, &amp;do_activate,</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Turn the screensaver on (blank the screen)"</span>)<span class='macro_popup'>("Turn the screensaver on (blank the screen)")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='string_literal'>"deactivate"</span>, 'd', 0, G_OPTION_ARG_NONE, &amp;do_deactivate,</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then deactivate it (un-blank the screen)"</span>)<span class='macro_popup'>("If the screensaver is active then deactivate it (un-blank the screen)"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='string_literal'>"poke"</span>, 'p', 0, G_OPTION_ARG_NONE, &amp;do_poke,</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Poke the running screensaver to simulate user activity"</span>)<span class='macro_popup'>("Poke the running screensaver to simulate user activity")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='string_literal'>"inhibit"</span>, 'i', 0, G_OPTION_ARG_NONE, &amp;do_inhibit,</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Inhibit the screensaver from activating. Command blocks while inhibit is active."</span>)<span class='macro_popup'>("Inhibit the screensaver from activating. Command blocks while inhibit is active."<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='string_literal'>"application-name"</span>, 'n', 0, G_OPTION_ARG_STRING, &amp;inhibit_application,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The calling application that is inhibiting the screensaver"</span>)<span class='macro_popup'>("The calling application that is inhibiting the screensaver"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='string_literal'>"reason"</span>, 'r', 0, G_OPTION_ARG_STRING, &amp;inhibit_reason,</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The reason for inhibiting the screensaver"</span>)<span class='macro_popup'>("The reason for inhibiting the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='string_literal'>"version"</span>, 'V', 0, G_OPTION_ARG_NONE, &amp;do_version,</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Version of this application"</span>)<span class='macro_popup'>("Version of this application")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, 0, 0, G_OPTION_ARG_NONE, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='keyword'>static</span> GMainLoop *loop = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">screensaver_is_running (DBusConnection *connection)</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> gboolean exists;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> exists = dbus_bus_name_has_owner (connection, <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>return</span> exists;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line">screensaver_send_message_inhibit (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *application,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *reason)</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='string_literal'>"Inhibit"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;application);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;reason);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line">screensaver_send_message_bool (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gboolean value)</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_BOOLEAN<span class='macro_popup'>((int) 'b')</span></span>, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line">screensaver_send_message_void (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (! expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (!dbus_connection_send (connection, message, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> g_warning (<span class='string_literal'>"could not send message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> **</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">get_string_from_iter (DBusMessageIter *iter,</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>int</span> *num_elements)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='keyword'>int</span> count;</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>char</span> **buffer;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> *num_elements = 0;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> buffer = (<span class='keyword'>char</span> **)malloc (<span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * 8);</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> buffer[0] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span class='keyword'>while</span> (dbus_message_iter_get_arg_type (iter) == <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *value;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>char</span> *str;</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0 &amp;&amp; count != 0)</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 8));</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> dbus_message_iter_get_basic (iter, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> str = strdup (value);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>if</span> (str == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> buffer[count] = str;</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> dbus_message_iter_next (iter);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0)</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 1));</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> buffer[count] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> *num_elements = count;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='keyword'>return</span> buffer;</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">oom:</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> g_debug (<span class='string_literal'>"%s %d : error allocating memory\n"</span>, <span class='macro'>__FILE__<span class='macro_popup'>"mate-screensaver-command.c"</span></span>, <span class='macro'>__LINE__<span class='macro_popup'>327</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">do_command (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> DBusConnection *connection = data;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='keyword'>if</span> (do_quit)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Quit"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (do_query)</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> DBusMessageIter array;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is %s\n"</span>)<span class='macro_popup'>gettext ("The screensaver is %s\n")</span></span>, v ? <span class='macro'>_(<span class='string_literal'>"active"</span>)<span class='macro_popup'>gettext ("active")</span></span> : <span class='macro'>_(<span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gettext ("inactive")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetInhibitors"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> dbus_message_iter_recurse (&amp;iter, &amp;array);</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='keyword'>if</span> (dbus_message_iter_get_arg_type (&amp;array) == <span class='macro'>DBUS_TYPE_INVALID<span class='macro_popup'>((int) '\0')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not inhibited\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not inhibited\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> <span class='keyword'>char</span> **inhibitors;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> <span class='keyword'>int</span> num;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is being inhibited by:\n"</span>)<span class='macro_popup'>gettext ("The screensaver is being inhibited by:\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> inhibitors = get_string_from_iter (&amp;array, &amp;num);</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num; i++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_print (<span class='string_literal'>"\t%s\n"</span>, inhibitors[i]);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> g_strfreev (inhibitors);</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (do_time)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> dbus_int32_t t;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='keyword'>if</span> (v)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActiveTime"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;t);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver has been active for %d seconds.\n"</span>)<span class='macro_popup'>gettext ("The screensaver has been active for %d seconds.\n")</span></span>, t);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not currently active.\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not currently active.\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (do_lock)</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> reply = <span class="mrange">screensaver_send_message_void (connection, <span class='string_literal'>"Lock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">Value stored to 'reply' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='keyword'>if</span> (do_unlock)</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Unlock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='keyword'>if</span> (do_cycle)</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Cycle"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='keyword'>if</span> (do_poke)</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"SimulateUserActivity"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (do_activate)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='keyword'>if</span> (do_deactivate)</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (do_inhibit)</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> reply = screensaver_send_message_inhibit (connection,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> inhibit_application ? inhibit_application : <span class='string_literal'>"Unknown"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> inhibit_reason ? inhibit_reason : <span class='string_literal'>"Unknown"</span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> g_main_loop_quit (loop);</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> DBusConnection *connection;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> DBusError dbus_error;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> GOptionContext *context;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> g_set_prgname (argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> (setlocale (<span class='macro'>LC_ALL<span class='macro_popup'>6</span></span>, <span class='string_literal'>""</span>) == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_warning (<span class='string_literal'>"Locale not understood by C library, internationalization will not work\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> context = g_option_context_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> retval = g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> g_option_context_free (context);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> <span class='keyword'>if</span> (! retval)</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> g_warning (<span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>if</span> (do_version)</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> g_print (<span class='string_literal'>"%s %s\n"</span>, argv [0], <span class='macro'>VERSION<span class='macro_popup'>"1.26.0"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> dbus_error_init (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> connection = dbus_bus_get (DBUS_BUS_SESSION, &amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> <span class='keyword'>if</span> (! connection)</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> g_message (<span class='string_literal'>"Failed to connect to the D-BUS daemon: %s"</span>, dbus_error.message);</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> dbus_error_free (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> dbus_connection_setup_with_g_main (connection, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>if</span> (! screensaver_is_running (connection))</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_message (<span class='string_literal'>"Screensaver is not running!"</span>);</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> g_idle_add (do_command, connection);</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> loop = g_main_loop_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> g_main_loop_run (loop);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-a25f69.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-a25f69.html
new file mode 100644
index 0000000..4e39497
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-a25f69.html
@@ -0,0 +1,1236 @@
+<!doctype html>
+<html>
+<head>
+<title>mate-screensaver-command.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'reply' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/mate-screensaver-command.c -->
+
+<!-- FILENAME mate-screensaver-command.c -->
+
+<!-- FUNCTIONNAME do_command -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT a25f69ffda28885f07f43237379f3dc3 -->
+
+<!-- BUGLINE 435 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/mate-screensaver-command.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 435, column 3</a><br />Value stored to 'reply' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name mate-screensaver-command.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c mate-screensaver-command.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"435": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;locale.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#define DBUS_API_SUBJECT_TO_CHANGE</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib-lowlevel.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#define <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span> "/org/mate/ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#define <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> gboolean do_quit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='keyword'>static</span> gboolean do_lock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean do_unlock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='keyword'>static</span> gboolean do_cycle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> gboolean do_activate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>static</span> gboolean do_deactivate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean do_version = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> gboolean do_poke = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> gboolean do_inhibit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> gboolean do_query = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>static</span> gboolean do_time = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_reason = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_application = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GOptionEntry entries [] =</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='string_literal'>"exit"</span>, 0, 0, G_OPTION_ARG_NONE, &amp;do_quit,</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Causes the screensaver to exit gracefully"</span>)<span class='macro_popup'>("Causes the screensaver to exit gracefully")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='string_literal'>"query"</span>, 'q', 0, G_OPTION_ARG_NONE, &amp;do_query,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the state of the screensaver"</span>)<span class='macro_popup'>("Query the state of the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='string_literal'>"time"</span>, 't', 0, G_OPTION_ARG_NONE, &amp;do_time,</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the length of time the screensaver has been active"</span>)<span class='macro_popup'>("Query the length of time the screensaver has been active")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='string_literal'>"lock"</span>, 'l', 0, G_OPTION_ARG_NONE, &amp;do_lock,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to lock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to lock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='string_literal'>"unlock"</span>, 'u', 0, G_OPTION_ARG_NONE, &amp;do_unlock,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to unlock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to unlock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='string_literal'>"cycle"</span>, 'c', 0, G_OPTION_ARG_NONE, &amp;do_cycle,</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then switch to another graphics demo"</span>)<span class='macro_popup'>("If the screensaver is active then switch to another graphics demo"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='string_literal'>"activate"</span>, 'a', 0, G_OPTION_ARG_NONE, &amp;do_activate,</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Turn the screensaver on (blank the screen)"</span>)<span class='macro_popup'>("Turn the screensaver on (blank the screen)")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='string_literal'>"deactivate"</span>, 'd', 0, G_OPTION_ARG_NONE, &amp;do_deactivate,</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then deactivate it (un-blank the screen)"</span>)<span class='macro_popup'>("If the screensaver is active then deactivate it (un-blank the screen)"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='string_literal'>"poke"</span>, 'p', 0, G_OPTION_ARG_NONE, &amp;do_poke,</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Poke the running screensaver to simulate user activity"</span>)<span class='macro_popup'>("Poke the running screensaver to simulate user activity")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='string_literal'>"inhibit"</span>, 'i', 0, G_OPTION_ARG_NONE, &amp;do_inhibit,</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Inhibit the screensaver from activating. Command blocks while inhibit is active."</span>)<span class='macro_popup'>("Inhibit the screensaver from activating. Command blocks while inhibit is active."<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='string_literal'>"application-name"</span>, 'n', 0, G_OPTION_ARG_STRING, &amp;inhibit_application,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The calling application that is inhibiting the screensaver"</span>)<span class='macro_popup'>("The calling application that is inhibiting the screensaver"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='string_literal'>"reason"</span>, 'r', 0, G_OPTION_ARG_STRING, &amp;inhibit_reason,</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The reason for inhibiting the screensaver"</span>)<span class='macro_popup'>("The reason for inhibiting the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='string_literal'>"version"</span>, 'V', 0, G_OPTION_ARG_NONE, &amp;do_version,</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Version of this application"</span>)<span class='macro_popup'>("Version of this application")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, 0, 0, G_OPTION_ARG_NONE, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='keyword'>static</span> GMainLoop *loop = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">screensaver_is_running (DBusConnection *connection)</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> gboolean exists;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> exists = dbus_bus_name_has_owner (connection, <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>return</span> exists;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line">screensaver_send_message_inhibit (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *application,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *reason)</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='string_literal'>"Inhibit"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;application);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;reason);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line">screensaver_send_message_bool (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gboolean value)</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_BOOLEAN<span class='macro_popup'>((int) 'b')</span></span>, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line">screensaver_send_message_void (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (! expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (!dbus_connection_send (connection, message, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> g_warning (<span class='string_literal'>"could not send message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> **</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">get_string_from_iter (DBusMessageIter *iter,</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>int</span> *num_elements)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='keyword'>int</span> count;</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>char</span> **buffer;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> *num_elements = 0;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> buffer = (<span class='keyword'>char</span> **)malloc (<span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * 8);</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> buffer[0] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span class='keyword'>while</span> (dbus_message_iter_get_arg_type (iter) == <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *value;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>char</span> *str;</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0 &amp;&amp; count != 0)</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 8));</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> dbus_message_iter_get_basic (iter, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> str = strdup (value);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>if</span> (str == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> buffer[count] = str;</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> dbus_message_iter_next (iter);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0)</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 1));</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> buffer[count] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> *num_elements = count;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='keyword'>return</span> buffer;</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">oom:</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> g_debug (<span class='string_literal'>"%s %d : error allocating memory\n"</span>, <span class='macro'>__FILE__<span class='macro_popup'>"mate-screensaver-command.c"</span></span>, <span class='macro'>__LINE__<span class='macro_popup'>327</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">do_command (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> DBusConnection *connection = data;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='keyword'>if</span> (do_quit)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Quit"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (do_query)</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> DBusMessageIter array;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is %s\n"</span>)<span class='macro_popup'>gettext ("The screensaver is %s\n")</span></span>, v ? <span class='macro'>_(<span class='string_literal'>"active"</span>)<span class='macro_popup'>gettext ("active")</span></span> : <span class='macro'>_(<span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gettext ("inactive")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetInhibitors"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> dbus_message_iter_recurse (&amp;iter, &amp;array);</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='keyword'>if</span> (dbus_message_iter_get_arg_type (&amp;array) == <span class='macro'>DBUS_TYPE_INVALID<span class='macro_popup'>((int) '\0')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not inhibited\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not inhibited\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> <span class='keyword'>char</span> **inhibitors;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> <span class='keyword'>int</span> num;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is being inhibited by:\n"</span>)<span class='macro_popup'>gettext ("The screensaver is being inhibited by:\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> inhibitors = get_string_from_iter (&amp;array, &amp;num);</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num; i++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_print (<span class='string_literal'>"\t%s\n"</span>, inhibitors[i]);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> g_strfreev (inhibitors);</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (do_time)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> dbus_int32_t t;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='keyword'>if</span> (v)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActiveTime"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;t);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver has been active for %d seconds.\n"</span>)<span class='macro_popup'>gettext ("The screensaver has been active for %d seconds.\n")</span></span>, t);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not currently active.\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not currently active.\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (do_lock)</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Lock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='keyword'>if</span> (do_unlock)</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> reply = <span class="mrange">screensaver_send_message_void (connection, <span class='string_literal'>"Unlock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">Value stored to 'reply' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='keyword'>if</span> (do_cycle)</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Cycle"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='keyword'>if</span> (do_poke)</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"SimulateUserActivity"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (do_activate)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='keyword'>if</span> (do_deactivate)</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (do_inhibit)</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> reply = screensaver_send_message_inhibit (connection,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> inhibit_application ? inhibit_application : <span class='string_literal'>"Unknown"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> inhibit_reason ? inhibit_reason : <span class='string_literal'>"Unknown"</span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> g_main_loop_quit (loop);</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> DBusConnection *connection;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> DBusError dbus_error;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> GOptionContext *context;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> g_set_prgname (argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> (setlocale (<span class='macro'>LC_ALL<span class='macro_popup'>6</span></span>, <span class='string_literal'>""</span>) == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_warning (<span class='string_literal'>"Locale not understood by C library, internationalization will not work\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> context = g_option_context_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> retval = g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> g_option_context_free (context);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> <span class='keyword'>if</span> (! retval)</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> g_warning (<span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>if</span> (do_version)</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> g_print (<span class='string_literal'>"%s %s\n"</span>, argv [0], <span class='macro'>VERSION<span class='macro_popup'>"1.26.0"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> dbus_error_init (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> connection = dbus_bus_get (DBUS_BUS_SESSION, &amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> <span class='keyword'>if</span> (! connection)</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> g_message (<span class='string_literal'>"Failed to connect to the D-BUS daemon: %s"</span>, dbus_error.message);</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> dbus_error_free (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> dbus_connection_setup_with_g_main (connection, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>if</span> (! screensaver_is_running (connection))</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_message (<span class='string_literal'>"Screensaver is not running!"</span>);</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> g_idle_add (do_command, connection);</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> loop = g_main_loop_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> g_main_loop_run (loop);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ac5343.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ac5343.html
new file mode 100644
index 0000000..0d54ed2
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ac5343.html
@@ -0,0 +1,3250 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-window-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'finished' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-window-x11.c -->
+
+<!-- FILENAME gs-window-x11.c -->
+
+<!-- FUNCTIONNAME error_watch -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT ac53437f9b09ad07587043e15b6f5364 -->
+
+<!-- BUGLINE 1026 -->
+
+<!-- BUGCOLUMN 4 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-window-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 1026, column 4</a><br />Value stored to 'finished' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-window-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-window-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"1026": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2008 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;sys/wait.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkkeysyms.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;gtk/gtkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "gs-window.h"</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='directive'>#include &lt;X11/extensions/shape.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean popup_dialog_idle (gpointer data);</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_dialog_finish (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> remove_command_watches (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DIALOG_RESPONSE_CANCEL,</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> DIALOG_RESPONSE_OK</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'>#define <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span> 16</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#define <span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span> 30</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"><span class='directive'>#define <span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span> <span class='macro'>LIBEXECDIR<span class='macro_popup'>"/usr/local/libexec"</span></span> "/mate-screensaver-dialog"</span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='keyword'>struct</span> GSWindowPrivate</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> GdkMonitor *monitor;</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> guint obscured : 1;</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> guint dialog_up : 1;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> guint lock_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> guint user_switch_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> guint logout_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> guint keyboard_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> guint64 logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> <span class='keyword'>char</span> *logout_command;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>char</span> *keyboard_command;</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> GtkWidget *drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GtkWidget *lock_box;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> GtkWidget *lock_socket;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> GtkWidget *keyboard_socket;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> GtkWidget *info_bar;</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> GtkWidget *info_content;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> cairo_surface_t *background_surface;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> guint popup_dialog_idle_id;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> guint dialog_map_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint dialog_unmap_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> guint dialog_response_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> guint info_bar_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> gint lock_pid;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gint lock_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> gint dialog_response;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> gboolean dialog_quit_requested;</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gboolean dialog_shake_in_progress;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> gint keyboard_pid;</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> gint keyboard_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> GList *key_events;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> gdouble last_x;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> gdouble last_y;</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> GTimer *timer;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='keyword'>int</span> shape_event_base;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> ACTIVITY,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> DEACTIVATED,</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWindow, gs_window, GTK_TYPE_WINDOW)<span class='macro_popup'>static void gs_window_init (GSWindow *self); static void gs_window_class_init<br> (GSWindowClass *klass); static GType gs_window_get_type_once<br> (void); static gpointer gs_window_parent_class = ((void*)0);<br> static gint GSWindow_private_offset; static void gs_window_class_intern_init<br> (gpointer klass) { gs_window_parent_class = g_type_class_peek_parent<br> (klass); if (GSWindow_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWindow_private_offset); gs_window_class_init (<br>(GSWindowClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_window_get_instance_private (GSWindow *self<br>) { return (((gpointer) ((guint8*) (self) + (glong) (GSWindow_private_offset<br>)))); } GType gs_window_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_window_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_window_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> ((gtk_window_get_type ()), g_intern_static_string ("GSWindow"<br>), sizeof (GSWindowClass), (GClassInitFunc)(void (*)(void)) gs_window_class_intern_init<br>, sizeof (GSWindow), (GInstanceInitFunc)(void (*)(void)) gs_window_init<br>, (GTypeFlags) 0); { {{ GSWindow_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWindowPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line">set_invisible_cursor (GdkWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> gboolean invisible)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> GdkCursor *cursor = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>if</span> (invisible)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> display = gdk_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> cursor = gdk_cursor_new_for_display (display, GDK_BLANK_CURSOR);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> gdk_window_set_cursor (window, cursor);</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (cursor)</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_object_unref (cursor);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"><span class='comment'>/* derived from tomboy */</span></td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line">gs_window_override_user_time (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> guint32 ev_time = gtk_get_current_event_time ();</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='keyword'>if</span> (ev_time == 0)</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> gint ev_mask = gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> <span class='keyword'>if</span> (!(ev_mask &amp; GDK_PROPERTY_CHANGE_MASK))</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gtk_widget_add_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> GDK_PROPERTY_CHANGE_MASK);</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='comment'>* NOTE: Last resort for D-BUS or other non-interactive</span></td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='comment'>* openings. Causes roundtrip to server. Lame.</span></td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> ev_time = gdk_x11_get_server_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>));</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> gdk_x11_window_set_user_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), ev_time);</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line">clear_children (Window window)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> Window root;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> Window parent;</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> Window *children;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>int</span> n_children;</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> children = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> status = XQueryTree (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, window, &amp;root, &amp;parent, &amp;children, &amp;n_children);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> <span class='keyword'>if</span> (status == 0)</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>while</span> (n_children)</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> Window child;</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> child = children [--n_children];</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> XClearWindow (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, child);</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> clear_children (child);</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line">widget_clear_all_children (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> GdkWindow *w;</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing all child windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 235, "Clearing all child windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> display = gtk_widget_get_display (widget);</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> w = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> clear_children (<span class='macro'>GDK_WINDOW_XID (w)<span class='macro_popup'>(gdk_x11_window_get_xid (w))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line">gs_window_set_background_surface (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> cairo_surface_t *surface)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> window-&gt;priv-&gt;background_surface = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> <span class='keyword'>if</span> (surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> window-&gt;priv-&gt;background_surface = cairo_surface_reference (surface);</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line">gs_window_clear (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing widgets"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 274, "Clearing widgets"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='comment'>/* If a screensaver theme adds child windows</span></td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> <span class='comment'>we need to clear them too */</span></td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> widget_clear_all_children (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (window-&gt;priv-&gt;drawing_area))</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> gtk_widget_queue_draw (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> widget_clear_all_children (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> gdk_display_flush (display);</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"><span class='keyword'>static</span> cairo_region_t *</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line">get_outside_region (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>int</span> num_monitors;</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> cairo_region_t *region;</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> region = cairo_region_create ();</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> num_monitors = gdk_display_get_n_monitors (display);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num_monitors; i++)</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> GdkMonitor *mon = gdk_display_get_monitor (display, i);</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='keyword'>if</span> (mon != window-&gt;priv-&gt;monitor)</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> cairo_rectangle_int_t rectangle;</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> gdk_monitor_get_geometry (mon, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> rectangle.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> rectangle.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> rectangle.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> rectangle.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> cairo_region_union_rectangle (region, &amp;rectangle);</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='keyword'>return</span> region;</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">update_geometry (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> cairo_region_t *outside_region;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> cairo_region_t *monitor_region;</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> outside_region = get_outside_region (window);</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> gdk_monitor_get_geometry (window-&gt;priv-&gt;monitor, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"got geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> monitor_region = cairo_region_create_rectangle ((<span class='keyword'>const</span> cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> cairo_region_subtract (monitor_region, outside_region);</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> cairo_region_destroy (outside_region);</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> cairo_region_get_extents (monitor_region, (cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> cairo_region_destroy (monitor_region);</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"using geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> window-&gt;priv-&gt;geometry.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> window-&gt;priv-&gt;geometry.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> window-&gt;priv-&gt;geometry.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> window-&gt;priv-&gt;geometry.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line">monitor_geometry_notify (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> GParamSpec *pspec,</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got monitor geometry notify signal"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 371, "Got monitor geometry notify signal"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"><span class='comment'>/* copied from panel-toplevel.c */</span></td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line">gs_window_move_resize_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> gboolean move,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> gboolean resize)</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> GtkWidget *widget;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> GdkWindow *gdkwindow;</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> gdkwindow = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='macro'>g_assert (gtk_widget_get_realized (widget))<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Move and/or resize window: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (move &amp;&amp; resize)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> gdk_window_move_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> window-&gt;priv-&gt;geometry.y,</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (move)</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> gdk_window_move (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> window-&gt;priv-&gt;geometry.y);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (resize)</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> gdk_window_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line">gs_window_real_unrealize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (monitor, monitor_geometry_notify,<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize)</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize (widget);</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"><span class='comment'>/* copied from gdk */</span></td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"><span class='keyword'>extern</span> <span class='keyword'>char</span> **environ;</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"><span class='keyword'>static</span> gchar **</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line">spawn_make_environment_for_display (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> gchar **envp)</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> gchar **retval = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> <span class='keyword'>const</span> gchar *display_name;</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> gint display_index = -1;</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> gint i, env_len;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='macro'>g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='keyword'>if</span> (envp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> envp = environ;</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>for</span> (env_len = 0; envp[env_len]; env_len++)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='keyword'>if</span> (strncmp (envp[env_len], <span class='string_literal'>"DISPLAY"</span>, strlen (<span class='string_literal'>"DISPLAY"</span>)) == 0)</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> display_index = env_len;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> retval = <span class='macro'>g_new (<span class='keyword'>char</span> *, env_len + 1)<span class='macro_popup'>((char * *) g_malloc_n ((env_len + 1), sizeof (char *)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> retval[env_len] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> display_name = gdk_display_get_name (display);</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; env_len; i++)</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (i == display_index)</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> retval[i] = g_strconcat (<span class='string_literal'>"DISPLAY="</span>, display_name, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> retval[i] = g_strdup (envp[i]);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> <span class='macro'>g_assert (i == env_len)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line">spawn_command_line_on_display_sync (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>const</span> gchar *command_line,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='keyword'>char</span> **standard_output,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='keyword'>char</span> **standard_error,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>int</span> *exit_status,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>char</span> **argv = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='keyword'>char</span> **envp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='macro'>g_return_val_if_fail (command_line != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command_line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;argv, error))</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> envp = spawn_make_environment_for_display (display, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> retval = g_spawn_sync (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> standard_output,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> standard_error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> exit_status,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> error);</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> GdkVisual *</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">get_best_visual_for_display (GdkDisplay *display)</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>char</span> *std_output;</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>int</span> exit_status;</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> v;</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> visual = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> std_output = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> res = spawn_command_line_on_display_sync (display,</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH<span class='macro_popup'>"/usr/local/libexec/mate-screensaver-gl-helper"</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> &amp;std_output,</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> &amp;exit_status,</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not run command '%s': %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (std_output, <span class='string_literal'>"0x%lx %c"</span>, &amp;v, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> <span class='keyword'>if</span> (v != 0)</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> VisualID visual_id;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> visual_id = (VisualID) v;</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> visual = gdk_x11_screen_lookup_visual (screen, visual_id);</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Found best GL visual for display %s: 0x%x"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='macro'>gdk_display_get_name (display),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='macro'>(<span class='keyword'>unsigned</span> <span class='keyword'>int</span>) visual_id)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> g_free (std_output);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>g_object_ref (visual)<span class='macro_popup'>((__typeof__ (visual)) (g_object_ref) (visual))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line">widget_set_best_visual (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='macro'>g_return_if_fail (widget != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> visual = get_best_visual_for_display (gtk_widget_get_display (widget));</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='keyword'>if</span> (visual != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> gtk_widget_set_visual (widget, visual);</td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> g_object_unref (visual);</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line">gs_window_real_realize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> widget_set_best_visual (widget);</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize)</td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize (widget);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> gs_window_override_user_time (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> gs_window_move_resize_window (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='macro'>g_signal_connect (monitor,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='string_literal'><span class='macro'>"notify::geometry"</span>,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='macro'>G_CALLBACK (monitor_geometry_notify),<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"><span class='comment'>/* every so often we should raise the window in case</span></td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='comment'>another window has somehow gotten on top */</span></td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> GtkWidget *widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> gdk_window_focus (gtk_widget_get_window (widget), <span class='macro'>GDK_CURRENT_TIME<span class='macro_popup'>0L</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line">remove_watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> g_source_remove (window-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line">add_watchdog_timer (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line">remove_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> g_source_remove (window-&gt;priv-&gt;popup_dialog_idle_id);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line">add_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = g_idle_add (popup_dialog_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line">emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_signal_emit (window, signals [DEACTIVATED], 0);</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line">add_emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> g_idle_add ((GSourceFunc)emit_deactivated_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line">gs_window_raise (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> GdkWindow *win;</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Raising screensaver window"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 662, "Raising screensaver window"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> win = gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> gdk_window_raise (win);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line">x11_window_is_ours (Window window)</td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> GdkWindow *gwindow;</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> gwindow = gdk_x11_window_lookup_for_display (gdk_display_get_default (), window);</td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (gwindow &amp;&amp; (window != <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line">unshape_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> gdk_window_shape_combine_region (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>),</td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line">gs_window_xevent (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> GdkXEvent *xevent)</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> XEvent *ev;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> ev = xevent;</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> <span class='comment'>/* MapNotify is used to tell us when new windows are mapped.</span></td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='comment'>ConfigureNofify is used to tell us when windows are raised. */</span></td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='keyword'>switch</span> (ev-&gt;xany.type)</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>MapNotify<span class='macro_popup'>19</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> XMapEvent *xme = &amp;ev-&gt;xmap;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xme-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 719, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>ConfigureNotify<span class='macro_popup'>22</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> XConfigureEvent *xce = &amp;ev-&gt;xconfigure;</td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xce-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 734, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> <span class='comment'>/* extension events */</span></td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"> <span class='keyword'>if</span> (ev-&gt;xany.type == (window-&gt;priv-&gt;shape_event_base + <span class='macro'>ShapeNotify<span class='macro_popup'>0</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='comment'>/*XShapeEvent *xse = (XShapeEvent *) ev;*/</span></td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> unshape_window (window);</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Window was reshaped!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 746, "Window was reshaped!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"><span class='keyword'>static</span> GdkFilterReturn</td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line">xevent_filter (GdkXEvent *xevent,</td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> GdkEvent *event,</td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> gs_window_xevent (window, xevent);</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>return</span> GDK_FILTER_CONTINUE;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">select_popup_events (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> XWindowAttributes attr;</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> display = gdk_display_get_default ();</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> memset (&amp;attr, 0, <span class='keyword'>sizeof</span> (attr));</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> XGetWindowAttributes (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, &amp;attr);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> events = <span class='macro'>SubstructureNotifyMask<span class='macro_popup'>(1L&lt;&lt;19)</span></span> | attr.your_event_mask;</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> XSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line">window_select_shape_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> <span class='keyword'>int</span> shape_error_base;</td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> <span class='keyword'>if</span> (XShapeQueryExtension (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, &amp;window-&gt;priv-&gt;shape_event_base, &amp;shape_error_base)) {</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> events = <span class='macro'>ShapeNotifyMask<span class='macro_popup'>(1L &lt;&lt; 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> XShapeSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window)))<span class='macro_popup'>(gdk_x11_window_get_xid (gtk_widget_get_window (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">gs_window_real_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"> GSWindow *window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line"> cairo_surface_t *bg_surface = window-&gt;priv-&gt;background_surface;</td></tr>
+<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> <span class='keyword'>if</span> (bg_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> cairo_set_source_surface (cr, bg_surface, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line">gs_window_real_show (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show)</td></tr>
+<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show (widget);</td></tr>
+<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> gs_window_clear (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (widget), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> window-&gt;priv-&gt;timer = g_timer_new ();</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> add_watchdog_timer (window, 30000);</td></tr>
+<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> select_popup_events ();</td></tr>
+<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> window_select_shape_events (window);</td></tr>
+<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> gdk_window_add_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line">set_info_text_and_icon (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon_name,</td></tr>
+<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *primary_text,</td></tr>
+<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *secondary_text)</td></tr>
+<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> GtkWidget *content_area;</td></tr>
+<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> GtkWidget *hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> GtkWidget *image;</td></tr>
+<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> gchar *primary_markup;</td></tr>
+<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> gchar *secondary_markup;</td></tr>
+<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> GtkWidget *primary_label;</td></tr>
+<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> GtkWidget *secondary_label;</td></tr>
+<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> hbox_content = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);</td></tr>
+<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> gtk_widget_show (hbox_content);</td></tr>
+<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="874"><td class="num" id="LN874">874</td><td class="line"> image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_DIALOG);</td></tr>
+<tr class="codeline" data-linenumber="875"><td class="num" id="LN875">875</td><td class="line"> gtk_widget_show (image);</td></tr>
+<tr class="codeline" data-linenumber="876"><td class="num" id="LN876">876</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, image, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="877"><td class="num" id="LN877">877</td><td class="line"> gtk_widget_set_valign (image, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="878"><td class="num" id="LN878">878</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="879"><td class="num" id="LN879">879</td><td class="line"> vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);</td></tr>
+<tr class="codeline" data-linenumber="880"><td class="num" id="LN880">880</td><td class="line"> gtk_widget_show (vbox);</td></tr>
+<tr class="codeline" data-linenumber="881"><td class="num" id="LN881">881</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, vbox, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="882"><td class="num" id="LN882">882</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="883"><td class="num" id="LN883">883</td><td class="line"> primary_markup = g_strdup_printf (<span class='string_literal'>"&lt;b&gt;%s&lt;/b&gt;"</span>, primary_text);</td></tr>
+<tr class="codeline" data-linenumber="884"><td class="num" id="LN884">884</td><td class="line"> primary_label = gtk_label_new (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="885"><td class="num" id="LN885">885</td><td class="line"> g_free (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="886"><td class="num" id="LN886">886</td><td class="line"> gtk_widget_show (primary_label);</td></tr>
+<tr class="codeline" data-linenumber="887"><td class="num" id="LN887">887</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, primary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="888"><td class="num" id="LN888">888</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="889"><td class="num" id="LN889">889</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="890"><td class="num" id="LN890">890</td><td class="line"> gtk_widget_set_halign (primary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="891"><td class="num" id="LN891">891</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="892"><td class="num" id="LN892">892</td><td class="line"> <span class='keyword'>if</span> (secondary_text != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="893"><td class="num" id="LN893">893</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="894"><td class="num" id="LN894">894</td><td class="line"> secondary_markup = g_strdup_printf (<span class='string_literal'>"&lt;small&gt;%s&lt;/small&gt;"</span>,</td></tr>
+<tr class="codeline" data-linenumber="895"><td class="num" id="LN895">895</td><td class="line"> secondary_text);</td></tr>
+<tr class="codeline" data-linenumber="896"><td class="num" id="LN896">896</td><td class="line"> secondary_label = gtk_label_new (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="897"><td class="num" id="LN897">897</td><td class="line"> g_free (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="898"><td class="num" id="LN898">898</td><td class="line"> gtk_widget_show (secondary_label);</td></tr>
+<tr class="codeline" data-linenumber="899"><td class="num" id="LN899">899</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, secondary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="900"><td class="num" id="LN900">900</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="901"><td class="num" id="LN901">901</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="902"><td class="num" id="LN902">902</td><td class="line"> gtk_widget_set_halign (secondary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="903"><td class="num" id="LN903">903</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="904"><td class="num" id="LN904">904</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="905"><td class="num" id="LN905">905</td><td class="line"> <span class='comment'>/* remove old content */</span></td></tr>
+<tr class="codeline" data-linenumber="906"><td class="num" id="LN906">906</td><td class="line"> content_area = gtk_info_bar_get_content_area (<span class='macro'>GTK_INFO_BAR (window-&gt;priv-&gt;info_bar)<span class='macro_popup'>((((GtkInfoBar*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;info_bar)), ((gtk_info_bar_get_type(<br>)))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="907"><td class="num" id="LN907">907</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_content != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="908"><td class="num" id="LN908">908</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="909"><td class="num" id="LN909">909</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (content_area)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_content);</td></tr>
+<tr class="codeline" data-linenumber="910"><td class="num" id="LN910">910</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="911"><td class="num" id="LN911">911</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (content_area)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="912"><td class="num" id="LN912">912</td><td class="line"> hbox_content,</td></tr>
+<tr class="codeline" data-linenumber="913"><td class="num" id="LN913">913</td><td class="line"> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="914"><td class="num" id="LN914">914</td><td class="line"> window-&gt;priv-&gt;info_content = hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="915"><td class="num" id="LN915">915</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="916"><td class="num" id="LN916">916</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="917"><td class="num" id="LN917">917</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="918"><td class="num" id="LN918">918</td><td class="line">info_bar_timeout (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="919"><td class="num" id="LN919">919</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="920"><td class="num" id="LN920">920</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="921"><td class="num" id="LN921">921</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="922"><td class="num" id="LN922">922</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="923"><td class="num" id="LN923">923</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="924"><td class="num" id="LN924">924</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="925"><td class="num" id="LN925">925</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="926"><td class="num" id="LN926">926</td><td class="line">gs_window_show_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="927"><td class="num" id="LN927">927</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *summary,</td></tr>
+<tr class="codeline" data-linenumber="928"><td class="num" id="LN928">928</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *body,</td></tr>
+<tr class="codeline" data-linenumber="929"><td class="num" id="LN929">929</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon)</td></tr>
+<tr class="codeline" data-linenumber="930"><td class="num" id="LN930">930</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="931"><td class="num" id="LN931">931</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="932"><td class="num" id="LN932">932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="933"><td class="num" id="LN933">933</td><td class="line"> set_info_text_and_icon (window,</td></tr>
+<tr class="codeline" data-linenumber="934"><td class="num" id="LN934">934</td><td class="line"> icon,</td></tr>
+<tr class="codeline" data-linenumber="935"><td class="num" id="LN935">935</td><td class="line"> summary,</td></tr>
+<tr class="codeline" data-linenumber="936"><td class="num" id="LN936">936</td><td class="line"> body);</td></tr>
+<tr class="codeline" data-linenumber="937"><td class="num" id="LN937">937</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="938"><td class="num" id="LN938">938</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="939"><td class="num" id="LN939">939</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="940"><td class="num" id="LN940">940</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="941"><td class="num" id="LN941">941</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="942"><td class="num" id="LN942">942</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="943"><td class="num" id="LN943">943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="944"><td class="num" id="LN944">944</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = g_timeout_add_seconds (<span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="945"><td class="num" id="LN945">945</td><td class="line"> (GSourceFunc)info_bar_timeout,</td></tr>
+<tr class="codeline" data-linenumber="946"><td class="num" id="LN946">946</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="947"><td class="num" id="LN947">947</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="948"><td class="num" id="LN948">948</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="949"><td class="num" id="LN949">949</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="950"><td class="num" id="LN950">950</td><td class="line">gs_window_show (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="951"><td class="num" id="LN951">951</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="952"><td class="num" id="LN952">952</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="953"><td class="num" id="LN953">953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="954"><td class="num" id="LN954">954</td><td class="line"> gtk_widget_show (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="955"><td class="num" id="LN955">955</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="956"><td class="num" id="LN956">956</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="957"><td class="num" id="LN957">957</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="958"><td class="num" id="LN958">958</td><td class="line">gs_window_real_hide (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="959"><td class="num" id="LN959">959</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="960"><td class="num" id="LN960">960</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="961"><td class="num" id="LN961">961</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="962"><td class="num" id="LN962">962</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="963"><td class="num" id="LN963">963</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="964"><td class="num" id="LN964">964</td><td class="line"> gdk_window_remove_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="965"><td class="num" id="LN965">965</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="966"><td class="num" id="LN966">966</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="967"><td class="num" id="LN967">967</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="968"><td class="num" id="LN968">968</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide)</td></tr>
+<tr class="codeline" data-linenumber="969"><td class="num" id="LN969">969</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="970"><td class="num" id="LN970">970</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="971"><td class="num" id="LN971">971</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="972"><td class="num" id="LN972">972</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="973"><td class="num" id="LN973">973</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="974"><td class="num" id="LN974">974</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="975"><td class="num" id="LN975">975</td><td class="line">gs_window_destroy (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="976"><td class="num" id="LN976">976</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="977"><td class="num" id="LN977">977</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="978"><td class="num" id="LN978">978</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="979"><td class="num" id="LN979">979</td><td class="line"> gs_window_cancel_unlock_request (window);</td></tr>
+<tr class="codeline" data-linenumber="980"><td class="num" id="LN980">980</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="981"><td class="num" id="LN981">981</td><td class="line"> gtk_widget_destroy (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="982"><td class="num" id="LN982">982</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="983"><td class="num" id="LN983">983</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="984"><td class="num" id="LN984">984</td><td class="line">GdkWindow *</td></tr>
+<tr class="codeline" data-linenumber="985"><td class="num" id="LN985">985</td><td class="line">gs_window_get_gdk_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="986"><td class="num" id="LN986">986</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="987"><td class="num" id="LN987">987</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="988"><td class="num" id="LN988">988</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="989"><td class="num" id="LN989">989</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="990"><td class="num" id="LN990">990</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="991"><td class="num" id="LN991">991</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="992"><td class="num" id="LN992">992</td><td class="line">GtkWidget *</td></tr>
+<tr class="codeline" data-linenumber="993"><td class="num" id="LN993">993</td><td class="line">gs_window_get_drawing_area (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="994"><td class="num" id="LN994">994</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="995"><td class="num" id="LN995">995</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="996"><td class="num" id="LN996">996</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="997"><td class="num" id="LN997">997</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="998"><td class="num" id="LN998">998</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="999"><td class="num" id="LN999">999</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1000"><td class="num" id="LN1000">1000</td><td class="line"><span class='comment'>/* just for debugging */</span></td></tr>
+<tr class="codeline" data-linenumber="1001"><td class="num" id="LN1001">1001</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1002"><td class="num" id="LN1002">1002</td><td class="line">error_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1003"><td class="num" id="LN1003">1003</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1004"><td class="num" id="LN1004">1004</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1005"><td class="num" id="LN1005">1005</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1006"><td class="num" id="LN1006">1006</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1007"><td class="num" id="LN1007">1007</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1008"><td class="num" id="LN1008">1008</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1009"><td class="num" id="LN1009">1009</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1010"><td class="num" id="LN1010">1010</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1011"><td class="num" id="LN1011">1011</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1012"><td class="num" id="LN1012">1012</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1013"><td class="num" id="LN1013">1013</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1014"><td class="num" id="LN1014">1014</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1015"><td class="num" id="LN1015">1015</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1016"><td class="num" id="LN1016">1016</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1017"><td class="num" id="LN1017">1017</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1018"><td class="num" id="LN1018">1018</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1019"><td class="num" id="LN1019">1019</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1020"><td class="num" id="LN1020">1020</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command error output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1020, "command error output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1021"><td class="num" id="LN1021">1021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1022"><td class="num" id="LN1022">1022</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1023"><td class="num" id="LN1023">1023</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1024"><td class="num" id="LN1024">1024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1025"><td class="num" id="LN1025">1025</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1026"><td class="num" id="LN1026">1026</td><td class="line"> finished = <span class="mrange"><span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:25ex">Value stored to 'finished' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="1027"><td class="num" id="LN1027">1027</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1027, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1028"><td class="num" id="LN1028">1028</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1029"><td class="num" id="LN1029">1029</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1030"><td class="num" id="LN1030">1030</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1031"><td class="num" id="LN1031">1031</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1032"><td class="num" id="LN1032">1032</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1033"><td class="num" id="LN1033">1033</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1034"><td class="num" id="LN1034">1034</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1035"><td class="num" id="LN1035">1035</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1036"><td class="num" id="LN1036">1036</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1037"><td class="num" id="LN1037">1037</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1038"><td class="num" id="LN1038">1038</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1039"><td class="num" id="LN1039">1039</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1040"><td class="num" id="LN1040">1040</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1041"><td class="num" id="LN1041">1041</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1042"><td class="num" id="LN1042">1042</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1043"><td class="num" id="LN1043">1043</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1044"><td class="num" id="LN1044">1044</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1045"><td class="num" id="LN1045">1045</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1046"><td class="num" id="LN1046">1046</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1047"><td class="num" id="LN1047">1047</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1048"><td class="num" id="LN1048">1048</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1049"><td class="num" id="LN1049">1049</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1050"><td class="num" id="LN1050">1050</td><td class="line">spawn_on_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1051"><td class="num" id="LN1051">1051</td><td class="line"> <span class='keyword'>char</span> *command,</td></tr>
+<tr class="codeline" data-linenumber="1052"><td class="num" id="LN1052">1052</td><td class="line"> <span class='keyword'>int</span> *pid,</td></tr>
+<tr class="codeline" data-linenumber="1053"><td class="num" id="LN1053">1053</td><td class="line"> GIOFunc watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1054"><td class="num" id="LN1054">1054</td><td class="line"> gpointer user_data,</td></tr>
+<tr class="codeline" data-linenumber="1055"><td class="num" id="LN1055">1055</td><td class="line"> gint *watch_id)</td></tr>
+<tr class="codeline" data-linenumber="1056"><td class="num" id="LN1056">1056</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1057"><td class="num" id="LN1057">1057</td><td class="line"> <span class='keyword'>int</span> argc;</td></tr>
+<tr class="codeline" data-linenumber="1058"><td class="num" id="LN1058">1058</td><td class="line"> <span class='keyword'>char</span> **argv;</td></tr>
+<tr class="codeline" data-linenumber="1059"><td class="num" id="LN1059">1059</td><td class="line"> <span class='keyword'>char</span> **envp;</td></tr>
+<tr class="codeline" data-linenumber="1060"><td class="num" id="LN1060">1060</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="1061"><td class="num" id="LN1061">1061</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1062"><td class="num" id="LN1062">1062</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="1063"><td class="num" id="LN1063">1063</td><td class="line"> <span class='keyword'>int</span> standard_output;</td></tr>
+<tr class="codeline" data-linenumber="1064"><td class="num" id="LN1064">1064</td><td class="line"> <span class='keyword'>int</span> standard_error;</td></tr>
+<tr class="codeline" data-linenumber="1065"><td class="num" id="LN1065">1065</td><td class="line"> <span class='keyword'>int</span> child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1066"><td class="num" id="LN1066">1066</td><td class="line"> <span class='keyword'>int</span> id;</td></tr>
+<tr class="codeline" data-linenumber="1067"><td class="num" id="LN1067">1067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1068"><td class="num" id="LN1068">1068</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1069"><td class="num" id="LN1069">1069</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command, &amp;argc, &amp;argv, &amp;error))</td></tr>
+<tr class="codeline" data-linenumber="1070"><td class="num" id="LN1070">1070</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1071"><td class="num" id="LN1071">1071</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not parse command: %s"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1071, "Could not parse command: %s"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1072"><td class="num" id="LN1072">1072</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1073"><td class="num" id="LN1073">1073</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1074"><td class="num" id="LN1074">1074</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1075"><td class="num" id="LN1075">1075</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1076"><td class="num" id="LN1076">1076</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1077"><td class="num" id="LN1077">1077</td><td class="line"> envp = spawn_make_environment_for_display (gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1078"><td class="num" id="LN1078">1078</td><td class="line"> result = g_spawn_async_with_pipes (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1079"><td class="num" id="LN1079">1079</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="1080"><td class="num" id="LN1080">1080</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="1081"><td class="num" id="LN1081">1081</td><td class="line"> G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="1082"><td class="num" id="LN1082">1082</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1083"><td class="num" id="LN1083">1083</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1084"><td class="num" id="LN1084">1084</td><td class="line"> &amp;child_pid,</td></tr>
+<tr class="codeline" data-linenumber="1085"><td class="num" id="LN1085">1085</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1086"><td class="num" id="LN1086">1086</td><td class="line"> &amp;standard_output,</td></tr>
+<tr class="codeline" data-linenumber="1087"><td class="num" id="LN1087">1087</td><td class="line"> &amp;standard_error,</td></tr>
+<tr class="codeline" data-linenumber="1088"><td class="num" id="LN1088">1088</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1089"><td class="num" id="LN1089">1089</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1090"><td class="num" id="LN1090">1090</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1091"><td class="num" id="LN1091">1091</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1092"><td class="num" id="LN1092">1092</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command '%s': %s"</span>, command, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1092, "Could not start command '%s': %s"<br>, command, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1093"><td class="num" id="LN1093">1093</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1094"><td class="num" id="LN1094">1094</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1095"><td class="num" id="LN1095">1095</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1096"><td class="num" id="LN1096">1096</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1097"><td class="num" id="LN1097">1097</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1098"><td class="num" id="LN1098">1098</td><td class="line"> <span class='keyword'>if</span> (pid != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1099"><td class="num" id="LN1099">1099</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1100"><td class="num" id="LN1100">1100</td><td class="line"> *pid = child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1101"><td class="num" id="LN1101">1101</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1102"><td class="num" id="LN1102">1102</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1103"><td class="num" id="LN1103">1103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1104"><td class="num" id="LN1104">1104</td><td class="line"> g_spawn_close_pid (child_pid);</td></tr>
+<tr class="codeline" data-linenumber="1105"><td class="num" id="LN1105">1105</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1106"><td class="num" id="LN1106">1106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1107"><td class="num" id="LN1107">1107</td><td class="line"> <span class='comment'>/* output channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1108"><td class="num" id="LN1108">1108</td><td class="line"> channel = g_io_channel_unix_new (standard_output);</td></tr>
+<tr class="codeline" data-linenumber="1109"><td class="num" id="LN1109">1109</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1110"><td class="num" id="LN1110">1110</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1111"><td class="num" id="LN1111">1111</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1112"><td class="num" id="LN1112">1112</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1113"><td class="num" id="LN1113">1113</td><td class="line"> id = g_io_add_watch (channel,</td></tr>
+<tr class="codeline" data-linenumber="1114"><td class="num" id="LN1114">1114</td><td class="line"> G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr>
+<tr class="codeline" data-linenumber="1115"><td class="num" id="LN1115">1115</td><td class="line"> watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1116"><td class="num" id="LN1116">1116</td><td class="line"> user_data);</td></tr>
+<tr class="codeline" data-linenumber="1117"><td class="num" id="LN1117">1117</td><td class="line"> <span class='keyword'>if</span> (watch_id != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1118"><td class="num" id="LN1118">1118</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1119"><td class="num" id="LN1119">1119</td><td class="line"> *watch_id = id;</td></tr>
+<tr class="codeline" data-linenumber="1120"><td class="num" id="LN1120">1120</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1121"><td class="num" id="LN1121">1121</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1122"><td class="num" id="LN1122">1122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1123"><td class="num" id="LN1123">1123</td><td class="line"> <span class='comment'>/* error channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1124"><td class="num" id="LN1124">1124</td><td class="line"> channel = g_io_channel_unix_new (standard_error);</td></tr>
+<tr class="codeline" data-linenumber="1125"><td class="num" id="LN1125">1125</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1126"><td class="num" id="LN1126">1126</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1127"><td class="num" id="LN1127">1127</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1128"><td class="num" id="LN1128">1128</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1129"><td class="num" id="LN1129">1129</td><td class="line"> id = g_io_add_watch (channel,</td></tr>
+<tr class="codeline" data-linenumber="1130"><td class="num" id="LN1130">1130</td><td class="line"> G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr>
+<tr class="codeline" data-linenumber="1131"><td class="num" id="LN1131">1131</td><td class="line"> error_watch,</td></tr>
+<tr class="codeline" data-linenumber="1132"><td class="num" id="LN1132">1132</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1133"><td class="num" id="LN1133">1133</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1134"><td class="num" id="LN1134">1134</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1135"><td class="num" id="LN1135">1135</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1136"><td class="num" id="LN1136">1136</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="1137"><td class="num" id="LN1137">1137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1138"><td class="num" id="LN1138">1138</td><td class="line"> <span class='keyword'>return</span> result;</td></tr>
+<tr class="codeline" data-linenumber="1139"><td class="num" id="LN1139">1139</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1140"><td class="num" id="LN1140">1140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1141"><td class="num" id="LN1141">1141</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1142"><td class="num" id="LN1142">1142</td><td class="line">lock_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1143"><td class="num" id="LN1143">1143</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1144"><td class="num" id="LN1144">1144</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1145"><td class="num" id="LN1145">1145</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1146"><td class="num" id="LN1146">1146</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1147"><td class="num" id="LN1147">1147</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1148"><td class="num" id="LN1148">1148</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1149"><td class="num" id="LN1149">1149</td><td class="line">lock_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1150"><td class="num" id="LN1150">1150</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1151"><td class="num" id="LN1151">1151</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1152"><td class="num" id="LN1152">1152</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1153"><td class="num" id="LN1153">1153</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1154"><td class="num" id="LN1154">1154</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1155"><td class="num" id="LN1155">1155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1156"><td class="num" id="LN1156">1156</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1157"><td class="num" id="LN1157">1157</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1158"><td class="num" id="LN1158">1158</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1159"><td class="num" id="LN1159">1159</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1160"><td class="num" id="LN1160">1160</td><td class="line">keyboard_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1161"><td class="num" id="LN1161">1161</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1162"><td class="num" id="LN1162">1162</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1163"><td class="num" id="LN1163">1163</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1164"><td class="num" id="LN1164">1164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1165"><td class="num" id="LN1165">1165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1166"><td class="num" id="LN1166">1166</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1167"><td class="num" id="LN1167">1167</td><td class="line">keyboard_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1168"><td class="num" id="LN1168">1168</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1169"><td class="num" id="LN1169">1169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1170"><td class="num" id="LN1170">1170</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1171"><td class="num" id="LN1171">1171</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_widget_get_type<br> ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1172"><td class="num" id="LN1172">1172</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1173"><td class="num" id="LN1173">1173</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1174"><td class="num" id="LN1174">1174</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1175"><td class="num" id="LN1175">1175</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1176"><td class="num" id="LN1176">1176</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1177"><td class="num" id="LN1177">1177</td><td class="line">keyboard_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1178"><td class="num" id="LN1178">1178</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1179"><td class="num" id="LN1179">1179</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1180"><td class="num" id="LN1180">1180</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1181"><td class="num" id="LN1181">1181</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1182"><td class="num" id="LN1182">1182</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1183"><td class="num" id="LN1183">1183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1184"><td class="num" id="LN1184">1184</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1185"><td class="num" id="LN1185">1185</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1186"><td class="num" id="LN1186">1186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1187"><td class="num" id="LN1187">1187</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1188"><td class="num" id="LN1188">1188</td><td class="line">forward_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1189"><td class="num" id="LN1189">1189</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1190"><td class="num" id="LN1190">1190</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1191"><td class="num" id="LN1191">1191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1192"><td class="num" id="LN1192">1192</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1193"><td class="num" id="LN1193">1193</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1194"><td class="num" id="LN1194">1194</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1195"><td class="num" id="LN1195">1195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1196"><td class="num" id="LN1196">1196</td><td class="line"> gtk_window_propagate_key_event (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="1197"><td class="num" id="LN1197">1197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1198"><td class="num" id="LN1198">1198</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1199"><td class="num" id="LN1199">1199</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1200"><td class="num" id="LN1200">1200</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1201"><td class="num" id="LN1201">1201</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1202"><td class="num" id="LN1202">1202</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1203"><td class="num" id="LN1203">1203</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1204"><td class="num" id="LN1204">1204</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1205"><td class="num" id="LN1205">1205</td><td class="line">remove_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1206"><td class="num" id="LN1206">1206</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1207"><td class="num" id="LN1207">1207</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1208"><td class="num" id="LN1208">1208</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1209"><td class="num" id="LN1209">1209</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events)</td></tr>
+<tr class="codeline" data-linenumber="1210"><td class="num" id="LN1210">1210</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1211"><td class="num" id="LN1211">1211</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1212"><td class="num" id="LN1212">1212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1213"><td class="num" id="LN1213">1213</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1214"><td class="num" id="LN1214">1214</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1215"><td class="num" id="LN1215">1215</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1216"><td class="num" id="LN1216">1216</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1217"><td class="num" id="LN1217">1217</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1218"><td class="num" id="LN1218">1218</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1219"><td class="num" id="LN1219">1219</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1220"><td class="num" id="LN1220">1220</td><td class="line">lock_socket_show (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1221"><td class="num" id="LN1221">1221</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1222"><td class="num" id="LN1222">1222</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1223"><td class="num" id="LN1223">1223</td><td class="line"> gtk_widget_child_focus (window-&gt;priv-&gt;lock_socket, GTK_DIR_TAB_FORWARD);</td></tr>
+<tr class="codeline" data-linenumber="1224"><td class="num" id="LN1224">1224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1225"><td class="num" id="LN1225">1225</td><td class="line"> <span class='comment'>/* send queued events to the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="1226"><td class="num" id="LN1226">1226</td><td class="line"> forward_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1227"><td class="num" id="LN1227">1227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1228"><td class="num" id="LN1228">1228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1229"><td class="num" id="LN1229">1229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1230"><td class="num" id="LN1230">1230</td><td class="line">lock_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1231"><td class="num" id="LN1231">1231</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1232"><td class="num" id="LN1232">1232</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1233"><td class="num" id="LN1233">1233</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_show, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_show), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1234"><td class="num" id="LN1234">1234</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1235"><td class="num" id="LN1235">1235</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1236"><td class="num" id="LN1236">1236</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1237"><td class="num" id="LN1237">1237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1238"><td class="num" id="LN1238">1238</td><td class="line"> window-&gt;priv-&gt;lock_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1239"><td class="num" id="LN1239">1239</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1240"><td class="num" id="LN1240">1240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1241"><td class="num" id="LN1241">1241</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1242"><td class="num" id="LN1242">1242</td><td class="line">create_keyboard_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1243"><td class="num" id="LN1243">1243</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1244"><td class="num" id="LN1244">1244</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1245"><td class="num" id="LN1245">1245</td><td class="line"> <span class='keyword'>int</span> height;</td></tr>
+<tr class="codeline" data-linenumber="1246"><td class="num" id="LN1246">1246</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1247"><td class="num" id="LN1247">1247</td><td class="line"> height = (<span class='macro'>HeightOfScreen (gdk_x11_screen_get_xscreen (gtk_widget_get_screen (GTK_WIDGET (window))))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (gtk_widget_get_screen (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))-&gt;height)</span></span>) / 4;</td></tr>
+<tr class="codeline" data-linenumber="1248"><td class="num" id="LN1248">1248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1249"><td class="num" id="LN1249">1249</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1250"><td class="num" id="LN1250">1250</td><td class="line"> gtk_widget_set_size_request (window-&gt;priv-&gt;keyboard_socket, -1, height);</td></tr>
+<tr class="codeline" data-linenumber="1251"><td class="num" id="LN1251">1251</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1252"><td class="num" id="LN1252">1252</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1253"><td class="num" id="LN1253">1253</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1254"><td class="num" id="LN1254">1254</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1255"><td class="num" id="LN1255">1255</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1256"><td class="num" id="LN1256">1256</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1257"><td class="num" id="LN1257">1257</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1258"><td class="num" id="LN1258">1258</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;keyboard_socket, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1259"><td class="num" id="LN1259">1259</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1260"><td class="num" id="LN1260">1260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1261"><td class="num" id="LN1261">1261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1262"><td class="num" id="LN1262">1262</td><td class="line"><span class='comment'>/* adapted from gspawn.c */</span></td></tr>
+<tr class="codeline" data-linenumber="1263"><td class="num" id="LN1263">1263</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="1264"><td class="num" id="LN1264">1264</td><td class="line">wait_on_child (<span class='keyword'>int</span> pid)</td></tr>
+<tr class="codeline" data-linenumber="1265"><td class="num" id="LN1265">1265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1266"><td class="num" id="LN1266">1266</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1267"><td class="num" id="LN1267">1267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1268"><td class="num" id="LN1268">1268</td><td class="line">wait_again:</td></tr>
+<tr class="codeline" data-linenumber="1269"><td class="num" id="LN1269">1269</td><td class="line"> <span class='keyword'>if</span> (waitpid (pid, &amp;status, 0) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1270"><td class="num" id="LN1270">1270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1271"><td class="num" id="LN1271">1271</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINTR<span class='macro_popup'>4</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1272"><td class="num" id="LN1272">1272</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1273"><td class="num" id="LN1273">1273</td><td class="line"> <span class='keyword'>goto</span> wait_again;</td></tr>
+<tr class="codeline" data-linenumber="1274"><td class="num" id="LN1274">1274</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1275"><td class="num" id="LN1275">1275</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>ECHILD<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1276"><td class="num" id="LN1276">1276</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1277"><td class="num" id="LN1277">1277</td><td class="line"> ; <span class='comment'>/* do nothing, child already reaped */</span></td></tr>
+<tr class="codeline" data-linenumber="1278"><td class="num" id="LN1278">1278</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1279"><td class="num" id="LN1279">1279</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1280"><td class="num" id="LN1280">1280</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1281"><td class="num" id="LN1281">1281</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"waitpid () should not fail in 'GSWindow'"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1281, "waitpid () should not fail in 'GSWindow'"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1282"><td class="num" id="LN1282">1282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1283"><td class="num" id="LN1283">1283</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1284"><td class="num" id="LN1284">1284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1285"><td class="num" id="LN1285">1285</td><td class="line"> <span class='keyword'>return</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1286"><td class="num" id="LN1286">1286</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1287"><td class="num" id="LN1287">1287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1288"><td class="num" id="LN1288">1288</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1289"><td class="num" id="LN1289">1289</td><td class="line">kill_keyboard_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1290"><td class="num" id="LN1290">1290</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1291"><td class="num" id="LN1291">1291</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1292"><td class="num" id="LN1292">1292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1293"><td class="num" id="LN1293">1293</td><td class="line"> signal_pid (window-&gt;priv-&gt;keyboard_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1294"><td class="num" id="LN1294">1294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1295"><td class="num" id="LN1295">1295</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1296"><td class="num" id="LN1296">1296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1297"><td class="num" id="LN1297">1297</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1298"><td class="num" id="LN1298">1298</td><td class="line">kill_dialog_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1299"><td class="num" id="LN1299">1299</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1300"><td class="num" id="LN1300">1300</td><td class="line"> <span class='comment'>/* If a dialog is up we need to signal it</span></td></tr>
+<tr class="codeline" data-linenumber="1301"><td class="num" id="LN1301">1301</td><td class="line"> <span class='comment'>and wait on it */</span></td></tr>
+<tr class="codeline" data-linenumber="1302"><td class="num" id="LN1302">1302</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1303"><td class="num" id="LN1303">1303</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1304"><td class="num" id="LN1304">1304</td><td class="line"> signal_pid (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1305"><td class="num" id="LN1305">1305</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1306"><td class="num" id="LN1306">1306</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1307"><td class="num" id="LN1307">1307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1308"><td class="num" id="LN1308">1308</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1309"><td class="num" id="LN1309">1309</td><td class="line">keyboard_command_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1310"><td class="num" id="LN1310">1310</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1311"><td class="num" id="LN1311">1311</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1312"><td class="num" id="LN1312">1312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1313"><td class="num" id="LN1313">1313</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1314"><td class="num" id="LN1314">1314</td><td class="line"> kill_keyboard_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1315"><td class="num" id="LN1315">1315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1316"><td class="num" id="LN1316">1316</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Keyboard finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1316, "Keyboard finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1317"><td class="num" id="LN1317">1317</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1318"><td class="num" id="LN1318">1318</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1319"><td class="num" id="LN1319">1319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1320"><td class="num" id="LN1320">1320</td><td class="line"> wait_on_child (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1321"><td class="num" id="LN1321">1321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1322"><td class="num" id="LN1322">1322</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1323"><td class="num" id="LN1323">1323</td><td class="line"> window-&gt;priv-&gt;keyboard_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1324"><td class="num" id="LN1324">1324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1325"><td class="num" id="LN1325">1325</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1326"><td class="num" id="LN1326">1326</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1327"><td class="num" id="LN1327">1327</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1328"><td class="num" id="LN1328">1328</td><td class="line">keyboard_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1329"><td class="num" id="LN1329">1329</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1330"><td class="num" id="LN1330">1330</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1331"><td class="num" id="LN1331">1331</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1332"><td class="num" id="LN1332">1332</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1333"><td class="num" id="LN1333">1333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1334"><td class="num" id="LN1334">1334</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1335"><td class="num" id="LN1335">1335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1336"><td class="num" id="LN1336">1336</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1337"><td class="num" id="LN1337">1337</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1338"><td class="num" id="LN1338">1338</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1339"><td class="num" id="LN1339">1339</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1340"><td class="num" id="LN1340">1340</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1341"><td class="num" id="LN1341">1341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1342"><td class="num" id="LN1342">1342</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1343"><td class="num" id="LN1343">1343</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1344"><td class="num" id="LN1344">1344</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1345"><td class="num" id="LN1345">1345</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1346"><td class="num" id="LN1346">1346</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1347"><td class="num" id="LN1347">1347</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1348"><td class="num" id="LN1348">1348</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1349"><td class="num" id="LN1349">1349</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1350"><td class="num" id="LN1350">1350</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1351"><td class="num" id="LN1351">1351</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"keyboard command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1351, "keyboard command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1352"><td class="num" id="LN1352">1352</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1353"><td class="num" id="LN1353">1353</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1354"><td class="num" id="LN1354">1354</td><td class="line"> create_keyboard_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1355"><td class="num" id="LN1355">1355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1356"><td class="num" id="LN1356">1356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1357"><td class="num" id="LN1357">1357</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1358"><td class="num" id="LN1358">1358</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1359"><td class="num" id="LN1359">1359</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1360"><td class="num" id="LN1360">1360</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1361"><td class="num" id="LN1361">1361</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1362"><td class="num" id="LN1362">1362</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1363"><td class="num" id="LN1363">1363</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1363, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1364"><td class="num" id="LN1364">1364</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1365"><td class="num" id="LN1365">1365</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1366"><td class="num" id="LN1366">1366</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1367"><td class="num" id="LN1367">1367</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1368"><td class="num" id="LN1368">1368</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1369"><td class="num" id="LN1369">1369</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1370"><td class="num" id="LN1370">1370</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1371"><td class="num" id="LN1371">1371</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1372"><td class="num" id="LN1372">1372</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1373"><td class="num" id="LN1373">1373</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1374"><td class="num" id="LN1374">1374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1375"><td class="num" id="LN1375">1375</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1376"><td class="num" id="LN1376">1376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1377"><td class="num" id="LN1377">1377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1378"><td class="num" id="LN1378">1378</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1379"><td class="num" id="LN1379">1379</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1380"><td class="num" id="LN1380">1380</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1381"><td class="num" id="LN1381">1381</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1382"><td class="num" id="LN1382">1382</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1383"><td class="num" id="LN1383">1383</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1384"><td class="num" id="LN1384">1384</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1385"><td class="num" id="LN1385">1385</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1386"><td class="num" id="LN1386">1386</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1387"><td class="num" id="LN1387">1387</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1388"><td class="num" id="LN1388">1388</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1389"><td class="num" id="LN1389">1389</td><td class="line">embed_keyboard (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1390"><td class="num" id="LN1390">1390</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1391"><td class="num" id="LN1391">1391</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="1392"><td class="num" id="LN1392">1392</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1393"><td class="num" id="LN1393">1393</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;keyboard_enabled</td></tr>
+<tr class="codeline" data-linenumber="1394"><td class="num" id="LN1394">1394</td><td class="line"> || window-&gt;priv-&gt;keyboard_command == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1395"><td class="num" id="LN1395">1395</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1396"><td class="num" id="LN1396">1396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1397"><td class="num" id="LN1397">1397</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Adding embedded keyboard widget"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1397, "Adding embedded keyboard widget"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1398"><td class="num" id="LN1398">1398</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1399"><td class="num" id="LN1399">1399</td><td class="line"> <span class='comment'>/* FIXME: verify command is safe */</span></td></tr>
+<tr class="codeline" data-linenumber="1400"><td class="num" id="LN1400">1400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1401"><td class="num" id="LN1401">1401</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Running command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1401, "Running command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1402"><td class="num" id="LN1402">1402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1403"><td class="num" id="LN1403">1403</td><td class="line"> res = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1404"><td class="num" id="LN1404">1404</td><td class="line"> window-&gt;priv-&gt;keyboard_command,</td></tr>
+<tr class="codeline" data-linenumber="1405"><td class="num" id="LN1405">1405</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_pid,</td></tr>
+<tr class="codeline" data-linenumber="1406"><td class="num" id="LN1406">1406</td><td class="line"> (GIOFunc)keyboard_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1407"><td class="num" id="LN1407">1407</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1408"><td class="num" id="LN1408">1408</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1409"><td class="num" id="LN1409">1409</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="1410"><td class="num" id="LN1410">1410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1411"><td class="num" id="LN1411">1411</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1411, "Could not start command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1412"><td class="num" id="LN1412">1412</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1413"><td class="num" id="LN1413">1413</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1414"><td class="num" id="LN1414">1414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1415"><td class="num" id="LN1415">1415</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1416"><td class="num" id="LN1416">1416</td><td class="line">create_lock_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1417"><td class="num" id="LN1417">1417</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1418"><td class="num" id="LN1418">1418</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1419"><td class="num" id="LN1419">1419</td><td class="line"> window-&gt;priv-&gt;lock_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1420"><td class="num" id="LN1420">1420</td><td class="line"> window-&gt;priv-&gt;lock_box = gtk_grid_new ();</td></tr>
+<tr class="codeline" data-linenumber="1421"><td class="num" id="LN1421">1421</td><td class="line"> gtk_widget_set_halign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1422"><td class="num" id="LN1422">1422</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1423"><td class="num" id="LN1423">1423</td><td class="line"> gtk_widget_set_valign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1424"><td class="num" id="LN1424">1424</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1425"><td class="num" id="LN1425">1425</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;lock_box);</td></tr>
+<tr class="codeline" data-linenumber="1426"><td class="num" id="LN1426">1426</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;lock_box, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1427"><td class="num" id="LN1427">1427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1428"><td class="num" id="LN1428">1428</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_container_get_type<br> ()))))))</span></span>, window-&gt;priv-&gt;lock_socket);</td></tr>
+<tr class="codeline" data-linenumber="1429"><td class="num" id="LN1429">1429</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1430"><td class="num" id="LN1430">1430</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"show"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1431"><td class="num" id="LN1431">1431</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_show), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1432"><td class="num" id="LN1432">1432</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1433"><td class="num" id="LN1433">1433</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1434"><td class="num" id="LN1434">1434</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1435"><td class="num" id="LN1435">1435</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1436"><td class="num" id="LN1436">1436</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1437"><td class="num" id="LN1437">1437</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1438"><td class="num" id="LN1438">1438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1439"><td class="num" id="LN1439">1439</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;lock_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1440"><td class="num" id="LN1440">1440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1441"><td class="num" id="LN1441">1441</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1442"><td class="num" id="LN1442">1442</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1443"><td class="num" id="LN1443">1443</td><td class="line"> embed_keyboard (window);</td></tr>
+<tr class="codeline" data-linenumber="1444"><td class="num" id="LN1444">1444</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1445"><td class="num" id="LN1445">1445</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1446"><td class="num" id="LN1446">1446</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1447"><td class="num" id="LN1447">1447</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1448"><td class="num" id="LN1448">1448</td><td class="line">gs_window_dialog_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1449"><td class="num" id="LN1449">1449</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1450"><td class="num" id="LN1450">1450</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1451"><td class="num" id="LN1451">1451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1452"><td class="num" id="LN1452">1452</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Dialog finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1452, "Dialog finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1453"><td class="num" id="LN1453">1453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1454"><td class="num" id="LN1454">1454</td><td class="line"> <span class='comment'>/* make sure we finish the keyboard thing too */</span></td></tr>
+<tr class="codeline" data-linenumber="1455"><td class="num" id="LN1455">1455</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1456"><td class="num" id="LN1456">1456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1457"><td class="num" id="LN1457">1457</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1458"><td class="num" id="LN1458">1458</td><td class="line"> kill_dialog_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1459"><td class="num" id="LN1459">1459</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1460"><td class="num" id="LN1460">1460</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1461"><td class="num" id="LN1461">1461</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1462"><td class="num" id="LN1462">1462</td><td class="line"> wait_on_child (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1463"><td class="num" id="LN1463">1463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1464"><td class="num" id="LN1464">1464</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1465"><td class="num" id="LN1465">1465</td><td class="line"> window-&gt;priv-&gt;lock_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1466"><td class="num" id="LN1466">1466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1467"><td class="num" id="LN1467">1467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1468"><td class="num" id="LN1468">1468</td><td class="line"> <span class='comment'>/* remove events for the case were we failed to show socket */</span></td></tr>
+<tr class="codeline" data-linenumber="1469"><td class="num" id="LN1469">1469</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1470"><td class="num" id="LN1470">1470</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1471"><td class="num" id="LN1471">1471</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1472"><td class="num" id="LN1472">1472</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1473"><td class="num" id="LN1473">1473</td><td class="line">maybe_kill_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1474"><td class="num" id="LN1474">1474</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1475"><td class="num" id="LN1475">1475</td><td class="line"> <span class='keyword'>if</span> (!window-&gt;priv-&gt;dialog_shake_in_progress</td></tr>
+<tr class="codeline" data-linenumber="1476"><td class="num" id="LN1476">1476</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;dialog_quit_requested</td></tr>
+<tr class="codeline" data-linenumber="1477"><td class="num" id="LN1477">1477</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1478"><td class="num" id="LN1478">1478</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1479"><td class="num" id="LN1479">1479</td><td class="line"> kill (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1480"><td class="num" id="LN1480">1480</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1481"><td class="num" id="LN1481">1481</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1482"><td class="num" id="LN1482">1482</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1483"><td class="num" id="LN1483">1483</td><td class="line"><span class='comment'>/* very rudimentary animation for indicating an auth failure */</span></td></tr>
+<tr class="codeline" data-linenumber="1484"><td class="num" id="LN1484">1484</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1485"><td class="num" id="LN1485">1485</td><td class="line">shake_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1486"><td class="num" id="LN1486">1486</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1487"><td class="num" id="LN1487">1487</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="1488"><td class="num" id="LN1488">1488</td><td class="line"> guint start, end;</td></tr>
+<tr class="codeline" data-linenumber="1489"><td class="num" id="LN1489">1489</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1490"><td class="num" id="LN1490">1490</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1491"><td class="num" id="LN1491">1491</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1492"><td class="num" id="LN1492">1492</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; 8; i++)</td></tr>
+<tr class="codeline" data-linenumber="1493"><td class="num" id="LN1493">1493</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1494"><td class="num" id="LN1494">1494</td><td class="line"> <span class='keyword'>if</span> (i % 2 == 0)</td></tr>
+<tr class="codeline" data-linenumber="1495"><td class="num" id="LN1495">1495</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1496"><td class="num" id="LN1496">1496</td><td class="line"> start = 30;</td></tr>
+<tr class="codeline" data-linenumber="1497"><td class="num" id="LN1497">1497</td><td class="line"> end = 0;</td></tr>
+<tr class="codeline" data-linenumber="1498"><td class="num" id="LN1498">1498</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1499"><td class="num" id="LN1499">1499</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1500"><td class="num" id="LN1500">1500</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1501"><td class="num" id="LN1501">1501</td><td class="line"> start = 0;</td></tr>
+<tr class="codeline" data-linenumber="1502"><td class="num" id="LN1502">1502</td><td class="line"> end = 30;</td></tr>
+<tr class="codeline" data-linenumber="1503"><td class="num" id="LN1503">1503</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1504"><td class="num" id="LN1504">1504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1505"><td class="num" id="LN1505">1505</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_box)</td></tr>
+<tr class="codeline" data-linenumber="1506"><td class="num" id="LN1506">1506</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1507"><td class="num" id="LN1507">1507</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1508"><td class="num" id="LN1508">1508</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1509"><td class="num" id="LN1509">1509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1510"><td class="num" id="LN1510">1510</td><td class="line"> gtk_widget_set_margin_start (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1511"><td class="num" id="LN1511">1511</td><td class="line"> start);</td></tr>
+<tr class="codeline" data-linenumber="1512"><td class="num" id="LN1512">1512</td><td class="line"> gtk_widget_set_margin_end (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1513"><td class="num" id="LN1513">1513</td><td class="line"> end);</td></tr>
+<tr class="codeline" data-linenumber="1514"><td class="num" id="LN1514">1514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1515"><td class="num" id="LN1515">1515</td><td class="line"> <span class='keyword'>while</span> (gtk_events_pending ())</td></tr>
+<tr class="codeline" data-linenumber="1516"><td class="num" id="LN1516">1516</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1517"><td class="num" id="LN1517">1517</td><td class="line"> gtk_main_iteration ();</td></tr>
+<tr class="codeline" data-linenumber="1518"><td class="num" id="LN1518">1518</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1519"><td class="num" id="LN1519">1519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1520"><td class="num" id="LN1520">1520</td><td class="line"> g_usleep (10000);</td></tr>
+<tr class="codeline" data-linenumber="1521"><td class="num" id="LN1521">1521</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1522"><td class="num" id="LN1522">1522</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1523"><td class="num" id="LN1523">1523</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1524"><td class="num" id="LN1524">1524</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1525"><td class="num" id="LN1525">1525</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1526"><td class="num" id="LN1526">1526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1527"><td class="num" id="LN1527">1527</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1528"><td class="num" id="LN1528">1528</td><td class="line">window_set_dialog_up (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1529"><td class="num" id="LN1529">1529</td><td class="line"> gboolean dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1530"><td class="num" id="LN1530">1530</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1531"><td class="num" id="LN1531">1531</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_up == dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1532"><td class="num" id="LN1532">1532</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1533"><td class="num" id="LN1533">1533</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1534"><td class="num" id="LN1534">1534</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1535"><td class="num" id="LN1535">1535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1536"><td class="num" id="LN1536">1536</td><td class="line"> window-&gt;priv-&gt;dialog_up = (dialog_up != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1537"><td class="num" id="LN1537">1537</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"dialog-up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1538"><td class="num" id="LN1538">1538</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1539"><td class="num" id="LN1539">1539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1540"><td class="num" id="LN1540">1540</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1541"><td class="num" id="LN1541">1541</td><td class="line">popdown_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1542"><td class="num" id="LN1542">1542</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1543"><td class="num" id="LN1543">1543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1544"><td class="num" id="LN1544">1544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1545"><td class="num" id="LN1545">1545</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1546"><td class="num" id="LN1546">1546</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1547"><td class="num" id="LN1547">1547</td><td class="line"> gs_window_clear (window);</td></tr>
+<tr class="codeline" data-linenumber="1548"><td class="num" id="LN1548">1548</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1549"><td class="num" id="LN1549">1549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1550"><td class="num" id="LN1550">1550</td><td class="line"> window_set_dialog_up (window, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1551"><td class="num" id="LN1551">1551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1552"><td class="num" id="LN1552">1552</td><td class="line"> <span class='comment'>/* reset the pointer positions */</span></td></tr>
+<tr class="codeline" data-linenumber="1553"><td class="num" id="LN1553">1553</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="1554"><td class="num" id="LN1554">1554</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="1555"><td class="num" id="LN1555">1555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1556"><td class="num" id="LN1556">1556</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_box != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1557"><td class="num" id="LN1557">1557</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1558"><td class="num" id="LN1558">1558</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1559"><td class="num" id="LN1559">1559</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1560"><td class="num" id="LN1560">1560</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1561"><td class="num" id="LN1561">1561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1562"><td class="num" id="LN1562">1562</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1563"><td class="num" id="LN1563">1563</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="1564"><td class="num" id="LN1564">1564</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1565"><td class="num" id="LN1565">1565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1566"><td class="num" id="LN1566">1566</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1567"><td class="num" id="LN1567">1567</td><td class="line">lock_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1568"><td class="num" id="LN1568">1568</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1569"><td class="num" id="LN1569">1569</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1570"><td class="num" id="LN1570">1570</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1571"><td class="num" id="LN1571">1571</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1572"><td class="num" id="LN1572">1572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1573"><td class="num" id="LN1573">1573</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1574"><td class="num" id="LN1574">1574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1575"><td class="num" id="LN1575">1575</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1576"><td class="num" id="LN1576">1576</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1577"><td class="num" id="LN1577">1577</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1578"><td class="num" id="LN1578">1578</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1579"><td class="num" id="LN1579">1579</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1580"><td class="num" id="LN1580">1580</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1581"><td class="num" id="LN1581">1581</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1582"><td class="num" id="LN1582">1582</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1583"><td class="num" id="LN1583">1583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1584"><td class="num" id="LN1584">1584</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1585"><td class="num" id="LN1585">1585</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1586"><td class="num" id="LN1586">1586</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1587"><td class="num" id="LN1587">1587</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1587, "command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1588"><td class="num" id="LN1588">1588</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1589"><td class="num" id="LN1589">1589</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"WINDOW ID="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1590"><td class="num" id="LN1590">1590</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1591"><td class="num" id="LN1591">1591</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1592"><td class="num" id="LN1592">1592</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1593"><td class="num" id="LN1593">1593</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" WINDOW ID= %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1594"><td class="num" id="LN1594">1594</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1595"><td class="num" id="LN1595">1595</td><td class="line"> create_lock_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1596"><td class="num" id="LN1596">1596</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1597"><td class="num" id="LN1597">1597</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1598"><td class="num" id="LN1598">1598</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1599"><td class="num" id="LN1599">1599</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1600"><td class="num" id="LN1600">1600</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE=AUTH FAILED"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1601"><td class="num" id="LN1601">1601</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1602"><td class="num" id="LN1602">1602</td><td class="line"> shake_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1603"><td class="num" id="LN1603">1603</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1604"><td class="num" id="LN1604">1604</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1605"><td class="num" id="LN1605">1605</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1606"><td class="num" id="LN1606">1606</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1607"><td class="num" id="LN1607">1607</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE=OK"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1608"><td class="num" id="LN1608">1608</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1609"><td class="num" id="LN1609">1609</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got OK response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1609, "Got OK response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1610"><td class="num" id="LN1610">1610</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_OK;</td></tr>
+<tr class="codeline" data-linenumber="1611"><td class="num" id="LN1611">1611</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1612"><td class="num" id="LN1612">1612</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1613"><td class="num" id="LN1613">1613</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1614"><td class="num" id="LN1614">1614</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got CANCEL response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1614, "Got CANCEL response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1615"><td class="num" id="LN1615">1615</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_CANCEL;</td></tr>
+<tr class="codeline" data-linenumber="1616"><td class="num" id="LN1616">1616</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1617"><td class="num" id="LN1617">1617</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1618"><td class="num" id="LN1618">1618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1619"><td class="num" id="LN1619">1619</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"REQUEST QUIT"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1620"><td class="num" id="LN1620">1620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1621"><td class="num" id="LN1621">1621</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got request for quit"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1621, "Got request for quit"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1622"><td class="num" id="LN1622">1622</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1623"><td class="num" id="LN1623">1623</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1624"><td class="num" id="LN1624">1624</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1625"><td class="num" id="LN1625">1625</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1626"><td class="num" id="LN1626">1626</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1627"><td class="num" id="LN1627">1627</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1628"><td class="num" id="LN1628">1628</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1629"><td class="num" id="LN1629">1629</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1630"><td class="num" id="LN1630">1630</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1631"><td class="num" id="LN1631">1631</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1631, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1632"><td class="num" id="LN1632">1632</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1633"><td class="num" id="LN1633">1633</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1634"><td class="num" id="LN1634">1634</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1635"><td class="num" id="LN1635">1635</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1636"><td class="num" id="LN1636">1636</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1637"><td class="num" id="LN1637">1637</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1638"><td class="num" id="LN1638">1638</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1639"><td class="num" id="LN1639">1639</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1640"><td class="num" id="LN1640">1640</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1641"><td class="num" id="LN1641">1641</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1642"><td class="num" id="LN1642">1642</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1643"><td class="num" id="LN1643">1643</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1644"><td class="num" id="LN1644">1644</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1645"><td class="num" id="LN1645">1645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1646"><td class="num" id="LN1646">1646</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1647"><td class="num" id="LN1647">1647</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1648"><td class="num" id="LN1648">1648</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1649"><td class="num" id="LN1649">1649</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1650"><td class="num" id="LN1650">1650</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_response == DIALOG_RESPONSE_OK)</td></tr>
+<tr class="codeline" data-linenumber="1651"><td class="num" id="LN1651">1651</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1652"><td class="num" id="LN1652">1652</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1653"><td class="num" id="LN1653">1653</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1654"><td class="num" id="LN1654">1654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1655"><td class="num" id="LN1655">1655</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1656"><td class="num" id="LN1656">1656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1657"><td class="num" id="LN1657">1657</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1658"><td class="num" id="LN1658">1658</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1659"><td class="num" id="LN1659">1659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1660"><td class="num" id="LN1660">1660</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1661"><td class="num" id="LN1661">1661</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1662"><td class="num" id="LN1662">1662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1663"><td class="num" id="LN1663">1663</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1664"><td class="num" id="LN1664">1664</td><td class="line">is_logout_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1665"><td class="num" id="LN1665">1665</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1666"><td class="num" id="LN1666">1666</td><td class="line"> <span class='keyword'>double</span> elapsed;</td></tr>
+<tr class="codeline" data-linenumber="1667"><td class="num" id="LN1667">1667</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1668"><td class="num" id="LN1668">1668</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1669"><td class="num" id="LN1669">1669</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1670"><td class="num" id="LN1670">1670</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1671"><td class="num" id="LN1671">1671</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1672"><td class="num" id="LN1672">1672</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1673"><td class="num" id="LN1673">1673</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_command)</td></tr>
+<tr class="codeline" data-linenumber="1674"><td class="num" id="LN1674">1674</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1675"><td class="num" id="LN1675">1675</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1676"><td class="num" id="LN1676">1676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1677"><td class="num" id="LN1677">1677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1678"><td class="num" id="LN1678">1678</td><td class="line"> elapsed = g_timer_elapsed (window-&gt;priv-&gt;timer, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1679"><td class="num" id="LN1679">1679</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1680"><td class="num" id="LN1680">1680</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;logout_timeout &lt; (elapsed * 1000))</td></tr>
+<tr class="codeline" data-linenumber="1681"><td class="num" id="LN1681">1681</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1682"><td class="num" id="LN1682">1682</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1683"><td class="num" id="LN1683">1683</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1684"><td class="num" id="LN1684">1684</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1685"><td class="num" id="LN1685">1685</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1686"><td class="num" id="LN1686">1686</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1687"><td class="num" id="LN1687">1687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1688"><td class="num" id="LN1688">1688</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1689"><td class="num" id="LN1689">1689</td><td class="line">is_user_switch_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1690"><td class="num" id="LN1690">1690</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1691"><td class="num" id="LN1691">1691</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;user_switch_enabled;</td></tr>
+<tr class="codeline" data-linenumber="1692"><td class="num" id="LN1692">1692</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1693"><td class="num" id="LN1693">1693</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1694"><td class="num" id="LN1694">1694</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1695"><td class="num" id="LN1695">1695</td><td class="line">popup_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1696"><td class="num" id="LN1696">1696</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1697"><td class="num" id="LN1697">1697</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1698"><td class="num" id="LN1698">1698</td><td class="line"> GString *command;</td></tr>
+<tr class="codeline" data-linenumber="1699"><td class="num" id="LN1699">1699</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1700"><td class="num" id="LN1700">1700</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Popping up dialog"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1700, "Popping up dialog"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1701"><td class="num" id="LN1701">1701</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1702"><td class="num" id="LN1702">1702</td><td class="line"> command = g_string_new (<span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1703"><td class="num" id="LN1703">1703</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1704"><td class="num" id="LN1704">1704</td><td class="line"> <span class='keyword'>if</span> (is_logout_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1705"><td class="num" id="LN1705">1705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1706"><td class="num" id="LN1706">1706</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-logout"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1707"><td class="num" id="LN1707">1707</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --logout-command='%s'"</span>, window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1708"><td class="num" id="LN1708">1708</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1709"><td class="num" id="LN1709">1709</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1710"><td class="num" id="LN1710">1710</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;status_message)</td></tr>
+<tr class="codeline" data-linenumber="1711"><td class="num" id="LN1711">1711</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1712"><td class="num" id="LN1712">1712</td><td class="line"> <span class='keyword'>char</span> *quoted;</td></tr>
+<tr class="codeline" data-linenumber="1713"><td class="num" id="LN1713">1713</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1714"><td class="num" id="LN1714">1714</td><td class="line"> quoted = g_shell_quote (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1715"><td class="num" id="LN1715">1715</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --status-message=%s"</span>, quoted);</td></tr>
+<tr class="codeline" data-linenumber="1716"><td class="num" id="LN1716">1716</td><td class="line"> g_free (quoted);</td></tr>
+<tr class="codeline" data-linenumber="1717"><td class="num" id="LN1717">1717</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1718"><td class="num" id="LN1718">1718</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1719"><td class="num" id="LN1719">1719</td><td class="line"> <span class='keyword'>if</span> (is_user_switch_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1720"><td class="num" id="LN1720">1720</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1721"><td class="num" id="LN1721">1721</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-switch"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1722"><td class="num" id="LN1722">1722</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1723"><td class="num" id="LN1723">1723</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1724"><td class="num" id="LN1724">1724</td><td class="line"> <span class='keyword'>if</span> (gs_debug_enabled ())</td></tr>
+<tr class="codeline" data-linenumber="1725"><td class="num" id="LN1725">1725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1726"><td class="num" id="LN1726">1726</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --verbose"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1727"><td class="num" id="LN1727">1727</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1728"><td class="num" id="LN1728">1728</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1729"><td class="num" id="LN1729">1729</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1730"><td class="num" id="LN1730">1730</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1731"><td class="num" id="LN1731">1731</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1732"><td class="num" id="LN1732">1732</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1733"><td class="num" id="LN1733">1733</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1734"><td class="num" id="LN1734">1734</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1735"><td class="num" id="LN1735">1735</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1736"><td class="num" id="LN1736">1736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1737"><td class="num" id="LN1737">1737</td><td class="line"> result = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1738"><td class="num" id="LN1738">1738</td><td class="line"> command-&gt;str,</td></tr>
+<tr class="codeline" data-linenumber="1739"><td class="num" id="LN1739">1739</td><td class="line"> &amp;window-&gt;priv-&gt;lock_pid,</td></tr>
+<tr class="codeline" data-linenumber="1740"><td class="num" id="LN1740">1740</td><td class="line"> (GIOFunc)lock_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1741"><td class="num" id="LN1741">1741</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1742"><td class="num" id="LN1742">1742</td><td class="line"> &amp;window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1743"><td class="num" id="LN1743">1743</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1744"><td class="num" id="LN1744">1744</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1745"><td class="num" id="LN1745">1745</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, command-&gt;str)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1745, "Could not start command: %s"<br>, command-&gt;str)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1746"><td class="num" id="LN1746">1746</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1747"><td class="num" id="LN1747">1747</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1748"><td class="num" id="LN1748">1748</td><td class="line"> g_string_free (command, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1749"><td class="num" id="LN1749">1749</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1750"><td class="num" id="LN1750">1750</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1751"><td class="num" id="LN1751">1751</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1752"><td class="num" id="LN1752">1752</td><td class="line">popup_dialog_idle (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1753"><td class="num" id="LN1753">1753</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1754"><td class="num" id="LN1754">1754</td><td class="line"> GSWindow *window = data;</td></tr>
+<tr class="codeline" data-linenumber="1755"><td class="num" id="LN1755">1755</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1756"><td class="num" id="LN1756">1756</td><td class="line"> popup_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1757"><td class="num" id="LN1757">1757</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1758"><td class="num" id="LN1758">1758</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1759"><td class="num" id="LN1759">1759</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1760"><td class="num" id="LN1760">1760</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1761"><td class="num" id="LN1761">1761</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1762"><td class="num" id="LN1762">1762</td><td class="line">gs_window_request_unlock (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1763"><td class="num" id="LN1763">1763</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1764"><td class="num" id="LN1764">1764</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1765"><td class="num" id="LN1765">1765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1766"><td class="num" id="LN1766">1766</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Requesting unlock"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1766, "Requesting unlock"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1767"><td class="num" id="LN1767">1767</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1768"><td class="num" id="LN1768">1768</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_visible (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="1769"><td class="num" id="LN1769">1769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1770"><td class="num" id="LN1770">1770</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Request unlock but window is not visible!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1770, "Request unlock but window is not visible!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1771"><td class="num" id="LN1771">1771</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1772"><td class="num" id="LN1772">1772</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1773"><td class="num" id="LN1773">1773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1774"><td class="num" id="LN1774">1774</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1775"><td class="num" id="LN1775">1775</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1776"><td class="num" id="LN1776">1776</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1777"><td class="num" id="LN1777">1777</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1778"><td class="num" id="LN1778">1778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1779"><td class="num" id="LN1779">1779</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1780"><td class="num" id="LN1780">1780</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1781"><td class="num" id="LN1781">1781</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1782"><td class="num" id="LN1782">1782</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1783"><td class="num" id="LN1783">1783</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1784"><td class="num" id="LN1784">1784</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1785"><td class="num" id="LN1785">1785</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1786"><td class="num" id="LN1786">1786</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id == 0)</td></tr>
+<tr class="codeline" data-linenumber="1787"><td class="num" id="LN1787">1787</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1788"><td class="num" id="LN1788">1788</td><td class="line"> add_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1789"><td class="num" id="LN1789">1789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1790"><td class="num" id="LN1790">1790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1791"><td class="num" id="LN1791">1791</td><td class="line"> window_set_dialog_up (window, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1792"><td class="num" id="LN1792">1792</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1793"><td class="num" id="LN1793">1793</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1794"><td class="num" id="LN1794">1794</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1795"><td class="num" id="LN1795">1795</td><td class="line">gs_window_cancel_unlock_request (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1796"><td class="num" id="LN1796">1796</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1797"><td class="num" id="LN1797">1797</td><td class="line"> <span class='comment'>/* FIXME: This is a bit of a hammer approach...</span></td></tr>
+<tr class="codeline" data-linenumber="1798"><td class="num" id="LN1798">1798</td><td class="line"> <span class='comment'>* Maybe we should send a delete-event to</span></td></tr>
+<tr class="codeline" data-linenumber="1799"><td class="num" id="LN1799">1799</td><td class="line"> <span class='comment'>* the plug?</span></td></tr>
+<tr class="codeline" data-linenumber="1800"><td class="num" id="LN1800">1800</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1801"><td class="num" id="LN1801">1801</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1802"><td class="num" id="LN1802">1802</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1803"><td class="num" id="LN1803">1803</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1804"><td class="num" id="LN1804">1804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1805"><td class="num" id="LN1805">1805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1806"><td class="num" id="LN1806">1806</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1807"><td class="num" id="LN1807">1807</td><td class="line">gs_window_set_lock_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1808"><td class="num" id="LN1808">1808</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1809"><td class="num" id="LN1809">1809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1810"><td class="num" id="LN1810">1810</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1811"><td class="num" id="LN1811">1811</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1812"><td class="num" id="LN1812">1812</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_enabled == lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1813"><td class="num" id="LN1813">1813</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1814"><td class="num" id="LN1814">1814</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1815"><td class="num" id="LN1815">1815</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1816"><td class="num" id="LN1816">1816</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1817"><td class="num" id="LN1817">1817</td><td class="line"> window-&gt;priv-&gt;lock_enabled = (lock_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1818"><td class="num" id="LN1818">1818</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"lock-enabled"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1819"><td class="num" id="LN1819">1819</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1820"><td class="num" id="LN1820">1820</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1821"><td class="num" id="LN1821">1821</td><td class="line">GdkDisplay *</td></tr>
+<tr class="codeline" data-linenumber="1822"><td class="num" id="LN1822">1822</td><td class="line">gs_window_get_display (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1823"><td class="num" id="LN1823">1823</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1824"><td class="num" id="LN1824">1824</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1825"><td class="num" id="LN1825">1825</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1826"><td class="num" id="LN1826">1826</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1827"><td class="num" id="LN1827">1827</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1828"><td class="num" id="LN1828">1828</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1829"><td class="num" id="LN1829">1829</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1830"><td class="num" id="LN1830">1830</td><td class="line">gs_window_set_keyboard_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1831"><td class="num" id="LN1831">1831</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="1832"><td class="num" id="LN1832">1832</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1833"><td class="num" id="LN1833">1833</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1834"><td class="num" id="LN1834">1834</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1835"><td class="num" id="LN1835">1835</td><td class="line"> window-&gt;priv-&gt;keyboard_enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1836"><td class="num" id="LN1836">1836</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1837"><td class="num" id="LN1837">1837</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1838"><td class="num" id="LN1838">1838</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1839"><td class="num" id="LN1839">1839</td><td class="line">gs_window_set_keyboard_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1840"><td class="num" id="LN1840">1840</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1841"><td class="num" id="LN1841">1841</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1842"><td class="num" id="LN1842">1842</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1843"><td class="num" id="LN1843">1843</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1844"><td class="num" id="LN1844">1844</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="1845"><td class="num" id="LN1845">1845</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1846"><td class="num" id="LN1846">1846</td><td class="line"> <span class='keyword'>if</span> (command != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1847"><td class="num" id="LN1847">1847</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1848"><td class="num" id="LN1848">1848</td><td class="line"> window-&gt;priv-&gt;keyboard_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1849"><td class="num" id="LN1849">1849</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1850"><td class="num" id="LN1850">1850</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1851"><td class="num" id="LN1851">1851</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1852"><td class="num" id="LN1852">1852</td><td class="line"> window-&gt;priv-&gt;keyboard_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1853"><td class="num" id="LN1853">1853</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1854"><td class="num" id="LN1854">1854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1855"><td class="num" id="LN1855">1855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1856"><td class="num" id="LN1856">1856</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1857"><td class="num" id="LN1857">1857</td><td class="line">gs_window_set_logout_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1858"><td class="num" id="LN1858">1858</td><td class="line"> gboolean logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1859"><td class="num" id="LN1859">1859</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1860"><td class="num" id="LN1860">1860</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1861"><td class="num" id="LN1861">1861</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1862"><td class="num" id="LN1862">1862</td><td class="line"> window-&gt;priv-&gt;logout_enabled = (logout_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1863"><td class="num" id="LN1863">1863</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1864"><td class="num" id="LN1864">1864</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1865"><td class="num" id="LN1865">1865</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1866"><td class="num" id="LN1866">1866</td><td class="line">gs_window_set_user_switch_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1867"><td class="num" id="LN1867">1867</td><td class="line"> gboolean user_switch_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1868"><td class="num" id="LN1868">1868</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1869"><td class="num" id="LN1869">1869</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1870"><td class="num" id="LN1870">1870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1871"><td class="num" id="LN1871">1871</td><td class="line"> window-&gt;priv-&gt;user_switch_enabled = (user_switch_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1872"><td class="num" id="LN1872">1872</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1873"><td class="num" id="LN1873">1873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1874"><td class="num" id="LN1874">1874</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1875"><td class="num" id="LN1875">1875</td><td class="line">gs_window_set_logout_timeout (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1876"><td class="num" id="LN1876">1876</td><td class="line"> glong logout_timeout)</td></tr>
+<tr class="codeline" data-linenumber="1877"><td class="num" id="LN1877">1877</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1878"><td class="num" id="LN1878">1878</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1879"><td class="num" id="LN1879">1879</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1880"><td class="num" id="LN1880">1880</td><td class="line"> <span class='keyword'>if</span> (logout_timeout &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1881"><td class="num" id="LN1881">1881</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1882"><td class="num" id="LN1882">1882</td><td class="line"> window-&gt;priv-&gt;logout_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="1883"><td class="num" id="LN1883">1883</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1884"><td class="num" id="LN1884">1884</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1885"><td class="num" id="LN1885">1885</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1886"><td class="num" id="LN1886">1886</td><td class="line"> window-&gt;priv-&gt;logout_timeout = logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="1887"><td class="num" id="LN1887">1887</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1888"><td class="num" id="LN1888">1888</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1889"><td class="num" id="LN1889">1889</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1890"><td class="num" id="LN1890">1890</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1891"><td class="num" id="LN1891">1891</td><td class="line">gs_window_set_logout_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1892"><td class="num" id="LN1892">1892</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1893"><td class="num" id="LN1893">1893</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1894"><td class="num" id="LN1894">1894</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1895"><td class="num" id="LN1895">1895</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1896"><td class="num" id="LN1896">1896</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1897"><td class="num" id="LN1897">1897</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1898"><td class="num" id="LN1898">1898</td><td class="line"> <span class='keyword'>if</span> (command)</td></tr>
+<tr class="codeline" data-linenumber="1899"><td class="num" id="LN1899">1899</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1900"><td class="num" id="LN1900">1900</td><td class="line"> window-&gt;priv-&gt;logout_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1901"><td class="num" id="LN1901">1901</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1902"><td class="num" id="LN1902">1902</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1903"><td class="num" id="LN1903">1903</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1904"><td class="num" id="LN1904">1904</td><td class="line"> window-&gt;priv-&gt;logout_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1905"><td class="num" id="LN1905">1905</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1906"><td class="num" id="LN1906">1906</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1907"><td class="num" id="LN1907">1907</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1908"><td class="num" id="LN1908">1908</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1909"><td class="num" id="LN1909">1909</td><td class="line">gs_window_set_status_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1910"><td class="num" id="LN1910">1910</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_message)</td></tr>
+<tr class="codeline" data-linenumber="1911"><td class="num" id="LN1911">1911</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1912"><td class="num" id="LN1912">1912</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1913"><td class="num" id="LN1913">1913</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1914"><td class="num" id="LN1914">1914</td><td class="line"> g_free (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1915"><td class="num" id="LN1915">1915</td><td class="line"> window-&gt;priv-&gt;status_message = g_strdup (status_message);</td></tr>
+<tr class="codeline" data-linenumber="1916"><td class="num" id="LN1916">1916</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1917"><td class="num" id="LN1917">1917</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1918"><td class="num" id="LN1918">1918</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1919"><td class="num" id="LN1919">1919</td><td class="line">gs_window_set_monitor (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1920"><td class="num" id="LN1920">1920</td><td class="line"> GdkMonitor *monitor)</td></tr>
+<tr class="codeline" data-linenumber="1921"><td class="num" id="LN1921">1921</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1922"><td class="num" id="LN1922">1922</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1923"><td class="num" id="LN1923">1923</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1924"><td class="num" id="LN1924">1924</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;monitor == monitor)</td></tr>
+<tr class="codeline" data-linenumber="1925"><td class="num" id="LN1925">1925</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1926"><td class="num" id="LN1926">1926</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1927"><td class="num" id="LN1927">1927</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1928"><td class="num" id="LN1928">1928</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1929"><td class="num" id="LN1929">1929</td><td class="line"> window-&gt;priv-&gt;monitor = monitor;</td></tr>
+<tr class="codeline" data-linenumber="1930"><td class="num" id="LN1930">1930</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1931"><td class="num" id="LN1931">1931</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1932"><td class="num" id="LN1932">1932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1933"><td class="num" id="LN1933">1933</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"monitor"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1934"><td class="num" id="LN1934">1934</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1935"><td class="num" id="LN1935">1935</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1936"><td class="num" id="LN1936">1936</td><td class="line">GdkMonitor *</td></tr>
+<tr class="codeline" data-linenumber="1937"><td class="num" id="LN1937">1937</td><td class="line">gs_window_get_monitor (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1938"><td class="num" id="LN1938">1938</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1939"><td class="num" id="LN1939">1939</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1940"><td class="num" id="LN1940">1940</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1941"><td class="num" id="LN1941">1941</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="1942"><td class="num" id="LN1942">1942</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1943"><td class="num" id="LN1943">1943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1944"><td class="num" id="LN1944">1944</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1945"><td class="num" id="LN1945">1945</td><td class="line">gs_window_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1946"><td class="num" id="LN1946">1946</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1947"><td class="num" id="LN1947">1947</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1948"><td class="num" id="LN1948">1948</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1949"><td class="num" id="LN1949">1949</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1950"><td class="num" id="LN1950">1950</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1951"><td class="num" id="LN1951">1951</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1952"><td class="num" id="LN1952">1952</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1953"><td class="num" id="LN1953">1953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1954"><td class="num" id="LN1954">1954</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1955"><td class="num" id="LN1955">1955</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1956"><td class="num" id="LN1956">1956</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1957"><td class="num" id="LN1957">1957</td><td class="line"> gs_window_set_lock_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1958"><td class="num" id="LN1958">1958</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1959"><td class="num" id="LN1959">1959</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1960"><td class="num" id="LN1960">1960</td><td class="line"> gs_window_set_keyboard_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1961"><td class="num" id="LN1961">1961</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1962"><td class="num" id="LN1962">1962</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1963"><td class="num" id="LN1963">1963</td><td class="line"> gs_window_set_keyboard_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1964"><td class="num" id="LN1964">1964</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1965"><td class="num" id="LN1965">1965</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1966"><td class="num" id="LN1966">1966</td><td class="line"> gs_window_set_logout_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1967"><td class="num" id="LN1967">1967</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1968"><td class="num" id="LN1968">1968</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1969"><td class="num" id="LN1969">1969</td><td class="line"> gs_window_set_logout_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1970"><td class="num" id="LN1970">1970</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1971"><td class="num" id="LN1971">1971</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="1972"><td class="num" id="LN1972">1972</td><td class="line"> gs_window_set_status_message (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1973"><td class="num" id="LN1973">1973</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1974"><td class="num" id="LN1974">1974</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="1975"><td class="num" id="LN1975">1975</td><td class="line"> gs_window_set_logout_timeout (self, g_value_get_long (value));</td></tr>
+<tr class="codeline" data-linenumber="1976"><td class="num" id="LN1976">1976</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1977"><td class="num" id="LN1977">1977</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="1978"><td class="num" id="LN1978">1978</td><td class="line"> gs_window_set_monitor (self, g_value_get_pointer (value));</td></tr>
+<tr class="codeline" data-linenumber="1979"><td class="num" id="LN1979">1979</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1980"><td class="num" id="LN1980">1980</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1981"><td class="num" id="LN1981">1981</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 1981, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1982"><td class="num" id="LN1982">1982</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1983"><td class="num" id="LN1983">1983</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1984"><td class="num" id="LN1984">1984</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1985"><td class="num" id="LN1985">1985</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1986"><td class="num" id="LN1986">1986</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1987"><td class="num" id="LN1987">1987</td><td class="line">gs_window_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1988"><td class="num" id="LN1988">1988</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1989"><td class="num" id="LN1989">1989</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1990"><td class="num" id="LN1990">1990</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1991"><td class="num" id="LN1991">1991</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1992"><td class="num" id="LN1992">1992</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1993"><td class="num" id="LN1993">1993</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1994"><td class="num" id="LN1994">1994</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1995"><td class="num" id="LN1995">1995</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1996"><td class="num" id="LN1996">1996</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1997"><td class="num" id="LN1997">1997</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1998"><td class="num" id="LN1998">1998</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1999"><td class="num" id="LN1999">1999</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;lock_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2000"><td class="num" id="LN2000">2000</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2001"><td class="num" id="LN2001">2001</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2002"><td class="num" id="LN2002">2002</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;keyboard_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2003"><td class="num" id="LN2003">2003</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2004"><td class="num" id="LN2004">2004</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2005"><td class="num" id="LN2005">2005</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2006"><td class="num" id="LN2006">2006</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2007"><td class="num" id="LN2007">2007</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2008"><td class="num" id="LN2008">2008</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;logout_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2009"><td class="num" id="LN2009">2009</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2010"><td class="num" id="LN2010">2010</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2011"><td class="num" id="LN2011">2011</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2012"><td class="num" id="LN2012">2012</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2013"><td class="num" id="LN2013">2013</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="2014"><td class="num" id="LN2014">2014</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="2015"><td class="num" id="LN2015">2015</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2016"><td class="num" id="LN2016">2016</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="2017"><td class="num" id="LN2017">2017</td><td class="line"> g_value_set_long (value, self-&gt;priv-&gt;logout_timeout);</td></tr>
+<tr class="codeline" data-linenumber="2018"><td class="num" id="LN2018">2018</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2019"><td class="num" id="LN2019">2019</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="2020"><td class="num" id="LN2020">2020</td><td class="line"> g_value_set_pointer (value, (gpointer) self-&gt;priv-&gt;monitor);</td></tr>
+<tr class="codeline" data-linenumber="2021"><td class="num" id="LN2021">2021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2022"><td class="num" id="LN2022">2022</td><td class="line"> <span class='keyword'>case</span> PROP_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2023"><td class="num" id="LN2023">2023</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;obscured);</td></tr>
+<tr class="codeline" data-linenumber="2024"><td class="num" id="LN2024">2024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2025"><td class="num" id="LN2025">2025</td><td class="line"> <span class='keyword'>case</span> PROP_DIALOG_UP:</td></tr>
+<tr class="codeline" data-linenumber="2026"><td class="num" id="LN2026">2026</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;dialog_up);</td></tr>
+<tr class="codeline" data-linenumber="2027"><td class="num" id="LN2027">2027</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2028"><td class="num" id="LN2028">2028</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2029"><td class="num" id="LN2029">2029</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 2029, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2030"><td class="num" id="LN2030">2030</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2031"><td class="num" id="LN2031">2031</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2032"><td class="num" id="LN2032">2032</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2033"><td class="num" id="LN2033">2033</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2034"><td class="num" id="LN2034">2034</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2035"><td class="num" id="LN2035">2035</td><td class="line">queue_key_event (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2036"><td class="num" id="LN2036">2036</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2037"><td class="num" id="LN2037">2037</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2038"><td class="num" id="LN2038">2038</td><td class="line"> <span class='comment'>/* Eat the first return, enter, escape, or space */</span></td></tr>
+<tr class="codeline" data-linenumber="2039"><td class="num" id="LN2039">2039</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;key_events == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2040"><td class="num" id="LN2040">2040</td><td class="line"> &amp;&amp; (event-&gt;keyval == <span class='macro'>GDK_KEY_Return<span class='macro_popup'>0xff0d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2041"><td class="num" id="LN2041">2041</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_KP_Enter<span class='macro_popup'>0xff8d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2042"><td class="num" id="LN2042">2042</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_Escape<span class='macro_popup'>0xff1b</span></span></td></tr>
+<tr class="codeline" data-linenumber="2043"><td class="num" id="LN2043">2043</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_space<span class='macro_popup'>0x020</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2044"><td class="num" id="LN2044">2044</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2045"><td class="num" id="LN2045">2045</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2046"><td class="num" id="LN2046">2046</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2047"><td class="num" id="LN2047">2047</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2048"><td class="num" id="LN2048">2048</td><td class="line"> <span class='comment'>/* Only cache MAX_QUEUED_EVENTS key events. If there are any more than this then</span></td></tr>
+<tr class="codeline" data-linenumber="2049"><td class="num" id="LN2049">2049</td><td class="line"> <span class='comment'>something is wrong */</span></td></tr>
+<tr class="codeline" data-linenumber="2050"><td class="num" id="LN2050">2050</td><td class="line"> <span class='comment'>/* Don't queue keys that may cause focus navigation in the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="2051"><td class="num" id="LN2051">2051</td><td class="line"> <span class='keyword'>if</span> (g_list_length (window-&gt;priv-&gt;key_events) &lt; <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span></td></tr>
+<tr class="codeline" data-linenumber="2052"><td class="num" id="LN2052">2052</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Tab<span class='macro_popup'>0xff09</span></span></td></tr>
+<tr class="codeline" data-linenumber="2053"><td class="num" id="LN2053">2053</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Up<span class='macro_popup'>0xff52</span></span></td></tr>
+<tr class="codeline" data-linenumber="2054"><td class="num" id="LN2054">2054</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Down<span class='macro_popup'>0xff54</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2055"><td class="num" id="LN2055">2055</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2056"><td class="num" id="LN2056">2056</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_prepend (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="2057"><td class="num" id="LN2057">2057</td><td class="line"> gdk_event_copy ((GdkEvent *)event));</td></tr>
+<tr class="codeline" data-linenumber="2058"><td class="num" id="LN2058">2058</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2059"><td class="num" id="LN2059">2059</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2060"><td class="num" id="LN2060">2060</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2061"><td class="num" id="LN2061">2061</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2062"><td class="num" id="LN2062">2062</td><td class="line">maybe_handle_activity (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2063"><td class="num" id="LN2063">2063</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2064"><td class="num" id="LN2064">2064</td><td class="line"> gboolean handled;</td></tr>
+<tr class="codeline" data-linenumber="2065"><td class="num" id="LN2065">2065</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2066"><td class="num" id="LN2066">2066</td><td class="line"> handled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2067"><td class="num" id="LN2067">2067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2068"><td class="num" id="LN2068">2068</td><td class="line"> <span class='comment'>/* if we already have a socket then don't bother */</span></td></tr>
+<tr class="codeline" data-linenumber="2069"><td class="num" id="LN2069">2069</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_socket</td></tr>
+<tr class="codeline" data-linenumber="2070"><td class="num" id="LN2070">2070</td><td class="line"> &amp;&amp; gtk_widget_get_sensitive (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2071"><td class="num" id="LN2071">2071</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2072"><td class="num" id="LN2072">2072</td><td class="line"> g_signal_emit (window, signals [ACTIVITY], 0, &amp;handled);</td></tr>
+<tr class="codeline" data-linenumber="2073"><td class="num" id="LN2073">2073</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2074"><td class="num" id="LN2074">2074</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2075"><td class="num" id="LN2075">2075</td><td class="line"> <span class='keyword'>return</span> handled;</td></tr>
+<tr class="codeline" data-linenumber="2076"><td class="num" id="LN2076">2076</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2077"><td class="num" id="LN2077">2077</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2078"><td class="num" id="LN2078">2078</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2079"><td class="num" id="LN2079">2079</td><td class="line">gs_window_real_key_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2080"><td class="num" id="LN2080">2080</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2081"><td class="num" id="LN2081">2081</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2082"><td class="num" id="LN2082">2082</td><td class="line"> <span class='comment'>/*g_message ("KEY PRESS state: %u keyval %u", event-&gt;state, event-&gt;keyval);*/</span></td></tr>
+<tr class="codeline" data-linenumber="2083"><td class="num" id="LN2083">2083</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2084"><td class="num" id="LN2084">2084</td><td class="line"> <span class='comment'>/* Ignore brightness keys */</span></td></tr>
+<tr class="codeline" data-linenumber="2085"><td class="num" id="LN2085">2085</td><td class="line"> <span class='keyword'>if</span> (event-&gt;hardware_keycode == 101 || event-&gt;hardware_keycode == 212)</td></tr>
+<tr class="codeline" data-linenumber="2086"><td class="num" id="LN2086">2086</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2087"><td class="num" id="LN2087">2087</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Ignoring brightness keys"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2087, "Ignoring brightness keys"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2088"><td class="num" id="LN2088">2088</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2089"><td class="num" id="LN2089">2089</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2090"><td class="num" id="LN2090">2090</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2091"><td class="num" id="LN2091">2091</td><td class="line"> maybe_handle_activity (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2092"><td class="num" id="LN2092">2092</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2093"><td class="num" id="LN2093">2093</td><td class="line"> queue_key_event (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="2094"><td class="num" id="LN2094">2094</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2095"><td class="num" id="LN2095">2095</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event)</td></tr>
+<tr class="codeline" data-linenumber="2096"><td class="num" id="LN2096">2096</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2097"><td class="num" id="LN2097">2097</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event (widget, event);</td></tr>
+<tr class="codeline" data-linenumber="2098"><td class="num" id="LN2098">2098</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2099"><td class="num" id="LN2099">2099</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2100"><td class="num" id="LN2100">2100</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2101"><td class="num" id="LN2101">2101</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2102"><td class="num" id="LN2102">2102</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2103"><td class="num" id="LN2103">2103</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2104"><td class="num" id="LN2104">2104</td><td class="line">gs_window_real_motion_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2105"><td class="num" id="LN2105">2105</td><td class="line"> GdkEventMotion *event)</td></tr>
+<tr class="codeline" data-linenumber="2106"><td class="num" id="LN2106">2106</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2107"><td class="num" id="LN2107">2107</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2108"><td class="num" id="LN2108">2108</td><td class="line"> gdouble distance;</td></tr>
+<tr class="codeline" data-linenumber="2109"><td class="num" id="LN2109">2109</td><td class="line"> gdouble min_distance;</td></tr>
+<tr class="codeline" data-linenumber="2110"><td class="num" id="LN2110">2110</td><td class="line"> gdouble min_percentage = 0.1;</td></tr>
+<tr class="codeline" data-linenumber="2111"><td class="num" id="LN2111">2111</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="2112"><td class="num" id="LN2112">2112</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="2113"><td class="num" id="LN2113">2113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2114"><td class="num" id="LN2114">2114</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2115"><td class="num" id="LN2115">2115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2116"><td class="num" id="LN2116">2116</td><td class="line"> display = gs_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="2117"><td class="num" id="LN2117">2117</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2118"><td class="num" id="LN2118">2118</td><td class="line"> min_distance = <span class='macro'>WidthOfScreen (gdk_x11_screen_get_xscreen (screen))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (screen))-&gt;width)</span></span> * min_percentage;</td></tr>
+<tr class="codeline" data-linenumber="2119"><td class="num" id="LN2119">2119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2120"><td class="num" id="LN2120">2120</td><td class="line"> <span class='comment'>/* if the last position was not set then don't detect motion */</span></td></tr>
+<tr class="codeline" data-linenumber="2121"><td class="num" id="LN2121">2121</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;last_x &lt; 0 || window-&gt;priv-&gt;last_y &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2122"><td class="num" id="LN2122">2122</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2123"><td class="num" id="LN2123">2123</td><td class="line"> window-&gt;priv-&gt;last_x = event-&gt;x;</td></tr>
+<tr class="codeline" data-linenumber="2124"><td class="num" id="LN2124">2124</td><td class="line"> window-&gt;priv-&gt;last_y = event-&gt;y;</td></tr>
+<tr class="codeline" data-linenumber="2125"><td class="num" id="LN2125">2125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2126"><td class="num" id="LN2126">2126</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2127"><td class="num" id="LN2127">2127</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2128"><td class="num" id="LN2128">2128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2129"><td class="num" id="LN2129">2129</td><td class="line"> <span class='comment'>/* just an approximate distance */</span></td></tr>
+<tr class="codeline" data-linenumber="2130"><td class="num" id="LN2130">2130</td><td class="line"> distance = <span class='macro'>MAX (ABS (window-&gt;priv-&gt;last_x - event-&gt;x),<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2131"><td class="num" id="LN2131">2131</td><td class="line"> <span class='macro'>ABS (window-&gt;priv-&gt;last_y - event-&gt;y))<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2132"><td class="num" id="LN2132">2132</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2133"><td class="num" id="LN2133">2133</td><td class="line"> <span class='keyword'>if</span> (distance &gt; min_distance)</td></tr>
+<tr class="codeline" data-linenumber="2134"><td class="num" id="LN2134">2134</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2135"><td class="num" id="LN2135">2135</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2136"><td class="num" id="LN2136">2136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2137"><td class="num" id="LN2137">2137</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2138"><td class="num" id="LN2138">2138</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2139"><td class="num" id="LN2139">2139</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2140"><td class="num" id="LN2140">2140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2141"><td class="num" id="LN2141">2141</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2142"><td class="num" id="LN2142">2142</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2143"><td class="num" id="LN2143">2143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2144"><td class="num" id="LN2144">2144</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2145"><td class="num" id="LN2145">2145</td><td class="line">gs_window_real_button_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2146"><td class="num" id="LN2146">2146</td><td class="line"> GdkEventButton *event)</td></tr>
+<tr class="codeline" data-linenumber="2147"><td class="num" id="LN2147">2147</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2148"><td class="num" id="LN2148">2148</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2149"><td class="num" id="LN2149">2149</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2150"><td class="num" id="LN2150">2150</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2151"><td class="num" id="LN2151">2151</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2152"><td class="num" id="LN2152">2152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2153"><td class="num" id="LN2153">2153</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2154"><td class="num" id="LN2154">2154</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2155"><td class="num" id="LN2155">2155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2156"><td class="num" id="LN2156">2156</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2157"><td class="num" id="LN2157">2157</td><td class="line">gs_window_real_scroll_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2158"><td class="num" id="LN2158">2158</td><td class="line"> GdkEventScroll *event)</td></tr>
+<tr class="codeline" data-linenumber="2159"><td class="num" id="LN2159">2159</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2160"><td class="num" id="LN2160">2160</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2161"><td class="num" id="LN2161">2161</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2162"><td class="num" id="LN2162">2162</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2163"><td class="num" id="LN2163">2163</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2164"><td class="num" id="LN2164">2164</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2165"><td class="num" id="LN2165">2165</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2166"><td class="num" id="LN2166">2166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2167"><td class="num" id="LN2167">2167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2168"><td class="num" id="LN2168">2168</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2169"><td class="num" id="LN2169">2169</td><td class="line">gs_window_real_size_request (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2170"><td class="num" id="LN2170">2170</td><td class="line"> GtkRequisition *requisition)</td></tr>
+<tr class="codeline" data-linenumber="2171"><td class="num" id="LN2171">2171</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2172"><td class="num" id="LN2172">2172</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2173"><td class="num" id="LN2173">2173</td><td class="line"> GtkBin *bin;</td></tr>
+<tr class="codeline" data-linenumber="2174"><td class="num" id="LN2174">2174</td><td class="line"> GtkWidget *child;</td></tr>
+<tr class="codeline" data-linenumber="2175"><td class="num" id="LN2175">2175</td><td class="line"> GdkRectangle old_geometry;</td></tr>
+<tr class="codeline" data-linenumber="2176"><td class="num" id="LN2176">2176</td><td class="line"> <span class='keyword'>int</span> position_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2177"><td class="num" id="LN2177">2177</td><td class="line"> <span class='keyword'>int</span> size_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2178"><td class="num" id="LN2178">2178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2179"><td class="num" id="LN2179">2179</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2180"><td class="num" id="LN2180">2180</td><td class="line"> bin = <span class='macro'>GTK_BIN (widget)<span class='macro_popup'>((((GtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gtk_bin_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2181"><td class="num" id="LN2181">2181</td><td class="line"> child = gtk_bin_get_child (bin);</td></tr>
+<tr class="codeline" data-linenumber="2182"><td class="num" id="LN2182">2182</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2183"><td class="num" id="LN2183">2183</td><td class="line"> <span class='keyword'>if</span> (child &amp;&amp; gtk_widget_get_visible (child))</td></tr>
+<tr class="codeline" data-linenumber="2184"><td class="num" id="LN2184">2184</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2185"><td class="num" id="LN2185">2185</td><td class="line"> gtk_widget_get_preferred_size (child, requisition, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2186"><td class="num" id="LN2186">2186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2187"><td class="num" id="LN2187">2187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2188"><td class="num" id="LN2188">2188</td><td class="line"> old_geometry = window-&gt;priv-&gt;geometry;</td></tr>
+<tr class="codeline" data-linenumber="2189"><td class="num" id="LN2189">2189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2190"><td class="num" id="LN2190">2190</td><td class="line"> update_geometry (window);</td></tr>
+<tr class="codeline" data-linenumber="2191"><td class="num" id="LN2191">2191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2192"><td class="num" id="LN2192">2192</td><td class="line"> requisition-&gt;width = window-&gt;priv-&gt;geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="2193"><td class="num" id="LN2193">2193</td><td class="line"> requisition-&gt;height = window-&gt;priv-&gt;geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="2194"><td class="num" id="LN2194">2194</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2195"><td class="num" id="LN2195">2195</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_realized (widget))</td></tr>
+<tr class="codeline" data-linenumber="2196"><td class="num" id="LN2196">2196</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2197"><td class="num" id="LN2197">2197</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2198"><td class="num" id="LN2198">2198</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2199"><td class="num" id="LN2199">2199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2200"><td class="num" id="LN2200">2200</td><td class="line"> <span class='keyword'>if</span> (old_geometry.width != window-&gt;priv-&gt;geometry.width ||</td></tr>
+<tr class="codeline" data-linenumber="2201"><td class="num" id="LN2201">2201</td><td class="line"> old_geometry.height != window-&gt;priv-&gt;geometry.height)</td></tr>
+<tr class="codeline" data-linenumber="2202"><td class="num" id="LN2202">2202</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2203"><td class="num" id="LN2203">2203</td><td class="line"> size_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2204"><td class="num" id="LN2204">2204</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2205"><td class="num" id="LN2205">2205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2206"><td class="num" id="LN2206">2206</td><td class="line"> <span class='keyword'>if</span> (old_geometry.x != window-&gt;priv-&gt;geometry.x ||</td></tr>
+<tr class="codeline" data-linenumber="2207"><td class="num" id="LN2207">2207</td><td class="line"> old_geometry.y != window-&gt;priv-&gt;geometry.y)</td></tr>
+<tr class="codeline" data-linenumber="2208"><td class="num" id="LN2208">2208</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2209"><td class="num" id="LN2209">2209</td><td class="line"> position_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2210"><td class="num" id="LN2210">2210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2211"><td class="num" id="LN2211">2211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2212"><td class="num" id="LN2212">2212</td><td class="line"> gs_window_move_resize_window (window, position_changed, size_changed);</td></tr>
+<tr class="codeline" data-linenumber="2213"><td class="num" id="LN2213">2213</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2214"><td class="num" id="LN2214">2214</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2215"><td class="num" id="LN2215">2215</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2216"><td class="num" id="LN2216">2216</td><td class="line">gs_window_real_get_preferred_width (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2217"><td class="num" id="LN2217">2217</td><td class="line"> gint *minimal_width,</td></tr>
+<tr class="codeline" data-linenumber="2218"><td class="num" id="LN2218">2218</td><td class="line"> gint *natural_width)</td></tr>
+<tr class="codeline" data-linenumber="2219"><td class="num" id="LN2219">2219</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2220"><td class="num" id="LN2220">2220</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2221"><td class="num" id="LN2221">2221</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2222"><td class="num" id="LN2222">2222</td><td class="line"> *minimal_width = *natural_width = requisition.width;</td></tr>
+<tr class="codeline" data-linenumber="2223"><td class="num" id="LN2223">2223</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2224"><td class="num" id="LN2224">2224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2225"><td class="num" id="LN2225">2225</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2226"><td class="num" id="LN2226">2226</td><td class="line">gs_window_real_get_preferred_height (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2227"><td class="num" id="LN2227">2227</td><td class="line"> gint *minimal_height,</td></tr>
+<tr class="codeline" data-linenumber="2228"><td class="num" id="LN2228">2228</td><td class="line"> gint *natural_height)</td></tr>
+<tr class="codeline" data-linenumber="2229"><td class="num" id="LN2229">2229</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2230"><td class="num" id="LN2230">2230</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2231"><td class="num" id="LN2231">2231</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2232"><td class="num" id="LN2232">2232</td><td class="line"> *minimal_height = *natural_height = requisition.height;</td></tr>
+<tr class="codeline" data-linenumber="2233"><td class="num" id="LN2233">2233</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2234"><td class="num" id="LN2234">2234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2235"><td class="num" id="LN2235">2235</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2236"><td class="num" id="LN2236">2236</td><td class="line">gs_window_real_grab_broken (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2237"><td class="num" id="LN2237">2237</td><td class="line"> GdkEventGrabBroken *event)</td></tr>
+<tr class="codeline" data-linenumber="2238"><td class="num" id="LN2238">2238</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2239"><td class="num" id="LN2239">2239</td><td class="line"> <span class='keyword'>if</span> (event-&gt;grab_window != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2240"><td class="num" id="LN2240">2240</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2241"><td class="num" id="LN2241">2241</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab on window %X"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2242"><td class="num" id="LN2242">2242</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2243"><td class="num" id="LN2243">2243</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2244"><td class="num" id="LN2244">2244</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;grab_window))<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2245"><td class="num" id="LN2245">2245</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2246"><td class="num" id="LN2246">2246</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="2247"><td class="num" id="LN2247">2247</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2248"><td class="num" id="LN2248">2248</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab is outside application"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2249"><td class="num" id="LN2249">2249</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2250"><td class="num" id="LN2250">2250</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2251"><td class="num" id="LN2251">2251</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2252"><td class="num" id="LN2252">2252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2253"><td class="num" id="LN2253">2253</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2254"><td class="num" id="LN2254">2254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2255"><td class="num" id="LN2255">2255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2256"><td class="num" id="LN2256">2256</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2257"><td class="num" id="LN2257">2257</td><td class="line">gs_window_is_obscured (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2258"><td class="num" id="LN2258">2258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2259"><td class="num" id="LN2259">2259</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2260"><td class="num" id="LN2260">2260</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2261"><td class="num" id="LN2261">2261</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;obscured;</td></tr>
+<tr class="codeline" data-linenumber="2262"><td class="num" id="LN2262">2262</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2263"><td class="num" id="LN2263">2263</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2264"><td class="num" id="LN2264">2264</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2265"><td class="num" id="LN2265">2265</td><td class="line">gs_window_is_dialog_up (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2266"><td class="num" id="LN2266">2266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2267"><td class="num" id="LN2267">2267</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2268"><td class="num" id="LN2268">2268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2269"><td class="num" id="LN2269">2269</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;dialog_up;</td></tr>
+<tr class="codeline" data-linenumber="2270"><td class="num" id="LN2270">2270</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2271"><td class="num" id="LN2271">2271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2272"><td class="num" id="LN2272">2272</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2273"><td class="num" id="LN2273">2273</td><td class="line">window_set_obscured (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2274"><td class="num" id="LN2274">2274</td><td class="line"> gboolean obscured)</td></tr>
+<tr class="codeline" data-linenumber="2275"><td class="num" id="LN2275">2275</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2276"><td class="num" id="LN2276">2276</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;obscured == obscured)</td></tr>
+<tr class="codeline" data-linenumber="2277"><td class="num" id="LN2277">2277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2278"><td class="num" id="LN2278">2278</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2279"><td class="num" id="LN2279">2279</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2280"><td class="num" id="LN2280">2280</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2281"><td class="num" id="LN2281">2281</td><td class="line"> window-&gt;priv-&gt;obscured = (obscured != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2282"><td class="num" id="LN2282">2282</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"obscured"</span>);</td></tr>
+<tr class="codeline" data-linenumber="2283"><td class="num" id="LN2283">2283</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2284"><td class="num" id="LN2284">2284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2285"><td class="num" id="LN2285">2285</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2286"><td class="num" id="LN2286">2286</td><td class="line">gs_window_real_visibility_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2287"><td class="num" id="LN2287">2287</td><td class="line"> GdkEventVisibility *event)</td></tr>
+<tr class="codeline" data-linenumber="2288"><td class="num" id="LN2288">2288</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2289"><td class="num" id="LN2289">2289</td><td class="line"> <span class='keyword'>switch</span> (event-&gt;state)</td></tr>
+<tr class="codeline" data-linenumber="2290"><td class="num" id="LN2290">2290</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2291"><td class="num" id="LN2291">2291</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_FULLY_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2292"><td class="num" id="LN2292">2292</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2293"><td class="num" id="LN2293">2293</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2294"><td class="num" id="LN2294">2294</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_PARTIAL:</td></tr>
+<tr class="codeline" data-linenumber="2295"><td class="num" id="LN2295">2295</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2296"><td class="num" id="LN2296">2296</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_UNOBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2297"><td class="num" id="LN2297">2297</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2298"><td class="num" id="LN2298">2298</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2299"><td class="num" id="LN2299">2299</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2300"><td class="num" id="LN2300">2300</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2301"><td class="num" id="LN2301">2301</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2302"><td class="num" id="LN2302">2302</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2303"><td class="num" id="LN2303">2303</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2304"><td class="num" id="LN2304">2304</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2305"><td class="num" id="LN2305">2305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2306"><td class="num" id="LN2306">2306</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2307"><td class="num" id="LN2307">2307</td><td class="line">gs_window_class_init (GSWindowClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="2308"><td class="num" id="LN2308">2308</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2309"><td class="num" id="LN2309">2309</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2310"><td class="num" id="LN2310">2310</td><td class="line"> GtkWidgetClass *widget_class = <span class='macro'>GTK_WIDGET_CLASS (klass)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2311"><td class="num" id="LN2311">2311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2312"><td class="num" id="LN2312">2312</td><td class="line"> object_class-&gt;finalize = gs_window_finalize;</td></tr>
+<tr class="codeline" data-linenumber="2313"><td class="num" id="LN2313">2313</td><td class="line"> object_class-&gt;get_property = gs_window_get_property;</td></tr>
+<tr class="codeline" data-linenumber="2314"><td class="num" id="LN2314">2314</td><td class="line"> object_class-&gt;set_property = gs_window_set_property;</td></tr>
+<tr class="codeline" data-linenumber="2315"><td class="num" id="LN2315">2315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2316"><td class="num" id="LN2316">2316</td><td class="line"> widget_class-&gt;show = gs_window_real_show;</td></tr>
+<tr class="codeline" data-linenumber="2317"><td class="num" id="LN2317">2317</td><td class="line"> widget_class-&gt;hide = gs_window_real_hide;</td></tr>
+<tr class="codeline" data-linenumber="2318"><td class="num" id="LN2318">2318</td><td class="line"> widget_class-&gt;draw = gs_window_real_draw;</td></tr>
+<tr class="codeline" data-linenumber="2319"><td class="num" id="LN2319">2319</td><td class="line"> widget_class-&gt;realize = gs_window_real_realize;</td></tr>
+<tr class="codeline" data-linenumber="2320"><td class="num" id="LN2320">2320</td><td class="line"> widget_class-&gt;unrealize = gs_window_real_unrealize;</td></tr>
+<tr class="codeline" data-linenumber="2321"><td class="num" id="LN2321">2321</td><td class="line"> widget_class-&gt;key_press_event = gs_window_real_key_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2322"><td class="num" id="LN2322">2322</td><td class="line"> widget_class-&gt;motion_notify_event = gs_window_real_motion_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2323"><td class="num" id="LN2323">2323</td><td class="line"> widget_class-&gt;button_press_event = gs_window_real_button_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2324"><td class="num" id="LN2324">2324</td><td class="line"> widget_class-&gt;scroll_event = gs_window_real_scroll_event;</td></tr>
+<tr class="codeline" data-linenumber="2325"><td class="num" id="LN2325">2325</td><td class="line"> widget_class-&gt;get_preferred_width = gs_window_real_get_preferred_width;</td></tr>
+<tr class="codeline" data-linenumber="2326"><td class="num" id="LN2326">2326</td><td class="line"> widget_class-&gt;get_preferred_height = gs_window_real_get_preferred_height;</td></tr>
+<tr class="codeline" data-linenumber="2327"><td class="num" id="LN2327">2327</td><td class="line"> widget_class-&gt;grab_broken_event = gs_window_real_grab_broken;</td></tr>
+<tr class="codeline" data-linenumber="2328"><td class="num" id="LN2328">2328</td><td class="line"> widget_class-&gt;visibility_notify_event = gs_window_real_visibility_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2329"><td class="num" id="LN2329">2329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2330"><td class="num" id="LN2330">2330</td><td class="line"> signals [ACTIVITY] =</td></tr>
+<tr class="codeline" data-linenumber="2331"><td class="num" id="LN2331">2331</td><td class="line"> g_signal_new (<span class='string_literal'>"activity"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2332"><td class="num" id="LN2332">2332</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2333"><td class="num" id="LN2333">2333</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2334"><td class="num" id="LN2334">2334</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, activity)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, activity))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2335"><td class="num" id="LN2335">2335</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2336"><td class="num" id="LN2336">2336</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2337"><td class="num" id="LN2337">2337</td><td class="line"> gs_marshal_BOOLEAN__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2338"><td class="num" id="LN2338">2338</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2339"><td class="num" id="LN2339">2339</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2340"><td class="num" id="LN2340">2340</td><td class="line"> signals [DEACTIVATED] =</td></tr>
+<tr class="codeline" data-linenumber="2341"><td class="num" id="LN2341">2341</td><td class="line"> g_signal_new (<span class='string_literal'>"deactivated"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2342"><td class="num" id="LN2342">2342</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2343"><td class="num" id="LN2343">2343</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2344"><td class="num" id="LN2344">2344</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, deactivated)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, deactivated))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2345"><td class="num" id="LN2345">2345</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2346"><td class="num" id="LN2346">2346</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2347"><td class="num" id="LN2347">2347</td><td class="line"> g_cclosure_marshal_VOID__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2348"><td class="num" id="LN2348">2348</td><td class="line"> <span class='macro'>G_TYPE_NONE<span class='macro_popup'>((GType) ((1) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2349"><td class="num" id="LN2349">2349</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2350"><td class="num" id="LN2350">2350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2351"><td class="num" id="LN2351">2351</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2352"><td class="num" id="LN2352">2352</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="2353"><td class="num" id="LN2353">2353</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"obscured"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2354"><td class="num" id="LN2354">2354</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2355"><td class="num" id="LN2355">2355</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2356"><td class="num" id="LN2356">2356</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2357"><td class="num" id="LN2357">2357</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2358"><td class="num" id="LN2358">2358</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2359"><td class="num" id="LN2359">2359</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="2360"><td class="num" id="LN2360">2360</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"dialog-up"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2361"><td class="num" id="LN2361">2361</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2362"><td class="num" id="LN2362">2362</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2363"><td class="num" id="LN2363">2363</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2364"><td class="num" id="LN2364">2364</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2365"><td class="num" id="LN2365">2365</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2366"><td class="num" id="LN2366">2366</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2367"><td class="num" id="LN2367">2367</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"lock-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2368"><td class="num" id="LN2368">2368</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2369"><td class="num" id="LN2369">2369</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2370"><td class="num" id="LN2370">2370</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2371"><td class="num" id="LN2371">2371</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2372"><td class="num" id="LN2372">2372</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2373"><td class="num" id="LN2373">2373</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2374"><td class="num" id="LN2374">2374</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"logout-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2375"><td class="num" id="LN2375">2375</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2376"><td class="num" id="LN2376">2376</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2377"><td class="num" id="LN2377">2377</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2378"><td class="num" id="LN2378">2378</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2379"><td class="num" id="LN2379">2379</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2380"><td class="num" id="LN2380">2380</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="2381"><td class="num" id="LN2381">2381</td><td class="line"> g_param_spec_long (<span class='string_literal'>"logout-timeout"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2382"><td class="num" id="LN2382">2382</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2383"><td class="num" id="LN2383">2383</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2384"><td class="num" id="LN2384">2384</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="2385"><td class="num" id="LN2385">2385</td><td class="line"> <span class='macro'>G_MAXLONG<span class='macro_popup'>9223372036854775807L</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2386"><td class="num" id="LN2386">2386</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="2387"><td class="num" id="LN2387">2387</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2388"><td class="num" id="LN2388">2388</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2389"><td class="num" id="LN2389">2389</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2390"><td class="num" id="LN2390">2390</td><td class="line"> g_param_spec_string (<span class='string_literal'>"logout-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2391"><td class="num" id="LN2391">2391</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2392"><td class="num" id="LN2392">2392</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2393"><td class="num" id="LN2393">2393</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2394"><td class="num" id="LN2394">2394</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2395"><td class="num" id="LN2395">2395</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2396"><td class="num" id="LN2396">2396</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="2397"><td class="num" id="LN2397">2397</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2398"><td class="num" id="LN2398">2398</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2399"><td class="num" id="LN2399">2399</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2400"><td class="num" id="LN2400">2400</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2401"><td class="num" id="LN2401">2401</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2402"><td class="num" id="LN2402">2402</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2403"><td class="num" id="LN2403">2403</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2404"><td class="num" id="LN2404">2404</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"keyboard-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2405"><td class="num" id="LN2405">2405</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2406"><td class="num" id="LN2406">2406</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2407"><td class="num" id="LN2407">2407</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2408"><td class="num" id="LN2408">2408</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2409"><td class="num" id="LN2409">2409</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2410"><td class="num" id="LN2410">2410</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2411"><td class="num" id="LN2411">2411</td><td class="line"> g_param_spec_string (<span class='string_literal'>"keyboard-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2412"><td class="num" id="LN2412">2412</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2413"><td class="num" id="LN2413">2413</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2414"><td class="num" id="LN2414">2414</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2415"><td class="num" id="LN2415">2415</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2416"><td class="num" id="LN2416">2416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2417"><td class="num" id="LN2417">2417</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2418"><td class="num" id="LN2418">2418</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="2419"><td class="num" id="LN2419">2419</td><td class="line"> g_param_spec_pointer (<span class='string_literal'>"monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2420"><td class="num" id="LN2420">2420</td><td class="line"> <span class='string_literal'>"Gdk monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2421"><td class="num" id="LN2421">2421</td><td class="line"> <span class='string_literal'>"The monitor (in terms of Gdk) which the window is on"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2422"><td class="num" id="LN2422">2422</td><td class="line"> G_PARAM_READWRITE | G_PARAM_CONSTRUCT));</td></tr>
+<tr class="codeline" data-linenumber="2423"><td class="num" id="LN2423">2423</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2424"><td class="num" id="LN2424">2424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2425"><td class="num" id="LN2425">2425</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2426"><td class="num" id="LN2426">2426</td><td class="line">create_info_bar (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2427"><td class="num" id="LN2427">2427</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2428"><td class="num" id="LN2428">2428</td><td class="line"> window-&gt;priv-&gt;info_bar = gtk_info_bar_new ();</td></tr>
+<tr class="codeline" data-linenumber="2429"><td class="num" id="LN2429">2429</td><td class="line"> gtk_widget_set_no_show_all (window-&gt;priv-&gt;info_bar, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2430"><td class="num" id="LN2430">2430</td><td class="line"> gtk_box_pack_end (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_bar, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2431"><td class="num" id="LN2431">2431</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2432"><td class="num" id="LN2432">2432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2433"><td class="num" id="LN2433">2433</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2434"><td class="num" id="LN2434">2434</td><td class="line">on_drawing_area_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2435"><td class="num" id="LN2435">2435</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="2436"><td class="num" id="LN2436">2436</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2437"><td class="num" id="LN2437">2437</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="2438"><td class="num" id="LN2438">2438</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="2439"><td class="num" id="LN2439">2439</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="2440"><td class="num" id="LN2440">2440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2441"><td class="num" id="LN2441">2441</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2442"><td class="num" id="LN2442">2442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2443"><td class="num" id="LN2443">2443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2444"><td class="num" id="LN2444">2444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2445"><td class="num" id="LN2445">2445</td><td class="line">gs_window_init (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2446"><td class="num" id="LN2446">2446</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2447"><td class="num" id="LN2447">2447</td><td class="line"> window-&gt;priv = gs_window_get_instance_private (window);</td></tr>
+<tr class="codeline" data-linenumber="2448"><td class="num" id="LN2448">2448</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2449"><td class="num" id="LN2449">2449</td><td class="line"> window-&gt;priv-&gt;geometry.x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2450"><td class="num" id="LN2450">2450</td><td class="line"> window-&gt;priv-&gt;geometry.y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2451"><td class="num" id="LN2451">2451</td><td class="line"> window-&gt;priv-&gt;geometry.width = -1;</td></tr>
+<tr class="codeline" data-linenumber="2452"><td class="num" id="LN2452">2452</td><td class="line"> window-&gt;priv-&gt;geometry.height = -1;</td></tr>
+<tr class="codeline" data-linenumber="2453"><td class="num" id="LN2453">2453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2454"><td class="num" id="LN2454">2454</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2455"><td class="num" id="LN2455">2455</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2456"><td class="num" id="LN2456">2456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2457"><td class="num" id="LN2457">2457</td><td class="line"> gtk_window_set_decorated (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2458"><td class="num" id="LN2458">2458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2459"><td class="num" id="LN2459">2459</td><td class="line"> gtk_window_set_skip_taskbar_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2460"><td class="num" id="LN2460">2460</td><td class="line"> gtk_window_set_skip_pager_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2461"><td class="num" id="LN2461">2461</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2462"><td class="num" id="LN2462">2462</td><td class="line"> gtk_window_set_keep_above (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2463"><td class="num" id="LN2463">2463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2464"><td class="num" id="LN2464">2464</td><td class="line"> gtk_window_fullscreen (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2465"><td class="num" id="LN2465">2465</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2466"><td class="num" id="LN2466">2466</td><td class="line"> gtk_widget_set_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2467"><td class="num" id="LN2467">2467</td><td class="line"> gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2468"><td class="num" id="LN2468">2468</td><td class="line"> | GDK_POINTER_MOTION_MASK</td></tr>
+<tr class="codeline" data-linenumber="2469"><td class="num" id="LN2469">2469</td><td class="line"> | GDK_BUTTON_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2470"><td class="num" id="LN2470">2470</td><td class="line"> | GDK_BUTTON_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2471"><td class="num" id="LN2471">2471</td><td class="line"> | GDK_KEY_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2472"><td class="num" id="LN2472">2472</td><td class="line"> | GDK_KEY_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2473"><td class="num" id="LN2473">2473</td><td class="line"> | GDK_EXPOSURE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2474"><td class="num" id="LN2474">2474</td><td class="line"> | GDK_VISIBILITY_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2475"><td class="num" id="LN2475">2475</td><td class="line"> | GDK_ENTER_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2476"><td class="num" id="LN2476">2476</td><td class="line"> | GDK_LEAVE_NOTIFY_MASK);</td></tr>
+<tr class="codeline" data-linenumber="2477"><td class="num" id="LN2477">2477</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2478"><td class="num" id="LN2478">2478</td><td class="line"> window-&gt;priv-&gt;vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);</td></tr>
+<tr class="codeline" data-linenumber="2479"><td class="num" id="LN2479">2479</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2480"><td class="num" id="LN2480">2480</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2481"><td class="num" id="LN2481">2481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2482"><td class="num" id="LN2482">2482</td><td class="line"> window-&gt;priv-&gt;drawing_area = gtk_drawing_area_new ();</td></tr>
+<tr class="codeline" data-linenumber="2483"><td class="num" id="LN2483">2483</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="2484"><td class="num" id="LN2484">2484</td><td class="line"> gtk_widget_set_app_paintable (window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2485"><td class="num" id="LN2485">2485</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2486"><td class="num" id="LN2486">2486</td><td class="line"> window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2487"><td class="num" id="LN2487">2487</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;drawing_area,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2488"><td class="num" id="LN2488">2488</td><td class="line"> <span class='string_literal'><span class='macro'>"draw"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2489"><td class="num" id="LN2489">2489</td><td class="line"> <span class='macro'>G_CALLBACK (on_drawing_area_draw),<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2490"><td class="num" id="LN2490">2490</td><td class="line"> <span class='macro'>NULL)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2491"><td class="num" id="LN2491">2491</td><td class="line"> create_info_bar (window);</td></tr>
+<tr class="codeline" data-linenumber="2492"><td class="num" id="LN2492">2492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2493"><td class="num" id="LN2493">2493</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2494"><td class="num" id="LN2494">2494</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2495"><td class="num" id="LN2495">2495</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2496"><td class="num" id="LN2496">2496</td><td class="line">remove_command_watches (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2497"><td class="num" id="LN2497">2497</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2498"><td class="num" id="LN2498">2498</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2499"><td class="num" id="LN2499">2499</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2500"><td class="num" id="LN2500">2500</td><td class="line"> g_source_remove (window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2501"><td class="num" id="LN2501">2501</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2502"><td class="num" id="LN2502">2502</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2503"><td class="num" id="LN2503">2503</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2504"><td class="num" id="LN2504">2504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2505"><td class="num" id="LN2505">2505</td><td class="line"> g_source_remove (window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2506"><td class="num" id="LN2506">2506</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2507"><td class="num" id="LN2507">2507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2508"><td class="num" id="LN2508">2508</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2509"><td class="num" id="LN2509">2509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2510"><td class="num" id="LN2510">2510</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2511"><td class="num" id="LN2511">2511</td><td class="line">gs_window_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="2512"><td class="num" id="LN2512">2512</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2513"><td class="num" id="LN2513">2513</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2514"><td class="num" id="LN2514">2514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2515"><td class="num" id="LN2515">2515</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2516"><td class="num" id="LN2516">2516</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2517"><td class="num" id="LN2517">2517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2518"><td class="num" id="LN2518">2518</td><td class="line"> window = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2519"><td class="num" id="LN2519">2519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2520"><td class="num" id="LN2520">2520</td><td class="line"> <span class='macro'>g_return_if_fail (window-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2521"><td class="num" id="LN2521">2521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2522"><td class="num" id="LN2522">2522</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2523"><td class="num" id="LN2523">2523</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2524"><td class="num" id="LN2524">2524</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2525"><td class="num" id="LN2525">2525</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2526"><td class="num" id="LN2526">2526</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2527"><td class="num" id="LN2527">2527</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="2528"><td class="num" id="LN2528">2528</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2529"><td class="num" id="LN2529">2529</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2530"><td class="num" id="LN2530">2530</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2531"><td class="num" id="LN2531">2531</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="2532"><td class="num" id="LN2532">2532</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="2533"><td class="num" id="LN2533">2533</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2534"><td class="num" id="LN2534">2534</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="2535"><td class="num" id="LN2535">2535</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2536"><td class="num" id="LN2536">2536</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="2537"><td class="num" id="LN2537">2537</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2538"><td class="num" id="LN2538">2538</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2539"><td class="num" id="LN2539">2539</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="2540"><td class="num" id="LN2540">2540</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2541"><td class="num" id="LN2541">2541</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="2542"><td class="num" id="LN2542">2542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2543"><td class="num" id="LN2543">2543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="2544"><td class="num" id="LN2544">2544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2545"><td class="num" id="LN2545">2545</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface)</td></tr>
+<tr class="codeline" data-linenumber="2546"><td class="num" id="LN2546">2546</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2547"><td class="num" id="LN2547">2547</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="2548"><td class="num" id="LN2548">2548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2549"><td class="num" id="LN2549">2549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2550"><td class="num" id="LN2550">2550</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), (((GType) ((20) &lt;&lt; (2)))<br>)))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="2551"><td class="num" id="LN2551">2551</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2552"><td class="num" id="LN2552">2552</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2553"><td class="num" id="LN2553">2553</td><td class="line">GSWindow *</td></tr>
+<tr class="codeline" data-linenumber="2554"><td class="num" id="LN2554">2554</td><td class="line">gs_window_new (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="2555"><td class="num" id="LN2555">2555</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="2556"><td class="num" id="LN2556">2556</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2557"><td class="num" id="LN2557">2557</td><td class="line"> GObject *result;</td></tr>
+<tr class="codeline" data-linenumber="2558"><td class="num" id="LN2558">2558</td><td class="line"> GdkDisplay *display = gdk_monitor_get_display (monitor);</td></tr>
+<tr class="codeline" data-linenumber="2559"><td class="num" id="LN2559">2559</td><td class="line"> GdkScreen *screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2560"><td class="num" id="LN2560">2560</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2561"><td class="num" id="LN2561">2561</td><td class="line"> result = g_object_new (<span class='macro'>GS_TYPE_WINDOW<span class='macro_popup'>(gs_window_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2562"><td class="num" id="LN2562">2562</td><td class="line"> <span class='string_literal'>"type"</span>, GTK_WINDOW_POPUP,</td></tr>
+<tr class="codeline" data-linenumber="2563"><td class="num" id="LN2563">2563</td><td class="line"> <span class='string_literal'>"screen"</span>, screen,</td></tr>
+<tr class="codeline" data-linenumber="2564"><td class="num" id="LN2564">2564</td><td class="line"> <span class='string_literal'>"monitor"</span>, monitor,</td></tr>
+<tr class="codeline" data-linenumber="2565"><td class="num" id="LN2565">2565</td><td class="line"> <span class='string_literal'>"lock-enabled"</span>, lock_enabled,</td></tr>
+<tr class="codeline" data-linenumber="2566"><td class="num" id="LN2566">2566</td><td class="line"> <span class='string_literal'>"app-paintable"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2567"><td class="num" id="LN2567">2567</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2568"><td class="num" id="LN2568">2568</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2569"><td class="num" id="LN2569">2569</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WINDOW (result)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((result)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2570"><td class="num" id="LN2570">2570</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-b0e322.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-b0e322.html
new file mode 100644
index 0000000..8e81399
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-b0e322.html
@@ -0,0 +1,1236 @@
+<!doctype html>
+<html>
+<head>
+<title>mate-screensaver-command.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'reply' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/mate-screensaver-command.c -->
+
+<!-- FILENAME mate-screensaver-command.c -->
+
+<!-- FUNCTIONNAME do_command -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT b0e322476af4ebeeeec8202bb87fd0cc -->
+
+<!-- BUGLINE 445 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/mate-screensaver-command.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 445, column 3</a><br />Value stored to 'reply' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name mate-screensaver-command.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c mate-screensaver-command.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"445": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;locale.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#define DBUS_API_SUBJECT_TO_CHANGE</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib-lowlevel.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#define <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span> "/org/mate/ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#define <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> gboolean do_quit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='keyword'>static</span> gboolean do_lock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean do_unlock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='keyword'>static</span> gboolean do_cycle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> gboolean do_activate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>static</span> gboolean do_deactivate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean do_version = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> gboolean do_poke = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> gboolean do_inhibit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> gboolean do_query = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>static</span> gboolean do_time = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_reason = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_application = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GOptionEntry entries [] =</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='string_literal'>"exit"</span>, 0, 0, G_OPTION_ARG_NONE, &amp;do_quit,</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Causes the screensaver to exit gracefully"</span>)<span class='macro_popup'>("Causes the screensaver to exit gracefully")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='string_literal'>"query"</span>, 'q', 0, G_OPTION_ARG_NONE, &amp;do_query,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the state of the screensaver"</span>)<span class='macro_popup'>("Query the state of the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='string_literal'>"time"</span>, 't', 0, G_OPTION_ARG_NONE, &amp;do_time,</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the length of time the screensaver has been active"</span>)<span class='macro_popup'>("Query the length of time the screensaver has been active")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='string_literal'>"lock"</span>, 'l', 0, G_OPTION_ARG_NONE, &amp;do_lock,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to lock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to lock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='string_literal'>"unlock"</span>, 'u', 0, G_OPTION_ARG_NONE, &amp;do_unlock,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to unlock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to unlock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='string_literal'>"cycle"</span>, 'c', 0, G_OPTION_ARG_NONE, &amp;do_cycle,</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then switch to another graphics demo"</span>)<span class='macro_popup'>("If the screensaver is active then switch to another graphics demo"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='string_literal'>"activate"</span>, 'a', 0, G_OPTION_ARG_NONE, &amp;do_activate,</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Turn the screensaver on (blank the screen)"</span>)<span class='macro_popup'>("Turn the screensaver on (blank the screen)")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='string_literal'>"deactivate"</span>, 'd', 0, G_OPTION_ARG_NONE, &amp;do_deactivate,</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then deactivate it (un-blank the screen)"</span>)<span class='macro_popup'>("If the screensaver is active then deactivate it (un-blank the screen)"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='string_literal'>"poke"</span>, 'p', 0, G_OPTION_ARG_NONE, &amp;do_poke,</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Poke the running screensaver to simulate user activity"</span>)<span class='macro_popup'>("Poke the running screensaver to simulate user activity")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='string_literal'>"inhibit"</span>, 'i', 0, G_OPTION_ARG_NONE, &amp;do_inhibit,</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Inhibit the screensaver from activating. Command blocks while inhibit is active."</span>)<span class='macro_popup'>("Inhibit the screensaver from activating. Command blocks while inhibit is active."<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='string_literal'>"application-name"</span>, 'n', 0, G_OPTION_ARG_STRING, &amp;inhibit_application,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The calling application that is inhibiting the screensaver"</span>)<span class='macro_popup'>("The calling application that is inhibiting the screensaver"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='string_literal'>"reason"</span>, 'r', 0, G_OPTION_ARG_STRING, &amp;inhibit_reason,</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The reason for inhibiting the screensaver"</span>)<span class='macro_popup'>("The reason for inhibiting the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='string_literal'>"version"</span>, 'V', 0, G_OPTION_ARG_NONE, &amp;do_version,</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Version of this application"</span>)<span class='macro_popup'>("Version of this application")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, 0, 0, G_OPTION_ARG_NONE, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='keyword'>static</span> GMainLoop *loop = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">screensaver_is_running (DBusConnection *connection)</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> gboolean exists;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> exists = dbus_bus_name_has_owner (connection, <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>return</span> exists;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line">screensaver_send_message_inhibit (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *application,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *reason)</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='string_literal'>"Inhibit"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;application);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;reason);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line">screensaver_send_message_bool (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gboolean value)</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_BOOLEAN<span class='macro_popup'>((int) 'b')</span></span>, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line">screensaver_send_message_void (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (! expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (!dbus_connection_send (connection, message, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> g_warning (<span class='string_literal'>"could not send message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> **</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">get_string_from_iter (DBusMessageIter *iter,</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>int</span> *num_elements)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='keyword'>int</span> count;</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>char</span> **buffer;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> *num_elements = 0;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> count = 0;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> buffer = (<span class='keyword'>char</span> **)malloc (<span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * 8);</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> buffer[0] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span class='keyword'>while</span> (dbus_message_iter_get_arg_type (iter) == <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *value;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>char</span> *str;</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0 &amp;&amp; count != 0)</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 8));</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> dbus_message_iter_get_basic (iter, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> str = strdup (value);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>if</span> (str == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> buffer[count] = str;</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> dbus_message_iter_next (iter);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0)</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 1));</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> buffer[count] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> *num_elements = count;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='keyword'>return</span> buffer;</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">oom:</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> g_debug (<span class='string_literal'>"%s %d : error allocating memory\n"</span>, <span class='macro'>__FILE__<span class='macro_popup'>"mate-screensaver-command.c"</span></span>, <span class='macro'>__LINE__<span class='macro_popup'>327</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">do_command (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> DBusConnection *connection = data;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span class='keyword'>if</span> (do_quit)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Quit"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (do_query)</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> DBusMessageIter array;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is %s\n"</span>)<span class='macro_popup'>gettext ("The screensaver is %s\n")</span></span>, v ? <span class='macro'>_(<span class='string_literal'>"active"</span>)<span class='macro_popup'>gettext ("active")</span></span> : <span class='macro'>_(<span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gettext ("inactive")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetInhibitors"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> dbus_message_iter_recurse (&amp;iter, &amp;array);</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='keyword'>if</span> (dbus_message_iter_get_arg_type (&amp;array) == <span class='macro'>DBUS_TYPE_INVALID<span class='macro_popup'>((int) '\0')</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not inhibited\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not inhibited\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> <span class='keyword'>char</span> **inhibitors;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> <span class='keyword'>int</span> num;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is being inhibited by:\n"</span>)<span class='macro_popup'>gettext ("The screensaver is being inhibited by:\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> inhibitors = get_string_from_iter (&amp;array, &amp;num);</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num; i++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_print (<span class='string_literal'>"\t%s\n"</span>, inhibitors[i]);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> g_strfreev (inhibitors);</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (do_time)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> dbus_int32_t t;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='keyword'>if</span> (v)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActiveTime"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;t);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver has been active for %d seconds.\n"</span>)<span class='macro_popup'>gettext ("The screensaver has been active for %d seconds.\n")</span></span>, t);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not currently active.\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not currently active.\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (do_lock)</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Lock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='keyword'>if</span> (do_unlock)</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Unlock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='keyword'>if</span> (do_cycle)</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Cycle"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='keyword'>if</span> (do_poke)</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> reply = <span class="mrange">screensaver_send_message_void (connection, <span class='string_literal'>"SimulateUserActivity"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">Value stored to 'reply' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (do_activate)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='keyword'>if</span> (do_deactivate)</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (do_inhibit)</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> reply = screensaver_send_message_inhibit (connection,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> inhibit_application ? inhibit_application : <span class='string_literal'>"Unknown"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> inhibit_reason ? inhibit_reason : <span class='string_literal'>"Unknown"</span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> g_main_loop_quit (loop);</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> DBusConnection *connection;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> DBusError dbus_error;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> GOptionContext *context;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> g_set_prgname (argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> (setlocale (<span class='macro'>LC_ALL<span class='macro_popup'>6</span></span>, <span class='string_literal'>""</span>) == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_warning (<span class='string_literal'>"Locale not understood by C library, internationalization will not work\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> context = g_option_context_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> retval = g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> g_option_context_free (context);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> <span class='keyword'>if</span> (! retval)</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> g_warning (<span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>if</span> (do_version)</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> g_print (<span class='string_literal'>"%s %s\n"</span>, argv [0], <span class='macro'>VERSION<span class='macro_popup'>"1.26.0"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> dbus_error_init (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> connection = dbus_bus_get (DBUS_BUS_SESSION, &amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> <span class='keyword'>if</span> (! connection)</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> g_message (<span class='string_literal'>"Failed to connect to the D-BUS daemon: %s"</span>, dbus_error.message);</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> dbus_error_free (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> dbus_connection_setup_with_g_main (connection, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>if</span> (! screensaver_is_running (connection))</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_message (<span class='string_literal'>"Screensaver is not running!"</span>);</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> g_idle_add (do_command, connection);</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> loop = g_main_loop_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> g_main_loop_run (loop);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ba3e4e.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ba3e4e.html
new file mode 100644
index 0000000..db2cf5d
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-ba3e4e.html
@@ -0,0 +1,1309 @@
+<!doctype html>
+<html>
+<head>
+<title>mate-screensaver-command.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Potential leak of memory pointed to by 'buffer' -->
+
+<!-- BUGTYPE Memory leak -->
+
+<!-- BUGCATEGORY Memory error -->
+
+<!-- BUGFILE /rootdir/src/mate-screensaver-command.c -->
+
+<!-- FILENAME mate-screensaver-command.c -->
+
+<!-- FUNCTIONNAME get_string_from_iter -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT ba3e4ecf250c144c46b20c85b7850a95 -->
+
+<!-- BUGLINE 327 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 27 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/mate-screensaver-command.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 327, column 2</a><br />Potential leak of memory pointed to by 'buffer'</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name mate-screensaver-command.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c mate-screensaver-command.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"216": 1, "217": 1, "218": 1, "219": 1, "220": 1, "221": 1, "222": 1, "223": 1, "225": 1, "226": 1, "228": 1, "230": 1, "231": 1, "237": 1, "245": 1, "246": 1, "247": 1, "248": 1, "254": 1, "256": 1, "257": 1, "259": 1, "262": 1, "263": 1, "264": 1, "265": 1, "266": 1, "267": 1, "269": 1, "271": 1, "274": 1, "275": 1, "277": 1, "282": 1, "283": 1, "310": 1, "312": 1, "313": 1, "315": 1, "327": 1, "332": 1, "333": 1, "334": 1, "335": 1, "336": 1, "338": 1, "344": 1, "346": 1, "347": 1, "348": 1, "350": 1, "351": 1, "357": 1, "358": 1, "359": 1, "361": 1, "363": 1, "364": 1, "370": 1, "371": 1, "373": 1, "379": 1, "380": 1, "381": 1, "383": 1, "384": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+ <path class="arrow" id="arrow0"/>
+ <path class="arrow" id="arrow1"/>
+ <path class="arrow" id="arrow2"/>
+ <path class="arrow" id="arrow3"/>
+ <path class="arrow" id="arrow4"/>
+ <path class="arrow" id="arrow5"/>
+ <path class="arrow" id="arrow6"/>
+ <path class="arrow" id="arrow7"/>
+ <path class="arrow" id="arrow8"/>
+ <path class="arrow" id="arrow9"/>
+ <path class="arrow" id="arrow10"/>
+ <path class="arrow" id="arrow11"/>
+ <path class="arrow" id="arrow12"/>
+ <path class="arrow" id="arrow13"/>
+ <path class="arrow" id="arrow14"/>
+ <path class="arrow" id="arrow15"/>
+ <path class="arrow" id="arrow16"/>
+ <path class="arrow" id="arrow17"/>
+ <path class="arrow" id="arrow18"/>
+ <path class="arrow" id="arrow19"/>
+ <path class="arrow" id="arrow20"/>
+ <path class="arrow" id="arrow21"/>
+ <path class="arrow" id="arrow22"/>
+ <path class="arrow" id="arrow23"/>
+ <path class="arrow" id="arrow24"/>
+ <path class="arrow" id="arrow25"/>
+ <path class="arrow" id="arrow26"/>
+ <path class="arrow" id="arrow27"/>
+ <path class="arrow" id="arrow28"/>
+ <path class="arrow" id="arrow29"/>
+ <path class="arrow" id="arrow30"/>
+ <path class="arrow" id="arrow31"/>
+ <path class="arrow" id="arrow32"/>
+ <path class="arrow" id="arrow33"/>
+ <path class="arrow" id="arrow34"/>
+ <path class="arrow" id="arrow35"/>
+ <path class="arrow" id="arrow36"/>
+ <path class="arrow" id="arrow37"/>
+ <path class="arrow" id="arrow38"/>
+ <path class="arrow" id="arrow39"/>
+ <path class="arrow" id="arrow40"/>
+ <path class="arrow" id="arrow41"/>
+ <path class="arrow" id="arrow42"/>
+ <path class="arrow" id="arrow43"/>
+ <path class="arrow" id="arrow44"/>
+ <path class="arrow" id="arrow45"/>
+ <path class="arrow" id="arrow46"/>
+ <path class="arrow" id="arrow47"/>
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 48,46,44,44,43,41,39,36,33,29,27,24,23,21,17,15,13,12,10,8,6,5,2,2,1,0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;locale.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#define DBUS_API_SUBJECT_TO_CHANGE</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib-lowlevel.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#define <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#define <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span> "/org/mate/ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#define <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span> "org.mate.ScreenSaver"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> gboolean do_quit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='keyword'>static</span> gboolean do_lock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean do_unlock = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='keyword'>static</span> gboolean do_cycle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> gboolean do_activate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='keyword'>static</span> gboolean do_deactivate = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean do_version = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> gboolean do_poke = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> gboolean do_inhibit = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>static</span> gboolean do_query = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>static</span> gboolean do_time = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_reason = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>char</span> *inhibit_application = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>static</span> GOptionEntry entries [] =</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> <span class='string_literal'>"exit"</span>, 0, 0, G_OPTION_ARG_NONE, &amp;do_quit,</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Causes the screensaver to exit gracefully"</span>)<span class='macro_popup'>("Causes the screensaver to exit gracefully")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> <span class='string_literal'>"query"</span>, 'q', 0, G_OPTION_ARG_NONE, &amp;do_query,</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the state of the screensaver"</span>)<span class='macro_popup'>("Query the state of the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='string_literal'>"time"</span>, 't', 0, G_OPTION_ARG_NONE, &amp;do_time,</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Query the length of time the screensaver has been active"</span>)<span class='macro_popup'>("Query the length of time the screensaver has been active")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='string_literal'>"lock"</span>, 'l', 0, G_OPTION_ARG_NONE, &amp;do_lock,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to lock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to lock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='string_literal'>"unlock"</span>, 'u', 0, G_OPTION_ARG_NONE, &amp;do_unlock,</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Tells the running screensaver process to unlock the screen immediately"</span>)<span class='macro_popup'>("Tells the running screensaver process to unlock the screen immediately"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> <span class='string_literal'>"cycle"</span>, 'c', 0, G_OPTION_ARG_NONE, &amp;do_cycle,</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then switch to another graphics demo"</span>)<span class='macro_popup'>("If the screensaver is active then switch to another graphics demo"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='string_literal'>"activate"</span>, 'a', 0, G_OPTION_ARG_NONE, &amp;do_activate,</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Turn the screensaver on (blank the screen)"</span>)<span class='macro_popup'>("Turn the screensaver on (blank the screen)")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='string_literal'>"deactivate"</span>, 'd', 0, G_OPTION_ARG_NONE, &amp;do_deactivate,</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"If the screensaver is active then deactivate it (un-blank the screen)"</span>)<span class='macro_popup'>("If the screensaver is active then deactivate it (un-blank the screen)"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='string_literal'>"poke"</span>, 'p', 0, G_OPTION_ARG_NONE, &amp;do_poke,</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Poke the running screensaver to simulate user activity"</span>)<span class='macro_popup'>("Poke the running screensaver to simulate user activity")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> <span class='string_literal'>"inhibit"</span>, 'i', 0, G_OPTION_ARG_NONE, &amp;do_inhibit,</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Inhibit the screensaver from activating. Command blocks while inhibit is active."</span>)<span class='macro_popup'>("Inhibit the screensaver from activating. Command blocks while inhibit is active."<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> <span class='string_literal'>"application-name"</span>, 'n', 0, G_OPTION_ARG_STRING, &amp;inhibit_application,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The calling application that is inhibiting the screensaver"</span>)<span class='macro_popup'>("The calling application that is inhibiting the screensaver"<br>)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> <span class='string_literal'>"reason"</span>, 'r', 0, G_OPTION_ARG_STRING, &amp;inhibit_reason,</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"The reason for inhibiting the screensaver"</span>)<span class='macro_popup'>("The reason for inhibiting the screensaver")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='string_literal'>"version"</span>, 'V', 0, G_OPTION_ARG_NONE, &amp;do_version,</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='macro'>N_(<span class='string_literal'>"Version of this application"</span>)<span class='macro_popup'>("Version of this application")</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> },</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> { <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, 0, 0, G_OPTION_ARG_NONE, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> }</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='keyword'>static</span> GMainLoop *loop = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">screensaver_is_running (DBusConnection *connection)</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> gboolean exists;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> exists = dbus_bus_name_has_owner (connection, <span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>return</span> exists;</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line">screensaver_send_message_inhibit (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *application,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *reason)</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='string_literal'>"Inhibit"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;application);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span>, &amp;reason);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line">screensaver_send_message_bool (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gboolean value)</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> dbus_message_iter_init_append (message, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> dbus_message_iter_append_basic (&amp;iter, <span class='macro'>DBUS_TYPE_BOOLEAN<span class='macro_popup'>((int) 'b')</span></span>, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"><span class='keyword'>static</span> DBusMessage *</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line">screensaver_send_message_void (DBusConnection *connection,</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *name,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> DBusMessage *message;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> DBusError error;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='macro'>g_return_val_if_fail (connection != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> <span class='macro'>g_return_val_if_fail (name != NULL, NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> dbus_error_init (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> message = dbus_message_new_method_call (<span class='macro'>GS_SERVICE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, <span class='macro'>GS_PATH<span class='macro_popup'>"/org/mate/ScreenSaver"</span></span>, <span class='macro'>GS_INTERFACE<span class='macro_popup'>"org.mate.ScreenSaver"</span></span>, name);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span> (message == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't allocate the dbus message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='keyword'>if</span> (! expect_reply)</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>if</span> (!dbus_connection_send (connection, message, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> g_warning (<span class='string_literal'>"could not send message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> reply = dbus_connection_send_with_reply_and_block (connection,</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> message,</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> -1, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> <span class='keyword'>if</span> (dbus_error_is_set (&amp;error))</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> g_warning (<span class='string_literal'>"%s raised:\n %s\n\n"</span>, error.name, error.message);</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> dbus_connection_flush (connection);</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> dbus_message_unref (message);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> dbus_error_free (&amp;error);</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>return</span> reply;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"><span id="start20"><span class='keyword'>static</span></span> <span class='keyword'>char</span> **</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line">get_string_from_iter (DBusMessageIter *iter,</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> <span class='keyword'>int</span> *num_elements)</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span id="start19"><span id="end20"><span class='keyword'>int</span></span></span> count;</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>char</span> **buffer;</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span id="start18"><span id="end19"><span class='keyword'>if</span></span></span> (<span id="start17"><span id="end18"><span class='variable'>num_elements<table class='variable_popup'><tbody><tr><td valign='top'><div class='PathIndex PathIndexPopUp'>13.1</div></td><td>'num_elements' is not equal to NULL</td></tr></tbody></table></span></span></span> != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path14" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">14</div></td><td><div class="PathNav"><a href="#Path13" title="Previous event (13)">&#x2190;</a></div></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path15" title="Next event (15)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> <span id="start16"><span id="end17">*</span></span>num_elements = 0;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> <span id="start15"><span id="end16">count</span></span> = 0;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span id="start14"><span id="end15">buffer</span></span> = (<span class='keyword'>char</span> **)<span class="mrange">malloc (<span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * 8)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path15" class="msg msgEvent" style="margin-left:27ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">15</div></td><td><div class="PathNav"><a href="#Path14" title="Previous event (14)">&#x2190;</a></div></td><td>Memory is allocated</td><td><div class="PathNav"><a href="#Path16" title="Next event (16)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> <span id="start13"><span id="end14"><span class='keyword'>if</span></span></span> (<span id="start12"><span class="mrange"><span id="end13">buffer</span></span> == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path16" class="msg msgEvent" style="margin-left:13ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">16</div></td><td><div class="PathNav"><a href="#Path15" title="Previous event (15)">&#x2190;</a></div></td><td>Assuming 'buffer' is not equal to NULL</td><td><div class="PathNav"><a href="#Path17" title="Next event (17)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path17" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">17</div></td><td><div class="PathNav"><a href="#Path16" title="Previous event (16)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path18" title="Next event (18)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span id="start11"><span id="end12">buffer</span></span>[0] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> <span id="start10"><span id="end11"><span class='keyword'>while</span></span></span> (<span id="start9"><span class="mrange"><span id="end10">dbus_message_iter_get_arg_type</span></span> (iter) == <span class='macro'>DBUS_TYPE_STRING<span class='macro_popup'>((int) 's')</span></span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path18" class="msg msgEvent" style="margin-left:16ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">18</div></td><td><div class="PathNav"><a href="#Path17" title="Previous event (17)">&#x2190;</a></div></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path19" title="Next event (19)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path19" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">19</div></td><td><div class="PathNav"><a href="#Path18" title="Previous event (18)">&#x2190;</a></div></td><td>Loop condition is false. Execution continues on line 310</td><td><div class="PathNav"><a href="#Path20" title="Next event (20)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *value;</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>char</span> *str;</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='keyword'>if</span> ((count % 8) == 0 &amp;&amp; count != 0)</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> buffer = realloc (buffer, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 8));</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> <span class='keyword'>if</span> (buffer == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> dbus_message_iter_get_basic (iter, &amp;value);</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> str = strdup (value);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>if</span> (str == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>goto</span> oom;</td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> buffer[count] = str;</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> dbus_message_iter_next (iter);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> count++;</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span id="start8"><span id="end9"><span class='keyword'>if</span></span></span> ((<span id="start7"><span id="end8">count</span></span> % 8) == 0)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path20" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">20</div></td><td><div class="PathNav"><a href="#Path19" title="Previous event (19)">&#x2190;</a></div></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path21" title="Next event (21)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> <span id="start3"><span id="end4"><span id="start6"><span id="end7">buffer</span></span></span></span> = <span id="start4"><span class="mrange"><span id="end5">realloc</span></span> (<span id="start5"><span id="end6">buffer</span></span>, <span class='keyword'>sizeof</span> (<span class='keyword'>char</span> *) * (count + 1))</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path21" class="msg msgEvent" style="margin-left:26ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">21</div></td><td><div class="PathNav"><a href="#Path20" title="Previous event (20)">&#x2190;</a></div></td><td>Attempt to reallocate memory</td><td><div class="PathNav"><a href="#Path22" title="Next event (22)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span id="start2"><span id="end3"><span class='keyword'>if</span></span></span> (<span id="start1"><span class="mrange"><span class="mrange"><span id="end2">buffer</span></span> == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path22" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">22</div></td><td><div class="PathNav"><a href="#Path21" title="Previous event (21)">&#x2190;</a></div></td><td>Assuming 'buffer' is equal to NULL</td><td><div class="PathNav"><a href="#Path23" title="Next event (23)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path23" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">23</div></td><td><div class="PathNav"><a href="#Path22" title="Previous event (22)">&#x2190;</a></div></td><td>Reallocation failed</td><td><div class="PathNav"><a href="#Path24" title="Next event (24)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path24" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">24</div></td><td><div class="PathNav"><a href="#Path23" title="Previous event (23)">&#x2190;</a></div></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path25" title="Next event (25)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span id="start0"><span id="end1"><span class='keyword'>goto</span></span></span> oom;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path25" class="msg msgControl" style="margin-left:25ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">25</div></td><td><div class="PathNav"><a href="#Path24" title="Previous event (24)">&#x2190;</a></div></td><td>Control jumps to line 327</td><td><div class="PathNav"><a href="#EndPath" title="Next event (26)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> buffer[count] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span> (num_elements != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> *num_elements = count;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> <span class='keyword'>return</span> buffer;</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">oom:</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> <span id="end0">g_debug</span> (<span class='string_literal'>"%s %d : error allocating memory\n"</span>, <span class='macro'>__FILE__<span class='macro_popup'>"mate-screensaver-command.c"</span></span>, <span class='macro'>__LINE__<span class='macro_popup'>327</span></span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">26</div></td><td><div class="PathNav"><a href="#Path25" title="Previous event (25)">&#x2190;</a></div></td><td>Potential leak of memory pointed to by 'buffer'</td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">do_command (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> <span id="start47">DBusConnection</span> *connection = data;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> DBusMessage *reply;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> <span id="start46"><span id="end47"><span class='keyword'>if</span></span></span> (<span id="start45"><span class="mrange"><span id="end46">do_quit</span></span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path1" class="msg msgEvent" style="margin-left:13ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">1</div></td><td>Assuming 'do_quit' is 0</td><td><div class="PathNav"><a href="#Path2" title="Next event (2)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path2" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">2</div></td><td><div class="PathNav"><a href="#Path1" title="Previous event (1)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path3" title="Next event (3)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Quit"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span id="start44"><span id="end45"><span class='keyword'>if</span></span></span> (<span id="start43"><span class="mrange"><span id="end44">do_query</span></span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path3" class="msg msgEvent" style="margin-left:13ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">3</div></td><td><div class="PathNav"><a href="#Path2" title="Previous event (2)">&#x2190;</a></div></td><td>Assuming 'do_query' is not equal to 0</td><td><div class="PathNav"><a href="#Path4" title="Next event (4)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path4" class="msg msgControl" style="margin-left:9ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">4</div></td><td><div class="PathNav"><a href="#Path3" title="Previous event (3)">&#x2190;</a></div></td><td>Taking true branch</td><td><div class="PathNav"><a href="#Path5" title="Next event (5)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span id="start42"><span id="end43">DBusMessageIter</span></span> iter;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> DBusMessageIter array;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span id="start41"><span id="end42"><span class='keyword'>if</span></span></span> (<span id="start40"><span class="mrange"><span id="end41">!</span></span> reply</span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path5" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">5</div></td><td><div class="PathNav"><a href="#Path4" title="Previous event (4)">&#x2190;</a></div></td><td>Assuming 'reply' is non-null</td><td><div class="PathNav"><a href="#Path6" title="Next event (6)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path6" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">6</div></td><td><div class="PathNav"><a href="#Path5" title="Previous event (5)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path7" title="Next event (7)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> <span id="start37"><span id="end38"><span id="start39"><span id="end40">dbus_message_iter_init</span></span></span></span> (<span id="start38"><span id="end39">reply</span></span>, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> <span id="start30"><span id="end31"><span id="start33"><span id="end34"><span id="start36"><span id="end37">g_print</span></span></span></span></span></span> (<span class='macro'>_(<span class='string_literal'>"The screensaver is %s\n"</span>)<span class='macro_popup'>gettext ("The screensaver is %s\n")</span></span>, <span id="end33"><span id="start34"><span id="start35"><span class="mrange"><span id="end36">v</span></span></span></span></span> ? <span class='macro'>_(<span class='string_literal'>"active"</span>)<span class='macro_popup'>gettext ("active")</span></span> : <span id="start31"><span id="start32"><span id="end32"><span id="end35"><span class='macro'>_</span></span></span></span>(<span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gettext ("inactive")</span></span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path7" class="msg msgEvent" style="margin-left:56ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">7</div></td><td><div class="PathNav"><a href="#Path6" title="Previous event (6)">&#x2190;</a></div></td><td>Assuming 'v' is 0</td><td><div class="PathNav"><a href="#Path8" title="Next event (8)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path8" class="msg msgControl" style="margin-left:56ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">8</div></td><td><div class="PathNav"><a href="#Path7" title="Previous event (7)">&#x2190;</a></div></td><td>'?' condition is false</td><td><div class="PathNav"><a href="#Path9" title="Next event (9)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetInhibitors"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span id="start29"><span id="end30"><span class='keyword'>if</span></span></span> (<span id="start28"><span class="mrange"><span id="end29">!</span></span> reply</span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path9" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">9</div></td><td><div class="PathNav"><a href="#Path8" title="Previous event (8)">&#x2190;</a></div></td><td>Assuming 'reply' is non-null</td><td><div class="PathNav"><a href="#Path10" title="Next event (10)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path10" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">10</div></td><td><div class="PathNav"><a href="#Path9" title="Previous event (9)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path11" title="Next event (11)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span id="start25"><span id="end26"><span id="start27"><span id="end28">dbus_message_iter_init</span></span></span></span> (<span id="start26"><span id="end27">reply</span></span>, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> dbus_message_iter_recurse (&amp;iter, &amp;array);</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span id="start24"><span id="end25"><span class='keyword'>if</span></span></span> (<span id="start23"><span class="mrange"><span id="end24">dbus_message_iter_get_arg_type</span></span> (&amp;array) == <span class='macro'>DBUS_TYPE_INVALID<span class='macro_popup'>((int) '\0')</span></span></span>)</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path11" class="msg msgEvent" style="margin-left:21ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">11</div></td><td><div class="PathNav"><a href="#Path10" title="Previous event (10)">&#x2190;</a></div></td><td>Assuming the condition is false</td><td><div class="PathNav"><a href="#Path12" title="Next event (12)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path12" class="msg msgControl" style="margin-left:17ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexControl">12</div></td><td><div class="PathNav"><a href="#Path11" title="Previous event (11)">&#x2190;</a></div></td><td>Taking false branch</td><td><div class="PathNav"><a href="#Path13" title="Next event (13)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not inhibited\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not inhibited\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> <span id="start22"><span id="end23"><span class='keyword'>char</span></span></span> **inhibitors;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> <span class='keyword'>int</span> num;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is being inhibited by:\n"</span>)<span class='macro_popup'>gettext ("The screensaver is being inhibited by:\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span id="start21"><span id="end22">inhibitors</span></span> = <span class="mrange"><span id="end21">get_string_from_iter</span> (&amp;array, &amp;num)</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="Path13" class="msg msgEvent" style="margin-left:38ex"><table class="msgT"><tr><td valign="top"><div class="PathIndex PathIndexEvent">13</div></td><td><div class="PathNav"><a href="#Path12" title="Previous event (12)">&#x2190;</a></div></td><td>Calling 'get_string_from_iter'</td><td><div class="PathNav"><a href="#Path14" title="Next event (14)">&#x2192;</a></div></td></tr></table></div></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num; i++)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_print (<span class='string_literal'>"\t%s\n"</span>, inhibitors[i]);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> g_strfreev (inhibitors);</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (do_time)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> DBusMessageIter iter;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> dbus_bool_t v;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> dbus_int32_t t;</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;v);</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> <span class='keyword'>if</span> (v)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"GetActiveTime"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> dbus_message_iter_init (reply, &amp;iter);</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dbus_message_iter_get_basic (&amp;iter, &amp;t);</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver has been active for %d seconds.\n"</span>)<span class='macro_popup'>gettext ("The screensaver has been active for %d seconds.\n")</span></span>, t);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_print (<span class='macro'>_(<span class='string_literal'>"The screensaver is not currently active.\n"</span>)<span class='macro_popup'>gettext ("The screensaver is not currently active.\n")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> <span class='keyword'>if</span> (do_lock)</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Lock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='keyword'>if</span> (do_unlock)</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Unlock"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> <span class='keyword'>if</span> (do_cycle)</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"Cycle"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='keyword'>if</span> (do_poke)</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> reply = screensaver_send_message_void (connection, <span class='string_literal'>"SimulateUserActivity"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (do_activate)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='keyword'>if</span> (do_deactivate)</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> reply = screensaver_send_message_bool (connection, <span class='string_literal'>"SetActive"</span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>if</span> (do_inhibit)</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> reply = screensaver_send_message_inhibit (connection,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> inhibit_application ? inhibit_application : <span class='string_literal'>"Unknown"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> inhibit_reason ? inhibit_reason : <span class='string_literal'>"Unknown"</span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='keyword'>if</span> (! reply)</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> g_message (<span class='string_literal'>"Did not receive a reply from the screensaver."</span>);</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> dbus_message_unref (reply);</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> g_main_loop_quit (loop);</td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> DBusConnection *connection;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> DBusError dbus_error;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> GOptionContext *context;</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> g_set_prgname (argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> (setlocale (<span class='macro'>LC_ALL<span class='macro_popup'>6</span></span>, <span class='string_literal'>""</span>) == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_warning (<span class='string_literal'>"Locale not understood by C library, internationalization will not work\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> context = g_option_context_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> g_option_context_add_main_entries (context, entries, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> retval = g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> g_option_context_free (context);</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> <span class='keyword'>if</span> (! retval)</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> g_warning (<span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>if</span> (do_version)</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> g_print (<span class='string_literal'>"%s %s\n"</span>, argv [0], <span class='macro'>VERSION<span class='macro_popup'>"1.26.0"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> dbus_error_init (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> connection = dbus_bus_get (DBUS_BUS_SESSION, &amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> <span class='keyword'>if</span> (! connection)</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> g_message (<span class='string_literal'>"Failed to connect to the D-BUS daemon: %s"</span>, dbus_error.message);</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> dbus_error_free (&amp;dbus_error);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> dbus_connection_setup_with_g_main (connection, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>if</span> (! screensaver_is_running (connection))</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_message (<span class='string_literal'>"Screensaver is not running!"</span>);</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> g_idle_add (do_command, connection);</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> loop = g_main_loop_new (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> g_main_loop_run (loop);</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-bdd56f.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-bdd56f.html
new file mode 100644
index 0000000..52de71e
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-bdd56f.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcat' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT bdd56fb2ca5753547ccdf7432b2241ae -->
+
+<!-- BUGLINE 61 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 61, column 3</a><br />Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"61": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> strcpy (config_file, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> strcat (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> <span class="mrange">strcat</span> (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex; max-width:52em">Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-be2741.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-be2741.html
new file mode 100644
index 0000000..19f6d48
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-be2741.html
@@ -0,0 +1,1355 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-watcher-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'desired_server_interval' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-watcher-x11.c -->
+
+<!-- FILENAME gs-watcher-x11.c -->
+
+<!-- FUNCTIONNAME disable_builtin_screensaver -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT be274160007f41b1d6210684bd62deb0 -->
+
+<!-- BUGLINE 597 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-watcher-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 597, column 2</a><br />Value stored to 'desired_server_interval' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-watcher-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-watcher-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"597": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2008 Red Hat, Inc.</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;time.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;dbus/dbus.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;dbus/dbus-glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-watcher.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_watcher_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='keyword'>static</span> gboolean watchdog_timer (GSWatcher *watcher);</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>struct</span> GSWatcherPrivate</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>/* settings */</span></td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> guint enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> guint delta_notice_timeout;</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='comment'>/* state */</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> guint active : 1;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> guint idle : 1;</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint idle_notice : 1;</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> guint idle_id;</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> DBusGProxy *presence_proxy;</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> IDLE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> IDLE_NOTICE_CHANGED,</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWatcher, gs_watcher, G_TYPE_OBJECT)<span class='macro_popup'>static void gs_watcher_init (GSWatcher *self); static void gs_watcher_class_init<br> (GSWatcherClass *klass); static GType gs_watcher_get_type_once<br> (void); static gpointer gs_watcher_parent_class = ((void*)0)<br>; static gint GSWatcher_private_offset; static void gs_watcher_class_intern_init<br> (gpointer klass) { gs_watcher_parent_class = g_type_class_peek_parent<br> (klass); if (GSWatcher_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWatcher_private_offset); gs_watcher_class_init<br> ((GSWatcherClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_watcher_get_instance_private (GSWatcher *<br>self) { return (((gpointer) ((guint8*) (self) + (glong) (GSWatcher_private_offset<br>)))); } GType gs_watcher_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_watcher_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_watcher_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> (((GType) ((20) &lt;&lt; (2))), g_intern_static_string ("GSWatcher"<br>), sizeof (GSWatcherClass), (GClassInitFunc)(void (*)(void)) gs_watcher_class_intern_init<br>, sizeof (GSWatcher), (GInstanceInitFunc)(void (*)(void)) gs_watcher_init<br>, (GTypeFlags) 0); { {{ GSWatcher_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWatcherPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line">remove_watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">add_watchdog_timer (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> watcher-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">gs_watcher_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 115, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">set_status_text (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *text)</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> watcher-&gt;priv-&gt;status_message = g_strdup (text);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (watcher)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"status-message"</span>);</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line">gs_watcher_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> GSWatcher *self;</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> self = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> set_status_text (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-watcher-x11.c", 146, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line">gs_watcher_class_init (GSWatcherClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> object_class-&gt;finalize = gs_watcher_finalize;</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> object_class-&gt;get_property = gs_watcher_get_property;</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> object_class-&gt;set_property = gs_watcher_set_property;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> signals [IDLE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> signals [IDLE_NOTICE_CHANGED] =</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> g_signal_new (<span class='string_literal'>"idle-notice-changed"</span>,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWatcherClass, idle_notice_changed)<span class='macro_popup'>((glong) __builtin_offsetof(GSWatcherClass, idle_notice_changed<br>))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> gs_marshal_BOOLEAN__BOOLEAN,</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> 1, <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line">_gs_watcher_set_session_idle_notice (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> gboolean in_effect)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>if</span> (in_effect != watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> g_signal_emit (watcher, signals [IDLE_NOTICE_CHANGED], 0, in_effect, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle notice state: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 204, "Changing idle notice state: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = (in_effect != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle notice signal not handled: %d"</span>, in_effect)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 210, "Idle notice signal not handled: %d"<br>, in_effect)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line">_gs_watcher_set_session_idle (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> gboolean is_idle)</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> res = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> <span class='keyword'>if</span> (is_idle != watcher-&gt;priv-&gt;idle)</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> g_signal_emit (watcher, signals [IDLE_CHANGED], 0, is_idle, &amp;res);</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Changing idle state: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 231, "Changing idle state: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> watcher-&gt;priv-&gt;idle = (is_idle != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle changed signal not handled: %d"</span>, is_idle)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 237, "Idle changed signal not handled: %d"<br>, is_idle)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='keyword'>return</span> res;</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line">gs_watcher_get_active (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> gboolean active;</td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> active = watcher-&gt;priv-&gt;active;</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> <span class='keyword'>return</span> active;</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line">_gs_watcher_reset_state (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> watcher-&gt;priv-&gt;idle = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> watcher-&gt;priv-&gt;idle_notice = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line">_gs_watcher_set_active_internal (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (active != watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='comment'>/* reset state */</span></td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> _gs_watcher_reset_state (watcher);</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> watcher-&gt;priv-&gt;active = (active != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line">gs_watcher_set_active (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> gboolean active)</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"turning watcher: %s"</span>, active ? <span class='string_literal'>"ON"</span> : <span class='string_literal'>"OFF"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 284, "turning watcher: %s"<br>, active ? "ON" : "OFF")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;active == active)</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is already %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='macro'>active ? <span class='string_literal'>"active"</span> : <span class='string_literal'>"inactive"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 289, "Idle detection is already %s"<br>, active ? "active" : "inactive")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;enabled)</td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Idle detection is disabled, cannot activate"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 295, "Idle detection is disabled, cannot activate"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> _gs_watcher_set_active_internal (watcher, active);</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line">gs_watcher_set_enabled (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;enabled != enabled)</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> gboolean is_active = gs_watcher_get_active (watcher);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> watcher-&gt;priv-&gt;enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='comment'>/* if we are disabling the watcher and we are</span></td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='comment'>active shut it down */</span></td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>if</span> (! enabled &amp;&amp; is_active)</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> _gs_watcher_set_active_internal (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line">gs_watcher_get_enabled (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> gboolean enabled;</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WATCHER (watcher), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> enabled = watcher-&gt;priv-&gt;enabled;</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> <span class='keyword'>return</span> enabled;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line">on_idle_timeout (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> res = _gs_watcher_set_session_idle (watcher, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='comment'>/* try again if we failed i guess */</span></td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> <span class='keyword'>return</span> !res;</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line">set_status (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> guint status)</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> gboolean is_idle;</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='keyword'>if</span> (! watcher-&gt;priv-&gt;active)</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"GSWatcher: not active, ignoring status changes"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 358, "GSWatcher: not active, ignoring status changes"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> is_idle = (status == 3);</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>if</span> (!is_idle &amp;&amp; !watcher-&gt;priv-&gt;idle_notice)</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> <span class='comment'>/* no change in idleness */</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='keyword'>if</span> (is_idle)</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, is_idle);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> <span class='comment'>/* queue an activation */</span></td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> watcher-&gt;priv-&gt;idle_id = g_timeout_add (watcher-&gt;priv-&gt;delta_notice_timeout,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> (GSourceFunc)on_idle_timeout,</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> watcher);</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* cancel notice too */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> _gs_watcher_set_session_idle (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> _gs_watcher_set_session_idle_notice (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line">on_presence_status_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> guint status,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line">on_presence_status_text_changed (DBusGProxy *presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line">connect_presence_watcher (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> DBusGConnection *bus;</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> bus = dbus_g_bus_get (DBUS_BUS_SESSION, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='keyword'>if</span> (bus == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_warning (<span class='string_literal'>"Unable to get session bus: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> watcher-&gt;priv-&gt;presence_proxy = dbus_g_proxy_new_for_name_owner (bus,</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager"</span>,</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> DBusGProxy *proxy;</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='macro'>G_TYPE_UINT<span class='macro_popup'>((GType) ((7) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> <span class='string_literal'>"StatusChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_changed)<span class='macro_popup'>((GCallback) (on_presence_status_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> dbus_g_proxy_add_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> dbus_g_proxy_connect_signal (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> <span class='string_literal'>"StatusTextChanged"</span>,</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> <span class='macro'>G_CALLBACK (on_presence_status_text_changed)<span class='macro_popup'>((GCallback) (on_presence_status_text_changed))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> watcher,</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> proxy = dbus_g_proxy_new_from_proxy (watcher-&gt;priv-&gt;presence_proxy,</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='string_literal'>"org.freedesktop.DBus.Properties"</span>,</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='string_literal'>"/org/gnome/SessionManager/Presence"</span>);</td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>if</span> (proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> guint status;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_text;</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> GValue value = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> status = 0;</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> status_text = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status"</span>,</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> status = g_value_get_uint (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> g_value_unset (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> dbus_g_proxy_call (proxy,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> <span class='string_literal'>"Get"</span>,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> &amp;error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"org.gnome.SessionManager.Presence"</span>,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='macro'>G_TYPE_STRING<span class='macro_popup'>((GType) ((16) &lt;&lt; (2)))</span></span>, <span class='string_literal'>"status-text"</span>,</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> <span class='macro'>G_TYPE_VALUE<span class='macro_popup'>(g_value_get_type ())</span></span>, &amp;value,</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='macro'>G_TYPE_INVALID<span class='macro_popup'>((GType) ((0) &lt;&lt; (2)))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>if</span> (error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> g_warning (<span class='string_literal'>"Couldn't get presence status text: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> status_text = g_value_get_string (&amp;value);</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> set_status (watcher, status);</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> set_status_text (watcher, status_text);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_warning (<span class='string_literal'>"Failed to get session presence proxy: %s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line">gs_watcher_init (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> watcher-&gt;priv = gs_watcher_get_instance_private (watcher);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> watcher-&gt;priv-&gt;enabled = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> connect_presence_watcher (watcher);</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='comment'>/* time before idle signal to send notice signal */</span></td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> watcher-&gt;priv-&gt;delta_notice_timeout = 10000;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> add_watchdog_timer (watcher, 600000);</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line">gs_watcher_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WATCHER (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> watcher = <span class='macro'>GS_WATCHER (object)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='macro'>g_return_if_fail (watcher-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> remove_watchdog_timer (watcher);</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;idle_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> g_source_remove (watcher-&gt;priv-&gt;idle_id);</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> watcher-&gt;priv-&gt;idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> watcher-&gt;priv-&gt;active = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='keyword'>if</span> (watcher-&gt;priv-&gt;presence_proxy != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> g_object_unref (watcher-&gt;priv-&gt;presence_proxy);</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> g_free (watcher-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_watcher_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_watcher_parent_class)), (((GType) ((20) &lt;&lt; (2))<br>))))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"><span class='comment'>/* Figuring out what the appropriate XSetScreenSaver() parameters are</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>(one wouldn't expect this to be rocket science.)</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line">disable_builtin_screensaver (GSWatcher *watcher,</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> gboolean unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> <span class='keyword'>int</span> current_server_timeout, current_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> <span class='keyword'>int</span> current_prefer_blank, current_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> <span class='keyword'>int</span> desired_server_timeout, desired_server_interval;</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='keyword'>int</span> desired_prefer_blank, desired_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> XGetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> &amp;current_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> &amp;current_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> &amp;current_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> &amp;current_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> desired_server_timeout = current_server_timeout;</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> desired_server_interval = <span class="mrange">current_server_interval</span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex">Value stored to 'desired_server_interval' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> desired_prefer_blank = current_prefer_blank;</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> desired_allow_exp = current_allow_exp;</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> desired_server_interval = 0;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='comment'>/* I suspect (but am not sure) that DontAllowExposures might have</span></td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>something to do with powering off the monitor as well, at least</span></td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='comment'>on some systems that don't support XDPMS? Who know... */</span></td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> desired_allow_exp = <span class='macro'>AllowExposures<span class='macro_popup'>1</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* When we're not using an extension, set the server-side timeout to 0,</span></td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='comment'>so that the server never gets involved with screen blanking, and we</span></td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>do it all ourselves. (However, when we *are* using an extension,</span></td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>we tell the server when to notify us, and rather than blanking the</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>screen, the server will send us an X event telling us to blank.)</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> desired_server_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (desired_server_timeout != current_server_timeout</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> || desired_server_interval != current_server_interval</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> || desired_prefer_blank != current_prefer_blank</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> || desired_allow_exp != current_allow_exp)</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"disabling server builtin screensaver:"<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> <span class='string_literal'><span class='macro'>" (xset s %d %d; xset s %s; xset s %s)"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='macro'>desired_server_timeout,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> <span class='macro'>desired_server_interval,<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> <span class='macro'>(desired_prefer_blank ? <span class='string_literal'>"blank"</span> : <span class='string_literal'>"noblank"</span>),<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span></td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='macro'>(desired_allow_exp ? <span class='string_literal'>"expose"</span> : <span class='string_literal'>"noexpose"</span>))<span class='macro_popup'>gs_debug_real (__func__, "gs-watcher-x11.c", 627, "disabling server builtin screensaver:"<br> " (xset s %d %d; xset s %s; xset s %s)", desired_server_timeout<br>, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"<br>), (desired_allow_exp ? "expose" : "noexpose"))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> XSetScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> desired_server_timeout,</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> desired_server_interval,</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> desired_prefer_blank,</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> desired_allow_exp);</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> XSync (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='keyword'>if</span> (unblank_screen)</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* Turn off the server builtin saver if it is now running. */</span></td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> XForceScreenSaver (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>ScreenSaverReset<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"><span class='comment'>/* This timer goes off every few minutes, whether the user is idle or not,</span></td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='comment'>to try and clean up anything that has gone wrong.</span></td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='comment'>It calls disable_builtin_screensaver() so that if xset has been used,</span></td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='comment'>or some other program (like xlock) has messed with the XSetScreenSaver()</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='comment'>settings, they will be set back to sensible values (if a server extension</span></td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='comment'>is in use, messing with xlock can cause the screensaver to never get a wakeup</span></td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> <span class='comment'>event, and could cause monitor power-saving to occur, and all manner of</span></td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> <span class='comment'>heinousness.)</span></td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line">watchdog_timer (GSWatcher *watcher)</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> disable_builtin_screensaver (watcher, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line">GSWatcher *</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">gs_watcher_new (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> GSWatcher *watcher;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> watcher = g_object_new (<span class='macro'>GS_TYPE_WATCHER<span class='macro_popup'>(gs_watcher_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WATCHER (watcher)<span class='macro_popup'>((((GSWatcher*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((watcher)), ((gs_watcher_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-c2b391.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-c2b391.html
new file mode 100644
index 0000000..664f41a
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-c2b391.html
@@ -0,0 +1,3250 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-window-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'finished' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-window-x11.c -->
+
+<!-- FILENAME gs-window-x11.c -->
+
+<!-- FUNCTIONNAME keyboard_command_watch -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT c2b391326afdaf08a1b132e6084a65c1 -->
+
+<!-- BUGLINE 1362 -->
+
+<!-- BUGCOLUMN 4 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-window-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 1362, column 4</a><br />Value stored to 'finished' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-window-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-window-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"1362": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2008 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;sys/wait.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkkeysyms.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;gtk/gtkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "gs-window.h"</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='directive'>#include &lt;X11/extensions/shape.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean popup_dialog_idle (gpointer data);</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_dialog_finish (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> remove_command_watches (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DIALOG_RESPONSE_CANCEL,</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> DIALOG_RESPONSE_OK</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'>#define <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span> 16</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#define <span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span> 30</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"><span class='directive'>#define <span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span> <span class='macro'>LIBEXECDIR<span class='macro_popup'>"/usr/local/libexec"</span></span> "/mate-screensaver-dialog"</span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='keyword'>struct</span> GSWindowPrivate</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> GdkMonitor *monitor;</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> guint obscured : 1;</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> guint dialog_up : 1;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> guint lock_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> guint user_switch_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> guint logout_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> guint keyboard_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> guint64 logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> <span class='keyword'>char</span> *logout_command;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>char</span> *keyboard_command;</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> GtkWidget *drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GtkWidget *lock_box;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> GtkWidget *lock_socket;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> GtkWidget *keyboard_socket;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> GtkWidget *info_bar;</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> GtkWidget *info_content;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> cairo_surface_t *background_surface;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> guint popup_dialog_idle_id;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> guint dialog_map_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint dialog_unmap_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> guint dialog_response_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> guint info_bar_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> gint lock_pid;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gint lock_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> gint dialog_response;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> gboolean dialog_quit_requested;</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gboolean dialog_shake_in_progress;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> gint keyboard_pid;</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> gint keyboard_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> GList *key_events;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> gdouble last_x;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> gdouble last_y;</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> GTimer *timer;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='keyword'>int</span> shape_event_base;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> ACTIVITY,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> DEACTIVATED,</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWindow, gs_window, GTK_TYPE_WINDOW)<span class='macro_popup'>static void gs_window_init (GSWindow *self); static void gs_window_class_init<br> (GSWindowClass *klass); static GType gs_window_get_type_once<br> (void); static gpointer gs_window_parent_class = ((void*)0);<br> static gint GSWindow_private_offset; static void gs_window_class_intern_init<br> (gpointer klass) { gs_window_parent_class = g_type_class_peek_parent<br> (klass); if (GSWindow_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWindow_private_offset); gs_window_class_init (<br>(GSWindowClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_window_get_instance_private (GSWindow *self<br>) { return (((gpointer) ((guint8*) (self) + (glong) (GSWindow_private_offset<br>)))); } GType gs_window_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_window_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_window_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> ((gtk_window_get_type ()), g_intern_static_string ("GSWindow"<br>), sizeof (GSWindowClass), (GClassInitFunc)(void (*)(void)) gs_window_class_intern_init<br>, sizeof (GSWindow), (GInstanceInitFunc)(void (*)(void)) gs_window_init<br>, (GTypeFlags) 0); { {{ GSWindow_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWindowPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line">set_invisible_cursor (GdkWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> gboolean invisible)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> GdkCursor *cursor = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>if</span> (invisible)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> display = gdk_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> cursor = gdk_cursor_new_for_display (display, GDK_BLANK_CURSOR);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> gdk_window_set_cursor (window, cursor);</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (cursor)</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_object_unref (cursor);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"><span class='comment'>/* derived from tomboy */</span></td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line">gs_window_override_user_time (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> guint32 ev_time = gtk_get_current_event_time ();</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='keyword'>if</span> (ev_time == 0)</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> gint ev_mask = gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> <span class='keyword'>if</span> (!(ev_mask &amp; GDK_PROPERTY_CHANGE_MASK))</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gtk_widget_add_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> GDK_PROPERTY_CHANGE_MASK);</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='comment'>* NOTE: Last resort for D-BUS or other non-interactive</span></td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='comment'>* openings. Causes roundtrip to server. Lame.</span></td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> ev_time = gdk_x11_get_server_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>));</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> gdk_x11_window_set_user_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), ev_time);</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line">clear_children (Window window)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> Window root;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> Window parent;</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> Window *children;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>int</span> n_children;</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> children = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> status = XQueryTree (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, window, &amp;root, &amp;parent, &amp;children, &amp;n_children);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> <span class='keyword'>if</span> (status == 0)</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>while</span> (n_children)</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> Window child;</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> child = children [--n_children];</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> XClearWindow (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, child);</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> clear_children (child);</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line">widget_clear_all_children (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> GdkWindow *w;</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing all child windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 235, "Clearing all child windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> display = gtk_widget_get_display (widget);</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> w = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> clear_children (<span class='macro'>GDK_WINDOW_XID (w)<span class='macro_popup'>(gdk_x11_window_get_xid (w))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line">gs_window_set_background_surface (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> cairo_surface_t *surface)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> window-&gt;priv-&gt;background_surface = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> <span class='keyword'>if</span> (surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> window-&gt;priv-&gt;background_surface = cairo_surface_reference (surface);</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line">gs_window_clear (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing widgets"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 274, "Clearing widgets"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='comment'>/* If a screensaver theme adds child windows</span></td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> <span class='comment'>we need to clear them too */</span></td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> widget_clear_all_children (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (window-&gt;priv-&gt;drawing_area))</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> gtk_widget_queue_draw (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> widget_clear_all_children (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> gdk_display_flush (display);</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"><span class='keyword'>static</span> cairo_region_t *</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line">get_outside_region (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>int</span> num_monitors;</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> cairo_region_t *region;</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> region = cairo_region_create ();</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> num_monitors = gdk_display_get_n_monitors (display);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num_monitors; i++)</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> GdkMonitor *mon = gdk_display_get_monitor (display, i);</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='keyword'>if</span> (mon != window-&gt;priv-&gt;monitor)</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> cairo_rectangle_int_t rectangle;</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> gdk_monitor_get_geometry (mon, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> rectangle.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> rectangle.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> rectangle.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> rectangle.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> cairo_region_union_rectangle (region, &amp;rectangle);</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='keyword'>return</span> region;</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">update_geometry (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> cairo_region_t *outside_region;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> cairo_region_t *monitor_region;</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> outside_region = get_outside_region (window);</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> gdk_monitor_get_geometry (window-&gt;priv-&gt;monitor, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"got geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> monitor_region = cairo_region_create_rectangle ((<span class='keyword'>const</span> cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> cairo_region_subtract (monitor_region, outside_region);</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> cairo_region_destroy (outside_region);</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> cairo_region_get_extents (monitor_region, (cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> cairo_region_destroy (monitor_region);</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"using geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> window-&gt;priv-&gt;geometry.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> window-&gt;priv-&gt;geometry.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> window-&gt;priv-&gt;geometry.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> window-&gt;priv-&gt;geometry.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line">monitor_geometry_notify (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> GParamSpec *pspec,</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got monitor geometry notify signal"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 371, "Got monitor geometry notify signal"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"><span class='comment'>/* copied from panel-toplevel.c */</span></td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line">gs_window_move_resize_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> gboolean move,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> gboolean resize)</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> GtkWidget *widget;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> GdkWindow *gdkwindow;</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> gdkwindow = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='macro'>g_assert (gtk_widget_get_realized (widget))<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Move and/or resize window: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (move &amp;&amp; resize)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> gdk_window_move_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> window-&gt;priv-&gt;geometry.y,</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (move)</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> gdk_window_move (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> window-&gt;priv-&gt;geometry.y);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (resize)</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> gdk_window_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line">gs_window_real_unrealize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (monitor, monitor_geometry_notify,<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize)</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize (widget);</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"><span class='comment'>/* copied from gdk */</span></td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"><span class='keyword'>extern</span> <span class='keyword'>char</span> **environ;</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"><span class='keyword'>static</span> gchar **</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line">spawn_make_environment_for_display (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> gchar **envp)</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> gchar **retval = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> <span class='keyword'>const</span> gchar *display_name;</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> gint display_index = -1;</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> gint i, env_len;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='macro'>g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='keyword'>if</span> (envp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> envp = environ;</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>for</span> (env_len = 0; envp[env_len]; env_len++)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='keyword'>if</span> (strncmp (envp[env_len], <span class='string_literal'>"DISPLAY"</span>, strlen (<span class='string_literal'>"DISPLAY"</span>)) == 0)</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> display_index = env_len;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> retval = <span class='macro'>g_new (<span class='keyword'>char</span> *, env_len + 1)<span class='macro_popup'>((char * *) g_malloc_n ((env_len + 1), sizeof (char *)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> retval[env_len] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> display_name = gdk_display_get_name (display);</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; env_len; i++)</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (i == display_index)</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> retval[i] = g_strconcat (<span class='string_literal'>"DISPLAY="</span>, display_name, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> retval[i] = g_strdup (envp[i]);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> <span class='macro'>g_assert (i == env_len)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line">spawn_command_line_on_display_sync (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>const</span> gchar *command_line,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='keyword'>char</span> **standard_output,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='keyword'>char</span> **standard_error,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>int</span> *exit_status,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>char</span> **argv = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='keyword'>char</span> **envp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='macro'>g_return_val_if_fail (command_line != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command_line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;argv, error))</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> envp = spawn_make_environment_for_display (display, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> retval = g_spawn_sync (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> standard_output,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> standard_error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> exit_status,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> error);</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> GdkVisual *</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">get_best_visual_for_display (GdkDisplay *display)</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>char</span> *std_output;</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>int</span> exit_status;</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> v;</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> visual = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> std_output = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> res = spawn_command_line_on_display_sync (display,</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH<span class='macro_popup'>"/usr/local/libexec/mate-screensaver-gl-helper"</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> &amp;std_output,</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> &amp;exit_status,</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not run command '%s': %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (std_output, <span class='string_literal'>"0x%lx %c"</span>, &amp;v, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> <span class='keyword'>if</span> (v != 0)</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> VisualID visual_id;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> visual_id = (VisualID) v;</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> visual = gdk_x11_screen_lookup_visual (screen, visual_id);</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Found best GL visual for display %s: 0x%x"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='macro'>gdk_display_get_name (display),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='macro'>(<span class='keyword'>unsigned</span> <span class='keyword'>int</span>) visual_id)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> g_free (std_output);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>g_object_ref (visual)<span class='macro_popup'>((__typeof__ (visual)) (g_object_ref) (visual))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line">widget_set_best_visual (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='macro'>g_return_if_fail (widget != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> visual = get_best_visual_for_display (gtk_widget_get_display (widget));</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='keyword'>if</span> (visual != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> gtk_widget_set_visual (widget, visual);</td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> g_object_unref (visual);</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line">gs_window_real_realize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> widget_set_best_visual (widget);</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize)</td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize (widget);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> gs_window_override_user_time (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> gs_window_move_resize_window (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='macro'>g_signal_connect (monitor,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='string_literal'><span class='macro'>"notify::geometry"</span>,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='macro'>G_CALLBACK (monitor_geometry_notify),<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"><span class='comment'>/* every so often we should raise the window in case</span></td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='comment'>another window has somehow gotten on top */</span></td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> GtkWidget *widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> gdk_window_focus (gtk_widget_get_window (widget), <span class='macro'>GDK_CURRENT_TIME<span class='macro_popup'>0L</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line">remove_watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> g_source_remove (window-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line">add_watchdog_timer (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line">remove_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> g_source_remove (window-&gt;priv-&gt;popup_dialog_idle_id);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line">add_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = g_idle_add (popup_dialog_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line">emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_signal_emit (window, signals [DEACTIVATED], 0);</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line">add_emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> g_idle_add ((GSourceFunc)emit_deactivated_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line">gs_window_raise (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> GdkWindow *win;</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Raising screensaver window"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 662, "Raising screensaver window"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> win = gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> gdk_window_raise (win);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line">x11_window_is_ours (Window window)</td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> GdkWindow *gwindow;</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> gwindow = gdk_x11_window_lookup_for_display (gdk_display_get_default (), window);</td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (gwindow &amp;&amp; (window != <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line">unshape_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> gdk_window_shape_combine_region (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>),</td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line">gs_window_xevent (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> GdkXEvent *xevent)</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> XEvent *ev;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> ev = xevent;</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> <span class='comment'>/* MapNotify is used to tell us when new windows are mapped.</span></td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='comment'>ConfigureNofify is used to tell us when windows are raised. */</span></td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='keyword'>switch</span> (ev-&gt;xany.type)</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>MapNotify<span class='macro_popup'>19</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> XMapEvent *xme = &amp;ev-&gt;xmap;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xme-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 719, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>ConfigureNotify<span class='macro_popup'>22</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> XConfigureEvent *xce = &amp;ev-&gt;xconfigure;</td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xce-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 734, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> <span class='comment'>/* extension events */</span></td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"> <span class='keyword'>if</span> (ev-&gt;xany.type == (window-&gt;priv-&gt;shape_event_base + <span class='macro'>ShapeNotify<span class='macro_popup'>0</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='comment'>/*XShapeEvent *xse = (XShapeEvent *) ev;*/</span></td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> unshape_window (window);</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Window was reshaped!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 746, "Window was reshaped!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"><span class='keyword'>static</span> GdkFilterReturn</td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line">xevent_filter (GdkXEvent *xevent,</td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> GdkEvent *event,</td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> gs_window_xevent (window, xevent);</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>return</span> GDK_FILTER_CONTINUE;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">select_popup_events (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> XWindowAttributes attr;</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> display = gdk_display_get_default ();</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> memset (&amp;attr, 0, <span class='keyword'>sizeof</span> (attr));</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> XGetWindowAttributes (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, &amp;attr);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> events = <span class='macro'>SubstructureNotifyMask<span class='macro_popup'>(1L&lt;&lt;19)</span></span> | attr.your_event_mask;</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> XSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line">window_select_shape_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> <span class='keyword'>int</span> shape_error_base;</td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> <span class='keyword'>if</span> (XShapeQueryExtension (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, &amp;window-&gt;priv-&gt;shape_event_base, &amp;shape_error_base)) {</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> events = <span class='macro'>ShapeNotifyMask<span class='macro_popup'>(1L &lt;&lt; 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> XShapeSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window)))<span class='macro_popup'>(gdk_x11_window_get_xid (gtk_widget_get_window (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">gs_window_real_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"> GSWindow *window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line"> cairo_surface_t *bg_surface = window-&gt;priv-&gt;background_surface;</td></tr>
+<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> <span class='keyword'>if</span> (bg_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> cairo_set_source_surface (cr, bg_surface, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line">gs_window_real_show (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show)</td></tr>
+<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show (widget);</td></tr>
+<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> gs_window_clear (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (widget), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> window-&gt;priv-&gt;timer = g_timer_new ();</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> add_watchdog_timer (window, 30000);</td></tr>
+<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> select_popup_events ();</td></tr>
+<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> window_select_shape_events (window);</td></tr>
+<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> gdk_window_add_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line">set_info_text_and_icon (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon_name,</td></tr>
+<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *primary_text,</td></tr>
+<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *secondary_text)</td></tr>
+<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> GtkWidget *content_area;</td></tr>
+<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> GtkWidget *hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> GtkWidget *image;</td></tr>
+<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> gchar *primary_markup;</td></tr>
+<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> gchar *secondary_markup;</td></tr>
+<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> GtkWidget *primary_label;</td></tr>
+<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> GtkWidget *secondary_label;</td></tr>
+<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> hbox_content = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);</td></tr>
+<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> gtk_widget_show (hbox_content);</td></tr>
+<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="874"><td class="num" id="LN874">874</td><td class="line"> image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_DIALOG);</td></tr>
+<tr class="codeline" data-linenumber="875"><td class="num" id="LN875">875</td><td class="line"> gtk_widget_show (image);</td></tr>
+<tr class="codeline" data-linenumber="876"><td class="num" id="LN876">876</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, image, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="877"><td class="num" id="LN877">877</td><td class="line"> gtk_widget_set_valign (image, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="878"><td class="num" id="LN878">878</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="879"><td class="num" id="LN879">879</td><td class="line"> vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);</td></tr>
+<tr class="codeline" data-linenumber="880"><td class="num" id="LN880">880</td><td class="line"> gtk_widget_show (vbox);</td></tr>
+<tr class="codeline" data-linenumber="881"><td class="num" id="LN881">881</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, vbox, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="882"><td class="num" id="LN882">882</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="883"><td class="num" id="LN883">883</td><td class="line"> primary_markup = g_strdup_printf (<span class='string_literal'>"&lt;b&gt;%s&lt;/b&gt;"</span>, primary_text);</td></tr>
+<tr class="codeline" data-linenumber="884"><td class="num" id="LN884">884</td><td class="line"> primary_label = gtk_label_new (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="885"><td class="num" id="LN885">885</td><td class="line"> g_free (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="886"><td class="num" id="LN886">886</td><td class="line"> gtk_widget_show (primary_label);</td></tr>
+<tr class="codeline" data-linenumber="887"><td class="num" id="LN887">887</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, primary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="888"><td class="num" id="LN888">888</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="889"><td class="num" id="LN889">889</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="890"><td class="num" id="LN890">890</td><td class="line"> gtk_widget_set_halign (primary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="891"><td class="num" id="LN891">891</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="892"><td class="num" id="LN892">892</td><td class="line"> <span class='keyword'>if</span> (secondary_text != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="893"><td class="num" id="LN893">893</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="894"><td class="num" id="LN894">894</td><td class="line"> secondary_markup = g_strdup_printf (<span class='string_literal'>"&lt;small&gt;%s&lt;/small&gt;"</span>,</td></tr>
+<tr class="codeline" data-linenumber="895"><td class="num" id="LN895">895</td><td class="line"> secondary_text);</td></tr>
+<tr class="codeline" data-linenumber="896"><td class="num" id="LN896">896</td><td class="line"> secondary_label = gtk_label_new (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="897"><td class="num" id="LN897">897</td><td class="line"> g_free (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="898"><td class="num" id="LN898">898</td><td class="line"> gtk_widget_show (secondary_label);</td></tr>
+<tr class="codeline" data-linenumber="899"><td class="num" id="LN899">899</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, secondary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="900"><td class="num" id="LN900">900</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="901"><td class="num" id="LN901">901</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="902"><td class="num" id="LN902">902</td><td class="line"> gtk_widget_set_halign (secondary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="903"><td class="num" id="LN903">903</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="904"><td class="num" id="LN904">904</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="905"><td class="num" id="LN905">905</td><td class="line"> <span class='comment'>/* remove old content */</span></td></tr>
+<tr class="codeline" data-linenumber="906"><td class="num" id="LN906">906</td><td class="line"> content_area = gtk_info_bar_get_content_area (<span class='macro'>GTK_INFO_BAR (window-&gt;priv-&gt;info_bar)<span class='macro_popup'>((((GtkInfoBar*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;info_bar)), ((gtk_info_bar_get_type(<br>)))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="907"><td class="num" id="LN907">907</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_content != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="908"><td class="num" id="LN908">908</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="909"><td class="num" id="LN909">909</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (content_area)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_content);</td></tr>
+<tr class="codeline" data-linenumber="910"><td class="num" id="LN910">910</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="911"><td class="num" id="LN911">911</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (content_area)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="912"><td class="num" id="LN912">912</td><td class="line"> hbox_content,</td></tr>
+<tr class="codeline" data-linenumber="913"><td class="num" id="LN913">913</td><td class="line"> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="914"><td class="num" id="LN914">914</td><td class="line"> window-&gt;priv-&gt;info_content = hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="915"><td class="num" id="LN915">915</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="916"><td class="num" id="LN916">916</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="917"><td class="num" id="LN917">917</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="918"><td class="num" id="LN918">918</td><td class="line">info_bar_timeout (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="919"><td class="num" id="LN919">919</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="920"><td class="num" id="LN920">920</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="921"><td class="num" id="LN921">921</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="922"><td class="num" id="LN922">922</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="923"><td class="num" id="LN923">923</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="924"><td class="num" id="LN924">924</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="925"><td class="num" id="LN925">925</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="926"><td class="num" id="LN926">926</td><td class="line">gs_window_show_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="927"><td class="num" id="LN927">927</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *summary,</td></tr>
+<tr class="codeline" data-linenumber="928"><td class="num" id="LN928">928</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *body,</td></tr>
+<tr class="codeline" data-linenumber="929"><td class="num" id="LN929">929</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon)</td></tr>
+<tr class="codeline" data-linenumber="930"><td class="num" id="LN930">930</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="931"><td class="num" id="LN931">931</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="932"><td class="num" id="LN932">932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="933"><td class="num" id="LN933">933</td><td class="line"> set_info_text_and_icon (window,</td></tr>
+<tr class="codeline" data-linenumber="934"><td class="num" id="LN934">934</td><td class="line"> icon,</td></tr>
+<tr class="codeline" data-linenumber="935"><td class="num" id="LN935">935</td><td class="line"> summary,</td></tr>
+<tr class="codeline" data-linenumber="936"><td class="num" id="LN936">936</td><td class="line"> body);</td></tr>
+<tr class="codeline" data-linenumber="937"><td class="num" id="LN937">937</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="938"><td class="num" id="LN938">938</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="939"><td class="num" id="LN939">939</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="940"><td class="num" id="LN940">940</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="941"><td class="num" id="LN941">941</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="942"><td class="num" id="LN942">942</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="943"><td class="num" id="LN943">943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="944"><td class="num" id="LN944">944</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = g_timeout_add_seconds (<span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="945"><td class="num" id="LN945">945</td><td class="line"> (GSourceFunc)info_bar_timeout,</td></tr>
+<tr class="codeline" data-linenumber="946"><td class="num" id="LN946">946</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="947"><td class="num" id="LN947">947</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="948"><td class="num" id="LN948">948</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="949"><td class="num" id="LN949">949</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="950"><td class="num" id="LN950">950</td><td class="line">gs_window_show (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="951"><td class="num" id="LN951">951</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="952"><td class="num" id="LN952">952</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="953"><td class="num" id="LN953">953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="954"><td class="num" id="LN954">954</td><td class="line"> gtk_widget_show (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="955"><td class="num" id="LN955">955</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="956"><td class="num" id="LN956">956</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="957"><td class="num" id="LN957">957</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="958"><td class="num" id="LN958">958</td><td class="line">gs_window_real_hide (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="959"><td class="num" id="LN959">959</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="960"><td class="num" id="LN960">960</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="961"><td class="num" id="LN961">961</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="962"><td class="num" id="LN962">962</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="963"><td class="num" id="LN963">963</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="964"><td class="num" id="LN964">964</td><td class="line"> gdk_window_remove_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="965"><td class="num" id="LN965">965</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="966"><td class="num" id="LN966">966</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="967"><td class="num" id="LN967">967</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="968"><td class="num" id="LN968">968</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide)</td></tr>
+<tr class="codeline" data-linenumber="969"><td class="num" id="LN969">969</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="970"><td class="num" id="LN970">970</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="971"><td class="num" id="LN971">971</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="972"><td class="num" id="LN972">972</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="973"><td class="num" id="LN973">973</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="974"><td class="num" id="LN974">974</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="975"><td class="num" id="LN975">975</td><td class="line">gs_window_destroy (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="976"><td class="num" id="LN976">976</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="977"><td class="num" id="LN977">977</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="978"><td class="num" id="LN978">978</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="979"><td class="num" id="LN979">979</td><td class="line"> gs_window_cancel_unlock_request (window);</td></tr>
+<tr class="codeline" data-linenumber="980"><td class="num" id="LN980">980</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="981"><td class="num" id="LN981">981</td><td class="line"> gtk_widget_destroy (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="982"><td class="num" id="LN982">982</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="983"><td class="num" id="LN983">983</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="984"><td class="num" id="LN984">984</td><td class="line">GdkWindow *</td></tr>
+<tr class="codeline" data-linenumber="985"><td class="num" id="LN985">985</td><td class="line">gs_window_get_gdk_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="986"><td class="num" id="LN986">986</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="987"><td class="num" id="LN987">987</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="988"><td class="num" id="LN988">988</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="989"><td class="num" id="LN989">989</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="990"><td class="num" id="LN990">990</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="991"><td class="num" id="LN991">991</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="992"><td class="num" id="LN992">992</td><td class="line">GtkWidget *</td></tr>
+<tr class="codeline" data-linenumber="993"><td class="num" id="LN993">993</td><td class="line">gs_window_get_drawing_area (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="994"><td class="num" id="LN994">994</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="995"><td class="num" id="LN995">995</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="996"><td class="num" id="LN996">996</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="997"><td class="num" id="LN997">997</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="998"><td class="num" id="LN998">998</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="999"><td class="num" id="LN999">999</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1000"><td class="num" id="LN1000">1000</td><td class="line"><span class='comment'>/* just for debugging */</span></td></tr>
+<tr class="codeline" data-linenumber="1001"><td class="num" id="LN1001">1001</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1002"><td class="num" id="LN1002">1002</td><td class="line">error_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1003"><td class="num" id="LN1003">1003</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1004"><td class="num" id="LN1004">1004</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1005"><td class="num" id="LN1005">1005</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1006"><td class="num" id="LN1006">1006</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1007"><td class="num" id="LN1007">1007</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1008"><td class="num" id="LN1008">1008</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1009"><td class="num" id="LN1009">1009</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1010"><td class="num" id="LN1010">1010</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1011"><td class="num" id="LN1011">1011</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1012"><td class="num" id="LN1012">1012</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1013"><td class="num" id="LN1013">1013</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1014"><td class="num" id="LN1014">1014</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1015"><td class="num" id="LN1015">1015</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1016"><td class="num" id="LN1016">1016</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1017"><td class="num" id="LN1017">1017</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1018"><td class="num" id="LN1018">1018</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1019"><td class="num" id="LN1019">1019</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1020"><td class="num" id="LN1020">1020</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command error output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1020, "command error output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1021"><td class="num" id="LN1021">1021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1022"><td class="num" id="LN1022">1022</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1023"><td class="num" id="LN1023">1023</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1024"><td class="num" id="LN1024">1024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1025"><td class="num" id="LN1025">1025</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1026"><td class="num" id="LN1026">1026</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1027"><td class="num" id="LN1027">1027</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1027, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1028"><td class="num" id="LN1028">1028</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1029"><td class="num" id="LN1029">1029</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1030"><td class="num" id="LN1030">1030</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1031"><td class="num" id="LN1031">1031</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1032"><td class="num" id="LN1032">1032</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1033"><td class="num" id="LN1033">1033</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1034"><td class="num" id="LN1034">1034</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1035"><td class="num" id="LN1035">1035</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1036"><td class="num" id="LN1036">1036</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1037"><td class="num" id="LN1037">1037</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1038"><td class="num" id="LN1038">1038</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1039"><td class="num" id="LN1039">1039</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1040"><td class="num" id="LN1040">1040</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1041"><td class="num" id="LN1041">1041</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1042"><td class="num" id="LN1042">1042</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1043"><td class="num" id="LN1043">1043</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1044"><td class="num" id="LN1044">1044</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1045"><td class="num" id="LN1045">1045</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1046"><td class="num" id="LN1046">1046</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1047"><td class="num" id="LN1047">1047</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1048"><td class="num" id="LN1048">1048</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1049"><td class="num" id="LN1049">1049</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1050"><td class="num" id="LN1050">1050</td><td class="line">spawn_on_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1051"><td class="num" id="LN1051">1051</td><td class="line"> <span class='keyword'>char</span> *command,</td></tr>
+<tr class="codeline" data-linenumber="1052"><td class="num" id="LN1052">1052</td><td class="line"> <span class='keyword'>int</span> *pid,</td></tr>
+<tr class="codeline" data-linenumber="1053"><td class="num" id="LN1053">1053</td><td class="line"> GIOFunc watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1054"><td class="num" id="LN1054">1054</td><td class="line"> gpointer user_data,</td></tr>
+<tr class="codeline" data-linenumber="1055"><td class="num" id="LN1055">1055</td><td class="line"> gint *watch_id)</td></tr>
+<tr class="codeline" data-linenumber="1056"><td class="num" id="LN1056">1056</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1057"><td class="num" id="LN1057">1057</td><td class="line"> <span class='keyword'>int</span> argc;</td></tr>
+<tr class="codeline" data-linenumber="1058"><td class="num" id="LN1058">1058</td><td class="line"> <span class='keyword'>char</span> **argv;</td></tr>
+<tr class="codeline" data-linenumber="1059"><td class="num" id="LN1059">1059</td><td class="line"> <span class='keyword'>char</span> **envp;</td></tr>
+<tr class="codeline" data-linenumber="1060"><td class="num" id="LN1060">1060</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="1061"><td class="num" id="LN1061">1061</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1062"><td class="num" id="LN1062">1062</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="1063"><td class="num" id="LN1063">1063</td><td class="line"> <span class='keyword'>int</span> standard_output;</td></tr>
+<tr class="codeline" data-linenumber="1064"><td class="num" id="LN1064">1064</td><td class="line"> <span class='keyword'>int</span> standard_error;</td></tr>
+<tr class="codeline" data-linenumber="1065"><td class="num" id="LN1065">1065</td><td class="line"> <span class='keyword'>int</span> child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1066"><td class="num" id="LN1066">1066</td><td class="line"> <span class='keyword'>int</span> id;</td></tr>
+<tr class="codeline" data-linenumber="1067"><td class="num" id="LN1067">1067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1068"><td class="num" id="LN1068">1068</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1069"><td class="num" id="LN1069">1069</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command, &amp;argc, &amp;argv, &amp;error))</td></tr>
+<tr class="codeline" data-linenumber="1070"><td class="num" id="LN1070">1070</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1071"><td class="num" id="LN1071">1071</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not parse command: %s"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1071, "Could not parse command: %s"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1072"><td class="num" id="LN1072">1072</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1073"><td class="num" id="LN1073">1073</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1074"><td class="num" id="LN1074">1074</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1075"><td class="num" id="LN1075">1075</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1076"><td class="num" id="LN1076">1076</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1077"><td class="num" id="LN1077">1077</td><td class="line"> envp = spawn_make_environment_for_display (gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1078"><td class="num" id="LN1078">1078</td><td class="line"> result = g_spawn_async_with_pipes (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1079"><td class="num" id="LN1079">1079</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="1080"><td class="num" id="LN1080">1080</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="1081"><td class="num" id="LN1081">1081</td><td class="line"> G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="1082"><td class="num" id="LN1082">1082</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1083"><td class="num" id="LN1083">1083</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1084"><td class="num" id="LN1084">1084</td><td class="line"> &amp;child_pid,</td></tr>
+<tr class="codeline" data-linenumber="1085"><td class="num" id="LN1085">1085</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1086"><td class="num" id="LN1086">1086</td><td class="line"> &amp;standard_output,</td></tr>
+<tr class="codeline" data-linenumber="1087"><td class="num" id="LN1087">1087</td><td class="line"> &amp;standard_error,</td></tr>
+<tr class="codeline" data-linenumber="1088"><td class="num" id="LN1088">1088</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1089"><td class="num" id="LN1089">1089</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1090"><td class="num" id="LN1090">1090</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1091"><td class="num" id="LN1091">1091</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1092"><td class="num" id="LN1092">1092</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command '%s': %s"</span>, command, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1092, "Could not start command '%s': %s"<br>, command, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1093"><td class="num" id="LN1093">1093</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1094"><td class="num" id="LN1094">1094</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1095"><td class="num" id="LN1095">1095</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1096"><td class="num" id="LN1096">1096</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1097"><td class="num" id="LN1097">1097</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1098"><td class="num" id="LN1098">1098</td><td class="line"> <span class='keyword'>if</span> (pid != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1099"><td class="num" id="LN1099">1099</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1100"><td class="num" id="LN1100">1100</td><td class="line"> *pid = child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1101"><td class="num" id="LN1101">1101</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1102"><td class="num" id="LN1102">1102</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1103"><td class="num" id="LN1103">1103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1104"><td class="num" id="LN1104">1104</td><td class="line"> g_spawn_close_pid (child_pid);</td></tr>
+<tr class="codeline" data-linenumber="1105"><td class="num" id="LN1105">1105</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1106"><td class="num" id="LN1106">1106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1107"><td class="num" id="LN1107">1107</td><td class="line"> <span class='comment'>/* output channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1108"><td class="num" id="LN1108">1108</td><td class="line"> channel = g_io_channel_unix_new (standard_output);</td></tr>
+<tr class="codeline" data-linenumber="1109"><td class="num" id="LN1109">1109</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1110"><td class="num" id="LN1110">1110</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1111"><td class="num" id="LN1111">1111</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1112"><td class="num" id="LN1112">1112</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1113"><td class="num" id="LN1113">1113</td><td class="line"> id = g_io_add_watch (channel,</td></tr>
+<tr class="codeline" data-linenumber="1114"><td class="num" id="LN1114">1114</td><td class="line"> G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr>
+<tr class="codeline" data-linenumber="1115"><td class="num" id="LN1115">1115</td><td class="line"> watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1116"><td class="num" id="LN1116">1116</td><td class="line"> user_data);</td></tr>
+<tr class="codeline" data-linenumber="1117"><td class="num" id="LN1117">1117</td><td class="line"> <span class='keyword'>if</span> (watch_id != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1118"><td class="num" id="LN1118">1118</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1119"><td class="num" id="LN1119">1119</td><td class="line"> *watch_id = id;</td></tr>
+<tr class="codeline" data-linenumber="1120"><td class="num" id="LN1120">1120</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1121"><td class="num" id="LN1121">1121</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1122"><td class="num" id="LN1122">1122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1123"><td class="num" id="LN1123">1123</td><td class="line"> <span class='comment'>/* error channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1124"><td class="num" id="LN1124">1124</td><td class="line"> channel = g_io_channel_unix_new (standard_error);</td></tr>
+<tr class="codeline" data-linenumber="1125"><td class="num" id="LN1125">1125</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1126"><td class="num" id="LN1126">1126</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1127"><td class="num" id="LN1127">1127</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1128"><td class="num" id="LN1128">1128</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1129"><td class="num" id="LN1129">1129</td><td class="line"> id = g_io_add_watch (channel,</td></tr>
+<tr class="codeline" data-linenumber="1130"><td class="num" id="LN1130">1130</td><td class="line"> G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr>
+<tr class="codeline" data-linenumber="1131"><td class="num" id="LN1131">1131</td><td class="line"> error_watch,</td></tr>
+<tr class="codeline" data-linenumber="1132"><td class="num" id="LN1132">1132</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1133"><td class="num" id="LN1133">1133</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1134"><td class="num" id="LN1134">1134</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1135"><td class="num" id="LN1135">1135</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1136"><td class="num" id="LN1136">1136</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="1137"><td class="num" id="LN1137">1137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1138"><td class="num" id="LN1138">1138</td><td class="line"> <span class='keyword'>return</span> result;</td></tr>
+<tr class="codeline" data-linenumber="1139"><td class="num" id="LN1139">1139</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1140"><td class="num" id="LN1140">1140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1141"><td class="num" id="LN1141">1141</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1142"><td class="num" id="LN1142">1142</td><td class="line">lock_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1143"><td class="num" id="LN1143">1143</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1144"><td class="num" id="LN1144">1144</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1145"><td class="num" id="LN1145">1145</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1146"><td class="num" id="LN1146">1146</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1147"><td class="num" id="LN1147">1147</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1148"><td class="num" id="LN1148">1148</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1149"><td class="num" id="LN1149">1149</td><td class="line">lock_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1150"><td class="num" id="LN1150">1150</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1151"><td class="num" id="LN1151">1151</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1152"><td class="num" id="LN1152">1152</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1153"><td class="num" id="LN1153">1153</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1154"><td class="num" id="LN1154">1154</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1155"><td class="num" id="LN1155">1155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1156"><td class="num" id="LN1156">1156</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1157"><td class="num" id="LN1157">1157</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1158"><td class="num" id="LN1158">1158</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1159"><td class="num" id="LN1159">1159</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1160"><td class="num" id="LN1160">1160</td><td class="line">keyboard_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1161"><td class="num" id="LN1161">1161</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1162"><td class="num" id="LN1162">1162</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1163"><td class="num" id="LN1163">1163</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1164"><td class="num" id="LN1164">1164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1165"><td class="num" id="LN1165">1165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1166"><td class="num" id="LN1166">1166</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1167"><td class="num" id="LN1167">1167</td><td class="line">keyboard_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1168"><td class="num" id="LN1168">1168</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1169"><td class="num" id="LN1169">1169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1170"><td class="num" id="LN1170">1170</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1171"><td class="num" id="LN1171">1171</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_widget_get_type<br> ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1172"><td class="num" id="LN1172">1172</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1173"><td class="num" id="LN1173">1173</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1174"><td class="num" id="LN1174">1174</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1175"><td class="num" id="LN1175">1175</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1176"><td class="num" id="LN1176">1176</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1177"><td class="num" id="LN1177">1177</td><td class="line">keyboard_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1178"><td class="num" id="LN1178">1178</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1179"><td class="num" id="LN1179">1179</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1180"><td class="num" id="LN1180">1180</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1181"><td class="num" id="LN1181">1181</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1182"><td class="num" id="LN1182">1182</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1183"><td class="num" id="LN1183">1183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1184"><td class="num" id="LN1184">1184</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1185"><td class="num" id="LN1185">1185</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1186"><td class="num" id="LN1186">1186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1187"><td class="num" id="LN1187">1187</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1188"><td class="num" id="LN1188">1188</td><td class="line">forward_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1189"><td class="num" id="LN1189">1189</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1190"><td class="num" id="LN1190">1190</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1191"><td class="num" id="LN1191">1191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1192"><td class="num" id="LN1192">1192</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1193"><td class="num" id="LN1193">1193</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1194"><td class="num" id="LN1194">1194</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1195"><td class="num" id="LN1195">1195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1196"><td class="num" id="LN1196">1196</td><td class="line"> gtk_window_propagate_key_event (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="1197"><td class="num" id="LN1197">1197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1198"><td class="num" id="LN1198">1198</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1199"><td class="num" id="LN1199">1199</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1200"><td class="num" id="LN1200">1200</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1201"><td class="num" id="LN1201">1201</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1202"><td class="num" id="LN1202">1202</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1203"><td class="num" id="LN1203">1203</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1204"><td class="num" id="LN1204">1204</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1205"><td class="num" id="LN1205">1205</td><td class="line">remove_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1206"><td class="num" id="LN1206">1206</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1207"><td class="num" id="LN1207">1207</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1208"><td class="num" id="LN1208">1208</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1209"><td class="num" id="LN1209">1209</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events)</td></tr>
+<tr class="codeline" data-linenumber="1210"><td class="num" id="LN1210">1210</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1211"><td class="num" id="LN1211">1211</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1212"><td class="num" id="LN1212">1212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1213"><td class="num" id="LN1213">1213</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1214"><td class="num" id="LN1214">1214</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1215"><td class="num" id="LN1215">1215</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1216"><td class="num" id="LN1216">1216</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1217"><td class="num" id="LN1217">1217</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1218"><td class="num" id="LN1218">1218</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1219"><td class="num" id="LN1219">1219</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1220"><td class="num" id="LN1220">1220</td><td class="line">lock_socket_show (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1221"><td class="num" id="LN1221">1221</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1222"><td class="num" id="LN1222">1222</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1223"><td class="num" id="LN1223">1223</td><td class="line"> gtk_widget_child_focus (window-&gt;priv-&gt;lock_socket, GTK_DIR_TAB_FORWARD);</td></tr>
+<tr class="codeline" data-linenumber="1224"><td class="num" id="LN1224">1224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1225"><td class="num" id="LN1225">1225</td><td class="line"> <span class='comment'>/* send queued events to the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="1226"><td class="num" id="LN1226">1226</td><td class="line"> forward_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1227"><td class="num" id="LN1227">1227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1228"><td class="num" id="LN1228">1228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1229"><td class="num" id="LN1229">1229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1230"><td class="num" id="LN1230">1230</td><td class="line">lock_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1231"><td class="num" id="LN1231">1231</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1232"><td class="num" id="LN1232">1232</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1233"><td class="num" id="LN1233">1233</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_show, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_show), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1234"><td class="num" id="LN1234">1234</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1235"><td class="num" id="LN1235">1235</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1236"><td class="num" id="LN1236">1236</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1237"><td class="num" id="LN1237">1237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1238"><td class="num" id="LN1238">1238</td><td class="line"> window-&gt;priv-&gt;lock_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1239"><td class="num" id="LN1239">1239</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1240"><td class="num" id="LN1240">1240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1241"><td class="num" id="LN1241">1241</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1242"><td class="num" id="LN1242">1242</td><td class="line">create_keyboard_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1243"><td class="num" id="LN1243">1243</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1244"><td class="num" id="LN1244">1244</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1245"><td class="num" id="LN1245">1245</td><td class="line"> <span class='keyword'>int</span> height;</td></tr>
+<tr class="codeline" data-linenumber="1246"><td class="num" id="LN1246">1246</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1247"><td class="num" id="LN1247">1247</td><td class="line"> height = (<span class='macro'>HeightOfScreen (gdk_x11_screen_get_xscreen (gtk_widget_get_screen (GTK_WIDGET (window))))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (gtk_widget_get_screen (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))-&gt;height)</span></span>) / 4;</td></tr>
+<tr class="codeline" data-linenumber="1248"><td class="num" id="LN1248">1248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1249"><td class="num" id="LN1249">1249</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1250"><td class="num" id="LN1250">1250</td><td class="line"> gtk_widget_set_size_request (window-&gt;priv-&gt;keyboard_socket, -1, height);</td></tr>
+<tr class="codeline" data-linenumber="1251"><td class="num" id="LN1251">1251</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1252"><td class="num" id="LN1252">1252</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1253"><td class="num" id="LN1253">1253</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1254"><td class="num" id="LN1254">1254</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1255"><td class="num" id="LN1255">1255</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1256"><td class="num" id="LN1256">1256</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1257"><td class="num" id="LN1257">1257</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1258"><td class="num" id="LN1258">1258</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;keyboard_socket, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1259"><td class="num" id="LN1259">1259</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1260"><td class="num" id="LN1260">1260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1261"><td class="num" id="LN1261">1261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1262"><td class="num" id="LN1262">1262</td><td class="line"><span class='comment'>/* adapted from gspawn.c */</span></td></tr>
+<tr class="codeline" data-linenumber="1263"><td class="num" id="LN1263">1263</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="1264"><td class="num" id="LN1264">1264</td><td class="line">wait_on_child (<span class='keyword'>int</span> pid)</td></tr>
+<tr class="codeline" data-linenumber="1265"><td class="num" id="LN1265">1265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1266"><td class="num" id="LN1266">1266</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1267"><td class="num" id="LN1267">1267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1268"><td class="num" id="LN1268">1268</td><td class="line">wait_again:</td></tr>
+<tr class="codeline" data-linenumber="1269"><td class="num" id="LN1269">1269</td><td class="line"> <span class='keyword'>if</span> (waitpid (pid, &amp;status, 0) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1270"><td class="num" id="LN1270">1270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1271"><td class="num" id="LN1271">1271</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINTR<span class='macro_popup'>4</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1272"><td class="num" id="LN1272">1272</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1273"><td class="num" id="LN1273">1273</td><td class="line"> <span class='keyword'>goto</span> wait_again;</td></tr>
+<tr class="codeline" data-linenumber="1274"><td class="num" id="LN1274">1274</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1275"><td class="num" id="LN1275">1275</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>ECHILD<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1276"><td class="num" id="LN1276">1276</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1277"><td class="num" id="LN1277">1277</td><td class="line"> ; <span class='comment'>/* do nothing, child already reaped */</span></td></tr>
+<tr class="codeline" data-linenumber="1278"><td class="num" id="LN1278">1278</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1279"><td class="num" id="LN1279">1279</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1280"><td class="num" id="LN1280">1280</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1281"><td class="num" id="LN1281">1281</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"waitpid () should not fail in 'GSWindow'"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1281, "waitpid () should not fail in 'GSWindow'"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1282"><td class="num" id="LN1282">1282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1283"><td class="num" id="LN1283">1283</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1284"><td class="num" id="LN1284">1284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1285"><td class="num" id="LN1285">1285</td><td class="line"> <span class='keyword'>return</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1286"><td class="num" id="LN1286">1286</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1287"><td class="num" id="LN1287">1287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1288"><td class="num" id="LN1288">1288</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1289"><td class="num" id="LN1289">1289</td><td class="line">kill_keyboard_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1290"><td class="num" id="LN1290">1290</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1291"><td class="num" id="LN1291">1291</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1292"><td class="num" id="LN1292">1292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1293"><td class="num" id="LN1293">1293</td><td class="line"> signal_pid (window-&gt;priv-&gt;keyboard_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1294"><td class="num" id="LN1294">1294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1295"><td class="num" id="LN1295">1295</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1296"><td class="num" id="LN1296">1296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1297"><td class="num" id="LN1297">1297</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1298"><td class="num" id="LN1298">1298</td><td class="line">kill_dialog_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1299"><td class="num" id="LN1299">1299</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1300"><td class="num" id="LN1300">1300</td><td class="line"> <span class='comment'>/* If a dialog is up we need to signal it</span></td></tr>
+<tr class="codeline" data-linenumber="1301"><td class="num" id="LN1301">1301</td><td class="line"> <span class='comment'>and wait on it */</span></td></tr>
+<tr class="codeline" data-linenumber="1302"><td class="num" id="LN1302">1302</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1303"><td class="num" id="LN1303">1303</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1304"><td class="num" id="LN1304">1304</td><td class="line"> signal_pid (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1305"><td class="num" id="LN1305">1305</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1306"><td class="num" id="LN1306">1306</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1307"><td class="num" id="LN1307">1307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1308"><td class="num" id="LN1308">1308</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1309"><td class="num" id="LN1309">1309</td><td class="line">keyboard_command_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1310"><td class="num" id="LN1310">1310</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1311"><td class="num" id="LN1311">1311</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1312"><td class="num" id="LN1312">1312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1313"><td class="num" id="LN1313">1313</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1314"><td class="num" id="LN1314">1314</td><td class="line"> kill_keyboard_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1315"><td class="num" id="LN1315">1315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1316"><td class="num" id="LN1316">1316</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Keyboard finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1316, "Keyboard finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1317"><td class="num" id="LN1317">1317</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1318"><td class="num" id="LN1318">1318</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1319"><td class="num" id="LN1319">1319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1320"><td class="num" id="LN1320">1320</td><td class="line"> wait_on_child (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1321"><td class="num" id="LN1321">1321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1322"><td class="num" id="LN1322">1322</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1323"><td class="num" id="LN1323">1323</td><td class="line"> window-&gt;priv-&gt;keyboard_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1324"><td class="num" id="LN1324">1324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1325"><td class="num" id="LN1325">1325</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1326"><td class="num" id="LN1326">1326</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1327"><td class="num" id="LN1327">1327</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1328"><td class="num" id="LN1328">1328</td><td class="line">keyboard_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1329"><td class="num" id="LN1329">1329</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1330"><td class="num" id="LN1330">1330</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1331"><td class="num" id="LN1331">1331</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1332"><td class="num" id="LN1332">1332</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1333"><td class="num" id="LN1333">1333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1334"><td class="num" id="LN1334">1334</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1335"><td class="num" id="LN1335">1335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1336"><td class="num" id="LN1336">1336</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1337"><td class="num" id="LN1337">1337</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1338"><td class="num" id="LN1338">1338</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1339"><td class="num" id="LN1339">1339</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1340"><td class="num" id="LN1340">1340</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1341"><td class="num" id="LN1341">1341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1342"><td class="num" id="LN1342">1342</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1343"><td class="num" id="LN1343">1343</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1344"><td class="num" id="LN1344">1344</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1345"><td class="num" id="LN1345">1345</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1346"><td class="num" id="LN1346">1346</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1347"><td class="num" id="LN1347">1347</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1348"><td class="num" id="LN1348">1348</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1349"><td class="num" id="LN1349">1349</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1350"><td class="num" id="LN1350">1350</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1351"><td class="num" id="LN1351">1351</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"keyboard command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1351, "keyboard command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1352"><td class="num" id="LN1352">1352</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1353"><td class="num" id="LN1353">1353</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1354"><td class="num" id="LN1354">1354</td><td class="line"> create_keyboard_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1355"><td class="num" id="LN1355">1355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1356"><td class="num" id="LN1356">1356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1357"><td class="num" id="LN1357">1357</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1358"><td class="num" id="LN1358">1358</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1359"><td class="num" id="LN1359">1359</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1360"><td class="num" id="LN1360">1360</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1361"><td class="num" id="LN1361">1361</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1362"><td class="num" id="LN1362">1362</td><td class="line"> finished = <span class="mrange"><span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:25ex">Value stored to 'finished' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="1363"><td class="num" id="LN1363">1363</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1363, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1364"><td class="num" id="LN1364">1364</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1365"><td class="num" id="LN1365">1365</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1366"><td class="num" id="LN1366">1366</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1367"><td class="num" id="LN1367">1367</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1368"><td class="num" id="LN1368">1368</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1369"><td class="num" id="LN1369">1369</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1370"><td class="num" id="LN1370">1370</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1371"><td class="num" id="LN1371">1371</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1372"><td class="num" id="LN1372">1372</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1373"><td class="num" id="LN1373">1373</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1374"><td class="num" id="LN1374">1374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1375"><td class="num" id="LN1375">1375</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1376"><td class="num" id="LN1376">1376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1377"><td class="num" id="LN1377">1377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1378"><td class="num" id="LN1378">1378</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1379"><td class="num" id="LN1379">1379</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1380"><td class="num" id="LN1380">1380</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1381"><td class="num" id="LN1381">1381</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1382"><td class="num" id="LN1382">1382</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1383"><td class="num" id="LN1383">1383</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1384"><td class="num" id="LN1384">1384</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1385"><td class="num" id="LN1385">1385</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1386"><td class="num" id="LN1386">1386</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1387"><td class="num" id="LN1387">1387</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1388"><td class="num" id="LN1388">1388</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1389"><td class="num" id="LN1389">1389</td><td class="line">embed_keyboard (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1390"><td class="num" id="LN1390">1390</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1391"><td class="num" id="LN1391">1391</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="1392"><td class="num" id="LN1392">1392</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1393"><td class="num" id="LN1393">1393</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;keyboard_enabled</td></tr>
+<tr class="codeline" data-linenumber="1394"><td class="num" id="LN1394">1394</td><td class="line"> || window-&gt;priv-&gt;keyboard_command == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1395"><td class="num" id="LN1395">1395</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1396"><td class="num" id="LN1396">1396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1397"><td class="num" id="LN1397">1397</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Adding embedded keyboard widget"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1397, "Adding embedded keyboard widget"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1398"><td class="num" id="LN1398">1398</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1399"><td class="num" id="LN1399">1399</td><td class="line"> <span class='comment'>/* FIXME: verify command is safe */</span></td></tr>
+<tr class="codeline" data-linenumber="1400"><td class="num" id="LN1400">1400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1401"><td class="num" id="LN1401">1401</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Running command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1401, "Running command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1402"><td class="num" id="LN1402">1402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1403"><td class="num" id="LN1403">1403</td><td class="line"> res = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1404"><td class="num" id="LN1404">1404</td><td class="line"> window-&gt;priv-&gt;keyboard_command,</td></tr>
+<tr class="codeline" data-linenumber="1405"><td class="num" id="LN1405">1405</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_pid,</td></tr>
+<tr class="codeline" data-linenumber="1406"><td class="num" id="LN1406">1406</td><td class="line"> (GIOFunc)keyboard_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1407"><td class="num" id="LN1407">1407</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1408"><td class="num" id="LN1408">1408</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1409"><td class="num" id="LN1409">1409</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="1410"><td class="num" id="LN1410">1410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1411"><td class="num" id="LN1411">1411</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1411, "Could not start command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1412"><td class="num" id="LN1412">1412</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1413"><td class="num" id="LN1413">1413</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1414"><td class="num" id="LN1414">1414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1415"><td class="num" id="LN1415">1415</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1416"><td class="num" id="LN1416">1416</td><td class="line">create_lock_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1417"><td class="num" id="LN1417">1417</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1418"><td class="num" id="LN1418">1418</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1419"><td class="num" id="LN1419">1419</td><td class="line"> window-&gt;priv-&gt;lock_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1420"><td class="num" id="LN1420">1420</td><td class="line"> window-&gt;priv-&gt;lock_box = gtk_grid_new ();</td></tr>
+<tr class="codeline" data-linenumber="1421"><td class="num" id="LN1421">1421</td><td class="line"> gtk_widget_set_halign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1422"><td class="num" id="LN1422">1422</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1423"><td class="num" id="LN1423">1423</td><td class="line"> gtk_widget_set_valign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1424"><td class="num" id="LN1424">1424</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1425"><td class="num" id="LN1425">1425</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;lock_box);</td></tr>
+<tr class="codeline" data-linenumber="1426"><td class="num" id="LN1426">1426</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;lock_box, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1427"><td class="num" id="LN1427">1427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1428"><td class="num" id="LN1428">1428</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_container_get_type<br> ()))))))</span></span>, window-&gt;priv-&gt;lock_socket);</td></tr>
+<tr class="codeline" data-linenumber="1429"><td class="num" id="LN1429">1429</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1430"><td class="num" id="LN1430">1430</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"show"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1431"><td class="num" id="LN1431">1431</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_show), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1432"><td class="num" id="LN1432">1432</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1433"><td class="num" id="LN1433">1433</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1434"><td class="num" id="LN1434">1434</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1435"><td class="num" id="LN1435">1435</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1436"><td class="num" id="LN1436">1436</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1437"><td class="num" id="LN1437">1437</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1438"><td class="num" id="LN1438">1438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1439"><td class="num" id="LN1439">1439</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;lock_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1440"><td class="num" id="LN1440">1440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1441"><td class="num" id="LN1441">1441</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1442"><td class="num" id="LN1442">1442</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1443"><td class="num" id="LN1443">1443</td><td class="line"> embed_keyboard (window);</td></tr>
+<tr class="codeline" data-linenumber="1444"><td class="num" id="LN1444">1444</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1445"><td class="num" id="LN1445">1445</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1446"><td class="num" id="LN1446">1446</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1447"><td class="num" id="LN1447">1447</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1448"><td class="num" id="LN1448">1448</td><td class="line">gs_window_dialog_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1449"><td class="num" id="LN1449">1449</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1450"><td class="num" id="LN1450">1450</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1451"><td class="num" id="LN1451">1451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1452"><td class="num" id="LN1452">1452</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Dialog finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1452, "Dialog finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1453"><td class="num" id="LN1453">1453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1454"><td class="num" id="LN1454">1454</td><td class="line"> <span class='comment'>/* make sure we finish the keyboard thing too */</span></td></tr>
+<tr class="codeline" data-linenumber="1455"><td class="num" id="LN1455">1455</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1456"><td class="num" id="LN1456">1456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1457"><td class="num" id="LN1457">1457</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1458"><td class="num" id="LN1458">1458</td><td class="line"> kill_dialog_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1459"><td class="num" id="LN1459">1459</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1460"><td class="num" id="LN1460">1460</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1461"><td class="num" id="LN1461">1461</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1462"><td class="num" id="LN1462">1462</td><td class="line"> wait_on_child (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1463"><td class="num" id="LN1463">1463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1464"><td class="num" id="LN1464">1464</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1465"><td class="num" id="LN1465">1465</td><td class="line"> window-&gt;priv-&gt;lock_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1466"><td class="num" id="LN1466">1466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1467"><td class="num" id="LN1467">1467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1468"><td class="num" id="LN1468">1468</td><td class="line"> <span class='comment'>/* remove events for the case were we failed to show socket */</span></td></tr>
+<tr class="codeline" data-linenumber="1469"><td class="num" id="LN1469">1469</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1470"><td class="num" id="LN1470">1470</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1471"><td class="num" id="LN1471">1471</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1472"><td class="num" id="LN1472">1472</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1473"><td class="num" id="LN1473">1473</td><td class="line">maybe_kill_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1474"><td class="num" id="LN1474">1474</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1475"><td class="num" id="LN1475">1475</td><td class="line"> <span class='keyword'>if</span> (!window-&gt;priv-&gt;dialog_shake_in_progress</td></tr>
+<tr class="codeline" data-linenumber="1476"><td class="num" id="LN1476">1476</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;dialog_quit_requested</td></tr>
+<tr class="codeline" data-linenumber="1477"><td class="num" id="LN1477">1477</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1478"><td class="num" id="LN1478">1478</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1479"><td class="num" id="LN1479">1479</td><td class="line"> kill (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1480"><td class="num" id="LN1480">1480</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1481"><td class="num" id="LN1481">1481</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1482"><td class="num" id="LN1482">1482</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1483"><td class="num" id="LN1483">1483</td><td class="line"><span class='comment'>/* very rudimentary animation for indicating an auth failure */</span></td></tr>
+<tr class="codeline" data-linenumber="1484"><td class="num" id="LN1484">1484</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1485"><td class="num" id="LN1485">1485</td><td class="line">shake_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1486"><td class="num" id="LN1486">1486</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1487"><td class="num" id="LN1487">1487</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="1488"><td class="num" id="LN1488">1488</td><td class="line"> guint start, end;</td></tr>
+<tr class="codeline" data-linenumber="1489"><td class="num" id="LN1489">1489</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1490"><td class="num" id="LN1490">1490</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1491"><td class="num" id="LN1491">1491</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1492"><td class="num" id="LN1492">1492</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; 8; i++)</td></tr>
+<tr class="codeline" data-linenumber="1493"><td class="num" id="LN1493">1493</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1494"><td class="num" id="LN1494">1494</td><td class="line"> <span class='keyword'>if</span> (i % 2 == 0)</td></tr>
+<tr class="codeline" data-linenumber="1495"><td class="num" id="LN1495">1495</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1496"><td class="num" id="LN1496">1496</td><td class="line"> start = 30;</td></tr>
+<tr class="codeline" data-linenumber="1497"><td class="num" id="LN1497">1497</td><td class="line"> end = 0;</td></tr>
+<tr class="codeline" data-linenumber="1498"><td class="num" id="LN1498">1498</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1499"><td class="num" id="LN1499">1499</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1500"><td class="num" id="LN1500">1500</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1501"><td class="num" id="LN1501">1501</td><td class="line"> start = 0;</td></tr>
+<tr class="codeline" data-linenumber="1502"><td class="num" id="LN1502">1502</td><td class="line"> end = 30;</td></tr>
+<tr class="codeline" data-linenumber="1503"><td class="num" id="LN1503">1503</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1504"><td class="num" id="LN1504">1504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1505"><td class="num" id="LN1505">1505</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_box)</td></tr>
+<tr class="codeline" data-linenumber="1506"><td class="num" id="LN1506">1506</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1507"><td class="num" id="LN1507">1507</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1508"><td class="num" id="LN1508">1508</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1509"><td class="num" id="LN1509">1509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1510"><td class="num" id="LN1510">1510</td><td class="line"> gtk_widget_set_margin_start (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1511"><td class="num" id="LN1511">1511</td><td class="line"> start);</td></tr>
+<tr class="codeline" data-linenumber="1512"><td class="num" id="LN1512">1512</td><td class="line"> gtk_widget_set_margin_end (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1513"><td class="num" id="LN1513">1513</td><td class="line"> end);</td></tr>
+<tr class="codeline" data-linenumber="1514"><td class="num" id="LN1514">1514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1515"><td class="num" id="LN1515">1515</td><td class="line"> <span class='keyword'>while</span> (gtk_events_pending ())</td></tr>
+<tr class="codeline" data-linenumber="1516"><td class="num" id="LN1516">1516</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1517"><td class="num" id="LN1517">1517</td><td class="line"> gtk_main_iteration ();</td></tr>
+<tr class="codeline" data-linenumber="1518"><td class="num" id="LN1518">1518</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1519"><td class="num" id="LN1519">1519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1520"><td class="num" id="LN1520">1520</td><td class="line"> g_usleep (10000);</td></tr>
+<tr class="codeline" data-linenumber="1521"><td class="num" id="LN1521">1521</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1522"><td class="num" id="LN1522">1522</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1523"><td class="num" id="LN1523">1523</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1524"><td class="num" id="LN1524">1524</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1525"><td class="num" id="LN1525">1525</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1526"><td class="num" id="LN1526">1526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1527"><td class="num" id="LN1527">1527</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1528"><td class="num" id="LN1528">1528</td><td class="line">window_set_dialog_up (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1529"><td class="num" id="LN1529">1529</td><td class="line"> gboolean dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1530"><td class="num" id="LN1530">1530</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1531"><td class="num" id="LN1531">1531</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_up == dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1532"><td class="num" id="LN1532">1532</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1533"><td class="num" id="LN1533">1533</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1534"><td class="num" id="LN1534">1534</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1535"><td class="num" id="LN1535">1535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1536"><td class="num" id="LN1536">1536</td><td class="line"> window-&gt;priv-&gt;dialog_up = (dialog_up != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1537"><td class="num" id="LN1537">1537</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"dialog-up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1538"><td class="num" id="LN1538">1538</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1539"><td class="num" id="LN1539">1539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1540"><td class="num" id="LN1540">1540</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1541"><td class="num" id="LN1541">1541</td><td class="line">popdown_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1542"><td class="num" id="LN1542">1542</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1543"><td class="num" id="LN1543">1543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1544"><td class="num" id="LN1544">1544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1545"><td class="num" id="LN1545">1545</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1546"><td class="num" id="LN1546">1546</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1547"><td class="num" id="LN1547">1547</td><td class="line"> gs_window_clear (window);</td></tr>
+<tr class="codeline" data-linenumber="1548"><td class="num" id="LN1548">1548</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1549"><td class="num" id="LN1549">1549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1550"><td class="num" id="LN1550">1550</td><td class="line"> window_set_dialog_up (window, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1551"><td class="num" id="LN1551">1551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1552"><td class="num" id="LN1552">1552</td><td class="line"> <span class='comment'>/* reset the pointer positions */</span></td></tr>
+<tr class="codeline" data-linenumber="1553"><td class="num" id="LN1553">1553</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="1554"><td class="num" id="LN1554">1554</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="1555"><td class="num" id="LN1555">1555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1556"><td class="num" id="LN1556">1556</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_box != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1557"><td class="num" id="LN1557">1557</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1558"><td class="num" id="LN1558">1558</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1559"><td class="num" id="LN1559">1559</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1560"><td class="num" id="LN1560">1560</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1561"><td class="num" id="LN1561">1561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1562"><td class="num" id="LN1562">1562</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1563"><td class="num" id="LN1563">1563</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="1564"><td class="num" id="LN1564">1564</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1565"><td class="num" id="LN1565">1565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1566"><td class="num" id="LN1566">1566</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1567"><td class="num" id="LN1567">1567</td><td class="line">lock_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1568"><td class="num" id="LN1568">1568</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1569"><td class="num" id="LN1569">1569</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1570"><td class="num" id="LN1570">1570</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1571"><td class="num" id="LN1571">1571</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1572"><td class="num" id="LN1572">1572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1573"><td class="num" id="LN1573">1573</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1574"><td class="num" id="LN1574">1574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1575"><td class="num" id="LN1575">1575</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1576"><td class="num" id="LN1576">1576</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1577"><td class="num" id="LN1577">1577</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1578"><td class="num" id="LN1578">1578</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1579"><td class="num" id="LN1579">1579</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1580"><td class="num" id="LN1580">1580</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1581"><td class="num" id="LN1581">1581</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1582"><td class="num" id="LN1582">1582</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1583"><td class="num" id="LN1583">1583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1584"><td class="num" id="LN1584">1584</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1585"><td class="num" id="LN1585">1585</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1586"><td class="num" id="LN1586">1586</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1587"><td class="num" id="LN1587">1587</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1587, "command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1588"><td class="num" id="LN1588">1588</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1589"><td class="num" id="LN1589">1589</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"WINDOW ID="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1590"><td class="num" id="LN1590">1590</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1591"><td class="num" id="LN1591">1591</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1592"><td class="num" id="LN1592">1592</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1593"><td class="num" id="LN1593">1593</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" WINDOW ID= %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1594"><td class="num" id="LN1594">1594</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1595"><td class="num" id="LN1595">1595</td><td class="line"> create_lock_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1596"><td class="num" id="LN1596">1596</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1597"><td class="num" id="LN1597">1597</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1598"><td class="num" id="LN1598">1598</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1599"><td class="num" id="LN1599">1599</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1600"><td class="num" id="LN1600">1600</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE=AUTH FAILED"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1601"><td class="num" id="LN1601">1601</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1602"><td class="num" id="LN1602">1602</td><td class="line"> shake_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1603"><td class="num" id="LN1603">1603</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1604"><td class="num" id="LN1604">1604</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1605"><td class="num" id="LN1605">1605</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1606"><td class="num" id="LN1606">1606</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1607"><td class="num" id="LN1607">1607</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE=OK"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1608"><td class="num" id="LN1608">1608</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1609"><td class="num" id="LN1609">1609</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got OK response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1609, "Got OK response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1610"><td class="num" id="LN1610">1610</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_OK;</td></tr>
+<tr class="codeline" data-linenumber="1611"><td class="num" id="LN1611">1611</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1612"><td class="num" id="LN1612">1612</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1613"><td class="num" id="LN1613">1613</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1614"><td class="num" id="LN1614">1614</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got CANCEL response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1614, "Got CANCEL response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1615"><td class="num" id="LN1615">1615</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_CANCEL;</td></tr>
+<tr class="codeline" data-linenumber="1616"><td class="num" id="LN1616">1616</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1617"><td class="num" id="LN1617">1617</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1618"><td class="num" id="LN1618">1618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1619"><td class="num" id="LN1619">1619</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"REQUEST QUIT"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1620"><td class="num" id="LN1620">1620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1621"><td class="num" id="LN1621">1621</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got request for quit"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1621, "Got request for quit"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1622"><td class="num" id="LN1622">1622</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1623"><td class="num" id="LN1623">1623</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1624"><td class="num" id="LN1624">1624</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1625"><td class="num" id="LN1625">1625</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1626"><td class="num" id="LN1626">1626</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1627"><td class="num" id="LN1627">1627</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1628"><td class="num" id="LN1628">1628</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1629"><td class="num" id="LN1629">1629</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1630"><td class="num" id="LN1630">1630</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1631"><td class="num" id="LN1631">1631</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1631, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1632"><td class="num" id="LN1632">1632</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1633"><td class="num" id="LN1633">1633</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1634"><td class="num" id="LN1634">1634</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1635"><td class="num" id="LN1635">1635</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1636"><td class="num" id="LN1636">1636</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1637"><td class="num" id="LN1637">1637</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1638"><td class="num" id="LN1638">1638</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1639"><td class="num" id="LN1639">1639</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1640"><td class="num" id="LN1640">1640</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1641"><td class="num" id="LN1641">1641</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1642"><td class="num" id="LN1642">1642</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1643"><td class="num" id="LN1643">1643</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1644"><td class="num" id="LN1644">1644</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1645"><td class="num" id="LN1645">1645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1646"><td class="num" id="LN1646">1646</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1647"><td class="num" id="LN1647">1647</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1648"><td class="num" id="LN1648">1648</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1649"><td class="num" id="LN1649">1649</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1650"><td class="num" id="LN1650">1650</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_response == DIALOG_RESPONSE_OK)</td></tr>
+<tr class="codeline" data-linenumber="1651"><td class="num" id="LN1651">1651</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1652"><td class="num" id="LN1652">1652</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1653"><td class="num" id="LN1653">1653</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1654"><td class="num" id="LN1654">1654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1655"><td class="num" id="LN1655">1655</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1656"><td class="num" id="LN1656">1656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1657"><td class="num" id="LN1657">1657</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1658"><td class="num" id="LN1658">1658</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1659"><td class="num" id="LN1659">1659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1660"><td class="num" id="LN1660">1660</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1661"><td class="num" id="LN1661">1661</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1662"><td class="num" id="LN1662">1662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1663"><td class="num" id="LN1663">1663</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1664"><td class="num" id="LN1664">1664</td><td class="line">is_logout_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1665"><td class="num" id="LN1665">1665</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1666"><td class="num" id="LN1666">1666</td><td class="line"> <span class='keyword'>double</span> elapsed;</td></tr>
+<tr class="codeline" data-linenumber="1667"><td class="num" id="LN1667">1667</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1668"><td class="num" id="LN1668">1668</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1669"><td class="num" id="LN1669">1669</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1670"><td class="num" id="LN1670">1670</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1671"><td class="num" id="LN1671">1671</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1672"><td class="num" id="LN1672">1672</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1673"><td class="num" id="LN1673">1673</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_command)</td></tr>
+<tr class="codeline" data-linenumber="1674"><td class="num" id="LN1674">1674</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1675"><td class="num" id="LN1675">1675</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1676"><td class="num" id="LN1676">1676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1677"><td class="num" id="LN1677">1677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1678"><td class="num" id="LN1678">1678</td><td class="line"> elapsed = g_timer_elapsed (window-&gt;priv-&gt;timer, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1679"><td class="num" id="LN1679">1679</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1680"><td class="num" id="LN1680">1680</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;logout_timeout &lt; (elapsed * 1000))</td></tr>
+<tr class="codeline" data-linenumber="1681"><td class="num" id="LN1681">1681</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1682"><td class="num" id="LN1682">1682</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1683"><td class="num" id="LN1683">1683</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1684"><td class="num" id="LN1684">1684</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1685"><td class="num" id="LN1685">1685</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1686"><td class="num" id="LN1686">1686</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1687"><td class="num" id="LN1687">1687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1688"><td class="num" id="LN1688">1688</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1689"><td class="num" id="LN1689">1689</td><td class="line">is_user_switch_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1690"><td class="num" id="LN1690">1690</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1691"><td class="num" id="LN1691">1691</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;user_switch_enabled;</td></tr>
+<tr class="codeline" data-linenumber="1692"><td class="num" id="LN1692">1692</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1693"><td class="num" id="LN1693">1693</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1694"><td class="num" id="LN1694">1694</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1695"><td class="num" id="LN1695">1695</td><td class="line">popup_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1696"><td class="num" id="LN1696">1696</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1697"><td class="num" id="LN1697">1697</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1698"><td class="num" id="LN1698">1698</td><td class="line"> GString *command;</td></tr>
+<tr class="codeline" data-linenumber="1699"><td class="num" id="LN1699">1699</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1700"><td class="num" id="LN1700">1700</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Popping up dialog"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1700, "Popping up dialog"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1701"><td class="num" id="LN1701">1701</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1702"><td class="num" id="LN1702">1702</td><td class="line"> command = g_string_new (<span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1703"><td class="num" id="LN1703">1703</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1704"><td class="num" id="LN1704">1704</td><td class="line"> <span class='keyword'>if</span> (is_logout_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1705"><td class="num" id="LN1705">1705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1706"><td class="num" id="LN1706">1706</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-logout"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1707"><td class="num" id="LN1707">1707</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --logout-command='%s'"</span>, window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1708"><td class="num" id="LN1708">1708</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1709"><td class="num" id="LN1709">1709</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1710"><td class="num" id="LN1710">1710</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;status_message)</td></tr>
+<tr class="codeline" data-linenumber="1711"><td class="num" id="LN1711">1711</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1712"><td class="num" id="LN1712">1712</td><td class="line"> <span class='keyword'>char</span> *quoted;</td></tr>
+<tr class="codeline" data-linenumber="1713"><td class="num" id="LN1713">1713</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1714"><td class="num" id="LN1714">1714</td><td class="line"> quoted = g_shell_quote (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1715"><td class="num" id="LN1715">1715</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --status-message=%s"</span>, quoted);</td></tr>
+<tr class="codeline" data-linenumber="1716"><td class="num" id="LN1716">1716</td><td class="line"> g_free (quoted);</td></tr>
+<tr class="codeline" data-linenumber="1717"><td class="num" id="LN1717">1717</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1718"><td class="num" id="LN1718">1718</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1719"><td class="num" id="LN1719">1719</td><td class="line"> <span class='keyword'>if</span> (is_user_switch_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1720"><td class="num" id="LN1720">1720</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1721"><td class="num" id="LN1721">1721</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-switch"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1722"><td class="num" id="LN1722">1722</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1723"><td class="num" id="LN1723">1723</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1724"><td class="num" id="LN1724">1724</td><td class="line"> <span class='keyword'>if</span> (gs_debug_enabled ())</td></tr>
+<tr class="codeline" data-linenumber="1725"><td class="num" id="LN1725">1725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1726"><td class="num" id="LN1726">1726</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --verbose"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1727"><td class="num" id="LN1727">1727</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1728"><td class="num" id="LN1728">1728</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1729"><td class="num" id="LN1729">1729</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1730"><td class="num" id="LN1730">1730</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1731"><td class="num" id="LN1731">1731</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1732"><td class="num" id="LN1732">1732</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1733"><td class="num" id="LN1733">1733</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1734"><td class="num" id="LN1734">1734</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1735"><td class="num" id="LN1735">1735</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1736"><td class="num" id="LN1736">1736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1737"><td class="num" id="LN1737">1737</td><td class="line"> result = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1738"><td class="num" id="LN1738">1738</td><td class="line"> command-&gt;str,</td></tr>
+<tr class="codeline" data-linenumber="1739"><td class="num" id="LN1739">1739</td><td class="line"> &amp;window-&gt;priv-&gt;lock_pid,</td></tr>
+<tr class="codeline" data-linenumber="1740"><td class="num" id="LN1740">1740</td><td class="line"> (GIOFunc)lock_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1741"><td class="num" id="LN1741">1741</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1742"><td class="num" id="LN1742">1742</td><td class="line"> &amp;window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1743"><td class="num" id="LN1743">1743</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1744"><td class="num" id="LN1744">1744</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1745"><td class="num" id="LN1745">1745</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, command-&gt;str)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1745, "Could not start command: %s"<br>, command-&gt;str)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1746"><td class="num" id="LN1746">1746</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1747"><td class="num" id="LN1747">1747</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1748"><td class="num" id="LN1748">1748</td><td class="line"> g_string_free (command, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1749"><td class="num" id="LN1749">1749</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1750"><td class="num" id="LN1750">1750</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1751"><td class="num" id="LN1751">1751</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1752"><td class="num" id="LN1752">1752</td><td class="line">popup_dialog_idle (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1753"><td class="num" id="LN1753">1753</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1754"><td class="num" id="LN1754">1754</td><td class="line"> GSWindow *window = data;</td></tr>
+<tr class="codeline" data-linenumber="1755"><td class="num" id="LN1755">1755</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1756"><td class="num" id="LN1756">1756</td><td class="line"> popup_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1757"><td class="num" id="LN1757">1757</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1758"><td class="num" id="LN1758">1758</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1759"><td class="num" id="LN1759">1759</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1760"><td class="num" id="LN1760">1760</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1761"><td class="num" id="LN1761">1761</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1762"><td class="num" id="LN1762">1762</td><td class="line">gs_window_request_unlock (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1763"><td class="num" id="LN1763">1763</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1764"><td class="num" id="LN1764">1764</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1765"><td class="num" id="LN1765">1765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1766"><td class="num" id="LN1766">1766</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Requesting unlock"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1766, "Requesting unlock"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1767"><td class="num" id="LN1767">1767</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1768"><td class="num" id="LN1768">1768</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_visible (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="1769"><td class="num" id="LN1769">1769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1770"><td class="num" id="LN1770">1770</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Request unlock but window is not visible!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1770, "Request unlock but window is not visible!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1771"><td class="num" id="LN1771">1771</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1772"><td class="num" id="LN1772">1772</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1773"><td class="num" id="LN1773">1773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1774"><td class="num" id="LN1774">1774</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1775"><td class="num" id="LN1775">1775</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1776"><td class="num" id="LN1776">1776</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1777"><td class="num" id="LN1777">1777</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1778"><td class="num" id="LN1778">1778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1779"><td class="num" id="LN1779">1779</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1780"><td class="num" id="LN1780">1780</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1781"><td class="num" id="LN1781">1781</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1782"><td class="num" id="LN1782">1782</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1783"><td class="num" id="LN1783">1783</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1784"><td class="num" id="LN1784">1784</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1785"><td class="num" id="LN1785">1785</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1786"><td class="num" id="LN1786">1786</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id == 0)</td></tr>
+<tr class="codeline" data-linenumber="1787"><td class="num" id="LN1787">1787</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1788"><td class="num" id="LN1788">1788</td><td class="line"> add_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1789"><td class="num" id="LN1789">1789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1790"><td class="num" id="LN1790">1790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1791"><td class="num" id="LN1791">1791</td><td class="line"> window_set_dialog_up (window, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1792"><td class="num" id="LN1792">1792</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1793"><td class="num" id="LN1793">1793</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1794"><td class="num" id="LN1794">1794</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1795"><td class="num" id="LN1795">1795</td><td class="line">gs_window_cancel_unlock_request (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1796"><td class="num" id="LN1796">1796</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1797"><td class="num" id="LN1797">1797</td><td class="line"> <span class='comment'>/* FIXME: This is a bit of a hammer approach...</span></td></tr>
+<tr class="codeline" data-linenumber="1798"><td class="num" id="LN1798">1798</td><td class="line"> <span class='comment'>* Maybe we should send a delete-event to</span></td></tr>
+<tr class="codeline" data-linenumber="1799"><td class="num" id="LN1799">1799</td><td class="line"> <span class='comment'>* the plug?</span></td></tr>
+<tr class="codeline" data-linenumber="1800"><td class="num" id="LN1800">1800</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1801"><td class="num" id="LN1801">1801</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1802"><td class="num" id="LN1802">1802</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1803"><td class="num" id="LN1803">1803</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1804"><td class="num" id="LN1804">1804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1805"><td class="num" id="LN1805">1805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1806"><td class="num" id="LN1806">1806</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1807"><td class="num" id="LN1807">1807</td><td class="line">gs_window_set_lock_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1808"><td class="num" id="LN1808">1808</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1809"><td class="num" id="LN1809">1809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1810"><td class="num" id="LN1810">1810</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1811"><td class="num" id="LN1811">1811</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1812"><td class="num" id="LN1812">1812</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_enabled == lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1813"><td class="num" id="LN1813">1813</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1814"><td class="num" id="LN1814">1814</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1815"><td class="num" id="LN1815">1815</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1816"><td class="num" id="LN1816">1816</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1817"><td class="num" id="LN1817">1817</td><td class="line"> window-&gt;priv-&gt;lock_enabled = (lock_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1818"><td class="num" id="LN1818">1818</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"lock-enabled"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1819"><td class="num" id="LN1819">1819</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1820"><td class="num" id="LN1820">1820</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1821"><td class="num" id="LN1821">1821</td><td class="line">GdkDisplay *</td></tr>
+<tr class="codeline" data-linenumber="1822"><td class="num" id="LN1822">1822</td><td class="line">gs_window_get_display (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1823"><td class="num" id="LN1823">1823</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1824"><td class="num" id="LN1824">1824</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1825"><td class="num" id="LN1825">1825</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1826"><td class="num" id="LN1826">1826</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1827"><td class="num" id="LN1827">1827</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1828"><td class="num" id="LN1828">1828</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1829"><td class="num" id="LN1829">1829</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1830"><td class="num" id="LN1830">1830</td><td class="line">gs_window_set_keyboard_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1831"><td class="num" id="LN1831">1831</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="1832"><td class="num" id="LN1832">1832</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1833"><td class="num" id="LN1833">1833</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1834"><td class="num" id="LN1834">1834</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1835"><td class="num" id="LN1835">1835</td><td class="line"> window-&gt;priv-&gt;keyboard_enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1836"><td class="num" id="LN1836">1836</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1837"><td class="num" id="LN1837">1837</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1838"><td class="num" id="LN1838">1838</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1839"><td class="num" id="LN1839">1839</td><td class="line">gs_window_set_keyboard_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1840"><td class="num" id="LN1840">1840</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1841"><td class="num" id="LN1841">1841</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1842"><td class="num" id="LN1842">1842</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1843"><td class="num" id="LN1843">1843</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1844"><td class="num" id="LN1844">1844</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="1845"><td class="num" id="LN1845">1845</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1846"><td class="num" id="LN1846">1846</td><td class="line"> <span class='keyword'>if</span> (command != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1847"><td class="num" id="LN1847">1847</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1848"><td class="num" id="LN1848">1848</td><td class="line"> window-&gt;priv-&gt;keyboard_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1849"><td class="num" id="LN1849">1849</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1850"><td class="num" id="LN1850">1850</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1851"><td class="num" id="LN1851">1851</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1852"><td class="num" id="LN1852">1852</td><td class="line"> window-&gt;priv-&gt;keyboard_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1853"><td class="num" id="LN1853">1853</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1854"><td class="num" id="LN1854">1854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1855"><td class="num" id="LN1855">1855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1856"><td class="num" id="LN1856">1856</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1857"><td class="num" id="LN1857">1857</td><td class="line">gs_window_set_logout_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1858"><td class="num" id="LN1858">1858</td><td class="line"> gboolean logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1859"><td class="num" id="LN1859">1859</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1860"><td class="num" id="LN1860">1860</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1861"><td class="num" id="LN1861">1861</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1862"><td class="num" id="LN1862">1862</td><td class="line"> window-&gt;priv-&gt;logout_enabled = (logout_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1863"><td class="num" id="LN1863">1863</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1864"><td class="num" id="LN1864">1864</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1865"><td class="num" id="LN1865">1865</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1866"><td class="num" id="LN1866">1866</td><td class="line">gs_window_set_user_switch_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1867"><td class="num" id="LN1867">1867</td><td class="line"> gboolean user_switch_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1868"><td class="num" id="LN1868">1868</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1869"><td class="num" id="LN1869">1869</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1870"><td class="num" id="LN1870">1870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1871"><td class="num" id="LN1871">1871</td><td class="line"> window-&gt;priv-&gt;user_switch_enabled = (user_switch_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1872"><td class="num" id="LN1872">1872</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1873"><td class="num" id="LN1873">1873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1874"><td class="num" id="LN1874">1874</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1875"><td class="num" id="LN1875">1875</td><td class="line">gs_window_set_logout_timeout (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1876"><td class="num" id="LN1876">1876</td><td class="line"> glong logout_timeout)</td></tr>
+<tr class="codeline" data-linenumber="1877"><td class="num" id="LN1877">1877</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1878"><td class="num" id="LN1878">1878</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1879"><td class="num" id="LN1879">1879</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1880"><td class="num" id="LN1880">1880</td><td class="line"> <span class='keyword'>if</span> (logout_timeout &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1881"><td class="num" id="LN1881">1881</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1882"><td class="num" id="LN1882">1882</td><td class="line"> window-&gt;priv-&gt;logout_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="1883"><td class="num" id="LN1883">1883</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1884"><td class="num" id="LN1884">1884</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1885"><td class="num" id="LN1885">1885</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1886"><td class="num" id="LN1886">1886</td><td class="line"> window-&gt;priv-&gt;logout_timeout = logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="1887"><td class="num" id="LN1887">1887</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1888"><td class="num" id="LN1888">1888</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1889"><td class="num" id="LN1889">1889</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1890"><td class="num" id="LN1890">1890</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1891"><td class="num" id="LN1891">1891</td><td class="line">gs_window_set_logout_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1892"><td class="num" id="LN1892">1892</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1893"><td class="num" id="LN1893">1893</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1894"><td class="num" id="LN1894">1894</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1895"><td class="num" id="LN1895">1895</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1896"><td class="num" id="LN1896">1896</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1897"><td class="num" id="LN1897">1897</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1898"><td class="num" id="LN1898">1898</td><td class="line"> <span class='keyword'>if</span> (command)</td></tr>
+<tr class="codeline" data-linenumber="1899"><td class="num" id="LN1899">1899</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1900"><td class="num" id="LN1900">1900</td><td class="line"> window-&gt;priv-&gt;logout_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1901"><td class="num" id="LN1901">1901</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1902"><td class="num" id="LN1902">1902</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1903"><td class="num" id="LN1903">1903</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1904"><td class="num" id="LN1904">1904</td><td class="line"> window-&gt;priv-&gt;logout_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1905"><td class="num" id="LN1905">1905</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1906"><td class="num" id="LN1906">1906</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1907"><td class="num" id="LN1907">1907</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1908"><td class="num" id="LN1908">1908</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1909"><td class="num" id="LN1909">1909</td><td class="line">gs_window_set_status_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1910"><td class="num" id="LN1910">1910</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_message)</td></tr>
+<tr class="codeline" data-linenumber="1911"><td class="num" id="LN1911">1911</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1912"><td class="num" id="LN1912">1912</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1913"><td class="num" id="LN1913">1913</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1914"><td class="num" id="LN1914">1914</td><td class="line"> g_free (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1915"><td class="num" id="LN1915">1915</td><td class="line"> window-&gt;priv-&gt;status_message = g_strdup (status_message);</td></tr>
+<tr class="codeline" data-linenumber="1916"><td class="num" id="LN1916">1916</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1917"><td class="num" id="LN1917">1917</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1918"><td class="num" id="LN1918">1918</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1919"><td class="num" id="LN1919">1919</td><td class="line">gs_window_set_monitor (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1920"><td class="num" id="LN1920">1920</td><td class="line"> GdkMonitor *monitor)</td></tr>
+<tr class="codeline" data-linenumber="1921"><td class="num" id="LN1921">1921</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1922"><td class="num" id="LN1922">1922</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1923"><td class="num" id="LN1923">1923</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1924"><td class="num" id="LN1924">1924</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;monitor == monitor)</td></tr>
+<tr class="codeline" data-linenumber="1925"><td class="num" id="LN1925">1925</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1926"><td class="num" id="LN1926">1926</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1927"><td class="num" id="LN1927">1927</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1928"><td class="num" id="LN1928">1928</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1929"><td class="num" id="LN1929">1929</td><td class="line"> window-&gt;priv-&gt;monitor = monitor;</td></tr>
+<tr class="codeline" data-linenumber="1930"><td class="num" id="LN1930">1930</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1931"><td class="num" id="LN1931">1931</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1932"><td class="num" id="LN1932">1932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1933"><td class="num" id="LN1933">1933</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"monitor"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1934"><td class="num" id="LN1934">1934</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1935"><td class="num" id="LN1935">1935</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1936"><td class="num" id="LN1936">1936</td><td class="line">GdkMonitor *</td></tr>
+<tr class="codeline" data-linenumber="1937"><td class="num" id="LN1937">1937</td><td class="line">gs_window_get_monitor (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1938"><td class="num" id="LN1938">1938</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1939"><td class="num" id="LN1939">1939</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1940"><td class="num" id="LN1940">1940</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1941"><td class="num" id="LN1941">1941</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="1942"><td class="num" id="LN1942">1942</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1943"><td class="num" id="LN1943">1943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1944"><td class="num" id="LN1944">1944</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1945"><td class="num" id="LN1945">1945</td><td class="line">gs_window_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1946"><td class="num" id="LN1946">1946</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1947"><td class="num" id="LN1947">1947</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1948"><td class="num" id="LN1948">1948</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1949"><td class="num" id="LN1949">1949</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1950"><td class="num" id="LN1950">1950</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1951"><td class="num" id="LN1951">1951</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1952"><td class="num" id="LN1952">1952</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1953"><td class="num" id="LN1953">1953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1954"><td class="num" id="LN1954">1954</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1955"><td class="num" id="LN1955">1955</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1956"><td class="num" id="LN1956">1956</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1957"><td class="num" id="LN1957">1957</td><td class="line"> gs_window_set_lock_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1958"><td class="num" id="LN1958">1958</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1959"><td class="num" id="LN1959">1959</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1960"><td class="num" id="LN1960">1960</td><td class="line"> gs_window_set_keyboard_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1961"><td class="num" id="LN1961">1961</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1962"><td class="num" id="LN1962">1962</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1963"><td class="num" id="LN1963">1963</td><td class="line"> gs_window_set_keyboard_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1964"><td class="num" id="LN1964">1964</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1965"><td class="num" id="LN1965">1965</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1966"><td class="num" id="LN1966">1966</td><td class="line"> gs_window_set_logout_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1967"><td class="num" id="LN1967">1967</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1968"><td class="num" id="LN1968">1968</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1969"><td class="num" id="LN1969">1969</td><td class="line"> gs_window_set_logout_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1970"><td class="num" id="LN1970">1970</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1971"><td class="num" id="LN1971">1971</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="1972"><td class="num" id="LN1972">1972</td><td class="line"> gs_window_set_status_message (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1973"><td class="num" id="LN1973">1973</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1974"><td class="num" id="LN1974">1974</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="1975"><td class="num" id="LN1975">1975</td><td class="line"> gs_window_set_logout_timeout (self, g_value_get_long (value));</td></tr>
+<tr class="codeline" data-linenumber="1976"><td class="num" id="LN1976">1976</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1977"><td class="num" id="LN1977">1977</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="1978"><td class="num" id="LN1978">1978</td><td class="line"> gs_window_set_monitor (self, g_value_get_pointer (value));</td></tr>
+<tr class="codeline" data-linenumber="1979"><td class="num" id="LN1979">1979</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1980"><td class="num" id="LN1980">1980</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1981"><td class="num" id="LN1981">1981</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 1981, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1982"><td class="num" id="LN1982">1982</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1983"><td class="num" id="LN1983">1983</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1984"><td class="num" id="LN1984">1984</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1985"><td class="num" id="LN1985">1985</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1986"><td class="num" id="LN1986">1986</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1987"><td class="num" id="LN1987">1987</td><td class="line">gs_window_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1988"><td class="num" id="LN1988">1988</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1989"><td class="num" id="LN1989">1989</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1990"><td class="num" id="LN1990">1990</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1991"><td class="num" id="LN1991">1991</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1992"><td class="num" id="LN1992">1992</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1993"><td class="num" id="LN1993">1993</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1994"><td class="num" id="LN1994">1994</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1995"><td class="num" id="LN1995">1995</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1996"><td class="num" id="LN1996">1996</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1997"><td class="num" id="LN1997">1997</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1998"><td class="num" id="LN1998">1998</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1999"><td class="num" id="LN1999">1999</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;lock_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2000"><td class="num" id="LN2000">2000</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2001"><td class="num" id="LN2001">2001</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2002"><td class="num" id="LN2002">2002</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;keyboard_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2003"><td class="num" id="LN2003">2003</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2004"><td class="num" id="LN2004">2004</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2005"><td class="num" id="LN2005">2005</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2006"><td class="num" id="LN2006">2006</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2007"><td class="num" id="LN2007">2007</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2008"><td class="num" id="LN2008">2008</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;logout_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2009"><td class="num" id="LN2009">2009</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2010"><td class="num" id="LN2010">2010</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2011"><td class="num" id="LN2011">2011</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2012"><td class="num" id="LN2012">2012</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2013"><td class="num" id="LN2013">2013</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="2014"><td class="num" id="LN2014">2014</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="2015"><td class="num" id="LN2015">2015</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2016"><td class="num" id="LN2016">2016</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="2017"><td class="num" id="LN2017">2017</td><td class="line"> g_value_set_long (value, self-&gt;priv-&gt;logout_timeout);</td></tr>
+<tr class="codeline" data-linenumber="2018"><td class="num" id="LN2018">2018</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2019"><td class="num" id="LN2019">2019</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="2020"><td class="num" id="LN2020">2020</td><td class="line"> g_value_set_pointer (value, (gpointer) self-&gt;priv-&gt;monitor);</td></tr>
+<tr class="codeline" data-linenumber="2021"><td class="num" id="LN2021">2021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2022"><td class="num" id="LN2022">2022</td><td class="line"> <span class='keyword'>case</span> PROP_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2023"><td class="num" id="LN2023">2023</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;obscured);</td></tr>
+<tr class="codeline" data-linenumber="2024"><td class="num" id="LN2024">2024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2025"><td class="num" id="LN2025">2025</td><td class="line"> <span class='keyword'>case</span> PROP_DIALOG_UP:</td></tr>
+<tr class="codeline" data-linenumber="2026"><td class="num" id="LN2026">2026</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;dialog_up);</td></tr>
+<tr class="codeline" data-linenumber="2027"><td class="num" id="LN2027">2027</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2028"><td class="num" id="LN2028">2028</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2029"><td class="num" id="LN2029">2029</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 2029, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2030"><td class="num" id="LN2030">2030</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2031"><td class="num" id="LN2031">2031</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2032"><td class="num" id="LN2032">2032</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2033"><td class="num" id="LN2033">2033</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2034"><td class="num" id="LN2034">2034</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2035"><td class="num" id="LN2035">2035</td><td class="line">queue_key_event (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2036"><td class="num" id="LN2036">2036</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2037"><td class="num" id="LN2037">2037</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2038"><td class="num" id="LN2038">2038</td><td class="line"> <span class='comment'>/* Eat the first return, enter, escape, or space */</span></td></tr>
+<tr class="codeline" data-linenumber="2039"><td class="num" id="LN2039">2039</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;key_events == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2040"><td class="num" id="LN2040">2040</td><td class="line"> &amp;&amp; (event-&gt;keyval == <span class='macro'>GDK_KEY_Return<span class='macro_popup'>0xff0d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2041"><td class="num" id="LN2041">2041</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_KP_Enter<span class='macro_popup'>0xff8d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2042"><td class="num" id="LN2042">2042</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_Escape<span class='macro_popup'>0xff1b</span></span></td></tr>
+<tr class="codeline" data-linenumber="2043"><td class="num" id="LN2043">2043</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_space<span class='macro_popup'>0x020</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2044"><td class="num" id="LN2044">2044</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2045"><td class="num" id="LN2045">2045</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2046"><td class="num" id="LN2046">2046</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2047"><td class="num" id="LN2047">2047</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2048"><td class="num" id="LN2048">2048</td><td class="line"> <span class='comment'>/* Only cache MAX_QUEUED_EVENTS key events. If there are any more than this then</span></td></tr>
+<tr class="codeline" data-linenumber="2049"><td class="num" id="LN2049">2049</td><td class="line"> <span class='comment'>something is wrong */</span></td></tr>
+<tr class="codeline" data-linenumber="2050"><td class="num" id="LN2050">2050</td><td class="line"> <span class='comment'>/* Don't queue keys that may cause focus navigation in the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="2051"><td class="num" id="LN2051">2051</td><td class="line"> <span class='keyword'>if</span> (g_list_length (window-&gt;priv-&gt;key_events) &lt; <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span></td></tr>
+<tr class="codeline" data-linenumber="2052"><td class="num" id="LN2052">2052</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Tab<span class='macro_popup'>0xff09</span></span></td></tr>
+<tr class="codeline" data-linenumber="2053"><td class="num" id="LN2053">2053</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Up<span class='macro_popup'>0xff52</span></span></td></tr>
+<tr class="codeline" data-linenumber="2054"><td class="num" id="LN2054">2054</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Down<span class='macro_popup'>0xff54</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2055"><td class="num" id="LN2055">2055</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2056"><td class="num" id="LN2056">2056</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_prepend (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="2057"><td class="num" id="LN2057">2057</td><td class="line"> gdk_event_copy ((GdkEvent *)event));</td></tr>
+<tr class="codeline" data-linenumber="2058"><td class="num" id="LN2058">2058</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2059"><td class="num" id="LN2059">2059</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2060"><td class="num" id="LN2060">2060</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2061"><td class="num" id="LN2061">2061</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2062"><td class="num" id="LN2062">2062</td><td class="line">maybe_handle_activity (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2063"><td class="num" id="LN2063">2063</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2064"><td class="num" id="LN2064">2064</td><td class="line"> gboolean handled;</td></tr>
+<tr class="codeline" data-linenumber="2065"><td class="num" id="LN2065">2065</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2066"><td class="num" id="LN2066">2066</td><td class="line"> handled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2067"><td class="num" id="LN2067">2067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2068"><td class="num" id="LN2068">2068</td><td class="line"> <span class='comment'>/* if we already have a socket then don't bother */</span></td></tr>
+<tr class="codeline" data-linenumber="2069"><td class="num" id="LN2069">2069</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_socket</td></tr>
+<tr class="codeline" data-linenumber="2070"><td class="num" id="LN2070">2070</td><td class="line"> &amp;&amp; gtk_widget_get_sensitive (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2071"><td class="num" id="LN2071">2071</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2072"><td class="num" id="LN2072">2072</td><td class="line"> g_signal_emit (window, signals [ACTIVITY], 0, &amp;handled);</td></tr>
+<tr class="codeline" data-linenumber="2073"><td class="num" id="LN2073">2073</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2074"><td class="num" id="LN2074">2074</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2075"><td class="num" id="LN2075">2075</td><td class="line"> <span class='keyword'>return</span> handled;</td></tr>
+<tr class="codeline" data-linenumber="2076"><td class="num" id="LN2076">2076</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2077"><td class="num" id="LN2077">2077</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2078"><td class="num" id="LN2078">2078</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2079"><td class="num" id="LN2079">2079</td><td class="line">gs_window_real_key_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2080"><td class="num" id="LN2080">2080</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2081"><td class="num" id="LN2081">2081</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2082"><td class="num" id="LN2082">2082</td><td class="line"> <span class='comment'>/*g_message ("KEY PRESS state: %u keyval %u", event-&gt;state, event-&gt;keyval);*/</span></td></tr>
+<tr class="codeline" data-linenumber="2083"><td class="num" id="LN2083">2083</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2084"><td class="num" id="LN2084">2084</td><td class="line"> <span class='comment'>/* Ignore brightness keys */</span></td></tr>
+<tr class="codeline" data-linenumber="2085"><td class="num" id="LN2085">2085</td><td class="line"> <span class='keyword'>if</span> (event-&gt;hardware_keycode == 101 || event-&gt;hardware_keycode == 212)</td></tr>
+<tr class="codeline" data-linenumber="2086"><td class="num" id="LN2086">2086</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2087"><td class="num" id="LN2087">2087</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Ignoring brightness keys"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2087, "Ignoring brightness keys"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2088"><td class="num" id="LN2088">2088</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2089"><td class="num" id="LN2089">2089</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2090"><td class="num" id="LN2090">2090</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2091"><td class="num" id="LN2091">2091</td><td class="line"> maybe_handle_activity (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2092"><td class="num" id="LN2092">2092</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2093"><td class="num" id="LN2093">2093</td><td class="line"> queue_key_event (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="2094"><td class="num" id="LN2094">2094</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2095"><td class="num" id="LN2095">2095</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event)</td></tr>
+<tr class="codeline" data-linenumber="2096"><td class="num" id="LN2096">2096</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2097"><td class="num" id="LN2097">2097</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event (widget, event);</td></tr>
+<tr class="codeline" data-linenumber="2098"><td class="num" id="LN2098">2098</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2099"><td class="num" id="LN2099">2099</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2100"><td class="num" id="LN2100">2100</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2101"><td class="num" id="LN2101">2101</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2102"><td class="num" id="LN2102">2102</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2103"><td class="num" id="LN2103">2103</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2104"><td class="num" id="LN2104">2104</td><td class="line">gs_window_real_motion_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2105"><td class="num" id="LN2105">2105</td><td class="line"> GdkEventMotion *event)</td></tr>
+<tr class="codeline" data-linenumber="2106"><td class="num" id="LN2106">2106</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2107"><td class="num" id="LN2107">2107</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2108"><td class="num" id="LN2108">2108</td><td class="line"> gdouble distance;</td></tr>
+<tr class="codeline" data-linenumber="2109"><td class="num" id="LN2109">2109</td><td class="line"> gdouble min_distance;</td></tr>
+<tr class="codeline" data-linenumber="2110"><td class="num" id="LN2110">2110</td><td class="line"> gdouble min_percentage = 0.1;</td></tr>
+<tr class="codeline" data-linenumber="2111"><td class="num" id="LN2111">2111</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="2112"><td class="num" id="LN2112">2112</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="2113"><td class="num" id="LN2113">2113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2114"><td class="num" id="LN2114">2114</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2115"><td class="num" id="LN2115">2115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2116"><td class="num" id="LN2116">2116</td><td class="line"> display = gs_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="2117"><td class="num" id="LN2117">2117</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2118"><td class="num" id="LN2118">2118</td><td class="line"> min_distance = <span class='macro'>WidthOfScreen (gdk_x11_screen_get_xscreen (screen))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (screen))-&gt;width)</span></span> * min_percentage;</td></tr>
+<tr class="codeline" data-linenumber="2119"><td class="num" id="LN2119">2119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2120"><td class="num" id="LN2120">2120</td><td class="line"> <span class='comment'>/* if the last position was not set then don't detect motion */</span></td></tr>
+<tr class="codeline" data-linenumber="2121"><td class="num" id="LN2121">2121</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;last_x &lt; 0 || window-&gt;priv-&gt;last_y &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2122"><td class="num" id="LN2122">2122</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2123"><td class="num" id="LN2123">2123</td><td class="line"> window-&gt;priv-&gt;last_x = event-&gt;x;</td></tr>
+<tr class="codeline" data-linenumber="2124"><td class="num" id="LN2124">2124</td><td class="line"> window-&gt;priv-&gt;last_y = event-&gt;y;</td></tr>
+<tr class="codeline" data-linenumber="2125"><td class="num" id="LN2125">2125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2126"><td class="num" id="LN2126">2126</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2127"><td class="num" id="LN2127">2127</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2128"><td class="num" id="LN2128">2128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2129"><td class="num" id="LN2129">2129</td><td class="line"> <span class='comment'>/* just an approximate distance */</span></td></tr>
+<tr class="codeline" data-linenumber="2130"><td class="num" id="LN2130">2130</td><td class="line"> distance = <span class='macro'>MAX (ABS (window-&gt;priv-&gt;last_x - event-&gt;x),<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2131"><td class="num" id="LN2131">2131</td><td class="line"> <span class='macro'>ABS (window-&gt;priv-&gt;last_y - event-&gt;y))<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2132"><td class="num" id="LN2132">2132</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2133"><td class="num" id="LN2133">2133</td><td class="line"> <span class='keyword'>if</span> (distance &gt; min_distance)</td></tr>
+<tr class="codeline" data-linenumber="2134"><td class="num" id="LN2134">2134</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2135"><td class="num" id="LN2135">2135</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2136"><td class="num" id="LN2136">2136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2137"><td class="num" id="LN2137">2137</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2138"><td class="num" id="LN2138">2138</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2139"><td class="num" id="LN2139">2139</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2140"><td class="num" id="LN2140">2140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2141"><td class="num" id="LN2141">2141</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2142"><td class="num" id="LN2142">2142</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2143"><td class="num" id="LN2143">2143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2144"><td class="num" id="LN2144">2144</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2145"><td class="num" id="LN2145">2145</td><td class="line">gs_window_real_button_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2146"><td class="num" id="LN2146">2146</td><td class="line"> GdkEventButton *event)</td></tr>
+<tr class="codeline" data-linenumber="2147"><td class="num" id="LN2147">2147</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2148"><td class="num" id="LN2148">2148</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2149"><td class="num" id="LN2149">2149</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2150"><td class="num" id="LN2150">2150</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2151"><td class="num" id="LN2151">2151</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2152"><td class="num" id="LN2152">2152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2153"><td class="num" id="LN2153">2153</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2154"><td class="num" id="LN2154">2154</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2155"><td class="num" id="LN2155">2155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2156"><td class="num" id="LN2156">2156</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2157"><td class="num" id="LN2157">2157</td><td class="line">gs_window_real_scroll_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2158"><td class="num" id="LN2158">2158</td><td class="line"> GdkEventScroll *event)</td></tr>
+<tr class="codeline" data-linenumber="2159"><td class="num" id="LN2159">2159</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2160"><td class="num" id="LN2160">2160</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2161"><td class="num" id="LN2161">2161</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2162"><td class="num" id="LN2162">2162</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2163"><td class="num" id="LN2163">2163</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2164"><td class="num" id="LN2164">2164</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2165"><td class="num" id="LN2165">2165</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2166"><td class="num" id="LN2166">2166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2167"><td class="num" id="LN2167">2167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2168"><td class="num" id="LN2168">2168</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2169"><td class="num" id="LN2169">2169</td><td class="line">gs_window_real_size_request (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2170"><td class="num" id="LN2170">2170</td><td class="line"> GtkRequisition *requisition)</td></tr>
+<tr class="codeline" data-linenumber="2171"><td class="num" id="LN2171">2171</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2172"><td class="num" id="LN2172">2172</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2173"><td class="num" id="LN2173">2173</td><td class="line"> GtkBin *bin;</td></tr>
+<tr class="codeline" data-linenumber="2174"><td class="num" id="LN2174">2174</td><td class="line"> GtkWidget *child;</td></tr>
+<tr class="codeline" data-linenumber="2175"><td class="num" id="LN2175">2175</td><td class="line"> GdkRectangle old_geometry;</td></tr>
+<tr class="codeline" data-linenumber="2176"><td class="num" id="LN2176">2176</td><td class="line"> <span class='keyword'>int</span> position_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2177"><td class="num" id="LN2177">2177</td><td class="line"> <span class='keyword'>int</span> size_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2178"><td class="num" id="LN2178">2178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2179"><td class="num" id="LN2179">2179</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2180"><td class="num" id="LN2180">2180</td><td class="line"> bin = <span class='macro'>GTK_BIN (widget)<span class='macro_popup'>((((GtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gtk_bin_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2181"><td class="num" id="LN2181">2181</td><td class="line"> child = gtk_bin_get_child (bin);</td></tr>
+<tr class="codeline" data-linenumber="2182"><td class="num" id="LN2182">2182</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2183"><td class="num" id="LN2183">2183</td><td class="line"> <span class='keyword'>if</span> (child &amp;&amp; gtk_widget_get_visible (child))</td></tr>
+<tr class="codeline" data-linenumber="2184"><td class="num" id="LN2184">2184</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2185"><td class="num" id="LN2185">2185</td><td class="line"> gtk_widget_get_preferred_size (child, requisition, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2186"><td class="num" id="LN2186">2186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2187"><td class="num" id="LN2187">2187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2188"><td class="num" id="LN2188">2188</td><td class="line"> old_geometry = window-&gt;priv-&gt;geometry;</td></tr>
+<tr class="codeline" data-linenumber="2189"><td class="num" id="LN2189">2189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2190"><td class="num" id="LN2190">2190</td><td class="line"> update_geometry (window);</td></tr>
+<tr class="codeline" data-linenumber="2191"><td class="num" id="LN2191">2191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2192"><td class="num" id="LN2192">2192</td><td class="line"> requisition-&gt;width = window-&gt;priv-&gt;geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="2193"><td class="num" id="LN2193">2193</td><td class="line"> requisition-&gt;height = window-&gt;priv-&gt;geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="2194"><td class="num" id="LN2194">2194</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2195"><td class="num" id="LN2195">2195</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_realized (widget))</td></tr>
+<tr class="codeline" data-linenumber="2196"><td class="num" id="LN2196">2196</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2197"><td class="num" id="LN2197">2197</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2198"><td class="num" id="LN2198">2198</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2199"><td class="num" id="LN2199">2199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2200"><td class="num" id="LN2200">2200</td><td class="line"> <span class='keyword'>if</span> (old_geometry.width != window-&gt;priv-&gt;geometry.width ||</td></tr>
+<tr class="codeline" data-linenumber="2201"><td class="num" id="LN2201">2201</td><td class="line"> old_geometry.height != window-&gt;priv-&gt;geometry.height)</td></tr>
+<tr class="codeline" data-linenumber="2202"><td class="num" id="LN2202">2202</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2203"><td class="num" id="LN2203">2203</td><td class="line"> size_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2204"><td class="num" id="LN2204">2204</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2205"><td class="num" id="LN2205">2205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2206"><td class="num" id="LN2206">2206</td><td class="line"> <span class='keyword'>if</span> (old_geometry.x != window-&gt;priv-&gt;geometry.x ||</td></tr>
+<tr class="codeline" data-linenumber="2207"><td class="num" id="LN2207">2207</td><td class="line"> old_geometry.y != window-&gt;priv-&gt;geometry.y)</td></tr>
+<tr class="codeline" data-linenumber="2208"><td class="num" id="LN2208">2208</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2209"><td class="num" id="LN2209">2209</td><td class="line"> position_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2210"><td class="num" id="LN2210">2210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2211"><td class="num" id="LN2211">2211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2212"><td class="num" id="LN2212">2212</td><td class="line"> gs_window_move_resize_window (window, position_changed, size_changed);</td></tr>
+<tr class="codeline" data-linenumber="2213"><td class="num" id="LN2213">2213</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2214"><td class="num" id="LN2214">2214</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2215"><td class="num" id="LN2215">2215</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2216"><td class="num" id="LN2216">2216</td><td class="line">gs_window_real_get_preferred_width (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2217"><td class="num" id="LN2217">2217</td><td class="line"> gint *minimal_width,</td></tr>
+<tr class="codeline" data-linenumber="2218"><td class="num" id="LN2218">2218</td><td class="line"> gint *natural_width)</td></tr>
+<tr class="codeline" data-linenumber="2219"><td class="num" id="LN2219">2219</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2220"><td class="num" id="LN2220">2220</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2221"><td class="num" id="LN2221">2221</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2222"><td class="num" id="LN2222">2222</td><td class="line"> *minimal_width = *natural_width = requisition.width;</td></tr>
+<tr class="codeline" data-linenumber="2223"><td class="num" id="LN2223">2223</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2224"><td class="num" id="LN2224">2224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2225"><td class="num" id="LN2225">2225</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2226"><td class="num" id="LN2226">2226</td><td class="line">gs_window_real_get_preferred_height (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2227"><td class="num" id="LN2227">2227</td><td class="line"> gint *minimal_height,</td></tr>
+<tr class="codeline" data-linenumber="2228"><td class="num" id="LN2228">2228</td><td class="line"> gint *natural_height)</td></tr>
+<tr class="codeline" data-linenumber="2229"><td class="num" id="LN2229">2229</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2230"><td class="num" id="LN2230">2230</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2231"><td class="num" id="LN2231">2231</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2232"><td class="num" id="LN2232">2232</td><td class="line"> *minimal_height = *natural_height = requisition.height;</td></tr>
+<tr class="codeline" data-linenumber="2233"><td class="num" id="LN2233">2233</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2234"><td class="num" id="LN2234">2234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2235"><td class="num" id="LN2235">2235</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2236"><td class="num" id="LN2236">2236</td><td class="line">gs_window_real_grab_broken (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2237"><td class="num" id="LN2237">2237</td><td class="line"> GdkEventGrabBroken *event)</td></tr>
+<tr class="codeline" data-linenumber="2238"><td class="num" id="LN2238">2238</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2239"><td class="num" id="LN2239">2239</td><td class="line"> <span class='keyword'>if</span> (event-&gt;grab_window != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2240"><td class="num" id="LN2240">2240</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2241"><td class="num" id="LN2241">2241</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab on window %X"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2242"><td class="num" id="LN2242">2242</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2243"><td class="num" id="LN2243">2243</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2244"><td class="num" id="LN2244">2244</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;grab_window))<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2245"><td class="num" id="LN2245">2245</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2246"><td class="num" id="LN2246">2246</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="2247"><td class="num" id="LN2247">2247</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2248"><td class="num" id="LN2248">2248</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab is outside application"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2249"><td class="num" id="LN2249">2249</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2250"><td class="num" id="LN2250">2250</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2251"><td class="num" id="LN2251">2251</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2252"><td class="num" id="LN2252">2252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2253"><td class="num" id="LN2253">2253</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2254"><td class="num" id="LN2254">2254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2255"><td class="num" id="LN2255">2255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2256"><td class="num" id="LN2256">2256</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2257"><td class="num" id="LN2257">2257</td><td class="line">gs_window_is_obscured (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2258"><td class="num" id="LN2258">2258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2259"><td class="num" id="LN2259">2259</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2260"><td class="num" id="LN2260">2260</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2261"><td class="num" id="LN2261">2261</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;obscured;</td></tr>
+<tr class="codeline" data-linenumber="2262"><td class="num" id="LN2262">2262</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2263"><td class="num" id="LN2263">2263</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2264"><td class="num" id="LN2264">2264</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2265"><td class="num" id="LN2265">2265</td><td class="line">gs_window_is_dialog_up (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2266"><td class="num" id="LN2266">2266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2267"><td class="num" id="LN2267">2267</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2268"><td class="num" id="LN2268">2268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2269"><td class="num" id="LN2269">2269</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;dialog_up;</td></tr>
+<tr class="codeline" data-linenumber="2270"><td class="num" id="LN2270">2270</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2271"><td class="num" id="LN2271">2271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2272"><td class="num" id="LN2272">2272</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2273"><td class="num" id="LN2273">2273</td><td class="line">window_set_obscured (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2274"><td class="num" id="LN2274">2274</td><td class="line"> gboolean obscured)</td></tr>
+<tr class="codeline" data-linenumber="2275"><td class="num" id="LN2275">2275</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2276"><td class="num" id="LN2276">2276</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;obscured == obscured)</td></tr>
+<tr class="codeline" data-linenumber="2277"><td class="num" id="LN2277">2277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2278"><td class="num" id="LN2278">2278</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2279"><td class="num" id="LN2279">2279</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2280"><td class="num" id="LN2280">2280</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2281"><td class="num" id="LN2281">2281</td><td class="line"> window-&gt;priv-&gt;obscured = (obscured != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2282"><td class="num" id="LN2282">2282</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"obscured"</span>);</td></tr>
+<tr class="codeline" data-linenumber="2283"><td class="num" id="LN2283">2283</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2284"><td class="num" id="LN2284">2284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2285"><td class="num" id="LN2285">2285</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2286"><td class="num" id="LN2286">2286</td><td class="line">gs_window_real_visibility_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2287"><td class="num" id="LN2287">2287</td><td class="line"> GdkEventVisibility *event)</td></tr>
+<tr class="codeline" data-linenumber="2288"><td class="num" id="LN2288">2288</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2289"><td class="num" id="LN2289">2289</td><td class="line"> <span class='keyword'>switch</span> (event-&gt;state)</td></tr>
+<tr class="codeline" data-linenumber="2290"><td class="num" id="LN2290">2290</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2291"><td class="num" id="LN2291">2291</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_FULLY_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2292"><td class="num" id="LN2292">2292</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2293"><td class="num" id="LN2293">2293</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2294"><td class="num" id="LN2294">2294</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_PARTIAL:</td></tr>
+<tr class="codeline" data-linenumber="2295"><td class="num" id="LN2295">2295</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2296"><td class="num" id="LN2296">2296</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_UNOBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2297"><td class="num" id="LN2297">2297</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2298"><td class="num" id="LN2298">2298</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2299"><td class="num" id="LN2299">2299</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2300"><td class="num" id="LN2300">2300</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2301"><td class="num" id="LN2301">2301</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2302"><td class="num" id="LN2302">2302</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2303"><td class="num" id="LN2303">2303</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2304"><td class="num" id="LN2304">2304</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2305"><td class="num" id="LN2305">2305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2306"><td class="num" id="LN2306">2306</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2307"><td class="num" id="LN2307">2307</td><td class="line">gs_window_class_init (GSWindowClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="2308"><td class="num" id="LN2308">2308</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2309"><td class="num" id="LN2309">2309</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2310"><td class="num" id="LN2310">2310</td><td class="line"> GtkWidgetClass *widget_class = <span class='macro'>GTK_WIDGET_CLASS (klass)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2311"><td class="num" id="LN2311">2311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2312"><td class="num" id="LN2312">2312</td><td class="line"> object_class-&gt;finalize = gs_window_finalize;</td></tr>
+<tr class="codeline" data-linenumber="2313"><td class="num" id="LN2313">2313</td><td class="line"> object_class-&gt;get_property = gs_window_get_property;</td></tr>
+<tr class="codeline" data-linenumber="2314"><td class="num" id="LN2314">2314</td><td class="line"> object_class-&gt;set_property = gs_window_set_property;</td></tr>
+<tr class="codeline" data-linenumber="2315"><td class="num" id="LN2315">2315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2316"><td class="num" id="LN2316">2316</td><td class="line"> widget_class-&gt;show = gs_window_real_show;</td></tr>
+<tr class="codeline" data-linenumber="2317"><td class="num" id="LN2317">2317</td><td class="line"> widget_class-&gt;hide = gs_window_real_hide;</td></tr>
+<tr class="codeline" data-linenumber="2318"><td class="num" id="LN2318">2318</td><td class="line"> widget_class-&gt;draw = gs_window_real_draw;</td></tr>
+<tr class="codeline" data-linenumber="2319"><td class="num" id="LN2319">2319</td><td class="line"> widget_class-&gt;realize = gs_window_real_realize;</td></tr>
+<tr class="codeline" data-linenumber="2320"><td class="num" id="LN2320">2320</td><td class="line"> widget_class-&gt;unrealize = gs_window_real_unrealize;</td></tr>
+<tr class="codeline" data-linenumber="2321"><td class="num" id="LN2321">2321</td><td class="line"> widget_class-&gt;key_press_event = gs_window_real_key_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2322"><td class="num" id="LN2322">2322</td><td class="line"> widget_class-&gt;motion_notify_event = gs_window_real_motion_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2323"><td class="num" id="LN2323">2323</td><td class="line"> widget_class-&gt;button_press_event = gs_window_real_button_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2324"><td class="num" id="LN2324">2324</td><td class="line"> widget_class-&gt;scroll_event = gs_window_real_scroll_event;</td></tr>
+<tr class="codeline" data-linenumber="2325"><td class="num" id="LN2325">2325</td><td class="line"> widget_class-&gt;get_preferred_width = gs_window_real_get_preferred_width;</td></tr>
+<tr class="codeline" data-linenumber="2326"><td class="num" id="LN2326">2326</td><td class="line"> widget_class-&gt;get_preferred_height = gs_window_real_get_preferred_height;</td></tr>
+<tr class="codeline" data-linenumber="2327"><td class="num" id="LN2327">2327</td><td class="line"> widget_class-&gt;grab_broken_event = gs_window_real_grab_broken;</td></tr>
+<tr class="codeline" data-linenumber="2328"><td class="num" id="LN2328">2328</td><td class="line"> widget_class-&gt;visibility_notify_event = gs_window_real_visibility_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2329"><td class="num" id="LN2329">2329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2330"><td class="num" id="LN2330">2330</td><td class="line"> signals [ACTIVITY] =</td></tr>
+<tr class="codeline" data-linenumber="2331"><td class="num" id="LN2331">2331</td><td class="line"> g_signal_new (<span class='string_literal'>"activity"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2332"><td class="num" id="LN2332">2332</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2333"><td class="num" id="LN2333">2333</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2334"><td class="num" id="LN2334">2334</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, activity)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, activity))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2335"><td class="num" id="LN2335">2335</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2336"><td class="num" id="LN2336">2336</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2337"><td class="num" id="LN2337">2337</td><td class="line"> gs_marshal_BOOLEAN__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2338"><td class="num" id="LN2338">2338</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2339"><td class="num" id="LN2339">2339</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2340"><td class="num" id="LN2340">2340</td><td class="line"> signals [DEACTIVATED] =</td></tr>
+<tr class="codeline" data-linenumber="2341"><td class="num" id="LN2341">2341</td><td class="line"> g_signal_new (<span class='string_literal'>"deactivated"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2342"><td class="num" id="LN2342">2342</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2343"><td class="num" id="LN2343">2343</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2344"><td class="num" id="LN2344">2344</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, deactivated)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, deactivated))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2345"><td class="num" id="LN2345">2345</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2346"><td class="num" id="LN2346">2346</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2347"><td class="num" id="LN2347">2347</td><td class="line"> g_cclosure_marshal_VOID__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2348"><td class="num" id="LN2348">2348</td><td class="line"> <span class='macro'>G_TYPE_NONE<span class='macro_popup'>((GType) ((1) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2349"><td class="num" id="LN2349">2349</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2350"><td class="num" id="LN2350">2350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2351"><td class="num" id="LN2351">2351</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2352"><td class="num" id="LN2352">2352</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="2353"><td class="num" id="LN2353">2353</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"obscured"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2354"><td class="num" id="LN2354">2354</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2355"><td class="num" id="LN2355">2355</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2356"><td class="num" id="LN2356">2356</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2357"><td class="num" id="LN2357">2357</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2358"><td class="num" id="LN2358">2358</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2359"><td class="num" id="LN2359">2359</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="2360"><td class="num" id="LN2360">2360</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"dialog-up"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2361"><td class="num" id="LN2361">2361</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2362"><td class="num" id="LN2362">2362</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2363"><td class="num" id="LN2363">2363</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2364"><td class="num" id="LN2364">2364</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2365"><td class="num" id="LN2365">2365</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2366"><td class="num" id="LN2366">2366</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2367"><td class="num" id="LN2367">2367</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"lock-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2368"><td class="num" id="LN2368">2368</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2369"><td class="num" id="LN2369">2369</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2370"><td class="num" id="LN2370">2370</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2371"><td class="num" id="LN2371">2371</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2372"><td class="num" id="LN2372">2372</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2373"><td class="num" id="LN2373">2373</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2374"><td class="num" id="LN2374">2374</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"logout-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2375"><td class="num" id="LN2375">2375</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2376"><td class="num" id="LN2376">2376</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2377"><td class="num" id="LN2377">2377</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2378"><td class="num" id="LN2378">2378</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2379"><td class="num" id="LN2379">2379</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2380"><td class="num" id="LN2380">2380</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="2381"><td class="num" id="LN2381">2381</td><td class="line"> g_param_spec_long (<span class='string_literal'>"logout-timeout"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2382"><td class="num" id="LN2382">2382</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2383"><td class="num" id="LN2383">2383</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2384"><td class="num" id="LN2384">2384</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="2385"><td class="num" id="LN2385">2385</td><td class="line"> <span class='macro'>G_MAXLONG<span class='macro_popup'>9223372036854775807L</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2386"><td class="num" id="LN2386">2386</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="2387"><td class="num" id="LN2387">2387</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2388"><td class="num" id="LN2388">2388</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2389"><td class="num" id="LN2389">2389</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2390"><td class="num" id="LN2390">2390</td><td class="line"> g_param_spec_string (<span class='string_literal'>"logout-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2391"><td class="num" id="LN2391">2391</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2392"><td class="num" id="LN2392">2392</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2393"><td class="num" id="LN2393">2393</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2394"><td class="num" id="LN2394">2394</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2395"><td class="num" id="LN2395">2395</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2396"><td class="num" id="LN2396">2396</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="2397"><td class="num" id="LN2397">2397</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2398"><td class="num" id="LN2398">2398</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2399"><td class="num" id="LN2399">2399</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2400"><td class="num" id="LN2400">2400</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2401"><td class="num" id="LN2401">2401</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2402"><td class="num" id="LN2402">2402</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2403"><td class="num" id="LN2403">2403</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2404"><td class="num" id="LN2404">2404</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"keyboard-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2405"><td class="num" id="LN2405">2405</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2406"><td class="num" id="LN2406">2406</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2407"><td class="num" id="LN2407">2407</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2408"><td class="num" id="LN2408">2408</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2409"><td class="num" id="LN2409">2409</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2410"><td class="num" id="LN2410">2410</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2411"><td class="num" id="LN2411">2411</td><td class="line"> g_param_spec_string (<span class='string_literal'>"keyboard-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2412"><td class="num" id="LN2412">2412</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2413"><td class="num" id="LN2413">2413</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2414"><td class="num" id="LN2414">2414</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2415"><td class="num" id="LN2415">2415</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2416"><td class="num" id="LN2416">2416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2417"><td class="num" id="LN2417">2417</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2418"><td class="num" id="LN2418">2418</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="2419"><td class="num" id="LN2419">2419</td><td class="line"> g_param_spec_pointer (<span class='string_literal'>"monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2420"><td class="num" id="LN2420">2420</td><td class="line"> <span class='string_literal'>"Gdk monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2421"><td class="num" id="LN2421">2421</td><td class="line"> <span class='string_literal'>"The monitor (in terms of Gdk) which the window is on"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2422"><td class="num" id="LN2422">2422</td><td class="line"> G_PARAM_READWRITE | G_PARAM_CONSTRUCT));</td></tr>
+<tr class="codeline" data-linenumber="2423"><td class="num" id="LN2423">2423</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2424"><td class="num" id="LN2424">2424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2425"><td class="num" id="LN2425">2425</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2426"><td class="num" id="LN2426">2426</td><td class="line">create_info_bar (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2427"><td class="num" id="LN2427">2427</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2428"><td class="num" id="LN2428">2428</td><td class="line"> window-&gt;priv-&gt;info_bar = gtk_info_bar_new ();</td></tr>
+<tr class="codeline" data-linenumber="2429"><td class="num" id="LN2429">2429</td><td class="line"> gtk_widget_set_no_show_all (window-&gt;priv-&gt;info_bar, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2430"><td class="num" id="LN2430">2430</td><td class="line"> gtk_box_pack_end (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_bar, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2431"><td class="num" id="LN2431">2431</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2432"><td class="num" id="LN2432">2432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2433"><td class="num" id="LN2433">2433</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2434"><td class="num" id="LN2434">2434</td><td class="line">on_drawing_area_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2435"><td class="num" id="LN2435">2435</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="2436"><td class="num" id="LN2436">2436</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2437"><td class="num" id="LN2437">2437</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="2438"><td class="num" id="LN2438">2438</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="2439"><td class="num" id="LN2439">2439</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="2440"><td class="num" id="LN2440">2440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2441"><td class="num" id="LN2441">2441</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2442"><td class="num" id="LN2442">2442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2443"><td class="num" id="LN2443">2443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2444"><td class="num" id="LN2444">2444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2445"><td class="num" id="LN2445">2445</td><td class="line">gs_window_init (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2446"><td class="num" id="LN2446">2446</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2447"><td class="num" id="LN2447">2447</td><td class="line"> window-&gt;priv = gs_window_get_instance_private (window);</td></tr>
+<tr class="codeline" data-linenumber="2448"><td class="num" id="LN2448">2448</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2449"><td class="num" id="LN2449">2449</td><td class="line"> window-&gt;priv-&gt;geometry.x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2450"><td class="num" id="LN2450">2450</td><td class="line"> window-&gt;priv-&gt;geometry.y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2451"><td class="num" id="LN2451">2451</td><td class="line"> window-&gt;priv-&gt;geometry.width = -1;</td></tr>
+<tr class="codeline" data-linenumber="2452"><td class="num" id="LN2452">2452</td><td class="line"> window-&gt;priv-&gt;geometry.height = -1;</td></tr>
+<tr class="codeline" data-linenumber="2453"><td class="num" id="LN2453">2453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2454"><td class="num" id="LN2454">2454</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2455"><td class="num" id="LN2455">2455</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2456"><td class="num" id="LN2456">2456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2457"><td class="num" id="LN2457">2457</td><td class="line"> gtk_window_set_decorated (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2458"><td class="num" id="LN2458">2458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2459"><td class="num" id="LN2459">2459</td><td class="line"> gtk_window_set_skip_taskbar_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2460"><td class="num" id="LN2460">2460</td><td class="line"> gtk_window_set_skip_pager_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2461"><td class="num" id="LN2461">2461</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2462"><td class="num" id="LN2462">2462</td><td class="line"> gtk_window_set_keep_above (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2463"><td class="num" id="LN2463">2463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2464"><td class="num" id="LN2464">2464</td><td class="line"> gtk_window_fullscreen (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2465"><td class="num" id="LN2465">2465</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2466"><td class="num" id="LN2466">2466</td><td class="line"> gtk_widget_set_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2467"><td class="num" id="LN2467">2467</td><td class="line"> gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2468"><td class="num" id="LN2468">2468</td><td class="line"> | GDK_POINTER_MOTION_MASK</td></tr>
+<tr class="codeline" data-linenumber="2469"><td class="num" id="LN2469">2469</td><td class="line"> | GDK_BUTTON_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2470"><td class="num" id="LN2470">2470</td><td class="line"> | GDK_BUTTON_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2471"><td class="num" id="LN2471">2471</td><td class="line"> | GDK_KEY_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2472"><td class="num" id="LN2472">2472</td><td class="line"> | GDK_KEY_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2473"><td class="num" id="LN2473">2473</td><td class="line"> | GDK_EXPOSURE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2474"><td class="num" id="LN2474">2474</td><td class="line"> | GDK_VISIBILITY_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2475"><td class="num" id="LN2475">2475</td><td class="line"> | GDK_ENTER_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2476"><td class="num" id="LN2476">2476</td><td class="line"> | GDK_LEAVE_NOTIFY_MASK);</td></tr>
+<tr class="codeline" data-linenumber="2477"><td class="num" id="LN2477">2477</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2478"><td class="num" id="LN2478">2478</td><td class="line"> window-&gt;priv-&gt;vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);</td></tr>
+<tr class="codeline" data-linenumber="2479"><td class="num" id="LN2479">2479</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2480"><td class="num" id="LN2480">2480</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2481"><td class="num" id="LN2481">2481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2482"><td class="num" id="LN2482">2482</td><td class="line"> window-&gt;priv-&gt;drawing_area = gtk_drawing_area_new ();</td></tr>
+<tr class="codeline" data-linenumber="2483"><td class="num" id="LN2483">2483</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="2484"><td class="num" id="LN2484">2484</td><td class="line"> gtk_widget_set_app_paintable (window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2485"><td class="num" id="LN2485">2485</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2486"><td class="num" id="LN2486">2486</td><td class="line"> window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2487"><td class="num" id="LN2487">2487</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;drawing_area,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2488"><td class="num" id="LN2488">2488</td><td class="line"> <span class='string_literal'><span class='macro'>"draw"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2489"><td class="num" id="LN2489">2489</td><td class="line"> <span class='macro'>G_CALLBACK (on_drawing_area_draw),<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2490"><td class="num" id="LN2490">2490</td><td class="line"> <span class='macro'>NULL)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2491"><td class="num" id="LN2491">2491</td><td class="line"> create_info_bar (window);</td></tr>
+<tr class="codeline" data-linenumber="2492"><td class="num" id="LN2492">2492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2493"><td class="num" id="LN2493">2493</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2494"><td class="num" id="LN2494">2494</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2495"><td class="num" id="LN2495">2495</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2496"><td class="num" id="LN2496">2496</td><td class="line">remove_command_watches (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2497"><td class="num" id="LN2497">2497</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2498"><td class="num" id="LN2498">2498</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2499"><td class="num" id="LN2499">2499</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2500"><td class="num" id="LN2500">2500</td><td class="line"> g_source_remove (window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2501"><td class="num" id="LN2501">2501</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2502"><td class="num" id="LN2502">2502</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2503"><td class="num" id="LN2503">2503</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2504"><td class="num" id="LN2504">2504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2505"><td class="num" id="LN2505">2505</td><td class="line"> g_source_remove (window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2506"><td class="num" id="LN2506">2506</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2507"><td class="num" id="LN2507">2507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2508"><td class="num" id="LN2508">2508</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2509"><td class="num" id="LN2509">2509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2510"><td class="num" id="LN2510">2510</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2511"><td class="num" id="LN2511">2511</td><td class="line">gs_window_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="2512"><td class="num" id="LN2512">2512</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2513"><td class="num" id="LN2513">2513</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2514"><td class="num" id="LN2514">2514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2515"><td class="num" id="LN2515">2515</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2516"><td class="num" id="LN2516">2516</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2517"><td class="num" id="LN2517">2517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2518"><td class="num" id="LN2518">2518</td><td class="line"> window = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2519"><td class="num" id="LN2519">2519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2520"><td class="num" id="LN2520">2520</td><td class="line"> <span class='macro'>g_return_if_fail (window-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2521"><td class="num" id="LN2521">2521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2522"><td class="num" id="LN2522">2522</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2523"><td class="num" id="LN2523">2523</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2524"><td class="num" id="LN2524">2524</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2525"><td class="num" id="LN2525">2525</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2526"><td class="num" id="LN2526">2526</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2527"><td class="num" id="LN2527">2527</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="2528"><td class="num" id="LN2528">2528</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2529"><td class="num" id="LN2529">2529</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2530"><td class="num" id="LN2530">2530</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2531"><td class="num" id="LN2531">2531</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="2532"><td class="num" id="LN2532">2532</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="2533"><td class="num" id="LN2533">2533</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2534"><td class="num" id="LN2534">2534</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="2535"><td class="num" id="LN2535">2535</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2536"><td class="num" id="LN2536">2536</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="2537"><td class="num" id="LN2537">2537</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2538"><td class="num" id="LN2538">2538</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2539"><td class="num" id="LN2539">2539</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="2540"><td class="num" id="LN2540">2540</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2541"><td class="num" id="LN2541">2541</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="2542"><td class="num" id="LN2542">2542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2543"><td class="num" id="LN2543">2543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="2544"><td class="num" id="LN2544">2544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2545"><td class="num" id="LN2545">2545</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface)</td></tr>
+<tr class="codeline" data-linenumber="2546"><td class="num" id="LN2546">2546</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2547"><td class="num" id="LN2547">2547</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="2548"><td class="num" id="LN2548">2548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2549"><td class="num" id="LN2549">2549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2550"><td class="num" id="LN2550">2550</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), (((GType) ((20) &lt;&lt; (2)))<br>)))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="2551"><td class="num" id="LN2551">2551</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2552"><td class="num" id="LN2552">2552</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2553"><td class="num" id="LN2553">2553</td><td class="line">GSWindow *</td></tr>
+<tr class="codeline" data-linenumber="2554"><td class="num" id="LN2554">2554</td><td class="line">gs_window_new (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="2555"><td class="num" id="LN2555">2555</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="2556"><td class="num" id="LN2556">2556</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2557"><td class="num" id="LN2557">2557</td><td class="line"> GObject *result;</td></tr>
+<tr class="codeline" data-linenumber="2558"><td class="num" id="LN2558">2558</td><td class="line"> GdkDisplay *display = gdk_monitor_get_display (monitor);</td></tr>
+<tr class="codeline" data-linenumber="2559"><td class="num" id="LN2559">2559</td><td class="line"> GdkScreen *screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2560"><td class="num" id="LN2560">2560</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2561"><td class="num" id="LN2561">2561</td><td class="line"> result = g_object_new (<span class='macro'>GS_TYPE_WINDOW<span class='macro_popup'>(gs_window_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2562"><td class="num" id="LN2562">2562</td><td class="line"> <span class='string_literal'>"type"</span>, GTK_WINDOW_POPUP,</td></tr>
+<tr class="codeline" data-linenumber="2563"><td class="num" id="LN2563">2563</td><td class="line"> <span class='string_literal'>"screen"</span>, screen,</td></tr>
+<tr class="codeline" data-linenumber="2564"><td class="num" id="LN2564">2564</td><td class="line"> <span class='string_literal'>"monitor"</span>, monitor,</td></tr>
+<tr class="codeline" data-linenumber="2565"><td class="num" id="LN2565">2565</td><td class="line"> <span class='string_literal'>"lock-enabled"</span>, lock_enabled,</td></tr>
+<tr class="codeline" data-linenumber="2566"><td class="num" id="LN2566">2566</td><td class="line"> <span class='string_literal'>"app-paintable"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2567"><td class="num" id="LN2567">2567</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2568"><td class="num" id="LN2568">2568</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2569"><td class="num" id="LN2569">2569</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WINDOW (result)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((result)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2570"><td class="num" id="LN2570">2570</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e0169c.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e0169c.html
new file mode 100644
index 0000000..d5f2299
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e0169c.html
@@ -0,0 +1,3250 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-window-x11.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'finished' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-window-x11.c -->
+
+<!-- FILENAME gs-window-x11.c -->
+
+<!-- FUNCTIONNAME lock_command_watch -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT e0169cf57a5461c88a54497705a7d470 -->
+
+<!-- BUGLINE 1630 -->
+
+<!-- BUGCOLUMN 4 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-window-x11.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 1630, column 4</a><br />Value stored to 'finished' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-window-x11.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-window-x11.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"1630": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2004-2008 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or modify</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* the Free Software Foundation; either version 2 of the License, or</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;sys/wait.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;gdk/gdkkeysyms.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;gtk/gtkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "gs-window.h"</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "gs-marshal.h"</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='directive'>#include &lt;X11/extensions/shape.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_finalize (GObject *object);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"><span class='keyword'>static</span> gboolean popup_dialog_idle (gpointer data);</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> gs_window_dialog_finish (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span> remove_command_watches (GSWindow *window);</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DIALOG_RESPONSE_CANCEL,</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> DIALOG_RESPONSE_OK</td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'>#define <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span> 16</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#define <span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span> 30</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"><span class='directive'>#define <span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span> <span class='macro'>LIBEXECDIR<span class='macro_popup'>"/usr/local/libexec"</span></span> "/mate-screensaver-dialog"</span></td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='keyword'>struct</span> GSWindowPrivate</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> GdkMonitor *monitor;</td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> guint obscured : 1;</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> guint dialog_up : 1;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> guint lock_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> guint user_switch_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> guint logout_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> guint keyboard_enabled : 1;</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> guint64 logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> <span class='keyword'>char</span> *logout_command;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>char</span> *keyboard_command;</td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> <span class='keyword'>char</span> *status_message;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> GtkWidget *drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GtkWidget *lock_box;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> GtkWidget *lock_socket;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> GtkWidget *keyboard_socket;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> GtkWidget *info_bar;</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> GtkWidget *info_content;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> cairo_surface_t *background_surface;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> guint popup_dialog_idle_id;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> guint dialog_map_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> guint dialog_unmap_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> guint dialog_response_signal_id;</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> guint watchdog_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> guint info_bar_timer_id;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> gint lock_pid;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gint lock_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> gint dialog_response;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> gboolean dialog_quit_requested;</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gboolean dialog_shake_in_progress;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> gint keyboard_pid;</td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> gint keyboard_watch_id;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> GList *key_events;</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> gdouble last_x;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> gdouble last_y;</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> GTimer *timer;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='keyword'>int</span> shape_event_base;</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> ACTIVITY,</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> DEACTIVATED,</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> LAST_SIGNAL</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"><span class='keyword'>enum</span></td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> PROP_0,</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> PROP_STATUS_MESSAGE</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"><span class='keyword'>static</span> guint signals [LAST_SIGNAL] = { 0, };</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"><span class='macro'>G_DEFINE_TYPE_WITH_PRIVATE (GSWindow, gs_window, GTK_TYPE_WINDOW)<span class='macro_popup'>static void gs_window_init (GSWindow *self); static void gs_window_class_init<br> (GSWindowClass *klass); static GType gs_window_get_type_once<br> (void); static gpointer gs_window_parent_class = ((void*)0);<br> static gint GSWindow_private_offset; static void gs_window_class_intern_init<br> (gpointer klass) { gs_window_parent_class = g_type_class_peek_parent<br> (klass); if (GSWindow_private_offset != 0) g_type_class_adjust_private_offset<br> (klass, &amp;GSWindow_private_offset); gs_window_class_init (<br>(GSWindowClass*) klass); } __attribute__ ((__unused__)) static<br> inline gpointer gs_window_get_instance_private (GSWindow *self<br>) { return (((gpointer) ((guint8*) (self) + (glong) (GSWindow_private_offset<br>)))); } GType gs_window_get_type (void) { static gsize static_g_define_type_id<br> = 0; if ((__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); (void<br>) (0 ? (gpointer) *(&amp;static_g_define_type_id) : ((void*)0<br>)); (!(__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); __typeof__<br> (*(&amp;static_g_define_type_id)) gapg_temp_newval; __typeof__<br> ((&amp;static_g_define_type_id)) gapg_temp_atomic = (&amp;static_g_define_type_id<br>); __atomic_load (gapg_temp_atomic, &amp;gapg_temp_newval, 5)<br>; gapg_temp_newval; })) &amp;&amp; g_once_init_enter (&amp;static_g_define_type_id<br>)); }))) { GType g_define_type_id = gs_window_get_type_once (<br>); (__extension__ ({ _Static_assert (sizeof *(&amp;static_g_define_type_id<br>) == sizeof (gpointer), "Expression evaluates to false"); 0 ?<br> (void) (*(&amp;static_g_define_type_id) = (g_define_type_id)<br>) : (void) 0; g_once_init_leave ((&amp;static_g_define_type_id<br>), (gsize) (g_define_type_id)); })); } return static_g_define_type_id<br>; } __attribute__ ((__noinline__)) static GType gs_window_get_type_once<br> (void) { GType g_define_type_id = g_type_register_static_simple<br> ((gtk_window_get_type ()), g_intern_static_string ("GSWindow"<br>), sizeof (GSWindowClass), (GClassInitFunc)(void (*)(void)) gs_window_class_intern_init<br>, sizeof (GSWindow), (GInstanceInitFunc)(void (*)(void)) gs_window_init<br>, (GTypeFlags) 0); { {{ GSWindow_private_offset = g_type_add_instance_private<br> (g_define_type_id, sizeof (GSWindowPrivate)); };} } return g_define_type_id<br>; }</span></span></td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line">set_invisible_cursor (GdkWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> gboolean invisible)</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> GdkCursor *cursor = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>if</span> (invisible)</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> display = gdk_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> cursor = gdk_cursor_new_for_display (display, GDK_BLANK_CURSOR);</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> gdk_window_set_cursor (window, cursor);</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>if</span> (cursor)</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> g_object_unref (cursor);</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"><span class='comment'>/* derived from tomboy */</span></td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line">gs_window_override_user_time (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> guint32 ev_time = gtk_get_current_event_time ();</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> <span class='keyword'>if</span> (ev_time == 0)</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> gint ev_mask = gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> <span class='keyword'>if</span> (!(ev_mask &amp; GDK_PROPERTY_CHANGE_MASK))</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> gtk_widget_add_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> GDK_PROPERTY_CHANGE_MASK);</td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='comment'>* NOTE: Last resort for D-BUS or other non-interactive</span></td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='comment'>* openings. Causes roundtrip to server. Lame.</span></td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> ev_time = gdk_x11_get_server_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>));</td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> gdk_x11_window_set_user_time (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), ev_time);</td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line">clear_children (Window window)</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> Window root;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> Window parent;</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> Window *children;</td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>int</span> n_children;</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> children = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> status = XQueryTree (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, window, &amp;root, &amp;parent, &amp;children, &amp;n_children);</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> <span class='keyword'>if</span> (status == 0)</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> <span class='keyword'>if</span> (children)</td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>while</span> (n_children)</td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> Window child;</td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> child = children [--n_children];</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> XClearWindow (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, child);</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> clear_children (child);</td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> XFree (children);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line">widget_clear_all_children (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> GdkWindow *w;</td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing all child windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 235, "Clearing all child windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> display = gtk_widget_get_display (widget);</td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> w = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> clear_children (<span class='macro'>GDK_WINDOW_XID (w)<span class='macro_popup'>(gdk_x11_window_get_xid (w))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line">gs_window_set_background_surface (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> cairo_surface_t *surface)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> window-&gt;priv-&gt;background_surface = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> <span class='keyword'>if</span> (surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> window-&gt;priv-&gt;background_surface = cairo_surface_reference (surface);</td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line">gs_window_clear (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Clearing widgets"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 274, "Clearing widgets"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> <span class='comment'>/* If a screensaver theme adds child windows</span></td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> <span class='comment'>we need to clear them too */</span></td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> widget_clear_all_children (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>if</span> (gtk_widget_get_realized (window-&gt;priv-&gt;drawing_area))</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> gtk_widget_queue_draw (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> widget_clear_all_children (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> gdk_display_flush (display);</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"><span class='keyword'>static</span> cairo_region_t *</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line">get_outside_region (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>int</span> num_monitors;</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> cairo_region_t *region;</td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> region = cairo_region_create ();</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> num_monitors = gdk_display_get_n_monitors (display);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; num_monitors; i++)</td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> GdkMonitor *mon = gdk_display_get_monitor (display, i);</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='keyword'>if</span> (mon != window-&gt;priv-&gt;monitor)</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> cairo_rectangle_int_t rectangle;</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> gdk_monitor_get_geometry (mon, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> rectangle.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> rectangle.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> rectangle.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> rectangle.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> cairo_region_union_rectangle (region, &amp;rectangle);</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='keyword'>return</span> region;</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line">update_geometry (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> GdkRectangle geometry;</td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> cairo_region_t *outside_region;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> cairo_region_t *monitor_region;</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> outside_region = get_outside_region (window);</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> gdk_monitor_get_geometry (window-&gt;priv-&gt;monitor, &amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"got geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 346, "got geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> monitor_region = cairo_region_create_rectangle ((<span class='keyword'>const</span> cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> cairo_region_subtract (monitor_region, outside_region);</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> cairo_region_destroy (outside_region);</td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> cairo_region_get_extents (monitor_region, (cairo_rectangle_int_t *)&amp;geometry);</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> cairo_region_destroy (monitor_region);</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"using geometry for monitor: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> <span class='macro'>geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> <span class='macro'>geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> <span class='macro'>geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='macro'>geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 358, "using geometry for monitor: x=%d y=%d w=%d h=%d"<br>, geometry.x, geometry.y, geometry.width, geometry.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> window-&gt;priv-&gt;geometry.x = geometry.x;</td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> window-&gt;priv-&gt;geometry.y = geometry.y;</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> window-&gt;priv-&gt;geometry.width = geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> window-&gt;priv-&gt;geometry.height = geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line">monitor_geometry_notify (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> GParamSpec *pspec,</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got monitor geometry notify signal"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 371, "Got monitor geometry notify signal"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"><span class='comment'>/* copied from panel-toplevel.c */</span></td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line">gs_window_move_resize_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> gboolean move,</td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> gboolean resize)</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> GtkWidget *widget;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> GdkWindow *gdkwindow;</td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> gdkwindow = gtk_widget_get_window (widget);</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='macro'>g_assert (gtk_widget_get_realized (widget))<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Move and/or resize window: x=%d y=%d w=%d h=%d"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.x,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.y,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.width,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span></td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> <span class='macro'>window-&gt;priv-&gt;geometry.height)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 393, "Move and/or resize window: x=%d y=%d w=%d h=%d"<br>, window-&gt;priv-&gt;geometry.x, window-&gt;priv-&gt;geometry<br>.y, window-&gt;priv-&gt;geometry.width, window-&gt;priv-&gt;geometry<br>.height)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> <span class='keyword'>if</span> (move &amp;&amp; resize)</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> gdk_window_move_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> window-&gt;priv-&gt;geometry.y,</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (move)</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> gdk_window_move (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> window-&gt;priv-&gt;geometry.x,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> window-&gt;priv-&gt;geometry.y);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (resize)</td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> gdk_window_resize (gdkwindow,</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> window-&gt;priv-&gt;geometry.width,</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> window-&gt;priv-&gt;geometry.height);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line">gs_window_real_unrealize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (monitor, monitor_geometry_notify,<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span></td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((monitor), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (monitor_geometry_notify), (widget))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize)</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;unrealize (widget);</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"><span class='comment'>/* copied from gdk */</span></td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"><span class='keyword'>extern</span> <span class='keyword'>char</span> **environ;</td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"><span class='keyword'>static</span> gchar **</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line">spawn_make_environment_for_display (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> gchar **envp)</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> gchar **retval = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> <span class='keyword'>const</span> gchar *display_name;</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> gint display_index = -1;</td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> gint i, env_len;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> <span class='macro'>g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> <span class='keyword'>if</span> (envp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> envp = environ;</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>for</span> (env_len = 0; envp[env_len]; env_len++)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> <span class='keyword'>if</span> (strncmp (envp[env_len], <span class='string_literal'>"DISPLAY"</span>, strlen (<span class='string_literal'>"DISPLAY"</span>)) == 0)</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> display_index = env_len;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> retval = <span class='macro'>g_new (<span class='keyword'>char</span> *, env_len + 1)<span class='macro_popup'>((char * *) g_malloc_n ((env_len + 1), sizeof (char *)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> retval[env_len] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> display_name = gdk_display_get_name (display);</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; env_len; i++)</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (i == display_index)</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> retval[i] = g_strconcat (<span class='string_literal'>"DISPLAY="</span>, display_name, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> retval[i] = g_strdup (envp[i]);</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> <span class='macro'>g_assert (i == env_len)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line">spawn_command_line_on_display_sync (GdkDisplay *display,</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> <span class='keyword'>const</span> gchar *command_line,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='keyword'>char</span> **standard_output,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> <span class='keyword'>char</span> **standard_error,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>int</span> *exit_status,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>char</span> **argv = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> <span class='keyword'>char</span> **envp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gboolean retval;</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> <span class='macro'>g_return_val_if_fail (command_line != NULL, FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command_line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;argv, error))</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> envp = spawn_make_environment_for_display (display, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> retval = g_spawn_sync (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> standard_output,</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> standard_error,</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> exit_status,</td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> error);</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> retval;</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> GdkVisual *</td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">get_best_visual_for_display (GdkDisplay *display)</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>char</span> *std_output;</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>int</span> exit_status;</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> v;</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> visual = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> std_output = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> res = spawn_command_line_on_display_sync (display,</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH<span class='macro_popup'>"/usr/local/libexec/mate-screensaver-gl-helper"</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> &amp;std_output,</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> &amp;exit_status,</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not run command '%s': %s"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='macro'>MATE_SCREENSAVER_GL_HELPER_PATH, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 532, "Could not run command '%s': %s"<br>, "/usr/local/libexec/mate-screensaver-gl-helper", error-&gt;<br>message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (std_output, <span class='string_literal'>"0x%lx %c"</span>, &amp;v, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> <span class='keyword'>if</span> (v != 0)</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> VisualID visual_id;</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> visual_id = (VisualID) v;</td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> visual = gdk_x11_screen_lookup_visual (screen, visual_id);</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Found best GL visual for display %s: 0x%x"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='macro'>gdk_display_get_name (display),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span></td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='macro'>(<span class='keyword'>unsigned</span> <span class='keyword'>int</span>) visual_id)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 548, "Found best GL visual for display %s: 0x%x"<br>, gdk_display_get_name (display), (unsigned int) visual_id)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> g_free (std_output);</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>g_object_ref (visual)<span class='macro_popup'>((__typeof__ (visual)) (g_object_ref) (visual))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line">widget_set_best_visual (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> GdkVisual *visual;</td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='macro'>g_return_if_fail (widget != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> visual = get_best_visual_for_display (gtk_widget_get_display (widget));</td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='keyword'>if</span> (visual != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> gtk_widget_set_visual (widget, visual);</td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> g_object_unref (visual);</td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line">gs_window_real_realize (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> GdkMonitor *monitor = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> widget_set_best_visual (widget);</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize)</td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;realize (widget);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> gs_window_override_user_time (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> gs_window_move_resize_window (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='macro'>g_signal_connect (monitor,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='string_literal'><span class='macro'>"notify::geometry"</span>,<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='macro'>G_CALLBACK (monitor_geometry_notify),<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> <span class='macro'>widget)<span class='macro_popup'>g_signal_connect_data ((monitor), ("notify::geometry"), (((GCallback<br>) (monitor_geometry_notify))), (widget), ((void*)0), (GConnectFlags<br>) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"><span class='comment'>/* every so often we should raise the window in case</span></td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='comment'>another window has somehow gotten on top */</span></td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> GtkWidget *widget = <span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> gdk_window_focus (gtk_widget_get_window (widget), <span class='macro'>GDK_CURRENT_TIME<span class='macro_popup'>0L</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line">remove_watchdog_timer (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;watchdog_timer_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> g_source_remove (window-&gt;priv-&gt;watchdog_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line">add_watchdog_timer (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> guint timeout)</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> window-&gt;priv-&gt;watchdog_timer_id = g_timeout_add (timeout,</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> (GSourceFunc)watchdog_timer,</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line">remove_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> g_source_remove (window-&gt;priv-&gt;popup_dialog_idle_id);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line">add_popup_dialog_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = g_idle_add (popup_dialog_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line">emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_signal_emit (window, signals [DEACTIVATED], 0);</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line">add_emit_deactivated_idle (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> g_idle_add ((GSourceFunc)emit_deactivated_idle, window);</td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line">gs_window_raise (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> GdkWindow *win;</td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Raising screensaver window"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 662, "Raising screensaver window"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> win = gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> gdk_window_raise (win);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line">x11_window_is_ours (Window window)</td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> GdkWindow *gwindow;</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> gwindow = gdk_x11_window_lookup_for_display (gdk_display_get_default (), window);</td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (gwindow &amp;&amp; (window != <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line">unshape_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> gdk_window_shape_combine_region (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>),</td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line">gs_window_xevent (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> GdkXEvent *xevent)</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> XEvent *ev;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> ev = xevent;</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> <span class='comment'>/* MapNotify is used to tell us when new windows are mapped.</span></td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='comment'>ConfigureNofify is used to tell us when windows are raised. */</span></td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='keyword'>switch</span> (ev-&gt;xany.type)</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>MapNotify<span class='macro_popup'>19</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> XMapEvent *xme = &amp;ev-&gt;xmap;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xme-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 719, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>ConfigureNotify<span class='macro_popup'>22</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> XConfigureEvent *xce = &amp;ev-&gt;xconfigure;</td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! x11_window_is_ours (xce-&gt;window))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> gs_window_raise (window);</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"not raising our windows"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 734, "not raising our windows"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> <span class='comment'>/* extension events */</span></td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"> <span class='keyword'>if</span> (ev-&gt;xany.type == (window-&gt;priv-&gt;shape_event_base + <span class='macro'>ShapeNotify<span class='macro_popup'>0</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='comment'>/*XShapeEvent *xse = (XShapeEvent *) ev;*/</span></td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> unshape_window (window);</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Window was reshaped!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 746, "Window was reshaped!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"><span class='keyword'>static</span> GdkFilterReturn</td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line">xevent_filter (GdkXEvent *xevent,</td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> GdkEvent *event,</td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> gs_window_xevent (window, xevent);</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>return</span> GDK_FILTER_CONTINUE;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">select_popup_events (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> XWindowAttributes attr;</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> display = gdk_display_get_default ();</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> memset (&amp;attr, 0, <span class='keyword'>sizeof</span> (attr));</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> XGetWindowAttributes (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, &amp;attr);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> events = <span class='macro'>SubstructureNotifyMask<span class='macro_popup'>(1L&lt;&lt;19)</span></span> | attr.your_event_mask;</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> XSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_ROOT_WINDOW ()<span class='macro_popup'>(gdk_x11_get_default_root_xwindow ())</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line">window_select_shape_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_SHAPE_EXT<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> <span class='keyword'>unsigned</span> <span class='keyword'>long</span> events;</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> <span class='keyword'>int</span> shape_error_base;</td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> display = gtk_widget_get_display (<span class='macro'>GTK_WIDGET(window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> gdk_x11_display_error_trap_push (display);</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> <span class='keyword'>if</span> (XShapeQueryExtension (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, &amp;window-&gt;priv-&gt;shape_event_base, &amp;shape_error_base)) {</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> events = <span class='macro'>ShapeNotifyMask<span class='macro_popup'>(1L &lt;&lt; 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> XShapeSelectInput (<span class='macro'>GDK_DISPLAY_XDISPLAY (display)<span class='macro_popup'>(gdk_x11_display_get_xdisplay (display))</span></span>, <span class='macro'>GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window)))<span class='macro_popup'>(gdk_x11_window_get_xid (gtk_widget_get_window (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))</span></span>, events);</td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> gdk_x11_display_error_trap_pop_ignored (display);</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">gs_window_real_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"> GSWindow *window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line"> cairo_surface_t *bg_surface = window-&gt;priv-&gt;background_surface;</td></tr>
+<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> <span class='keyword'>if</span> (bg_surface != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> cairo_set_source_surface (cr, bg_surface, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line">gs_window_real_show (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show)</td></tr>
+<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;show (widget);</td></tr>
+<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> gs_window_clear (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (widget), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> window-&gt;priv-&gt;timer = g_timer_new ();</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> add_watchdog_timer (window, 30000);</td></tr>
+<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> select_popup_events ();</td></tr>
+<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> window_select_shape_events (window);</td></tr>
+<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> gdk_window_add_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line">set_info_text_and_icon (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon_name,</td></tr>
+<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *primary_text,</td></tr>
+<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *secondary_text)</td></tr>
+<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> GtkWidget *content_area;</td></tr>
+<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> GtkWidget *hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> GtkWidget *image;</td></tr>
+<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> GtkWidget *vbox;</td></tr>
+<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> gchar *primary_markup;</td></tr>
+<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> gchar *secondary_markup;</td></tr>
+<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> GtkWidget *primary_label;</td></tr>
+<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> GtkWidget *secondary_label;</td></tr>
+<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> hbox_content = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);</td></tr>
+<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> gtk_widget_show (hbox_content);</td></tr>
+<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="874"><td class="num" id="LN874">874</td><td class="line"> image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_DIALOG);</td></tr>
+<tr class="codeline" data-linenumber="875"><td class="num" id="LN875">875</td><td class="line"> gtk_widget_show (image);</td></tr>
+<tr class="codeline" data-linenumber="876"><td class="num" id="LN876">876</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, image, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="877"><td class="num" id="LN877">877</td><td class="line"> gtk_widget_set_valign (image, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="878"><td class="num" id="LN878">878</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="879"><td class="num" id="LN879">879</td><td class="line"> vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);</td></tr>
+<tr class="codeline" data-linenumber="880"><td class="num" id="LN880">880</td><td class="line"> gtk_widget_show (vbox);</td></tr>
+<tr class="codeline" data-linenumber="881"><td class="num" id="LN881">881</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (hbox_content)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((hbox_content)), ((gtk_box_get_type ()))))))</span></span>, vbox, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="882"><td class="num" id="LN882">882</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="883"><td class="num" id="LN883">883</td><td class="line"> primary_markup = g_strdup_printf (<span class='string_literal'>"&lt;b&gt;%s&lt;/b&gt;"</span>, primary_text);</td></tr>
+<tr class="codeline" data-linenumber="884"><td class="num" id="LN884">884</td><td class="line"> primary_label = gtk_label_new (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="885"><td class="num" id="LN885">885</td><td class="line"> g_free (primary_markup);</td></tr>
+<tr class="codeline" data-linenumber="886"><td class="num" id="LN886">886</td><td class="line"> gtk_widget_show (primary_label);</td></tr>
+<tr class="codeline" data-linenumber="887"><td class="num" id="LN887">887</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, primary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="888"><td class="num" id="LN888">888</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="889"><td class="num" id="LN889">889</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (primary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((primary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="890"><td class="num" id="LN890">890</td><td class="line"> gtk_widget_set_halign (primary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="891"><td class="num" id="LN891">891</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="892"><td class="num" id="LN892">892</td><td class="line"> <span class='keyword'>if</span> (secondary_text != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="893"><td class="num" id="LN893">893</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="894"><td class="num" id="LN894">894</td><td class="line"> secondary_markup = g_strdup_printf (<span class='string_literal'>"&lt;small&gt;%s&lt;/small&gt;"</span>,</td></tr>
+<tr class="codeline" data-linenumber="895"><td class="num" id="LN895">895</td><td class="line"> secondary_text);</td></tr>
+<tr class="codeline" data-linenumber="896"><td class="num" id="LN896">896</td><td class="line"> secondary_label = gtk_label_new (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="897"><td class="num" id="LN897">897</td><td class="line"> g_free (secondary_markup);</td></tr>
+<tr class="codeline" data-linenumber="898"><td class="num" id="LN898">898</td><td class="line"> gtk_widget_show (secondary_label);</td></tr>
+<tr class="codeline" data-linenumber="899"><td class="num" id="LN899">899</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((vbox)), ((gtk_box_get_type ()))))))</span></span>, secondary_label, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="900"><td class="num" id="LN900">900</td><td class="line"> gtk_label_set_use_markup (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="901"><td class="num" id="LN901">901</td><td class="line"> gtk_label_set_line_wrap (<span class='macro'>GTK_LABEL (secondary_label)<span class='macro_popup'>((((GtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((secondary_label)), ((gtk_label_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="902"><td class="num" id="LN902">902</td><td class="line"> gtk_widget_set_halign (secondary_label, GTK_ALIGN_START);</td></tr>
+<tr class="codeline" data-linenumber="903"><td class="num" id="LN903">903</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="904"><td class="num" id="LN904">904</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="905"><td class="num" id="LN905">905</td><td class="line"> <span class='comment'>/* remove old content */</span></td></tr>
+<tr class="codeline" data-linenumber="906"><td class="num" id="LN906">906</td><td class="line"> content_area = gtk_info_bar_get_content_area (<span class='macro'>GTK_INFO_BAR (window-&gt;priv-&gt;info_bar)<span class='macro_popup'>((((GtkInfoBar*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;info_bar)), ((gtk_info_bar_get_type(<br>)))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="907"><td class="num" id="LN907">907</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_content != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="908"><td class="num" id="LN908">908</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="909"><td class="num" id="LN909">909</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (content_area)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_content);</td></tr>
+<tr class="codeline" data-linenumber="910"><td class="num" id="LN910">910</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="911"><td class="num" id="LN911">911</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (content_area)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((content_area)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="912"><td class="num" id="LN912">912</td><td class="line"> hbox_content,</td></tr>
+<tr class="codeline" data-linenumber="913"><td class="num" id="LN913">913</td><td class="line"> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="914"><td class="num" id="LN914">914</td><td class="line"> window-&gt;priv-&gt;info_content = hbox_content;</td></tr>
+<tr class="codeline" data-linenumber="915"><td class="num" id="LN915">915</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="916"><td class="num" id="LN916">916</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="917"><td class="num" id="LN917">917</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="918"><td class="num" id="LN918">918</td><td class="line">info_bar_timeout (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="919"><td class="num" id="LN919">919</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="920"><td class="num" id="LN920">920</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="921"><td class="num" id="LN921">921</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="922"><td class="num" id="LN922">922</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="923"><td class="num" id="LN923">923</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="924"><td class="num" id="LN924">924</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="925"><td class="num" id="LN925">925</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="926"><td class="num" id="LN926">926</td><td class="line">gs_window_show_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="927"><td class="num" id="LN927">927</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *summary,</td></tr>
+<tr class="codeline" data-linenumber="928"><td class="num" id="LN928">928</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *body,</td></tr>
+<tr class="codeline" data-linenumber="929"><td class="num" id="LN929">929</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *icon)</td></tr>
+<tr class="codeline" data-linenumber="930"><td class="num" id="LN930">930</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="931"><td class="num" id="LN931">931</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="932"><td class="num" id="LN932">932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="933"><td class="num" id="LN933">933</td><td class="line"> set_info_text_and_icon (window,</td></tr>
+<tr class="codeline" data-linenumber="934"><td class="num" id="LN934">934</td><td class="line"> icon,</td></tr>
+<tr class="codeline" data-linenumber="935"><td class="num" id="LN935">935</td><td class="line"> summary,</td></tr>
+<tr class="codeline" data-linenumber="936"><td class="num" id="LN936">936</td><td class="line"> body);</td></tr>
+<tr class="codeline" data-linenumber="937"><td class="num" id="LN937">937</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;info_bar);</td></tr>
+<tr class="codeline" data-linenumber="938"><td class="num" id="LN938">938</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="939"><td class="num" id="LN939">939</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="940"><td class="num" id="LN940">940</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="941"><td class="num" id="LN941">941</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="942"><td class="num" id="LN942">942</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="943"><td class="num" id="LN943">943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="944"><td class="num" id="LN944">944</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = g_timeout_add_seconds (<span class='macro'>INFO_BAR_SECONDS<span class='macro_popup'>30</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="945"><td class="num" id="LN945">945</td><td class="line"> (GSourceFunc)info_bar_timeout,</td></tr>
+<tr class="codeline" data-linenumber="946"><td class="num" id="LN946">946</td><td class="line"> window);</td></tr>
+<tr class="codeline" data-linenumber="947"><td class="num" id="LN947">947</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="948"><td class="num" id="LN948">948</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="949"><td class="num" id="LN949">949</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="950"><td class="num" id="LN950">950</td><td class="line">gs_window_show (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="951"><td class="num" id="LN951">951</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="952"><td class="num" id="LN952">952</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="953"><td class="num" id="LN953">953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="954"><td class="num" id="LN954">954</td><td class="line"> gtk_widget_show (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="955"><td class="num" id="LN955">955</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="956"><td class="num" id="LN956">956</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="957"><td class="num" id="LN957">957</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="958"><td class="num" id="LN958">958</td><td class="line">gs_window_real_hide (GtkWidget *widget)</td></tr>
+<tr class="codeline" data-linenumber="959"><td class="num" id="LN959">959</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="960"><td class="num" id="LN960">960</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="961"><td class="num" id="LN961">961</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="962"><td class="num" id="LN962">962</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="963"><td class="num" id="LN963">963</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="964"><td class="num" id="LN964">964</td><td class="line"> gdk_window_remove_filter (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GdkFilterFunc)xevent_filter, window);</td></tr>
+<tr class="codeline" data-linenumber="965"><td class="num" id="LN965">965</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="966"><td class="num" id="LN966">966</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="967"><td class="num" id="LN967">967</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="968"><td class="num" id="LN968">968</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide)</td></tr>
+<tr class="codeline" data-linenumber="969"><td class="num" id="LN969">969</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="970"><td class="num" id="LN970">970</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="971"><td class="num" id="LN971">971</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="972"><td class="num" id="LN972">972</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="973"><td class="num" id="LN973">973</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="974"><td class="num" id="LN974">974</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="975"><td class="num" id="LN975">975</td><td class="line">gs_window_destroy (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="976"><td class="num" id="LN976">976</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="977"><td class="num" id="LN977">977</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="978"><td class="num" id="LN978">978</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="979"><td class="num" id="LN979">979</td><td class="line"> gs_window_cancel_unlock_request (window);</td></tr>
+<tr class="codeline" data-linenumber="980"><td class="num" id="LN980">980</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="981"><td class="num" id="LN981">981</td><td class="line"> gtk_widget_destroy (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="982"><td class="num" id="LN982">982</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="983"><td class="num" id="LN983">983</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="984"><td class="num" id="LN984">984</td><td class="line">GdkWindow *</td></tr>
+<tr class="codeline" data-linenumber="985"><td class="num" id="LN985">985</td><td class="line">gs_window_get_gdk_window (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="986"><td class="num" id="LN986">986</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="987"><td class="num" id="LN987">987</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="988"><td class="num" id="LN988">988</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="989"><td class="num" id="LN989">989</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="990"><td class="num" id="LN990">990</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="991"><td class="num" id="LN991">991</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="992"><td class="num" id="LN992">992</td><td class="line">GtkWidget *</td></tr>
+<tr class="codeline" data-linenumber="993"><td class="num" id="LN993">993</td><td class="line">gs_window_get_drawing_area (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="994"><td class="num" id="LN994">994</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="995"><td class="num" id="LN995">995</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="996"><td class="num" id="LN996">996</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="997"><td class="num" id="LN997">997</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;drawing_area;</td></tr>
+<tr class="codeline" data-linenumber="998"><td class="num" id="LN998">998</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="999"><td class="num" id="LN999">999</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1000"><td class="num" id="LN1000">1000</td><td class="line"><span class='comment'>/* just for debugging */</span></td></tr>
+<tr class="codeline" data-linenumber="1001"><td class="num" id="LN1001">1001</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1002"><td class="num" id="LN1002">1002</td><td class="line">error_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1003"><td class="num" id="LN1003">1003</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1004"><td class="num" id="LN1004">1004</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1005"><td class="num" id="LN1005">1005</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1006"><td class="num" id="LN1006">1006</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1007"><td class="num" id="LN1007">1007</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1008"><td class="num" id="LN1008">1008</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1009"><td class="num" id="LN1009">1009</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1010"><td class="num" id="LN1010">1010</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1011"><td class="num" id="LN1011">1011</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1012"><td class="num" id="LN1012">1012</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1013"><td class="num" id="LN1013">1013</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1014"><td class="num" id="LN1014">1014</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1015"><td class="num" id="LN1015">1015</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1016"><td class="num" id="LN1016">1016</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1017"><td class="num" id="LN1017">1017</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1018"><td class="num" id="LN1018">1018</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1019"><td class="num" id="LN1019">1019</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1020"><td class="num" id="LN1020">1020</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command error output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1020, "command error output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1021"><td class="num" id="LN1021">1021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1022"><td class="num" id="LN1022">1022</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1023"><td class="num" id="LN1023">1023</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1024"><td class="num" id="LN1024">1024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1025"><td class="num" id="LN1025">1025</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1026"><td class="num" id="LN1026">1026</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1027"><td class="num" id="LN1027">1027</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1027, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1028"><td class="num" id="LN1028">1028</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1029"><td class="num" id="LN1029">1029</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1030"><td class="num" id="LN1030">1030</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1031"><td class="num" id="LN1031">1031</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1032"><td class="num" id="LN1032">1032</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1033"><td class="num" id="LN1033">1033</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1034"><td class="num" id="LN1034">1034</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1035"><td class="num" id="LN1035">1035</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1036"><td class="num" id="LN1036">1036</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1037"><td class="num" id="LN1037">1037</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1038"><td class="num" id="LN1038">1038</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1039"><td class="num" id="LN1039">1039</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1040"><td class="num" id="LN1040">1040</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1041"><td class="num" id="LN1041">1041</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1042"><td class="num" id="LN1042">1042</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1043"><td class="num" id="LN1043">1043</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1044"><td class="num" id="LN1044">1044</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1045"><td class="num" id="LN1045">1045</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1046"><td class="num" id="LN1046">1046</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1047"><td class="num" id="LN1047">1047</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1048"><td class="num" id="LN1048">1048</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1049"><td class="num" id="LN1049">1049</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1050"><td class="num" id="LN1050">1050</td><td class="line">spawn_on_window (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1051"><td class="num" id="LN1051">1051</td><td class="line"> <span class='keyword'>char</span> *command,</td></tr>
+<tr class="codeline" data-linenumber="1052"><td class="num" id="LN1052">1052</td><td class="line"> <span class='keyword'>int</span> *pid,</td></tr>
+<tr class="codeline" data-linenumber="1053"><td class="num" id="LN1053">1053</td><td class="line"> GIOFunc watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1054"><td class="num" id="LN1054">1054</td><td class="line"> gpointer user_data,</td></tr>
+<tr class="codeline" data-linenumber="1055"><td class="num" id="LN1055">1055</td><td class="line"> gint *watch_id)</td></tr>
+<tr class="codeline" data-linenumber="1056"><td class="num" id="LN1056">1056</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1057"><td class="num" id="LN1057">1057</td><td class="line"> <span class='keyword'>int</span> argc;</td></tr>
+<tr class="codeline" data-linenumber="1058"><td class="num" id="LN1058">1058</td><td class="line"> <span class='keyword'>char</span> **argv;</td></tr>
+<tr class="codeline" data-linenumber="1059"><td class="num" id="LN1059">1059</td><td class="line"> <span class='keyword'>char</span> **envp;</td></tr>
+<tr class="codeline" data-linenumber="1060"><td class="num" id="LN1060">1060</td><td class="line"> GError *error;</td></tr>
+<tr class="codeline" data-linenumber="1061"><td class="num" id="LN1061">1061</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1062"><td class="num" id="LN1062">1062</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="1063"><td class="num" id="LN1063">1063</td><td class="line"> <span class='keyword'>int</span> standard_output;</td></tr>
+<tr class="codeline" data-linenumber="1064"><td class="num" id="LN1064">1064</td><td class="line"> <span class='keyword'>int</span> standard_error;</td></tr>
+<tr class="codeline" data-linenumber="1065"><td class="num" id="LN1065">1065</td><td class="line"> <span class='keyword'>int</span> child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1066"><td class="num" id="LN1066">1066</td><td class="line"> <span class='keyword'>int</span> id;</td></tr>
+<tr class="codeline" data-linenumber="1067"><td class="num" id="LN1067">1067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1068"><td class="num" id="LN1068">1068</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1069"><td class="num" id="LN1069">1069</td><td class="line"> <span class='keyword'>if</span> (! g_shell_parse_argv (command, &amp;argc, &amp;argv, &amp;error))</td></tr>
+<tr class="codeline" data-linenumber="1070"><td class="num" id="LN1070">1070</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1071"><td class="num" id="LN1071">1071</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not parse command: %s"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1071, "Could not parse command: %s"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1072"><td class="num" id="LN1072">1072</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1073"><td class="num" id="LN1073">1073</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1074"><td class="num" id="LN1074">1074</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1075"><td class="num" id="LN1075">1075</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1076"><td class="num" id="LN1076">1076</td><td class="line"> error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1077"><td class="num" id="LN1077">1077</td><td class="line"> envp = spawn_make_environment_for_display (gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1078"><td class="num" id="LN1078">1078</td><td class="line"> result = g_spawn_async_with_pipes (<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1079"><td class="num" id="LN1079">1079</td><td class="line"> argv,</td></tr>
+<tr class="codeline" data-linenumber="1080"><td class="num" id="LN1080">1080</td><td class="line"> envp,</td></tr>
+<tr class="codeline" data-linenumber="1081"><td class="num" id="LN1081">1081</td><td class="line"> G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,</td></tr>
+<tr class="codeline" data-linenumber="1082"><td class="num" id="LN1082">1082</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1083"><td class="num" id="LN1083">1083</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1084"><td class="num" id="LN1084">1084</td><td class="line"> &amp;child_pid,</td></tr>
+<tr class="codeline" data-linenumber="1085"><td class="num" id="LN1085">1085</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1086"><td class="num" id="LN1086">1086</td><td class="line"> &amp;standard_output,</td></tr>
+<tr class="codeline" data-linenumber="1087"><td class="num" id="LN1087">1087</td><td class="line"> &amp;standard_error,</td></tr>
+<tr class="codeline" data-linenumber="1088"><td class="num" id="LN1088">1088</td><td class="line"> &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1089"><td class="num" id="LN1089">1089</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1090"><td class="num" id="LN1090">1090</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1091"><td class="num" id="LN1091">1091</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1092"><td class="num" id="LN1092">1092</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command '%s': %s"</span>, command, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1092, "Could not start command '%s': %s"<br>, command, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1093"><td class="num" id="LN1093">1093</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1094"><td class="num" id="LN1094">1094</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1095"><td class="num" id="LN1095">1095</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1096"><td class="num" id="LN1096">1096</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1097"><td class="num" id="LN1097">1097</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1098"><td class="num" id="LN1098">1098</td><td class="line"> <span class='keyword'>if</span> (pid != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1099"><td class="num" id="LN1099">1099</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1100"><td class="num" id="LN1100">1100</td><td class="line"> *pid = child_pid;</td></tr>
+<tr class="codeline" data-linenumber="1101"><td class="num" id="LN1101">1101</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1102"><td class="num" id="LN1102">1102</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1103"><td class="num" id="LN1103">1103</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1104"><td class="num" id="LN1104">1104</td><td class="line"> g_spawn_close_pid (child_pid);</td></tr>
+<tr class="codeline" data-linenumber="1105"><td class="num" id="LN1105">1105</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1106"><td class="num" id="LN1106">1106</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1107"><td class="num" id="LN1107">1107</td><td class="line"> <span class='comment'>/* output channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1108"><td class="num" id="LN1108">1108</td><td class="line"> channel = g_io_channel_unix_new (standard_output);</td></tr>
+<tr class="codeline" data-linenumber="1109"><td class="num" id="LN1109">1109</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1110"><td class="num" id="LN1110">1110</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1111"><td class="num" id="LN1111">1111</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1112"><td class="num" id="LN1112">1112</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1113"><td class="num" id="LN1113">1113</td><td class="line"> id = g_io_add_watch (channel,</td></tr>
+<tr class="codeline" data-linenumber="1114"><td class="num" id="LN1114">1114</td><td class="line"> G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr>
+<tr class="codeline" data-linenumber="1115"><td class="num" id="LN1115">1115</td><td class="line"> watch_func,</td></tr>
+<tr class="codeline" data-linenumber="1116"><td class="num" id="LN1116">1116</td><td class="line"> user_data);</td></tr>
+<tr class="codeline" data-linenumber="1117"><td class="num" id="LN1117">1117</td><td class="line"> <span class='keyword'>if</span> (watch_id != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1118"><td class="num" id="LN1118">1118</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1119"><td class="num" id="LN1119">1119</td><td class="line"> *watch_id = id;</td></tr>
+<tr class="codeline" data-linenumber="1120"><td class="num" id="LN1120">1120</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1121"><td class="num" id="LN1121">1121</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1122"><td class="num" id="LN1122">1122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1123"><td class="num" id="LN1123">1123</td><td class="line"> <span class='comment'>/* error channel */</span></td></tr>
+<tr class="codeline" data-linenumber="1124"><td class="num" id="LN1124">1124</td><td class="line"> channel = g_io_channel_unix_new (standard_error);</td></tr>
+<tr class="codeline" data-linenumber="1125"><td class="num" id="LN1125">1125</td><td class="line"> g_io_channel_set_close_on_unref (channel, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1126"><td class="num" id="LN1126">1126</td><td class="line"> g_io_channel_set_flags (channel,</td></tr>
+<tr class="codeline" data-linenumber="1127"><td class="num" id="LN1127">1127</td><td class="line"> g_io_channel_get_flags (channel) | G_IO_FLAG_NONBLOCK,</td></tr>
+<tr class="codeline" data-linenumber="1128"><td class="num" id="LN1128">1128</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1129"><td class="num" id="LN1129">1129</td><td class="line"> id = g_io_add_watch (channel,</td></tr>
+<tr class="codeline" data-linenumber="1130"><td class="num" id="LN1130">1130</td><td class="line"> G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,</td></tr>
+<tr class="codeline" data-linenumber="1131"><td class="num" id="LN1131">1131</td><td class="line"> error_watch,</td></tr>
+<tr class="codeline" data-linenumber="1132"><td class="num" id="LN1132">1132</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1133"><td class="num" id="LN1133">1133</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="1134"><td class="num" id="LN1134">1134</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1135"><td class="num" id="LN1135">1135</td><td class="line"> g_strfreev (argv);</td></tr>
+<tr class="codeline" data-linenumber="1136"><td class="num" id="LN1136">1136</td><td class="line"> g_strfreev (envp);</td></tr>
+<tr class="codeline" data-linenumber="1137"><td class="num" id="LN1137">1137</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1138"><td class="num" id="LN1138">1138</td><td class="line"> <span class='keyword'>return</span> result;</td></tr>
+<tr class="codeline" data-linenumber="1139"><td class="num" id="LN1139">1139</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1140"><td class="num" id="LN1140">1140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1141"><td class="num" id="LN1141">1141</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1142"><td class="num" id="LN1142">1142</td><td class="line">lock_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1143"><td class="num" id="LN1143">1143</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1144"><td class="num" id="LN1144">1144</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1145"><td class="num" id="LN1145">1145</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1146"><td class="num" id="LN1146">1146</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1147"><td class="num" id="LN1147">1147</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1148"><td class="num" id="LN1148">1148</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1149"><td class="num" id="LN1149">1149</td><td class="line">lock_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1150"><td class="num" id="LN1150">1150</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1151"><td class="num" id="LN1151">1151</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1152"><td class="num" id="LN1152">1152</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1153"><td class="num" id="LN1153">1153</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1154"><td class="num" id="LN1154">1154</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1155"><td class="num" id="LN1155">1155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1156"><td class="num" id="LN1156">1156</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1157"><td class="num" id="LN1157">1157</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1158"><td class="num" id="LN1158">1158</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1159"><td class="num" id="LN1159">1159</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1160"><td class="num" id="LN1160">1160</td><td class="line">keyboard_plug_added (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1161"><td class="num" id="LN1161">1161</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1162"><td class="num" id="LN1162">1162</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1163"><td class="num" id="LN1163">1163</td><td class="line"> gtk_widget_show (widget);</td></tr>
+<tr class="codeline" data-linenumber="1164"><td class="num" id="LN1164">1164</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1165"><td class="num" id="LN1165">1165</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1166"><td class="num" id="LN1166">1166</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1167"><td class="num" id="LN1167">1167</td><td class="line">keyboard_plug_removed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1168"><td class="num" id="LN1168">1168</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1169"><td class="num" id="LN1169">1169</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1170"><td class="num" id="LN1170">1170</td><td class="line"> gtk_widget_hide (widget);</td></tr>
+<tr class="codeline" data-linenumber="1171"><td class="num" id="LN1171">1171</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_widget_get_type<br> ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1172"><td class="num" id="LN1172">1172</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1173"><td class="num" id="LN1173">1173</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1174"><td class="num" id="LN1174">1174</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1175"><td class="num" id="LN1175">1175</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1176"><td class="num" id="LN1176">1176</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1177"><td class="num" id="LN1177">1177</td><td class="line">keyboard_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1178"><td class="num" id="LN1178">1178</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1179"><td class="num" id="LN1179">1179</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1180"><td class="num" id="LN1180">1180</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1181"><td class="num" id="LN1181">1181</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1182"><td class="num" id="LN1182">1182</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, keyboard_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (keyboard_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1183"><td class="num" id="LN1183">1183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1184"><td class="num" id="LN1184">1184</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1185"><td class="num" id="LN1185">1185</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1186"><td class="num" id="LN1186">1186</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1187"><td class="num" id="LN1187">1187</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1188"><td class="num" id="LN1188">1188</td><td class="line">forward_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1189"><td class="num" id="LN1189">1189</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1190"><td class="num" id="LN1190">1190</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1191"><td class="num" id="LN1191">1191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1192"><td class="num" id="LN1192">1192</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1193"><td class="num" id="LN1193">1193</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1194"><td class="num" id="LN1194">1194</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1195"><td class="num" id="LN1195">1195</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1196"><td class="num" id="LN1196">1196</td><td class="line"> gtk_window_propagate_key_event (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="1197"><td class="num" id="LN1197">1197</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1198"><td class="num" id="LN1198">1198</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1199"><td class="num" id="LN1199">1199</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1200"><td class="num" id="LN1200">1200</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1201"><td class="num" id="LN1201">1201</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1202"><td class="num" id="LN1202">1202</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1203"><td class="num" id="LN1203">1203</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1204"><td class="num" id="LN1204">1204</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1205"><td class="num" id="LN1205">1205</td><td class="line">remove_key_events (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1206"><td class="num" id="LN1206">1206</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1207"><td class="num" id="LN1207">1207</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_reverse (window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1208"><td class="num" id="LN1208">1208</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1209"><td class="num" id="LN1209">1209</td><td class="line"> <span class='keyword'>while</span> (window-&gt;priv-&gt;key_events)</td></tr>
+<tr class="codeline" data-linenumber="1210"><td class="num" id="LN1210">1210</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1211"><td class="num" id="LN1211">1211</td><td class="line"> GdkEventKey *event = window-&gt;priv-&gt;key_events-&gt;data;</td></tr>
+<tr class="codeline" data-linenumber="1212"><td class="num" id="LN1212">1212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1213"><td class="num" id="LN1213">1213</td><td class="line"> gdk_event_free ((GdkEvent *)event);</td></tr>
+<tr class="codeline" data-linenumber="1214"><td class="num" id="LN1214">1214</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_delete_link (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="1215"><td class="num" id="LN1215">1215</td><td class="line"> window-&gt;priv-&gt;key_events);</td></tr>
+<tr class="codeline" data-linenumber="1216"><td class="num" id="LN1216">1216</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1217"><td class="num" id="LN1217">1217</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1218"><td class="num" id="LN1218">1218</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1219"><td class="num" id="LN1219">1219</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1220"><td class="num" id="LN1220">1220</td><td class="line">lock_socket_show (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1221"><td class="num" id="LN1221">1221</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1222"><td class="num" id="LN1222">1222</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1223"><td class="num" id="LN1223">1223</td><td class="line"> gtk_widget_child_focus (window-&gt;priv-&gt;lock_socket, GTK_DIR_TAB_FORWARD);</td></tr>
+<tr class="codeline" data-linenumber="1224"><td class="num" id="LN1224">1224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1225"><td class="num" id="LN1225">1225</td><td class="line"> <span class='comment'>/* send queued events to the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="1226"><td class="num" id="LN1226">1226</td><td class="line"> forward_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1227"><td class="num" id="LN1227">1227</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1228"><td class="num" id="LN1228">1228</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1229"><td class="num" id="LN1229">1229</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1230"><td class="num" id="LN1230">1230</td><td class="line">lock_socket_destroyed (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="1231"><td class="num" id="LN1231">1231</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1232"><td class="num" id="LN1232">1232</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1233"><td class="num" id="LN1233">1233</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_show, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_show), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1234"><td class="num" id="LN1234">1234</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_socket_destroyed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_socket_destroyed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1235"><td class="num" id="LN1235">1235</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_added, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_added), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1236"><td class="num" id="LN1236">1236</td><td class="line"> <span class='macro'>g_signal_handlers_disconnect_by_func (widget, lock_plug_removed, window)<span class='macro_popup'>g_signal_handlers_disconnect_matched ((widget), (GSignalMatchType<br>) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), 0, 0, ((void*)<br>0), (lock_plug_removed), (window))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1237"><td class="num" id="LN1237">1237</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1238"><td class="num" id="LN1238">1238</td><td class="line"> window-&gt;priv-&gt;lock_socket = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1239"><td class="num" id="LN1239">1239</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1240"><td class="num" id="LN1240">1240</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1241"><td class="num" id="LN1241">1241</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1242"><td class="num" id="LN1242">1242</td><td class="line">create_keyboard_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1243"><td class="num" id="LN1243">1243</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1244"><td class="num" id="LN1244">1244</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1245"><td class="num" id="LN1245">1245</td><td class="line"> <span class='keyword'>int</span> height;</td></tr>
+<tr class="codeline" data-linenumber="1246"><td class="num" id="LN1246">1246</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1247"><td class="num" id="LN1247">1247</td><td class="line"> height = (<span class='macro'>HeightOfScreen (gdk_x11_screen_get_xscreen (gtk_widget_get_screen (GTK_WIDGET (window))))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (gtk_widget_get_screen (((((GtkWidget<br>*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((window<br>)), ((gtk_widget_get_type ())))))))))-&gt;height)</span></span>) / 4;</td></tr>
+<tr class="codeline" data-linenumber="1248"><td class="num" id="LN1248">1248</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1249"><td class="num" id="LN1249">1249</td><td class="line"> window-&gt;priv-&gt;keyboard_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1250"><td class="num" id="LN1250">1250</td><td class="line"> gtk_widget_set_size_request (window-&gt;priv-&gt;keyboard_socket, -1, height);</td></tr>
+<tr class="codeline" data-linenumber="1251"><td class="num" id="LN1251">1251</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1252"><td class="num" id="LN1252">1252</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1253"><td class="num" id="LN1253">1253</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("destroy"), (((GCallback) (keyboard_socket_destroyed))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1254"><td class="num" id="LN1254">1254</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1255"><td class="num" id="LN1255">1255</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_added"), (((GCallback) (keyboard_plug_added))), (window<br>), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1256"><td class="num" id="LN1256">1256</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;keyboard_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1257"><td class="num" id="LN1257">1257</td><td class="line"> <span class='macro'>G_CALLBACK (keyboard_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;keyboard_socket),<br> ("plug_removed"), (((GCallback) (keyboard_plug_removed))), (<br>window), ((void*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1258"><td class="num" id="LN1258">1258</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;keyboard_socket, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1259"><td class="num" id="LN1259">1259</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;keyboard_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;keyboard_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1260"><td class="num" id="LN1260">1260</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1261"><td class="num" id="LN1261">1261</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1262"><td class="num" id="LN1262">1262</td><td class="line"><span class='comment'>/* adapted from gspawn.c */</span></td></tr>
+<tr class="codeline" data-linenumber="1263"><td class="num" id="LN1263">1263</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="1264"><td class="num" id="LN1264">1264</td><td class="line">wait_on_child (<span class='keyword'>int</span> pid)</td></tr>
+<tr class="codeline" data-linenumber="1265"><td class="num" id="LN1265">1265</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1266"><td class="num" id="LN1266">1266</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1267"><td class="num" id="LN1267">1267</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1268"><td class="num" id="LN1268">1268</td><td class="line">wait_again:</td></tr>
+<tr class="codeline" data-linenumber="1269"><td class="num" id="LN1269">1269</td><td class="line"> <span class='keyword'>if</span> (waitpid (pid, &amp;status, 0) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1270"><td class="num" id="LN1270">1270</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1271"><td class="num" id="LN1271">1271</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINTR<span class='macro_popup'>4</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1272"><td class="num" id="LN1272">1272</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1273"><td class="num" id="LN1273">1273</td><td class="line"> <span class='keyword'>goto</span> wait_again;</td></tr>
+<tr class="codeline" data-linenumber="1274"><td class="num" id="LN1274">1274</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1275"><td class="num" id="LN1275">1275</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>ECHILD<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1276"><td class="num" id="LN1276">1276</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1277"><td class="num" id="LN1277">1277</td><td class="line"> ; <span class='comment'>/* do nothing, child already reaped */</span></td></tr>
+<tr class="codeline" data-linenumber="1278"><td class="num" id="LN1278">1278</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1279"><td class="num" id="LN1279">1279</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1280"><td class="num" id="LN1280">1280</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1281"><td class="num" id="LN1281">1281</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"waitpid () should not fail in 'GSWindow'"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1281, "waitpid () should not fail in 'GSWindow'"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1282"><td class="num" id="LN1282">1282</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1283"><td class="num" id="LN1283">1283</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1284"><td class="num" id="LN1284">1284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1285"><td class="num" id="LN1285">1285</td><td class="line"> <span class='keyword'>return</span> status;</td></tr>
+<tr class="codeline" data-linenumber="1286"><td class="num" id="LN1286">1286</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1287"><td class="num" id="LN1287">1287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1288"><td class="num" id="LN1288">1288</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1289"><td class="num" id="LN1289">1289</td><td class="line">kill_keyboard_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1290"><td class="num" id="LN1290">1290</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1291"><td class="num" id="LN1291">1291</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1292"><td class="num" id="LN1292">1292</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1293"><td class="num" id="LN1293">1293</td><td class="line"> signal_pid (window-&gt;priv-&gt;keyboard_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1294"><td class="num" id="LN1294">1294</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1295"><td class="num" id="LN1295">1295</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1296"><td class="num" id="LN1296">1296</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1297"><td class="num" id="LN1297">1297</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1298"><td class="num" id="LN1298">1298</td><td class="line">kill_dialog_command (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1299"><td class="num" id="LN1299">1299</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1300"><td class="num" id="LN1300">1300</td><td class="line"> <span class='comment'>/* If a dialog is up we need to signal it</span></td></tr>
+<tr class="codeline" data-linenumber="1301"><td class="num" id="LN1301">1301</td><td class="line"> <span class='comment'>and wait on it */</span></td></tr>
+<tr class="codeline" data-linenumber="1302"><td class="num" id="LN1302">1302</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1303"><td class="num" id="LN1303">1303</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1304"><td class="num" id="LN1304">1304</td><td class="line"> signal_pid (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1305"><td class="num" id="LN1305">1305</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1306"><td class="num" id="LN1306">1306</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1307"><td class="num" id="LN1307">1307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1308"><td class="num" id="LN1308">1308</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1309"><td class="num" id="LN1309">1309</td><td class="line">keyboard_command_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1310"><td class="num" id="LN1310">1310</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1311"><td class="num" id="LN1311">1311</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1312"><td class="num" id="LN1312">1312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1313"><td class="num" id="LN1313">1313</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1314"><td class="num" id="LN1314">1314</td><td class="line"> kill_keyboard_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1315"><td class="num" id="LN1315">1315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1316"><td class="num" id="LN1316">1316</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Keyboard finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1316, "Keyboard finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1317"><td class="num" id="LN1317">1317</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1318"><td class="num" id="LN1318">1318</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1319"><td class="num" id="LN1319">1319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1320"><td class="num" id="LN1320">1320</td><td class="line"> wait_on_child (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1321"><td class="num" id="LN1321">1321</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1322"><td class="num" id="LN1322">1322</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;keyboard_pid);</td></tr>
+<tr class="codeline" data-linenumber="1323"><td class="num" id="LN1323">1323</td><td class="line"> window-&gt;priv-&gt;keyboard_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1324"><td class="num" id="LN1324">1324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1325"><td class="num" id="LN1325">1325</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1326"><td class="num" id="LN1326">1326</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1327"><td class="num" id="LN1327">1327</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1328"><td class="num" id="LN1328">1328</td><td class="line">keyboard_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1329"><td class="num" id="LN1329">1329</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1330"><td class="num" id="LN1330">1330</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1331"><td class="num" id="LN1331">1331</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1332"><td class="num" id="LN1332">1332</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1333"><td class="num" id="LN1333">1333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1334"><td class="num" id="LN1334">1334</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1335"><td class="num" id="LN1335">1335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1336"><td class="num" id="LN1336">1336</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1337"><td class="num" id="LN1337">1337</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1338"><td class="num" id="LN1338">1338</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1339"><td class="num" id="LN1339">1339</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1340"><td class="num" id="LN1340">1340</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1341"><td class="num" id="LN1341">1341</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1342"><td class="num" id="LN1342">1342</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1343"><td class="num" id="LN1343">1343</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1344"><td class="num" id="LN1344">1344</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1345"><td class="num" id="LN1345">1345</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1346"><td class="num" id="LN1346">1346</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1347"><td class="num" id="LN1347">1347</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1348"><td class="num" id="LN1348">1348</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1349"><td class="num" id="LN1349">1349</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1350"><td class="num" id="LN1350">1350</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1351"><td class="num" id="LN1351">1351</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"keyboard command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1351, "keyboard command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1352"><td class="num" id="LN1352">1352</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1353"><td class="num" id="LN1353">1353</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1354"><td class="num" id="LN1354">1354</td><td class="line"> create_keyboard_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1355"><td class="num" id="LN1355">1355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1356"><td class="num" id="LN1356">1356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1357"><td class="num" id="LN1357">1357</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1358"><td class="num" id="LN1358">1358</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1359"><td class="num" id="LN1359">1359</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1360"><td class="num" id="LN1360">1360</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1361"><td class="num" id="LN1361">1361</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1362"><td class="num" id="LN1362">1362</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1363"><td class="num" id="LN1363">1363</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1363, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1364"><td class="num" id="LN1364">1364</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1365"><td class="num" id="LN1365">1365</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1366"><td class="num" id="LN1366">1366</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1367"><td class="num" id="LN1367">1367</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1368"><td class="num" id="LN1368">1368</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1369"><td class="num" id="LN1369">1369</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1370"><td class="num" id="LN1370">1370</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1371"><td class="num" id="LN1371">1371</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1372"><td class="num" id="LN1372">1372</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1373"><td class="num" id="LN1373">1373</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1374"><td class="num" id="LN1374">1374</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1375"><td class="num" id="LN1375">1375</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1376"><td class="num" id="LN1376">1376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1377"><td class="num" id="LN1377">1377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1378"><td class="num" id="LN1378">1378</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1379"><td class="num" id="LN1379">1379</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1380"><td class="num" id="LN1380">1380</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1381"><td class="num" id="LN1381">1381</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1382"><td class="num" id="LN1382">1382</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1383"><td class="num" id="LN1383">1383</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1384"><td class="num" id="LN1384">1384</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1385"><td class="num" id="LN1385">1385</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1386"><td class="num" id="LN1386">1386</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1387"><td class="num" id="LN1387">1387</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1388"><td class="num" id="LN1388">1388</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1389"><td class="num" id="LN1389">1389</td><td class="line">embed_keyboard (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1390"><td class="num" id="LN1390">1390</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1391"><td class="num" id="LN1391">1391</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="1392"><td class="num" id="LN1392">1392</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1393"><td class="num" id="LN1393">1393</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;keyboard_enabled</td></tr>
+<tr class="codeline" data-linenumber="1394"><td class="num" id="LN1394">1394</td><td class="line"> || window-&gt;priv-&gt;keyboard_command == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1395"><td class="num" id="LN1395">1395</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1396"><td class="num" id="LN1396">1396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1397"><td class="num" id="LN1397">1397</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Adding embedded keyboard widget"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1397, "Adding embedded keyboard widget"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1398"><td class="num" id="LN1398">1398</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1399"><td class="num" id="LN1399">1399</td><td class="line"> <span class='comment'>/* FIXME: verify command is safe */</span></td></tr>
+<tr class="codeline" data-linenumber="1400"><td class="num" id="LN1400">1400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1401"><td class="num" id="LN1401">1401</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Running command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1401, "Running command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1402"><td class="num" id="LN1402">1402</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1403"><td class="num" id="LN1403">1403</td><td class="line"> res = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1404"><td class="num" id="LN1404">1404</td><td class="line"> window-&gt;priv-&gt;keyboard_command,</td></tr>
+<tr class="codeline" data-linenumber="1405"><td class="num" id="LN1405">1405</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_pid,</td></tr>
+<tr class="codeline" data-linenumber="1406"><td class="num" id="LN1406">1406</td><td class="line"> (GIOFunc)keyboard_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1407"><td class="num" id="LN1407">1407</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1408"><td class="num" id="LN1408">1408</td><td class="line"> &amp;window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1409"><td class="num" id="LN1409">1409</td><td class="line"> <span class='keyword'>if</span> (! res)</td></tr>
+<tr class="codeline" data-linenumber="1410"><td class="num" id="LN1410">1410</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1411"><td class="num" id="LN1411">1411</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, window-&gt;priv-&gt;keyboard_command)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1411, "Could not start command: %s"<br>, window-&gt;priv-&gt;keyboard_command)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1412"><td class="num" id="LN1412">1412</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1413"><td class="num" id="LN1413">1413</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1414"><td class="num" id="LN1414">1414</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1415"><td class="num" id="LN1415">1415</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1416"><td class="num" id="LN1416">1416</td><td class="line">create_lock_socket (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1417"><td class="num" id="LN1417">1417</td><td class="line"> guint32 id)</td></tr>
+<tr class="codeline" data-linenumber="1418"><td class="num" id="LN1418">1418</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1419"><td class="num" id="LN1419">1419</td><td class="line"> window-&gt;priv-&gt;lock_socket = gtk_socket_new ();</td></tr>
+<tr class="codeline" data-linenumber="1420"><td class="num" id="LN1420">1420</td><td class="line"> window-&gt;priv-&gt;lock_box = gtk_grid_new ();</td></tr>
+<tr class="codeline" data-linenumber="1421"><td class="num" id="LN1421">1421</td><td class="line"> gtk_widget_set_halign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1422"><td class="num" id="LN1422">1422</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1423"><td class="num" id="LN1423">1423</td><td class="line"> gtk_widget_set_valign (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1424"><td class="num" id="LN1424">1424</td><td class="line"> GTK_ALIGN_CENTER);</td></tr>
+<tr class="codeline" data-linenumber="1425"><td class="num" id="LN1425">1425</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;lock_box);</td></tr>
+<tr class="codeline" data-linenumber="1426"><td class="num" id="LN1426">1426</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;lock_box, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="1427"><td class="num" id="LN1427">1427</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1428"><td class="num" id="LN1428">1428</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_container_get_type<br> ()))))))</span></span>, window-&gt;priv-&gt;lock_socket);</td></tr>
+<tr class="codeline" data-linenumber="1429"><td class="num" id="LN1429">1429</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1430"><td class="num" id="LN1430">1430</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"show"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1431"><td class="num" id="LN1431">1431</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_show), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("show"<br>), (((GCallback) (lock_socket_show))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1432"><td class="num" id="LN1432">1432</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"destroy"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1433"><td class="num" id="LN1433">1433</td><td class="line"> <span class='macro'>G_CALLBACK (lock_socket_destroyed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("destroy"<br>), (((GCallback) (lock_socket_destroyed))), (window), ((void*<br>)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1434"><td class="num" id="LN1434">1434</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_added"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1435"><td class="num" id="LN1435">1435</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_added), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_added"<br>), (((GCallback) (lock_plug_added))), (window), ((void*)0), (<br>GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1436"><td class="num" id="LN1436">1436</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;lock_socket, <span class='string_literal'>"plug_removed"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="1437"><td class="num" id="LN1437">1437</td><td class="line"> <span class='macro'>G_CALLBACK (lock_plug_removed), window)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;lock_socket), ("plug_removed"<br>), (((GCallback) (lock_plug_removed))), (window), ((void*)0),<br> (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1438"><td class="num" id="LN1438">1438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1439"><td class="num" id="LN1439">1439</td><td class="line"> gtk_socket_add_id (<span class='macro'>GTK_SOCKET (window-&gt;priv-&gt;lock_socket)<span class='macro_popup'>((((GtkSocket*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_socket)), ((gtk_socket_get_type<br> ()))))))</span></span>, id);</td></tr>
+<tr class="codeline" data-linenumber="1440"><td class="num" id="LN1440">1440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1441"><td class="num" id="LN1441">1441</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1442"><td class="num" id="LN1442">1442</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1443"><td class="num" id="LN1443">1443</td><td class="line"> embed_keyboard (window);</td></tr>
+<tr class="codeline" data-linenumber="1444"><td class="num" id="LN1444">1444</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1445"><td class="num" id="LN1445">1445</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1446"><td class="num" id="LN1446">1446</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1447"><td class="num" id="LN1447">1447</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1448"><td class="num" id="LN1448">1448</td><td class="line">gs_window_dialog_finish (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1449"><td class="num" id="LN1449">1449</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1450"><td class="num" id="LN1450">1450</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1451"><td class="num" id="LN1451">1451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1452"><td class="num" id="LN1452">1452</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Dialog finished"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1452, "Dialog finished"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1453"><td class="num" id="LN1453">1453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1454"><td class="num" id="LN1454">1454</td><td class="line"> <span class='comment'>/* make sure we finish the keyboard thing too */</span></td></tr>
+<tr class="codeline" data-linenumber="1455"><td class="num" id="LN1455">1455</td><td class="line"> keyboard_command_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1456"><td class="num" id="LN1456">1456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1457"><td class="num" id="LN1457">1457</td><td class="line"> <span class='comment'>/* send a signal just in case */</span></td></tr>
+<tr class="codeline" data-linenumber="1458"><td class="num" id="LN1458">1458</td><td class="line"> kill_dialog_command (window);</td></tr>
+<tr class="codeline" data-linenumber="1459"><td class="num" id="LN1459">1459</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1460"><td class="num" id="LN1460">1460</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1461"><td class="num" id="LN1461">1461</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1462"><td class="num" id="LN1462">1462</td><td class="line"> wait_on_child (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1463"><td class="num" id="LN1463">1463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1464"><td class="num" id="LN1464">1464</td><td class="line"> g_spawn_close_pid (window-&gt;priv-&gt;lock_pid);</td></tr>
+<tr class="codeline" data-linenumber="1465"><td class="num" id="LN1465">1465</td><td class="line"> window-&gt;priv-&gt;lock_pid = 0;</td></tr>
+<tr class="codeline" data-linenumber="1466"><td class="num" id="LN1466">1466</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1467"><td class="num" id="LN1467">1467</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1468"><td class="num" id="LN1468">1468</td><td class="line"> <span class='comment'>/* remove events for the case were we failed to show socket */</span></td></tr>
+<tr class="codeline" data-linenumber="1469"><td class="num" id="LN1469">1469</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="1470"><td class="num" id="LN1470">1470</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1471"><td class="num" id="LN1471">1471</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1472"><td class="num" id="LN1472">1472</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1473"><td class="num" id="LN1473">1473</td><td class="line">maybe_kill_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1474"><td class="num" id="LN1474">1474</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1475"><td class="num" id="LN1475">1475</td><td class="line"> <span class='keyword'>if</span> (!window-&gt;priv-&gt;dialog_shake_in_progress</td></tr>
+<tr class="codeline" data-linenumber="1476"><td class="num" id="LN1476">1476</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;dialog_quit_requested</td></tr>
+<tr class="codeline" data-linenumber="1477"><td class="num" id="LN1477">1477</td><td class="line"> &amp;&amp; window-&gt;priv-&gt;lock_pid &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1478"><td class="num" id="LN1478">1478</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1479"><td class="num" id="LN1479">1479</td><td class="line"> kill (window-&gt;priv-&gt;lock_pid, <span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1480"><td class="num" id="LN1480">1480</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1481"><td class="num" id="LN1481">1481</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1482"><td class="num" id="LN1482">1482</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1483"><td class="num" id="LN1483">1483</td><td class="line"><span class='comment'>/* very rudimentary animation for indicating an auth failure */</span></td></tr>
+<tr class="codeline" data-linenumber="1484"><td class="num" id="LN1484">1484</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1485"><td class="num" id="LN1485">1485</td><td class="line">shake_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1486"><td class="num" id="LN1486">1486</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1487"><td class="num" id="LN1487">1487</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="1488"><td class="num" id="LN1488">1488</td><td class="line"> guint start, end;</td></tr>
+<tr class="codeline" data-linenumber="1489"><td class="num" id="LN1489">1489</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1490"><td class="num" id="LN1490">1490</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1491"><td class="num" id="LN1491">1491</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1492"><td class="num" id="LN1492">1492</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt; 8; i++)</td></tr>
+<tr class="codeline" data-linenumber="1493"><td class="num" id="LN1493">1493</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1494"><td class="num" id="LN1494">1494</td><td class="line"> <span class='keyword'>if</span> (i % 2 == 0)</td></tr>
+<tr class="codeline" data-linenumber="1495"><td class="num" id="LN1495">1495</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1496"><td class="num" id="LN1496">1496</td><td class="line"> start = 30;</td></tr>
+<tr class="codeline" data-linenumber="1497"><td class="num" id="LN1497">1497</td><td class="line"> end = 0;</td></tr>
+<tr class="codeline" data-linenumber="1498"><td class="num" id="LN1498">1498</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1499"><td class="num" id="LN1499">1499</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1500"><td class="num" id="LN1500">1500</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1501"><td class="num" id="LN1501">1501</td><td class="line"> start = 0;</td></tr>
+<tr class="codeline" data-linenumber="1502"><td class="num" id="LN1502">1502</td><td class="line"> end = 30;</td></tr>
+<tr class="codeline" data-linenumber="1503"><td class="num" id="LN1503">1503</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1504"><td class="num" id="LN1504">1504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1505"><td class="num" id="LN1505">1505</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_box)</td></tr>
+<tr class="codeline" data-linenumber="1506"><td class="num" id="LN1506">1506</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1507"><td class="num" id="LN1507">1507</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1508"><td class="num" id="LN1508">1508</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1509"><td class="num" id="LN1509">1509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1510"><td class="num" id="LN1510">1510</td><td class="line"> gtk_widget_set_margin_start (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1511"><td class="num" id="LN1511">1511</td><td class="line"> start);</td></tr>
+<tr class="codeline" data-linenumber="1512"><td class="num" id="LN1512">1512</td><td class="line"> gtk_widget_set_margin_end (<span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="1513"><td class="num" id="LN1513">1513</td><td class="line"> end);</td></tr>
+<tr class="codeline" data-linenumber="1514"><td class="num" id="LN1514">1514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1515"><td class="num" id="LN1515">1515</td><td class="line"> <span class='keyword'>while</span> (gtk_events_pending ())</td></tr>
+<tr class="codeline" data-linenumber="1516"><td class="num" id="LN1516">1516</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1517"><td class="num" id="LN1517">1517</td><td class="line"> gtk_main_iteration ();</td></tr>
+<tr class="codeline" data-linenumber="1518"><td class="num" id="LN1518">1518</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1519"><td class="num" id="LN1519">1519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1520"><td class="num" id="LN1520">1520</td><td class="line"> g_usleep (10000);</td></tr>
+<tr class="codeline" data-linenumber="1521"><td class="num" id="LN1521">1521</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1522"><td class="num" id="LN1522">1522</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1523"><td class="num" id="LN1523">1523</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1524"><td class="num" id="LN1524">1524</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1525"><td class="num" id="LN1525">1525</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1526"><td class="num" id="LN1526">1526</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1527"><td class="num" id="LN1527">1527</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1528"><td class="num" id="LN1528">1528</td><td class="line">window_set_dialog_up (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1529"><td class="num" id="LN1529">1529</td><td class="line"> gboolean dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1530"><td class="num" id="LN1530">1530</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1531"><td class="num" id="LN1531">1531</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_up == dialog_up)</td></tr>
+<tr class="codeline" data-linenumber="1532"><td class="num" id="LN1532">1532</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1533"><td class="num" id="LN1533">1533</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1534"><td class="num" id="LN1534">1534</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1535"><td class="num" id="LN1535">1535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1536"><td class="num" id="LN1536">1536</td><td class="line"> window-&gt;priv-&gt;dialog_up = (dialog_up != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1537"><td class="num" id="LN1537">1537</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"dialog-up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1538"><td class="num" id="LN1538">1538</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1539"><td class="num" id="LN1539">1539</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1540"><td class="num" id="LN1540">1540</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1541"><td class="num" id="LN1541">1541</td><td class="line">popdown_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1542"><td class="num" id="LN1542">1542</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1543"><td class="num" id="LN1543">1543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="1544"><td class="num" id="LN1544">1544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1545"><td class="num" id="LN1545">1545</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1546"><td class="num" id="LN1546">1546</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1547"><td class="num" id="LN1547">1547</td><td class="line"> gs_window_clear (window);</td></tr>
+<tr class="codeline" data-linenumber="1548"><td class="num" id="LN1548">1548</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1549"><td class="num" id="LN1549">1549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1550"><td class="num" id="LN1550">1550</td><td class="line"> window_set_dialog_up (window, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1551"><td class="num" id="LN1551">1551</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1552"><td class="num" id="LN1552">1552</td><td class="line"> <span class='comment'>/* reset the pointer positions */</span></td></tr>
+<tr class="codeline" data-linenumber="1553"><td class="num" id="LN1553">1553</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="1554"><td class="num" id="LN1554">1554</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="1555"><td class="num" id="LN1555">1555</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1556"><td class="num" id="LN1556">1556</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_box != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1557"><td class="num" id="LN1557">1557</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1558"><td class="num" id="LN1558">1558</td><td class="line"> gtk_container_remove (<span class='macro'>GTK_CONTAINER (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_container_get_type ())<br>)))))</span></span>, <span class='macro'>GTK_WIDGET (window-&gt;priv-&gt;lock_box)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;lock_box)), ((gtk_widget_get_type ()<br>))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1559"><td class="num" id="LN1559">1559</td><td class="line"> window-&gt;priv-&gt;lock_box = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1560"><td class="num" id="LN1560">1560</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1561"><td class="num" id="LN1561">1561</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1562"><td class="num" id="LN1562">1562</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1563"><td class="num" id="LN1563">1563</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="1564"><td class="num" id="LN1564">1564</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1565"><td class="num" id="LN1565">1565</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1566"><td class="num" id="LN1566">1566</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1567"><td class="num" id="LN1567">1567</td><td class="line">lock_command_watch (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="1568"><td class="num" id="LN1568">1568</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="1569"><td class="num" id="LN1569">1569</td><td class="line"> GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1570"><td class="num" id="LN1570">1570</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1571"><td class="num" id="LN1571">1571</td><td class="line"> gboolean finished = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1572"><td class="num" id="LN1572">1572</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1573"><td class="num" id="LN1573">1573</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1574"><td class="num" id="LN1574">1574</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1575"><td class="num" id="LN1575">1575</td><td class="line"> <span class='keyword'>if</span> (condition &amp; G_IO_IN)</td></tr>
+<tr class="codeline" data-linenumber="1576"><td class="num" id="LN1576">1576</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1577"><td class="num" id="LN1577">1577</td><td class="line"> GIOStatus status;</td></tr>
+<tr class="codeline" data-linenumber="1578"><td class="num" id="LN1578">1578</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1579"><td class="num" id="LN1579">1579</td><td class="line"> <span class='keyword'>char</span> *line;</td></tr>
+<tr class="codeline" data-linenumber="1580"><td class="num" id="LN1580">1580</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1581"><td class="num" id="LN1581">1581</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1582"><td class="num" id="LN1582">1582</td><td class="line"> status = g_io_channel_read_line (source, &amp;line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error);</td></tr>
+<tr class="codeline" data-linenumber="1583"><td class="num" id="LN1583">1583</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1584"><td class="num" id="LN1584">1584</td><td class="line"> <span class='keyword'>switch</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="1585"><td class="num" id="LN1585">1585</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1586"><td class="num" id="LN1586">1586</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_NORMAL:</td></tr>
+<tr class="codeline" data-linenumber="1587"><td class="num" id="LN1587">1587</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"command output: %s"</span>, line)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1587, "command output: %s"<br>, line)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1588"><td class="num" id="LN1588">1588</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1589"><td class="num" id="LN1589">1589</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"WINDOW ID="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1590"><td class="num" id="LN1590">1590</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1591"><td class="num" id="LN1591">1591</td><td class="line"> guint32 id;</td></tr>
+<tr class="codeline" data-linenumber="1592"><td class="num" id="LN1592">1592</td><td class="line"> <span class='keyword'>char</span> c;</td></tr>
+<tr class="codeline" data-linenumber="1593"><td class="num" id="LN1593">1593</td><td class="line"> <span class='keyword'>if</span> (1 == sscanf (line, <span class='string_literal'>" WINDOW ID= %"</span> <span class='macro'>G_GUINT32_FORMAT<span class='macro_popup'>"u"</span></span> <span class='string_literal'>" %c"</span>, &amp;id, &amp;c))</td></tr>
+<tr class="codeline" data-linenumber="1594"><td class="num" id="LN1594">1594</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1595"><td class="num" id="LN1595">1595</td><td class="line"> create_lock_socket (window, id);</td></tr>
+<tr class="codeline" data-linenumber="1596"><td class="num" id="LN1596">1596</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1597"><td class="num" id="LN1597">1597</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1598"><td class="num" id="LN1598">1598</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1599"><td class="num" id="LN1599">1599</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1600"><td class="num" id="LN1600">1600</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"NOTICE=AUTH FAILED"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1601"><td class="num" id="LN1601">1601</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1602"><td class="num" id="LN1602">1602</td><td class="line"> shake_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1603"><td class="num" id="LN1603">1603</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1604"><td class="num" id="LN1604">1604</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1605"><td class="num" id="LN1605">1605</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE="</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1606"><td class="num" id="LN1606">1606</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1607"><td class="num" id="LN1607">1607</td><td class="line"> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"RESPONSE=OK"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1608"><td class="num" id="LN1608">1608</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1609"><td class="num" id="LN1609">1609</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got OK response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1609, "Got OK response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1610"><td class="num" id="LN1610">1610</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_OK;</td></tr>
+<tr class="codeline" data-linenumber="1611"><td class="num" id="LN1611">1611</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1612"><td class="num" id="LN1612">1612</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1613"><td class="num" id="LN1613">1613</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1614"><td class="num" id="LN1614">1614</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got CANCEL response"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1614, "Got CANCEL response"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1615"><td class="num" id="LN1615">1615</td><td class="line"> window-&gt;priv-&gt;dialog_response = DIALOG_RESPONSE_CANCEL;</td></tr>
+<tr class="codeline" data-linenumber="1616"><td class="num" id="LN1616">1616</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1617"><td class="num" id="LN1617">1617</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1618"><td class="num" id="LN1618">1618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1619"><td class="num" id="LN1619">1619</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (strstr (line, <span class='string_literal'>"REQUEST QUIT"</span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1620"><td class="num" id="LN1620">1620</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1621"><td class="num" id="LN1621">1621</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Got request for quit"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1621, "Got request for quit"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1622"><td class="num" id="LN1622">1622</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1623"><td class="num" id="LN1623">1623</td><td class="line"> maybe_kill_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1624"><td class="num" id="LN1624">1624</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1625"><td class="num" id="LN1625">1625</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1626"><td class="num" id="LN1626">1626</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_EOF:</td></tr>
+<tr class="codeline" data-linenumber="1627"><td class="num" id="LN1627">1627</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1628"><td class="num" id="LN1628">1628</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1629"><td class="num" id="LN1629">1629</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_ERROR:</td></tr>
+<tr class="codeline" data-linenumber="1630"><td class="num" id="LN1630">1630</td><td class="line"> finished = <span class="mrange"><span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:25ex">Value stored to 'finished' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="1631"><td class="num" id="LN1631">1631</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Error reading from child: %s\n"</span>, error-&gt;message)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1631, "Error reading from child: %s\n"<br>, error-&gt;message)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1632"><td class="num" id="LN1632">1632</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="1633"><td class="num" id="LN1633">1633</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1634"><td class="num" id="LN1634">1634</td><td class="line"> <span class='keyword'>case</span> G_IO_STATUS_AGAIN:</td></tr>
+<tr class="codeline" data-linenumber="1635"><td class="num" id="LN1635">1635</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1636"><td class="num" id="LN1636">1636</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1637"><td class="num" id="LN1637">1637</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1638"><td class="num" id="LN1638">1638</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1639"><td class="num" id="LN1639">1639</td><td class="line"> g_free (line);</td></tr>
+<tr class="codeline" data-linenumber="1640"><td class="num" id="LN1640">1640</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1641"><td class="num" id="LN1641">1641</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (condition &amp; G_IO_HUP)</td></tr>
+<tr class="codeline" data-linenumber="1642"><td class="num" id="LN1642">1642</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1643"><td class="num" id="LN1643">1643</td><td class="line"> finished = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1644"><td class="num" id="LN1644">1644</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1645"><td class="num" id="LN1645">1645</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1646"><td class="num" id="LN1646">1646</td><td class="line"> <span class='keyword'>if</span> (finished)</td></tr>
+<tr class="codeline" data-linenumber="1647"><td class="num" id="LN1647">1647</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1648"><td class="num" id="LN1648">1648</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1649"><td class="num" id="LN1649">1649</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1650"><td class="num" id="LN1650">1650</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;dialog_response == DIALOG_RESPONSE_OK)</td></tr>
+<tr class="codeline" data-linenumber="1651"><td class="num" id="LN1651">1651</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1652"><td class="num" id="LN1652">1652</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1653"><td class="num" id="LN1653">1653</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1654"><td class="num" id="LN1654">1654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1655"><td class="num" id="LN1655">1655</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1656"><td class="num" id="LN1656">1656</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1657"><td class="num" id="LN1657">1657</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1658"><td class="num" id="LN1658">1658</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1659"><td class="num" id="LN1659">1659</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1660"><td class="num" id="LN1660">1660</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1661"><td class="num" id="LN1661">1661</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1662"><td class="num" id="LN1662">1662</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1663"><td class="num" id="LN1663">1663</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1664"><td class="num" id="LN1664">1664</td><td class="line">is_logout_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1665"><td class="num" id="LN1665">1665</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1666"><td class="num" id="LN1666">1666</td><td class="line"> <span class='keyword'>double</span> elapsed;</td></tr>
+<tr class="codeline" data-linenumber="1667"><td class="num" id="LN1667">1667</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1668"><td class="num" id="LN1668">1668</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1669"><td class="num" id="LN1669">1669</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1670"><td class="num" id="LN1670">1670</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1671"><td class="num" id="LN1671">1671</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1672"><td class="num" id="LN1672">1672</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1673"><td class="num" id="LN1673">1673</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;logout_command)</td></tr>
+<tr class="codeline" data-linenumber="1674"><td class="num" id="LN1674">1674</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1675"><td class="num" id="LN1675">1675</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1676"><td class="num" id="LN1676">1676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1677"><td class="num" id="LN1677">1677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1678"><td class="num" id="LN1678">1678</td><td class="line"> elapsed = g_timer_elapsed (window-&gt;priv-&gt;timer, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1679"><td class="num" id="LN1679">1679</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1680"><td class="num" id="LN1680">1680</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;logout_timeout &lt; (elapsed * 1000))</td></tr>
+<tr class="codeline" data-linenumber="1681"><td class="num" id="LN1681">1681</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1682"><td class="num" id="LN1682">1682</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1683"><td class="num" id="LN1683">1683</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1684"><td class="num" id="LN1684">1684</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1685"><td class="num" id="LN1685">1685</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1686"><td class="num" id="LN1686">1686</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1687"><td class="num" id="LN1687">1687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1688"><td class="num" id="LN1688">1688</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1689"><td class="num" id="LN1689">1689</td><td class="line">is_user_switch_enabled (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1690"><td class="num" id="LN1690">1690</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1691"><td class="num" id="LN1691">1691</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;user_switch_enabled;</td></tr>
+<tr class="codeline" data-linenumber="1692"><td class="num" id="LN1692">1692</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1693"><td class="num" id="LN1693">1693</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1694"><td class="num" id="LN1694">1694</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1695"><td class="num" id="LN1695">1695</td><td class="line">popup_dialog (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1696"><td class="num" id="LN1696">1696</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1697"><td class="num" id="LN1697">1697</td><td class="line"> gboolean result;</td></tr>
+<tr class="codeline" data-linenumber="1698"><td class="num" id="LN1698">1698</td><td class="line"> GString *command;</td></tr>
+<tr class="codeline" data-linenumber="1699"><td class="num" id="LN1699">1699</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1700"><td class="num" id="LN1700">1700</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Popping up dialog"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1700, "Popping up dialog"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1701"><td class="num" id="LN1701">1701</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1702"><td class="num" id="LN1702">1702</td><td class="line"> command = g_string_new (<span class='macro'>MATE_SCREENSAVER_DIALOG_PATH<span class='macro_popup'>"/usr/local/libexec" "/mate-screensaver-dialog"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1703"><td class="num" id="LN1703">1703</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1704"><td class="num" id="LN1704">1704</td><td class="line"> <span class='keyword'>if</span> (is_logout_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1705"><td class="num" id="LN1705">1705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1706"><td class="num" id="LN1706">1706</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-logout"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1707"><td class="num" id="LN1707">1707</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --logout-command='%s'"</span>, window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1708"><td class="num" id="LN1708">1708</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1709"><td class="num" id="LN1709">1709</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1710"><td class="num" id="LN1710">1710</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;status_message)</td></tr>
+<tr class="codeline" data-linenumber="1711"><td class="num" id="LN1711">1711</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1712"><td class="num" id="LN1712">1712</td><td class="line"> <span class='keyword'>char</span> *quoted;</td></tr>
+<tr class="codeline" data-linenumber="1713"><td class="num" id="LN1713">1713</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1714"><td class="num" id="LN1714">1714</td><td class="line"> quoted = g_shell_quote (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1715"><td class="num" id="LN1715">1715</td><td class="line"> g_string_append_printf (command, <span class='string_literal'>" --status-message=%s"</span>, quoted);</td></tr>
+<tr class="codeline" data-linenumber="1716"><td class="num" id="LN1716">1716</td><td class="line"> g_free (quoted);</td></tr>
+<tr class="codeline" data-linenumber="1717"><td class="num" id="LN1717">1717</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1718"><td class="num" id="LN1718">1718</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1719"><td class="num" id="LN1719">1719</td><td class="line"> <span class='keyword'>if</span> (is_user_switch_enabled (window))</td></tr>
+<tr class="codeline" data-linenumber="1720"><td class="num" id="LN1720">1720</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1721"><td class="num" id="LN1721">1721</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --enable-switch"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1722"><td class="num" id="LN1722">1722</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1723"><td class="num" id="LN1723">1723</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1724"><td class="num" id="LN1724">1724</td><td class="line"> <span class='keyword'>if</span> (gs_debug_enabled ())</td></tr>
+<tr class="codeline" data-linenumber="1725"><td class="num" id="LN1725">1725</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1726"><td class="num" id="LN1726">1726</td><td class="line"> command = g_string_append (command, <span class='string_literal'>" --verbose"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1727"><td class="num" id="LN1727">1727</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1728"><td class="num" id="LN1728">1728</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1729"><td class="num" id="LN1729">1729</td><td class="line"> gtk_widget_hide (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="1730"><td class="num" id="LN1730">1730</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1731"><td class="num" id="LN1731">1731</td><td class="line"> gtk_widget_queue_draw (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1732"><td class="num" id="LN1732">1732</td><td class="line"> set_invisible_cursor (gtk_widget_get_window (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1733"><td class="num" id="LN1733">1733</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1734"><td class="num" id="LN1734">1734</td><td class="line"> window-&gt;priv-&gt;dialog_quit_requested = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1735"><td class="num" id="LN1735">1735</td><td class="line"> window-&gt;priv-&gt;dialog_shake_in_progress = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1736"><td class="num" id="LN1736">1736</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1737"><td class="num" id="LN1737">1737</td><td class="line"> result = spawn_on_window (window,</td></tr>
+<tr class="codeline" data-linenumber="1738"><td class="num" id="LN1738">1738</td><td class="line"> command-&gt;str,</td></tr>
+<tr class="codeline" data-linenumber="1739"><td class="num" id="LN1739">1739</td><td class="line"> &amp;window-&gt;priv-&gt;lock_pid,</td></tr>
+<tr class="codeline" data-linenumber="1740"><td class="num" id="LN1740">1740</td><td class="line"> (GIOFunc)lock_command_watch,</td></tr>
+<tr class="codeline" data-linenumber="1741"><td class="num" id="LN1741">1741</td><td class="line"> window,</td></tr>
+<tr class="codeline" data-linenumber="1742"><td class="num" id="LN1742">1742</td><td class="line"> &amp;window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="1743"><td class="num" id="LN1743">1743</td><td class="line"> <span class='keyword'>if</span> (! result)</td></tr>
+<tr class="codeline" data-linenumber="1744"><td class="num" id="LN1744">1744</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1745"><td class="num" id="LN1745">1745</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Could not start command: %s"</span>, command-&gt;str)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1745, "Could not start command: %s"<br>, command-&gt;str)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1746"><td class="num" id="LN1746">1746</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1747"><td class="num" id="LN1747">1747</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1748"><td class="num" id="LN1748">1748</td><td class="line"> g_string_free (command, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1749"><td class="num" id="LN1749">1749</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1750"><td class="num" id="LN1750">1750</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1751"><td class="num" id="LN1751">1751</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="1752"><td class="num" id="LN1752">1752</td><td class="line">popup_dialog_idle (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="1753"><td class="num" id="LN1753">1753</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1754"><td class="num" id="LN1754">1754</td><td class="line"> GSWindow *window = data;</td></tr>
+<tr class="codeline" data-linenumber="1755"><td class="num" id="LN1755">1755</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1756"><td class="num" id="LN1756">1756</td><td class="line"> popup_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1757"><td class="num" id="LN1757">1757</td><td class="line"> window-&gt;priv-&gt;popup_dialog_idle_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="1758"><td class="num" id="LN1758">1758</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1759"><td class="num" id="LN1759">1759</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1760"><td class="num" id="LN1760">1760</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1761"><td class="num" id="LN1761">1761</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1762"><td class="num" id="LN1762">1762</td><td class="line">gs_window_request_unlock (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1763"><td class="num" id="LN1763">1763</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1764"><td class="num" id="LN1764">1764</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1765"><td class="num" id="LN1765">1765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1766"><td class="num" id="LN1766">1766</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Requesting unlock"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1766, "Requesting unlock"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1767"><td class="num" id="LN1767">1767</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1768"><td class="num" id="LN1768">1768</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_visible (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="1769"><td class="num" id="LN1769">1769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1770"><td class="num" id="LN1770">1770</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Request unlock but window is not visible!"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 1770, "Request unlock but window is not visible!"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1771"><td class="num" id="LN1771">1771</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1772"><td class="num" id="LN1772">1772</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1773"><td class="num" id="LN1773">1773</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1774"><td class="num" id="LN1774">1774</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1775"><td class="num" id="LN1775">1775</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1776"><td class="num" id="LN1776">1776</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1777"><td class="num" id="LN1777">1777</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1778"><td class="num" id="LN1778">1778</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1779"><td class="num" id="LN1779">1779</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1780"><td class="num" id="LN1780">1780</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1781"><td class="num" id="LN1781">1781</td><td class="line"> add_emit_deactivated_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1782"><td class="num" id="LN1782">1782</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1783"><td class="num" id="LN1783">1783</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1784"><td class="num" id="LN1784">1784</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1785"><td class="num" id="LN1785">1785</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1786"><td class="num" id="LN1786">1786</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;popup_dialog_idle_id == 0)</td></tr>
+<tr class="codeline" data-linenumber="1787"><td class="num" id="LN1787">1787</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1788"><td class="num" id="LN1788">1788</td><td class="line"> add_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="1789"><td class="num" id="LN1789">1789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1790"><td class="num" id="LN1790">1790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1791"><td class="num" id="LN1791">1791</td><td class="line"> window_set_dialog_up (window, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1792"><td class="num" id="LN1792">1792</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1793"><td class="num" id="LN1793">1793</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1794"><td class="num" id="LN1794">1794</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1795"><td class="num" id="LN1795">1795</td><td class="line">gs_window_cancel_unlock_request (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1796"><td class="num" id="LN1796">1796</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1797"><td class="num" id="LN1797">1797</td><td class="line"> <span class='comment'>/* FIXME: This is a bit of a hammer approach...</span></td></tr>
+<tr class="codeline" data-linenumber="1798"><td class="num" id="LN1798">1798</td><td class="line"> <span class='comment'>* Maybe we should send a delete-event to</span></td></tr>
+<tr class="codeline" data-linenumber="1799"><td class="num" id="LN1799">1799</td><td class="line"> <span class='comment'>* the plug?</span></td></tr>
+<tr class="codeline" data-linenumber="1800"><td class="num" id="LN1800">1800</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="1801"><td class="num" id="LN1801">1801</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1802"><td class="num" id="LN1802">1802</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1803"><td class="num" id="LN1803">1803</td><td class="line"> popdown_dialog (window);</td></tr>
+<tr class="codeline" data-linenumber="1804"><td class="num" id="LN1804">1804</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1805"><td class="num" id="LN1805">1805</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1806"><td class="num" id="LN1806">1806</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1807"><td class="num" id="LN1807">1807</td><td class="line">gs_window_set_lock_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1808"><td class="num" id="LN1808">1808</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1809"><td class="num" id="LN1809">1809</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1810"><td class="num" id="LN1810">1810</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1811"><td class="num" id="LN1811">1811</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1812"><td class="num" id="LN1812">1812</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_enabled == lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1813"><td class="num" id="LN1813">1813</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1814"><td class="num" id="LN1814">1814</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1815"><td class="num" id="LN1815">1815</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1816"><td class="num" id="LN1816">1816</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1817"><td class="num" id="LN1817">1817</td><td class="line"> window-&gt;priv-&gt;lock_enabled = (lock_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1818"><td class="num" id="LN1818">1818</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"lock-enabled"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1819"><td class="num" id="LN1819">1819</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1820"><td class="num" id="LN1820">1820</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1821"><td class="num" id="LN1821">1821</td><td class="line">GdkDisplay *</td></tr>
+<tr class="codeline" data-linenumber="1822"><td class="num" id="LN1822">1822</td><td class="line">gs_window_get_display (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1823"><td class="num" id="LN1823">1823</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1824"><td class="num" id="LN1824">1824</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1825"><td class="num" id="LN1825">1825</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1826"><td class="num" id="LN1826">1826</td><td class="line"> <span class='keyword'>return</span> gtk_widget_get_display (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1827"><td class="num" id="LN1827">1827</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1828"><td class="num" id="LN1828">1828</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1829"><td class="num" id="LN1829">1829</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1830"><td class="num" id="LN1830">1830</td><td class="line">gs_window_set_keyboard_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1831"><td class="num" id="LN1831">1831</td><td class="line"> gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="1832"><td class="num" id="LN1832">1832</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1833"><td class="num" id="LN1833">1833</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1834"><td class="num" id="LN1834">1834</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1835"><td class="num" id="LN1835">1835</td><td class="line"> window-&gt;priv-&gt;keyboard_enabled = (enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1836"><td class="num" id="LN1836">1836</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1837"><td class="num" id="LN1837">1837</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1838"><td class="num" id="LN1838">1838</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1839"><td class="num" id="LN1839">1839</td><td class="line">gs_window_set_keyboard_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1840"><td class="num" id="LN1840">1840</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1841"><td class="num" id="LN1841">1841</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1842"><td class="num" id="LN1842">1842</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1843"><td class="num" id="LN1843">1843</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1844"><td class="num" id="LN1844">1844</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="1845"><td class="num" id="LN1845">1845</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1846"><td class="num" id="LN1846">1846</td><td class="line"> <span class='keyword'>if</span> (command != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="1847"><td class="num" id="LN1847">1847</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1848"><td class="num" id="LN1848">1848</td><td class="line"> window-&gt;priv-&gt;keyboard_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1849"><td class="num" id="LN1849">1849</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1850"><td class="num" id="LN1850">1850</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1851"><td class="num" id="LN1851">1851</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1852"><td class="num" id="LN1852">1852</td><td class="line"> window-&gt;priv-&gt;keyboard_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1853"><td class="num" id="LN1853">1853</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1854"><td class="num" id="LN1854">1854</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1855"><td class="num" id="LN1855">1855</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1856"><td class="num" id="LN1856">1856</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1857"><td class="num" id="LN1857">1857</td><td class="line">gs_window_set_logout_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1858"><td class="num" id="LN1858">1858</td><td class="line"> gboolean logout_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1859"><td class="num" id="LN1859">1859</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1860"><td class="num" id="LN1860">1860</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1861"><td class="num" id="LN1861">1861</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1862"><td class="num" id="LN1862">1862</td><td class="line"> window-&gt;priv-&gt;logout_enabled = (logout_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1863"><td class="num" id="LN1863">1863</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1864"><td class="num" id="LN1864">1864</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1865"><td class="num" id="LN1865">1865</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1866"><td class="num" id="LN1866">1866</td><td class="line">gs_window_set_user_switch_enabled (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1867"><td class="num" id="LN1867">1867</td><td class="line"> gboolean user_switch_enabled)</td></tr>
+<tr class="codeline" data-linenumber="1868"><td class="num" id="LN1868">1868</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1869"><td class="num" id="LN1869">1869</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1870"><td class="num" id="LN1870">1870</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1871"><td class="num" id="LN1871">1871</td><td class="line"> window-&gt;priv-&gt;user_switch_enabled = (user_switch_enabled != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1872"><td class="num" id="LN1872">1872</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1873"><td class="num" id="LN1873">1873</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1874"><td class="num" id="LN1874">1874</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1875"><td class="num" id="LN1875">1875</td><td class="line">gs_window_set_logout_timeout (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1876"><td class="num" id="LN1876">1876</td><td class="line"> glong logout_timeout)</td></tr>
+<tr class="codeline" data-linenumber="1877"><td class="num" id="LN1877">1877</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1878"><td class="num" id="LN1878">1878</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1879"><td class="num" id="LN1879">1879</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1880"><td class="num" id="LN1880">1880</td><td class="line"> <span class='keyword'>if</span> (logout_timeout &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="1881"><td class="num" id="LN1881">1881</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1882"><td class="num" id="LN1882">1882</td><td class="line"> window-&gt;priv-&gt;logout_timeout = 0;</td></tr>
+<tr class="codeline" data-linenumber="1883"><td class="num" id="LN1883">1883</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1884"><td class="num" id="LN1884">1884</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1885"><td class="num" id="LN1885">1885</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1886"><td class="num" id="LN1886">1886</td><td class="line"> window-&gt;priv-&gt;logout_timeout = logout_timeout;</td></tr>
+<tr class="codeline" data-linenumber="1887"><td class="num" id="LN1887">1887</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1888"><td class="num" id="LN1888">1888</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1889"><td class="num" id="LN1889">1889</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1890"><td class="num" id="LN1890">1890</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1891"><td class="num" id="LN1891">1891</td><td class="line">gs_window_set_logout_command (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1892"><td class="num" id="LN1892">1892</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command)</td></tr>
+<tr class="codeline" data-linenumber="1893"><td class="num" id="LN1893">1893</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1894"><td class="num" id="LN1894">1894</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1895"><td class="num" id="LN1895">1895</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1896"><td class="num" id="LN1896">1896</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="1897"><td class="num" id="LN1897">1897</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1898"><td class="num" id="LN1898">1898</td><td class="line"> <span class='keyword'>if</span> (command)</td></tr>
+<tr class="codeline" data-linenumber="1899"><td class="num" id="LN1899">1899</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1900"><td class="num" id="LN1900">1900</td><td class="line"> window-&gt;priv-&gt;logout_command = g_strdup (command);</td></tr>
+<tr class="codeline" data-linenumber="1901"><td class="num" id="LN1901">1901</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1902"><td class="num" id="LN1902">1902</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="1903"><td class="num" id="LN1903">1903</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1904"><td class="num" id="LN1904">1904</td><td class="line"> window-&gt;priv-&gt;logout_command = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1905"><td class="num" id="LN1905">1905</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1906"><td class="num" id="LN1906">1906</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1907"><td class="num" id="LN1907">1907</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1908"><td class="num" id="LN1908">1908</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1909"><td class="num" id="LN1909">1909</td><td class="line">gs_window_set_status_message (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1910"><td class="num" id="LN1910">1910</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *status_message)</td></tr>
+<tr class="codeline" data-linenumber="1911"><td class="num" id="LN1911">1911</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1912"><td class="num" id="LN1912">1912</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1913"><td class="num" id="LN1913">1913</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1914"><td class="num" id="LN1914">1914</td><td class="line"> g_free (window-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="1915"><td class="num" id="LN1915">1915</td><td class="line"> window-&gt;priv-&gt;status_message = g_strdup (status_message);</td></tr>
+<tr class="codeline" data-linenumber="1916"><td class="num" id="LN1916">1916</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1917"><td class="num" id="LN1917">1917</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1918"><td class="num" id="LN1918">1918</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1919"><td class="num" id="LN1919">1919</td><td class="line">gs_window_set_monitor (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="1920"><td class="num" id="LN1920">1920</td><td class="line"> GdkMonitor *monitor)</td></tr>
+<tr class="codeline" data-linenumber="1921"><td class="num" id="LN1921">1921</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1922"><td class="num" id="LN1922">1922</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (window))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1923"><td class="num" id="LN1923">1923</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1924"><td class="num" id="LN1924">1924</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;monitor == monitor)</td></tr>
+<tr class="codeline" data-linenumber="1925"><td class="num" id="LN1925">1925</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1926"><td class="num" id="LN1926">1926</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="1927"><td class="num" id="LN1927">1927</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1928"><td class="num" id="LN1928">1928</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1929"><td class="num" id="LN1929">1929</td><td class="line"> window-&gt;priv-&gt;monitor = monitor;</td></tr>
+<tr class="codeline" data-linenumber="1930"><td class="num" id="LN1930">1930</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1931"><td class="num" id="LN1931">1931</td><td class="line"> gtk_widget_queue_resize (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="1932"><td class="num" id="LN1932">1932</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1933"><td class="num" id="LN1933">1933</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"monitor"</span>);</td></tr>
+<tr class="codeline" data-linenumber="1934"><td class="num" id="LN1934">1934</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1935"><td class="num" id="LN1935">1935</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1936"><td class="num" id="LN1936">1936</td><td class="line">GdkMonitor *</td></tr>
+<tr class="codeline" data-linenumber="1937"><td class="num" id="LN1937">1937</td><td class="line">gs_window_get_monitor (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="1938"><td class="num" id="LN1938">1938</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1939"><td class="num" id="LN1939">1939</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1940"><td class="num" id="LN1940">1940</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1941"><td class="num" id="LN1941">1941</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;monitor;</td></tr>
+<tr class="codeline" data-linenumber="1942"><td class="num" id="LN1942">1942</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1943"><td class="num" id="LN1943">1943</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1944"><td class="num" id="LN1944">1944</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1945"><td class="num" id="LN1945">1945</td><td class="line">gs_window_set_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1946"><td class="num" id="LN1946">1946</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1947"><td class="num" id="LN1947">1947</td><td class="line"> <span class='keyword'>const</span> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1948"><td class="num" id="LN1948">1948</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1949"><td class="num" id="LN1949">1949</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1950"><td class="num" id="LN1950">1950</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1951"><td class="num" id="LN1951">1951</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1952"><td class="num" id="LN1952">1952</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1953"><td class="num" id="LN1953">1953</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1954"><td class="num" id="LN1954">1954</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1955"><td class="num" id="LN1955">1955</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1956"><td class="num" id="LN1956">1956</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1957"><td class="num" id="LN1957">1957</td><td class="line"> gs_window_set_lock_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1958"><td class="num" id="LN1958">1958</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1959"><td class="num" id="LN1959">1959</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1960"><td class="num" id="LN1960">1960</td><td class="line"> gs_window_set_keyboard_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1961"><td class="num" id="LN1961">1961</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1962"><td class="num" id="LN1962">1962</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1963"><td class="num" id="LN1963">1963</td><td class="line"> gs_window_set_keyboard_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1964"><td class="num" id="LN1964">1964</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1965"><td class="num" id="LN1965">1965</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1966"><td class="num" id="LN1966">1966</td><td class="line"> gs_window_set_logout_enabled (self, g_value_get_boolean (value));</td></tr>
+<tr class="codeline" data-linenumber="1967"><td class="num" id="LN1967">1967</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1968"><td class="num" id="LN1968">1968</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="1969"><td class="num" id="LN1969">1969</td><td class="line"> gs_window_set_logout_command (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1970"><td class="num" id="LN1970">1970</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1971"><td class="num" id="LN1971">1971</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="1972"><td class="num" id="LN1972">1972</td><td class="line"> gs_window_set_status_message (self, g_value_get_string (value));</td></tr>
+<tr class="codeline" data-linenumber="1973"><td class="num" id="LN1973">1973</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1974"><td class="num" id="LN1974">1974</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="1975"><td class="num" id="LN1975">1975</td><td class="line"> gs_window_set_logout_timeout (self, g_value_get_long (value));</td></tr>
+<tr class="codeline" data-linenumber="1976"><td class="num" id="LN1976">1976</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1977"><td class="num" id="LN1977">1977</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="1978"><td class="num" id="LN1978">1978</td><td class="line"> gs_window_set_monitor (self, g_value_get_pointer (value));</td></tr>
+<tr class="codeline" data-linenumber="1979"><td class="num" id="LN1979">1979</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1980"><td class="num" id="LN1980">1980</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="1981"><td class="num" id="LN1981">1981</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 1981, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1982"><td class="num" id="LN1982">1982</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="1983"><td class="num" id="LN1983">1983</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="1984"><td class="num" id="LN1984">1984</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="1985"><td class="num" id="LN1985">1985</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1986"><td class="num" id="LN1986">1986</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="1987"><td class="num" id="LN1987">1987</td><td class="line">gs_window_get_property (GObject *object,</td></tr>
+<tr class="codeline" data-linenumber="1988"><td class="num" id="LN1988">1988</td><td class="line"> guint prop_id,</td></tr>
+<tr class="codeline" data-linenumber="1989"><td class="num" id="LN1989">1989</td><td class="line"> GValue *value,</td></tr>
+<tr class="codeline" data-linenumber="1990"><td class="num" id="LN1990">1990</td><td class="line"> GParamSpec *pspec)</td></tr>
+<tr class="codeline" data-linenumber="1991"><td class="num" id="LN1991">1991</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="1992"><td class="num" id="LN1992">1992</td><td class="line"> GSWindow *self;</td></tr>
+<tr class="codeline" data-linenumber="1993"><td class="num" id="LN1993">1993</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1994"><td class="num" id="LN1994">1994</td><td class="line"> self = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="1995"><td class="num" id="LN1995">1995</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="1996"><td class="num" id="LN1996">1996</td><td class="line"> <span class='keyword'>switch</span> (prop_id)</td></tr>
+<tr class="codeline" data-linenumber="1997"><td class="num" id="LN1997">1997</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="1998"><td class="num" id="LN1998">1998</td><td class="line"> <span class='keyword'>case</span> PROP_LOCK_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="1999"><td class="num" id="LN1999">1999</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;lock_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2000"><td class="num" id="LN2000">2000</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2001"><td class="num" id="LN2001">2001</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2002"><td class="num" id="LN2002">2002</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;keyboard_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2003"><td class="num" id="LN2003">2003</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2004"><td class="num" id="LN2004">2004</td><td class="line"> <span class='keyword'>case</span> PROP_KEYBOARD_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2005"><td class="num" id="LN2005">2005</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2006"><td class="num" id="LN2006">2006</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2007"><td class="num" id="LN2007">2007</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_ENABLED:</td></tr>
+<tr class="codeline" data-linenumber="2008"><td class="num" id="LN2008">2008</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;logout_enabled);</td></tr>
+<tr class="codeline" data-linenumber="2009"><td class="num" id="LN2009">2009</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2010"><td class="num" id="LN2010">2010</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_COMMAND:</td></tr>
+<tr class="codeline" data-linenumber="2011"><td class="num" id="LN2011">2011</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2012"><td class="num" id="LN2012">2012</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2013"><td class="num" id="LN2013">2013</td><td class="line"> <span class='keyword'>case</span> PROP_STATUS_MESSAGE:</td></tr>
+<tr class="codeline" data-linenumber="2014"><td class="num" id="LN2014">2014</td><td class="line"> g_value_set_string (value, self-&gt;priv-&gt;status_message);</td></tr>
+<tr class="codeline" data-linenumber="2015"><td class="num" id="LN2015">2015</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2016"><td class="num" id="LN2016">2016</td><td class="line"> <span class='keyword'>case</span> PROP_LOGOUT_TIMEOUT:</td></tr>
+<tr class="codeline" data-linenumber="2017"><td class="num" id="LN2017">2017</td><td class="line"> g_value_set_long (value, self-&gt;priv-&gt;logout_timeout);</td></tr>
+<tr class="codeline" data-linenumber="2018"><td class="num" id="LN2018">2018</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2019"><td class="num" id="LN2019">2019</td><td class="line"> <span class='keyword'>case</span> PROP_MONITOR:</td></tr>
+<tr class="codeline" data-linenumber="2020"><td class="num" id="LN2020">2020</td><td class="line"> g_value_set_pointer (value, (gpointer) self-&gt;priv-&gt;monitor);</td></tr>
+<tr class="codeline" data-linenumber="2021"><td class="num" id="LN2021">2021</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2022"><td class="num" id="LN2022">2022</td><td class="line"> <span class='keyword'>case</span> PROP_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2023"><td class="num" id="LN2023">2023</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;obscured);</td></tr>
+<tr class="codeline" data-linenumber="2024"><td class="num" id="LN2024">2024</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2025"><td class="num" id="LN2025">2025</td><td class="line"> <span class='keyword'>case</span> PROP_DIALOG_UP:</td></tr>
+<tr class="codeline" data-linenumber="2026"><td class="num" id="LN2026">2026</td><td class="line"> g_value_set_boolean (value, self-&gt;priv-&gt;dialog_up);</td></tr>
+<tr class="codeline" data-linenumber="2027"><td class="num" id="LN2027">2027</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2028"><td class="num" id="LN2028">2028</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2029"><td class="num" id="LN2029">2029</td><td class="line"> <span class='macro'>G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)<span class='macro_popup'>do { GObject *_glib__object = (GObject*) ((object)); GParamSpec<br> *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id<br> = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'"<br>, "gs-window-x11.c", 2029, ("property"), _glib__property_id, _glib__pspec<br>-&gt;name, g_type_name ((((((GTypeClass*) (((GTypeInstance*) (<br>_glib__pspec))-&gt;g_class))-&gt;g_type)))), (g_type_name (((<br>(((GTypeClass*) (((GTypeInstance*) (_glib__object))-&gt;g_class<br>))-&gt;g_type)))))); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2030"><td class="num" id="LN2030">2030</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2031"><td class="num" id="LN2031">2031</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2032"><td class="num" id="LN2032">2032</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2033"><td class="num" id="LN2033">2033</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2034"><td class="num" id="LN2034">2034</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2035"><td class="num" id="LN2035">2035</td><td class="line">queue_key_event (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2036"><td class="num" id="LN2036">2036</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2037"><td class="num" id="LN2037">2037</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2038"><td class="num" id="LN2038">2038</td><td class="line"> <span class='comment'>/* Eat the first return, enter, escape, or space */</span></td></tr>
+<tr class="codeline" data-linenumber="2039"><td class="num" id="LN2039">2039</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;key_events == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2040"><td class="num" id="LN2040">2040</td><td class="line"> &amp;&amp; (event-&gt;keyval == <span class='macro'>GDK_KEY_Return<span class='macro_popup'>0xff0d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2041"><td class="num" id="LN2041">2041</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_KP_Enter<span class='macro_popup'>0xff8d</span></span></td></tr>
+<tr class="codeline" data-linenumber="2042"><td class="num" id="LN2042">2042</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_Escape<span class='macro_popup'>0xff1b</span></span></td></tr>
+<tr class="codeline" data-linenumber="2043"><td class="num" id="LN2043">2043</td><td class="line"> || event-&gt;keyval == <span class='macro'>GDK_KEY_space<span class='macro_popup'>0x020</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2044"><td class="num" id="LN2044">2044</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2045"><td class="num" id="LN2045">2045</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2046"><td class="num" id="LN2046">2046</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2047"><td class="num" id="LN2047">2047</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2048"><td class="num" id="LN2048">2048</td><td class="line"> <span class='comment'>/* Only cache MAX_QUEUED_EVENTS key events. If there are any more than this then</span></td></tr>
+<tr class="codeline" data-linenumber="2049"><td class="num" id="LN2049">2049</td><td class="line"> <span class='comment'>something is wrong */</span></td></tr>
+<tr class="codeline" data-linenumber="2050"><td class="num" id="LN2050">2050</td><td class="line"> <span class='comment'>/* Don't queue keys that may cause focus navigation in the dialog */</span></td></tr>
+<tr class="codeline" data-linenumber="2051"><td class="num" id="LN2051">2051</td><td class="line"> <span class='keyword'>if</span> (g_list_length (window-&gt;priv-&gt;key_events) &lt; <span class='macro'>MAX_QUEUED_EVENTS<span class='macro_popup'>16</span></span></td></tr>
+<tr class="codeline" data-linenumber="2052"><td class="num" id="LN2052">2052</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Tab<span class='macro_popup'>0xff09</span></span></td></tr>
+<tr class="codeline" data-linenumber="2053"><td class="num" id="LN2053">2053</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Up<span class='macro_popup'>0xff52</span></span></td></tr>
+<tr class="codeline" data-linenumber="2054"><td class="num" id="LN2054">2054</td><td class="line"> &amp;&amp; event-&gt;keyval != <span class='macro'>GDK_KEY_Down<span class='macro_popup'>0xff54</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2055"><td class="num" id="LN2055">2055</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2056"><td class="num" id="LN2056">2056</td><td class="line"> window-&gt;priv-&gt;key_events = g_list_prepend (window-&gt;priv-&gt;key_events,</td></tr>
+<tr class="codeline" data-linenumber="2057"><td class="num" id="LN2057">2057</td><td class="line"> gdk_event_copy ((GdkEvent *)event));</td></tr>
+<tr class="codeline" data-linenumber="2058"><td class="num" id="LN2058">2058</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2059"><td class="num" id="LN2059">2059</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2060"><td class="num" id="LN2060">2060</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2061"><td class="num" id="LN2061">2061</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2062"><td class="num" id="LN2062">2062</td><td class="line">maybe_handle_activity (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2063"><td class="num" id="LN2063">2063</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2064"><td class="num" id="LN2064">2064</td><td class="line"> gboolean handled;</td></tr>
+<tr class="codeline" data-linenumber="2065"><td class="num" id="LN2065">2065</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2066"><td class="num" id="LN2066">2066</td><td class="line"> handled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2067"><td class="num" id="LN2067">2067</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2068"><td class="num" id="LN2068">2068</td><td class="line"> <span class='comment'>/* if we already have a socket then don't bother */</span></td></tr>
+<tr class="codeline" data-linenumber="2069"><td class="num" id="LN2069">2069</td><td class="line"> <span class='keyword'>if</span> (! window-&gt;priv-&gt;lock_socket</td></tr>
+<tr class="codeline" data-linenumber="2070"><td class="num" id="LN2070">2070</td><td class="line"> &amp;&amp; gtk_widget_get_sensitive (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="2071"><td class="num" id="LN2071">2071</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2072"><td class="num" id="LN2072">2072</td><td class="line"> g_signal_emit (window, signals [ACTIVITY], 0, &amp;handled);</td></tr>
+<tr class="codeline" data-linenumber="2073"><td class="num" id="LN2073">2073</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2074"><td class="num" id="LN2074">2074</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2075"><td class="num" id="LN2075">2075</td><td class="line"> <span class='keyword'>return</span> handled;</td></tr>
+<tr class="codeline" data-linenumber="2076"><td class="num" id="LN2076">2076</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2077"><td class="num" id="LN2077">2077</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2078"><td class="num" id="LN2078">2078</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2079"><td class="num" id="LN2079">2079</td><td class="line">gs_window_real_key_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2080"><td class="num" id="LN2080">2080</td><td class="line"> GdkEventKey *event)</td></tr>
+<tr class="codeline" data-linenumber="2081"><td class="num" id="LN2081">2081</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2082"><td class="num" id="LN2082">2082</td><td class="line"> <span class='comment'>/*g_message ("KEY PRESS state: %u keyval %u", event-&gt;state, event-&gt;keyval);*/</span></td></tr>
+<tr class="codeline" data-linenumber="2083"><td class="num" id="LN2083">2083</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2084"><td class="num" id="LN2084">2084</td><td class="line"> <span class='comment'>/* Ignore brightness keys */</span></td></tr>
+<tr class="codeline" data-linenumber="2085"><td class="num" id="LN2085">2085</td><td class="line"> <span class='keyword'>if</span> (event-&gt;hardware_keycode == 101 || event-&gt;hardware_keycode == 212)</td></tr>
+<tr class="codeline" data-linenumber="2086"><td class="num" id="LN2086">2086</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2087"><td class="num" id="LN2087">2087</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Ignoring brightness keys"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2087, "Ignoring brightness keys"<br>)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2088"><td class="num" id="LN2088">2088</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2089"><td class="num" id="LN2089">2089</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2090"><td class="num" id="LN2090">2090</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2091"><td class="num" id="LN2091">2091</td><td class="line"> maybe_handle_activity (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2092"><td class="num" id="LN2092">2092</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2093"><td class="num" id="LN2093">2093</td><td class="line"> queue_key_event (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, event);</td></tr>
+<tr class="codeline" data-linenumber="2094"><td class="num" id="LN2094">2094</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2095"><td class="num" id="LN2095">2095</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event)</td></tr>
+<tr class="codeline" data-linenumber="2096"><td class="num" id="LN2096">2096</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2097"><td class="num" id="LN2097">2097</td><td class="line"> <span class='macro'>GTK_WIDGET_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), ((gtk_widget_get_type ()))))))</span></span>-&gt;key_press_event (widget, event);</td></tr>
+<tr class="codeline" data-linenumber="2098"><td class="num" id="LN2098">2098</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2099"><td class="num" id="LN2099">2099</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2100"><td class="num" id="LN2100">2100</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2101"><td class="num" id="LN2101">2101</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2102"><td class="num" id="LN2102">2102</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2103"><td class="num" id="LN2103">2103</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2104"><td class="num" id="LN2104">2104</td><td class="line">gs_window_real_motion_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2105"><td class="num" id="LN2105">2105</td><td class="line"> GdkEventMotion *event)</td></tr>
+<tr class="codeline" data-linenumber="2106"><td class="num" id="LN2106">2106</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2107"><td class="num" id="LN2107">2107</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2108"><td class="num" id="LN2108">2108</td><td class="line"> gdouble distance;</td></tr>
+<tr class="codeline" data-linenumber="2109"><td class="num" id="LN2109">2109</td><td class="line"> gdouble min_distance;</td></tr>
+<tr class="codeline" data-linenumber="2110"><td class="num" id="LN2110">2110</td><td class="line"> gdouble min_percentage = 0.1;</td></tr>
+<tr class="codeline" data-linenumber="2111"><td class="num" id="LN2111">2111</td><td class="line"> GdkDisplay *display;</td></tr>
+<tr class="codeline" data-linenumber="2112"><td class="num" id="LN2112">2112</td><td class="line"> GdkScreen *screen;</td></tr>
+<tr class="codeline" data-linenumber="2113"><td class="num" id="LN2113">2113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2114"><td class="num" id="LN2114">2114</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2115"><td class="num" id="LN2115">2115</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2116"><td class="num" id="LN2116">2116</td><td class="line"> display = gs_window_get_display (window);</td></tr>
+<tr class="codeline" data-linenumber="2117"><td class="num" id="LN2117">2117</td><td class="line"> screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2118"><td class="num" id="LN2118">2118</td><td class="line"> min_distance = <span class='macro'>WidthOfScreen (gdk_x11_screen_get_xscreen (screen))<span class='macro_popup'>((gdk_x11_screen_get_xscreen (screen))-&gt;width)</span></span> * min_percentage;</td></tr>
+<tr class="codeline" data-linenumber="2119"><td class="num" id="LN2119">2119</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2120"><td class="num" id="LN2120">2120</td><td class="line"> <span class='comment'>/* if the last position was not set then don't detect motion */</span></td></tr>
+<tr class="codeline" data-linenumber="2121"><td class="num" id="LN2121">2121</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;last_x &lt; 0 || window-&gt;priv-&gt;last_y &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2122"><td class="num" id="LN2122">2122</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2123"><td class="num" id="LN2123">2123</td><td class="line"> window-&gt;priv-&gt;last_x = event-&gt;x;</td></tr>
+<tr class="codeline" data-linenumber="2124"><td class="num" id="LN2124">2124</td><td class="line"> window-&gt;priv-&gt;last_y = event-&gt;y;</td></tr>
+<tr class="codeline" data-linenumber="2125"><td class="num" id="LN2125">2125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2126"><td class="num" id="LN2126">2126</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2127"><td class="num" id="LN2127">2127</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2128"><td class="num" id="LN2128">2128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2129"><td class="num" id="LN2129">2129</td><td class="line"> <span class='comment'>/* just an approximate distance */</span></td></tr>
+<tr class="codeline" data-linenumber="2130"><td class="num" id="LN2130">2130</td><td class="line"> distance = <span class='macro'>MAX (ABS (window-&gt;priv-&gt;last_x - event-&gt;x),<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2131"><td class="num" id="LN2131">2131</td><td class="line"> <span class='macro'>ABS (window-&gt;priv-&gt;last_y - event-&gt;y))<span class='macro_popup'>((((((window-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window<br>-&gt;priv-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x<br> - event-&gt;x))) &gt; ((((window-&gt;priv-&gt;last_y - event<br>-&gt;y) &lt; 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y)<br> : (window-&gt;priv-&gt;last_y - event-&gt;y)))) ? ((((window<br>-&gt;priv-&gt;last_x - event-&gt;x) &lt; 0) ? -(window-&gt;priv<br>-&gt;last_x - event-&gt;x) : (window-&gt;priv-&gt;last_x - event<br>-&gt;x))) : ((((window-&gt;priv-&gt;last_y - event-&gt;y) &lt;<br> 0) ? -(window-&gt;priv-&gt;last_y - event-&gt;y) : (window-&gt;<br>priv-&gt;last_y - event-&gt;y))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2132"><td class="num" id="LN2132">2132</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2133"><td class="num" id="LN2133">2133</td><td class="line"> <span class='keyword'>if</span> (distance &gt; min_distance)</td></tr>
+<tr class="codeline" data-linenumber="2134"><td class="num" id="LN2134">2134</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2135"><td class="num" id="LN2135">2135</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2136"><td class="num" id="LN2136">2136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2137"><td class="num" id="LN2137">2137</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2138"><td class="num" id="LN2138">2138</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2139"><td class="num" id="LN2139">2139</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2140"><td class="num" id="LN2140">2140</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2141"><td class="num" id="LN2141">2141</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2142"><td class="num" id="LN2142">2142</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2143"><td class="num" id="LN2143">2143</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2144"><td class="num" id="LN2144">2144</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2145"><td class="num" id="LN2145">2145</td><td class="line">gs_window_real_button_press_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2146"><td class="num" id="LN2146">2146</td><td class="line"> GdkEventButton *event)</td></tr>
+<tr class="codeline" data-linenumber="2147"><td class="num" id="LN2147">2147</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2148"><td class="num" id="LN2148">2148</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2149"><td class="num" id="LN2149">2149</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2150"><td class="num" id="LN2150">2150</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2151"><td class="num" id="LN2151">2151</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2152"><td class="num" id="LN2152">2152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2153"><td class="num" id="LN2153">2153</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2154"><td class="num" id="LN2154">2154</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2155"><td class="num" id="LN2155">2155</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2156"><td class="num" id="LN2156">2156</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2157"><td class="num" id="LN2157">2157</td><td class="line">gs_window_real_scroll_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2158"><td class="num" id="LN2158">2158</td><td class="line"> GdkEventScroll *event)</td></tr>
+<tr class="codeline" data-linenumber="2159"><td class="num" id="LN2159">2159</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2160"><td class="num" id="LN2160">2160</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2161"><td class="num" id="LN2161">2161</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2162"><td class="num" id="LN2162">2162</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2163"><td class="num" id="LN2163">2163</td><td class="line"> maybe_handle_activity (window);</td></tr>
+<tr class="codeline" data-linenumber="2164"><td class="num" id="LN2164">2164</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2165"><td class="num" id="LN2165">2165</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2166"><td class="num" id="LN2166">2166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2167"><td class="num" id="LN2167">2167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2168"><td class="num" id="LN2168">2168</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2169"><td class="num" id="LN2169">2169</td><td class="line">gs_window_real_size_request (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2170"><td class="num" id="LN2170">2170</td><td class="line"> GtkRequisition *requisition)</td></tr>
+<tr class="codeline" data-linenumber="2171"><td class="num" id="LN2171">2171</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2172"><td class="num" id="LN2172">2172</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2173"><td class="num" id="LN2173">2173</td><td class="line"> GtkBin *bin;</td></tr>
+<tr class="codeline" data-linenumber="2174"><td class="num" id="LN2174">2174</td><td class="line"> GtkWidget *child;</td></tr>
+<tr class="codeline" data-linenumber="2175"><td class="num" id="LN2175">2175</td><td class="line"> GdkRectangle old_geometry;</td></tr>
+<tr class="codeline" data-linenumber="2176"><td class="num" id="LN2176">2176</td><td class="line"> <span class='keyword'>int</span> position_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2177"><td class="num" id="LN2177">2177</td><td class="line"> <span class='keyword'>int</span> size_changed = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2178"><td class="num" id="LN2178">2178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2179"><td class="num" id="LN2179">2179</td><td class="line"> window = <span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2180"><td class="num" id="LN2180">2180</td><td class="line"> bin = <span class='macro'>GTK_BIN (widget)<span class='macro_popup'>((((GtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gtk_bin_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2181"><td class="num" id="LN2181">2181</td><td class="line"> child = gtk_bin_get_child (bin);</td></tr>
+<tr class="codeline" data-linenumber="2182"><td class="num" id="LN2182">2182</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2183"><td class="num" id="LN2183">2183</td><td class="line"> <span class='keyword'>if</span> (child &amp;&amp; gtk_widget_get_visible (child))</td></tr>
+<tr class="codeline" data-linenumber="2184"><td class="num" id="LN2184">2184</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2185"><td class="num" id="LN2185">2185</td><td class="line"> gtk_widget_get_preferred_size (child, requisition, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2186"><td class="num" id="LN2186">2186</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2187"><td class="num" id="LN2187">2187</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2188"><td class="num" id="LN2188">2188</td><td class="line"> old_geometry = window-&gt;priv-&gt;geometry;</td></tr>
+<tr class="codeline" data-linenumber="2189"><td class="num" id="LN2189">2189</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2190"><td class="num" id="LN2190">2190</td><td class="line"> update_geometry (window);</td></tr>
+<tr class="codeline" data-linenumber="2191"><td class="num" id="LN2191">2191</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2192"><td class="num" id="LN2192">2192</td><td class="line"> requisition-&gt;width = window-&gt;priv-&gt;geometry.width;</td></tr>
+<tr class="codeline" data-linenumber="2193"><td class="num" id="LN2193">2193</td><td class="line"> requisition-&gt;height = window-&gt;priv-&gt;geometry.height;</td></tr>
+<tr class="codeline" data-linenumber="2194"><td class="num" id="LN2194">2194</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2195"><td class="num" id="LN2195">2195</td><td class="line"> <span class='keyword'>if</span> (! gtk_widget_get_realized (widget))</td></tr>
+<tr class="codeline" data-linenumber="2196"><td class="num" id="LN2196">2196</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2197"><td class="num" id="LN2197">2197</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2198"><td class="num" id="LN2198">2198</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2199"><td class="num" id="LN2199">2199</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2200"><td class="num" id="LN2200">2200</td><td class="line"> <span class='keyword'>if</span> (old_geometry.width != window-&gt;priv-&gt;geometry.width ||</td></tr>
+<tr class="codeline" data-linenumber="2201"><td class="num" id="LN2201">2201</td><td class="line"> old_geometry.height != window-&gt;priv-&gt;geometry.height)</td></tr>
+<tr class="codeline" data-linenumber="2202"><td class="num" id="LN2202">2202</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2203"><td class="num" id="LN2203">2203</td><td class="line"> size_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2204"><td class="num" id="LN2204">2204</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2205"><td class="num" id="LN2205">2205</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2206"><td class="num" id="LN2206">2206</td><td class="line"> <span class='keyword'>if</span> (old_geometry.x != window-&gt;priv-&gt;geometry.x ||</td></tr>
+<tr class="codeline" data-linenumber="2207"><td class="num" id="LN2207">2207</td><td class="line"> old_geometry.y != window-&gt;priv-&gt;geometry.y)</td></tr>
+<tr class="codeline" data-linenumber="2208"><td class="num" id="LN2208">2208</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2209"><td class="num" id="LN2209">2209</td><td class="line"> position_changed = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2210"><td class="num" id="LN2210">2210</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2211"><td class="num" id="LN2211">2211</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2212"><td class="num" id="LN2212">2212</td><td class="line"> gs_window_move_resize_window (window, position_changed, size_changed);</td></tr>
+<tr class="codeline" data-linenumber="2213"><td class="num" id="LN2213">2213</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2214"><td class="num" id="LN2214">2214</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2215"><td class="num" id="LN2215">2215</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2216"><td class="num" id="LN2216">2216</td><td class="line">gs_window_real_get_preferred_width (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2217"><td class="num" id="LN2217">2217</td><td class="line"> gint *minimal_width,</td></tr>
+<tr class="codeline" data-linenumber="2218"><td class="num" id="LN2218">2218</td><td class="line"> gint *natural_width)</td></tr>
+<tr class="codeline" data-linenumber="2219"><td class="num" id="LN2219">2219</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2220"><td class="num" id="LN2220">2220</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2221"><td class="num" id="LN2221">2221</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2222"><td class="num" id="LN2222">2222</td><td class="line"> *minimal_width = *natural_width = requisition.width;</td></tr>
+<tr class="codeline" data-linenumber="2223"><td class="num" id="LN2223">2223</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2224"><td class="num" id="LN2224">2224</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2225"><td class="num" id="LN2225">2225</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2226"><td class="num" id="LN2226">2226</td><td class="line">gs_window_real_get_preferred_height (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2227"><td class="num" id="LN2227">2227</td><td class="line"> gint *minimal_height,</td></tr>
+<tr class="codeline" data-linenumber="2228"><td class="num" id="LN2228">2228</td><td class="line"> gint *natural_height)</td></tr>
+<tr class="codeline" data-linenumber="2229"><td class="num" id="LN2229">2229</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2230"><td class="num" id="LN2230">2230</td><td class="line"> GtkRequisition requisition;</td></tr>
+<tr class="codeline" data-linenumber="2231"><td class="num" id="LN2231">2231</td><td class="line"> gs_window_real_size_request (widget, &amp;requisition);</td></tr>
+<tr class="codeline" data-linenumber="2232"><td class="num" id="LN2232">2232</td><td class="line"> *minimal_height = *natural_height = requisition.height;</td></tr>
+<tr class="codeline" data-linenumber="2233"><td class="num" id="LN2233">2233</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2234"><td class="num" id="LN2234">2234</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2235"><td class="num" id="LN2235">2235</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2236"><td class="num" id="LN2236">2236</td><td class="line">gs_window_real_grab_broken (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2237"><td class="num" id="LN2237">2237</td><td class="line"> GdkEventGrabBroken *event)</td></tr>
+<tr class="codeline" data-linenumber="2238"><td class="num" id="LN2238">2238</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2239"><td class="num" id="LN2239">2239</td><td class="line"> <span class='keyword'>if</span> (event-&gt;grab_window != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2240"><td class="num" id="LN2240">2240</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2241"><td class="num" id="LN2241">2241</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab on window %X"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2242"><td class="num" id="LN2242">2242</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2243"><td class="num" id="LN2243">2243</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span></td></tr>
+<tr class="codeline" data-linenumber="2244"><td class="num" id="LN2244">2244</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;grab_window))<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2244, "Grab broken on window %X %s, new grab on window %X"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer", (guint32) (gdk_x11_window_get_xid<br> (event-&gt;grab_window)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2245"><td class="num" id="LN2245">2245</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2246"><td class="num" id="LN2246">2246</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="2247"><td class="num" id="LN2247">2247</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2248"><td class="num" id="LN2248">2248</td><td class="line"> <span class='macro'>gs_debug (<span class='string_literal'>"Grab broken on window %X %s, new grab is outside application"</span>,<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2249"><td class="num" id="LN2249">2249</td><td class="line"> <span class='macro'>(guint32) GDK_WINDOW_XID (event-&gt;window),<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span></td></tr>
+<tr class="codeline" data-linenumber="2250"><td class="num" id="LN2250">2250</td><td class="line"> <span class='macro'>event-&gt;keyboard ? <span class='string_literal'>"keyboard"</span> : <span class='string_literal'>"pointer"</span>)<span class='macro_popup'>gs_debug_real (__func__, "gs-window-x11.c", 2250, "Grab broken on window %X %s, new grab is outside application"<br>, (guint32) (gdk_x11_window_get_xid (event-&gt;window)), event<br>-&gt;keyboard ? "keyboard" : "pointer")</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2251"><td class="num" id="LN2251">2251</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2252"><td class="num" id="LN2252">2252</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2253"><td class="num" id="LN2253">2253</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2254"><td class="num" id="LN2254">2254</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2255"><td class="num" id="LN2255">2255</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2256"><td class="num" id="LN2256">2256</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2257"><td class="num" id="LN2257">2257</td><td class="line">gs_window_is_obscured (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2258"><td class="num" id="LN2258">2258</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2259"><td class="num" id="LN2259">2259</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2260"><td class="num" id="LN2260">2260</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2261"><td class="num" id="LN2261">2261</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;obscured;</td></tr>
+<tr class="codeline" data-linenumber="2262"><td class="num" id="LN2262">2262</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2263"><td class="num" id="LN2263">2263</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2264"><td class="num" id="LN2264">2264</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="2265"><td class="num" id="LN2265">2265</td><td class="line">gs_window_is_dialog_up (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2266"><td class="num" id="LN2266">2266</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2267"><td class="num" id="LN2267">2267</td><td class="line"> <span class='macro'>g_return_val_if_fail (GS_IS_WINDOW (window), FALSE)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2268"><td class="num" id="LN2268">2268</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2269"><td class="num" id="LN2269">2269</td><td class="line"> <span class='keyword'>return</span> window-&gt;priv-&gt;dialog_up;</td></tr>
+<tr class="codeline" data-linenumber="2270"><td class="num" id="LN2270">2270</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2271"><td class="num" id="LN2271">2271</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2272"><td class="num" id="LN2272">2272</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2273"><td class="num" id="LN2273">2273</td><td class="line">window_set_obscured (GSWindow *window,</td></tr>
+<tr class="codeline" data-linenumber="2274"><td class="num" id="LN2274">2274</td><td class="line"> gboolean obscured)</td></tr>
+<tr class="codeline" data-linenumber="2275"><td class="num" id="LN2275">2275</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2276"><td class="num" id="LN2276">2276</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;obscured == obscured)</td></tr>
+<tr class="codeline" data-linenumber="2277"><td class="num" id="LN2277">2277</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2278"><td class="num" id="LN2278">2278</td><td class="line"> <span class='keyword'>return</span>;</td></tr>
+<tr class="codeline" data-linenumber="2279"><td class="num" id="LN2279">2279</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2280"><td class="num" id="LN2280">2280</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2281"><td class="num" id="LN2281">2281</td><td class="line"> window-&gt;priv-&gt;obscured = (obscured != <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2282"><td class="num" id="LN2282">2282</td><td class="line"> g_object_notify (<span class='macro'>G_OBJECT (window)<span class='macro_popup'>((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>, <span class='string_literal'>"obscured"</span>);</td></tr>
+<tr class="codeline" data-linenumber="2283"><td class="num" id="LN2283">2283</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2284"><td class="num" id="LN2284">2284</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2285"><td class="num" id="LN2285">2285</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2286"><td class="num" id="LN2286">2286</td><td class="line">gs_window_real_visibility_notify_event (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2287"><td class="num" id="LN2287">2287</td><td class="line"> GdkEventVisibility *event)</td></tr>
+<tr class="codeline" data-linenumber="2288"><td class="num" id="LN2288">2288</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2289"><td class="num" id="LN2289">2289</td><td class="line"> <span class='keyword'>switch</span> (event-&gt;state)</td></tr>
+<tr class="codeline" data-linenumber="2290"><td class="num" id="LN2290">2290</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2291"><td class="num" id="LN2291">2291</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_FULLY_OBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2292"><td class="num" id="LN2292">2292</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2293"><td class="num" id="LN2293">2293</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2294"><td class="num" id="LN2294">2294</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_PARTIAL:</td></tr>
+<tr class="codeline" data-linenumber="2295"><td class="num" id="LN2295">2295</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2296"><td class="num" id="LN2296">2296</td><td class="line"> <span class='keyword'>case</span> GDK_VISIBILITY_UNOBSCURED:</td></tr>
+<tr class="codeline" data-linenumber="2297"><td class="num" id="LN2297">2297</td><td class="line"> window_set_obscured (<span class='macro'>GS_WINDOW (widget)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((widget)), ((gs_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2298"><td class="num" id="LN2298">2298</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2299"><td class="num" id="LN2299">2299</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="2300"><td class="num" id="LN2300">2300</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="2301"><td class="num" id="LN2301">2301</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2302"><td class="num" id="LN2302">2302</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2303"><td class="num" id="LN2303">2303</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2304"><td class="num" id="LN2304">2304</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2305"><td class="num" id="LN2305">2305</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2306"><td class="num" id="LN2306">2306</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2307"><td class="num" id="LN2307">2307</td><td class="line">gs_window_class_init (GSWindowClass *klass)</td></tr>
+<tr class="codeline" data-linenumber="2308"><td class="num" id="LN2308">2308</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2309"><td class="num" id="LN2309">2309</td><td class="line"> GObjectClass *object_class = <span class='macro'>G_OBJECT_CLASS (klass)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), (((GType) ((20) &lt;&lt; (2))))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2310"><td class="num" id="LN2310">2310</td><td class="line"> GtkWidgetClass *widget_class = <span class='macro'>GTK_WIDGET_CLASS (klass)<span class='macro_popup'>((((GtkWidgetClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((klass)), ((gtk_widget_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2311"><td class="num" id="LN2311">2311</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2312"><td class="num" id="LN2312">2312</td><td class="line"> object_class-&gt;finalize = gs_window_finalize;</td></tr>
+<tr class="codeline" data-linenumber="2313"><td class="num" id="LN2313">2313</td><td class="line"> object_class-&gt;get_property = gs_window_get_property;</td></tr>
+<tr class="codeline" data-linenumber="2314"><td class="num" id="LN2314">2314</td><td class="line"> object_class-&gt;set_property = gs_window_set_property;</td></tr>
+<tr class="codeline" data-linenumber="2315"><td class="num" id="LN2315">2315</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2316"><td class="num" id="LN2316">2316</td><td class="line"> widget_class-&gt;show = gs_window_real_show;</td></tr>
+<tr class="codeline" data-linenumber="2317"><td class="num" id="LN2317">2317</td><td class="line"> widget_class-&gt;hide = gs_window_real_hide;</td></tr>
+<tr class="codeline" data-linenumber="2318"><td class="num" id="LN2318">2318</td><td class="line"> widget_class-&gt;draw = gs_window_real_draw;</td></tr>
+<tr class="codeline" data-linenumber="2319"><td class="num" id="LN2319">2319</td><td class="line"> widget_class-&gt;realize = gs_window_real_realize;</td></tr>
+<tr class="codeline" data-linenumber="2320"><td class="num" id="LN2320">2320</td><td class="line"> widget_class-&gt;unrealize = gs_window_real_unrealize;</td></tr>
+<tr class="codeline" data-linenumber="2321"><td class="num" id="LN2321">2321</td><td class="line"> widget_class-&gt;key_press_event = gs_window_real_key_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2322"><td class="num" id="LN2322">2322</td><td class="line"> widget_class-&gt;motion_notify_event = gs_window_real_motion_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2323"><td class="num" id="LN2323">2323</td><td class="line"> widget_class-&gt;button_press_event = gs_window_real_button_press_event;</td></tr>
+<tr class="codeline" data-linenumber="2324"><td class="num" id="LN2324">2324</td><td class="line"> widget_class-&gt;scroll_event = gs_window_real_scroll_event;</td></tr>
+<tr class="codeline" data-linenumber="2325"><td class="num" id="LN2325">2325</td><td class="line"> widget_class-&gt;get_preferred_width = gs_window_real_get_preferred_width;</td></tr>
+<tr class="codeline" data-linenumber="2326"><td class="num" id="LN2326">2326</td><td class="line"> widget_class-&gt;get_preferred_height = gs_window_real_get_preferred_height;</td></tr>
+<tr class="codeline" data-linenumber="2327"><td class="num" id="LN2327">2327</td><td class="line"> widget_class-&gt;grab_broken_event = gs_window_real_grab_broken;</td></tr>
+<tr class="codeline" data-linenumber="2328"><td class="num" id="LN2328">2328</td><td class="line"> widget_class-&gt;visibility_notify_event = gs_window_real_visibility_notify_event;</td></tr>
+<tr class="codeline" data-linenumber="2329"><td class="num" id="LN2329">2329</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2330"><td class="num" id="LN2330">2330</td><td class="line"> signals [ACTIVITY] =</td></tr>
+<tr class="codeline" data-linenumber="2331"><td class="num" id="LN2331">2331</td><td class="line"> g_signal_new (<span class='string_literal'>"activity"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2332"><td class="num" id="LN2332">2332</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2333"><td class="num" id="LN2333">2333</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2334"><td class="num" id="LN2334">2334</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, activity)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, activity))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2335"><td class="num" id="LN2335">2335</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2336"><td class="num" id="LN2336">2336</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2337"><td class="num" id="LN2337">2337</td><td class="line"> gs_marshal_BOOLEAN__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2338"><td class="num" id="LN2338">2338</td><td class="line"> <span class='macro'>G_TYPE_BOOLEAN<span class='macro_popup'>((GType) ((5) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2339"><td class="num" id="LN2339">2339</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2340"><td class="num" id="LN2340">2340</td><td class="line"> signals [DEACTIVATED] =</td></tr>
+<tr class="codeline" data-linenumber="2341"><td class="num" id="LN2341">2341</td><td class="line"> g_signal_new (<span class='string_literal'>"deactivated"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2342"><td class="num" id="LN2342">2342</td><td class="line"> <span class='macro'>G_TYPE_FROM_CLASS (object_class)<span class='macro_popup'>(((GTypeClass*) (object_class))-&gt;g_type)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2343"><td class="num" id="LN2343">2343</td><td class="line"> G_SIGNAL_RUN_LAST,</td></tr>
+<tr class="codeline" data-linenumber="2344"><td class="num" id="LN2344">2344</td><td class="line"> <span class='macro'>G_STRUCT_OFFSET (GSWindowClass, deactivated)<span class='macro_popup'>((glong) __builtin_offsetof(GSWindowClass, deactivated))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2345"><td class="num" id="LN2345">2345</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2346"><td class="num" id="LN2346">2346</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2347"><td class="num" id="LN2347">2347</td><td class="line"> g_cclosure_marshal_VOID__VOID,</td></tr>
+<tr class="codeline" data-linenumber="2348"><td class="num" id="LN2348">2348</td><td class="line"> <span class='macro'>G_TYPE_NONE<span class='macro_popup'>((GType) ((1) &lt;&lt; (2)))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2349"><td class="num" id="LN2349">2349</td><td class="line"> 0);</td></tr>
+<tr class="codeline" data-linenumber="2350"><td class="num" id="LN2350">2350</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2351"><td class="num" id="LN2351">2351</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2352"><td class="num" id="LN2352">2352</td><td class="line"> PROP_OBSCURED,</td></tr>
+<tr class="codeline" data-linenumber="2353"><td class="num" id="LN2353">2353</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"obscured"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2354"><td class="num" id="LN2354">2354</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2355"><td class="num" id="LN2355">2355</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2356"><td class="num" id="LN2356">2356</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2357"><td class="num" id="LN2357">2357</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2358"><td class="num" id="LN2358">2358</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2359"><td class="num" id="LN2359">2359</td><td class="line"> PROP_DIALOG_UP,</td></tr>
+<tr class="codeline" data-linenumber="2360"><td class="num" id="LN2360">2360</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"dialog-up"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2361"><td class="num" id="LN2361">2361</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2362"><td class="num" id="LN2362">2362</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2363"><td class="num" id="LN2363">2363</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2364"><td class="num" id="LN2364">2364</td><td class="line"> G_PARAM_READABLE));</td></tr>
+<tr class="codeline" data-linenumber="2365"><td class="num" id="LN2365">2365</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2366"><td class="num" id="LN2366">2366</td><td class="line"> PROP_LOCK_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2367"><td class="num" id="LN2367">2367</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"lock-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2368"><td class="num" id="LN2368">2368</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2369"><td class="num" id="LN2369">2369</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2370"><td class="num" id="LN2370">2370</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2371"><td class="num" id="LN2371">2371</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2372"><td class="num" id="LN2372">2372</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2373"><td class="num" id="LN2373">2373</td><td class="line"> PROP_LOGOUT_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2374"><td class="num" id="LN2374">2374</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"logout-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2375"><td class="num" id="LN2375">2375</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2376"><td class="num" id="LN2376">2376</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2377"><td class="num" id="LN2377">2377</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2378"><td class="num" id="LN2378">2378</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2379"><td class="num" id="LN2379">2379</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2380"><td class="num" id="LN2380">2380</td><td class="line"> PROP_LOGOUT_TIMEOUT,</td></tr>
+<tr class="codeline" data-linenumber="2381"><td class="num" id="LN2381">2381</td><td class="line"> g_param_spec_long (<span class='string_literal'>"logout-timeout"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2382"><td class="num" id="LN2382">2382</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2383"><td class="num" id="LN2383">2383</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2384"><td class="num" id="LN2384">2384</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="2385"><td class="num" id="LN2385">2385</td><td class="line"> <span class='macro'>G_MAXLONG<span class='macro_popup'>9223372036854775807L</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2386"><td class="num" id="LN2386">2386</td><td class="line"> 0,</td></tr>
+<tr class="codeline" data-linenumber="2387"><td class="num" id="LN2387">2387</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2388"><td class="num" id="LN2388">2388</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2389"><td class="num" id="LN2389">2389</td><td class="line"> PROP_LOGOUT_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2390"><td class="num" id="LN2390">2390</td><td class="line"> g_param_spec_string (<span class='string_literal'>"logout-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2391"><td class="num" id="LN2391">2391</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2392"><td class="num" id="LN2392">2392</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2393"><td class="num" id="LN2393">2393</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2394"><td class="num" id="LN2394">2394</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2395"><td class="num" id="LN2395">2395</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2396"><td class="num" id="LN2396">2396</td><td class="line"> PROP_STATUS_MESSAGE,</td></tr>
+<tr class="codeline" data-linenumber="2397"><td class="num" id="LN2397">2397</td><td class="line"> g_param_spec_string (<span class='string_literal'>"status-message"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2398"><td class="num" id="LN2398">2398</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2399"><td class="num" id="LN2399">2399</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2400"><td class="num" id="LN2400">2400</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2401"><td class="num" id="LN2401">2401</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2402"><td class="num" id="LN2402">2402</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2403"><td class="num" id="LN2403">2403</td><td class="line"> PROP_KEYBOARD_ENABLED,</td></tr>
+<tr class="codeline" data-linenumber="2404"><td class="num" id="LN2404">2404</td><td class="line"> g_param_spec_boolean (<span class='string_literal'>"keyboard-enabled"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2405"><td class="num" id="LN2405">2405</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2406"><td class="num" id="LN2406">2406</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2407"><td class="num" id="LN2407">2407</td><td class="line"> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2408"><td class="num" id="LN2408">2408</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2409"><td class="num" id="LN2409">2409</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2410"><td class="num" id="LN2410">2410</td><td class="line"> PROP_KEYBOARD_COMMAND,</td></tr>
+<tr class="codeline" data-linenumber="2411"><td class="num" id="LN2411">2411</td><td class="line"> g_param_spec_string (<span class='string_literal'>"keyboard-command"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2412"><td class="num" id="LN2412">2412</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2413"><td class="num" id="LN2413">2413</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2414"><td class="num" id="LN2414">2414</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2415"><td class="num" id="LN2415">2415</td><td class="line"> G_PARAM_READWRITE));</td></tr>
+<tr class="codeline" data-linenumber="2416"><td class="num" id="LN2416">2416</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2417"><td class="num" id="LN2417">2417</td><td class="line"> g_object_class_install_property (object_class,</td></tr>
+<tr class="codeline" data-linenumber="2418"><td class="num" id="LN2418">2418</td><td class="line"> PROP_MONITOR,</td></tr>
+<tr class="codeline" data-linenumber="2419"><td class="num" id="LN2419">2419</td><td class="line"> g_param_spec_pointer (<span class='string_literal'>"monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2420"><td class="num" id="LN2420">2420</td><td class="line"> <span class='string_literal'>"Gdk monitor"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2421"><td class="num" id="LN2421">2421</td><td class="line"> <span class='string_literal'>"The monitor (in terms of Gdk) which the window is on"</span>,</td></tr>
+<tr class="codeline" data-linenumber="2422"><td class="num" id="LN2422">2422</td><td class="line"> G_PARAM_READWRITE | G_PARAM_CONSTRUCT));</td></tr>
+<tr class="codeline" data-linenumber="2423"><td class="num" id="LN2423">2423</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2424"><td class="num" id="LN2424">2424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2425"><td class="num" id="LN2425">2425</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2426"><td class="num" id="LN2426">2426</td><td class="line">create_info_bar (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2427"><td class="num" id="LN2427">2427</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2428"><td class="num" id="LN2428">2428</td><td class="line"> window-&gt;priv-&gt;info_bar = gtk_info_bar_new ();</td></tr>
+<tr class="codeline" data-linenumber="2429"><td class="num" id="LN2429">2429</td><td class="line"> gtk_widget_set_no_show_all (window-&gt;priv-&gt;info_bar, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2430"><td class="num" id="LN2430">2430</td><td class="line"> gtk_box_pack_end (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>, window-&gt;priv-&gt;info_bar, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2431"><td class="num" id="LN2431">2431</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2432"><td class="num" id="LN2432">2432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2433"><td class="num" id="LN2433">2433</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="2434"><td class="num" id="LN2434">2434</td><td class="line">on_drawing_area_draw (GtkWidget *widget,</td></tr>
+<tr class="codeline" data-linenumber="2435"><td class="num" id="LN2435">2435</td><td class="line"> cairo_t *cr)</td></tr>
+<tr class="codeline" data-linenumber="2436"><td class="num" id="LN2436">2436</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2437"><td class="num" id="LN2437">2437</td><td class="line"> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);</td></tr>
+<tr class="codeline" data-linenumber="2438"><td class="num" id="LN2438">2438</td><td class="line"> cairo_set_source_rgb (cr, 0, 0, 0);</td></tr>
+<tr class="codeline" data-linenumber="2439"><td class="num" id="LN2439">2439</td><td class="line"> cairo_paint (cr);</td></tr>
+<tr class="codeline" data-linenumber="2440"><td class="num" id="LN2440">2440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2441"><td class="num" id="LN2441">2441</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2442"><td class="num" id="LN2442">2442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2443"><td class="num" id="LN2443">2443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2444"><td class="num" id="LN2444">2444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2445"><td class="num" id="LN2445">2445</td><td class="line">gs_window_init (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2446"><td class="num" id="LN2446">2446</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2447"><td class="num" id="LN2447">2447</td><td class="line"> window-&gt;priv = gs_window_get_instance_private (window);</td></tr>
+<tr class="codeline" data-linenumber="2448"><td class="num" id="LN2448">2448</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2449"><td class="num" id="LN2449">2449</td><td class="line"> window-&gt;priv-&gt;geometry.x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2450"><td class="num" id="LN2450">2450</td><td class="line"> window-&gt;priv-&gt;geometry.y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2451"><td class="num" id="LN2451">2451</td><td class="line"> window-&gt;priv-&gt;geometry.width = -1;</td></tr>
+<tr class="codeline" data-linenumber="2452"><td class="num" id="LN2452">2452</td><td class="line"> window-&gt;priv-&gt;geometry.height = -1;</td></tr>
+<tr class="codeline" data-linenumber="2453"><td class="num" id="LN2453">2453</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2454"><td class="num" id="LN2454">2454</td><td class="line"> window-&gt;priv-&gt;last_x = -1;</td></tr>
+<tr class="codeline" data-linenumber="2455"><td class="num" id="LN2455">2455</td><td class="line"> window-&gt;priv-&gt;last_y = -1;</td></tr>
+<tr class="codeline" data-linenumber="2456"><td class="num" id="LN2456">2456</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2457"><td class="num" id="LN2457">2457</td><td class="line"> gtk_window_set_decorated (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2458"><td class="num" id="LN2458">2458</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2459"><td class="num" id="LN2459">2459</td><td class="line"> gtk_window_set_skip_taskbar_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2460"><td class="num" id="LN2460">2460</td><td class="line"> gtk_window_set_skip_pager_hint (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2461"><td class="num" id="LN2461">2461</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2462"><td class="num" id="LN2462">2462</td><td class="line"> gtk_window_set_keep_above (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2463"><td class="num" id="LN2463">2463</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2464"><td class="num" id="LN2464">2464</td><td class="line"> gtk_window_fullscreen (<span class='macro'>GTK_WINDOW (window)<span class='macro_popup'>((((GtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_window_get_type ()))))))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2465"><td class="num" id="LN2465">2465</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2466"><td class="num" id="LN2466">2466</td><td class="line"> gtk_widget_set_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2467"><td class="num" id="LN2467">2467</td><td class="line"> gtk_widget_get_events (<span class='macro'>GTK_WIDGET (window)<span class='macro_popup'>((((GtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_widget_get_type ()))))))</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="2468"><td class="num" id="LN2468">2468</td><td class="line"> | GDK_POINTER_MOTION_MASK</td></tr>
+<tr class="codeline" data-linenumber="2469"><td class="num" id="LN2469">2469</td><td class="line"> | GDK_BUTTON_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2470"><td class="num" id="LN2470">2470</td><td class="line"> | GDK_BUTTON_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2471"><td class="num" id="LN2471">2471</td><td class="line"> | GDK_KEY_PRESS_MASK</td></tr>
+<tr class="codeline" data-linenumber="2472"><td class="num" id="LN2472">2472</td><td class="line"> | GDK_KEY_RELEASE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2473"><td class="num" id="LN2473">2473</td><td class="line"> | GDK_EXPOSURE_MASK</td></tr>
+<tr class="codeline" data-linenumber="2474"><td class="num" id="LN2474">2474</td><td class="line"> | GDK_VISIBILITY_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2475"><td class="num" id="LN2475">2475</td><td class="line"> | GDK_ENTER_NOTIFY_MASK</td></tr>
+<tr class="codeline" data-linenumber="2476"><td class="num" id="LN2476">2476</td><td class="line"> | GDK_LEAVE_NOTIFY_MASK);</td></tr>
+<tr class="codeline" data-linenumber="2477"><td class="num" id="LN2477">2477</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2478"><td class="num" id="LN2478">2478</td><td class="line"> window-&gt;priv-&gt;vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);</td></tr>
+<tr class="codeline" data-linenumber="2479"><td class="num" id="LN2479">2479</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2480"><td class="num" id="LN2480">2480</td><td class="line"> gtk_container_add (<span class='macro'>GTK_CONTAINER (window)<span class='macro_popup'>((((GtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window)), ((gtk_container_get_type ()))))))</span></span>, window-&gt;priv-&gt;vbox);</td></tr>
+<tr class="codeline" data-linenumber="2481"><td class="num" id="LN2481">2481</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2482"><td class="num" id="LN2482">2482</td><td class="line"> window-&gt;priv-&gt;drawing_area = gtk_drawing_area_new ();</td></tr>
+<tr class="codeline" data-linenumber="2483"><td class="num" id="LN2483">2483</td><td class="line"> gtk_widget_show (window-&gt;priv-&gt;drawing_area);</td></tr>
+<tr class="codeline" data-linenumber="2484"><td class="num" id="LN2484">2484</td><td class="line"> gtk_widget_set_app_paintable (window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2485"><td class="num" id="LN2485">2485</td><td class="line"> gtk_box_pack_start (<span class='macro'>GTK_BOX (window-&gt;priv-&gt;vbox)<span class='macro_popup'>((((GtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((window-&gt;priv-&gt;vbox)), ((gtk_box_get_type ()))))))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2486"><td class="num" id="LN2486">2486</td><td class="line"> window-&gt;priv-&gt;drawing_area, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, 0);</td></tr>
+<tr class="codeline" data-linenumber="2487"><td class="num" id="LN2487">2487</td><td class="line"> <span class='macro'>g_signal_connect (window-&gt;priv-&gt;drawing_area,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2488"><td class="num" id="LN2488">2488</td><td class="line"> <span class='string_literal'><span class='macro'>"draw"</span>,<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2489"><td class="num" id="LN2489">2489</td><td class="line"> <span class='macro'>G_CALLBACK (on_drawing_area_draw),<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span></td></tr>
+<tr class="codeline" data-linenumber="2490"><td class="num" id="LN2490">2490</td><td class="line"> <span class='macro'>NULL)<span class='macro_popup'>g_signal_connect_data ((window-&gt;priv-&gt;drawing_area), ("draw"<br>), (((GCallback) (on_drawing_area_draw))), (((void*)0)), ((void<br>*)0), (GConnectFlags) 0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2491"><td class="num" id="LN2491">2491</td><td class="line"> create_info_bar (window);</td></tr>
+<tr class="codeline" data-linenumber="2492"><td class="num" id="LN2492">2492</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2493"><td class="num" id="LN2493">2493</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2494"><td class="num" id="LN2494">2494</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2495"><td class="num" id="LN2495">2495</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2496"><td class="num" id="LN2496">2496</td><td class="line">remove_command_watches (GSWindow *window)</td></tr>
+<tr class="codeline" data-linenumber="2497"><td class="num" id="LN2497">2497</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2498"><td class="num" id="LN2498">2498</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;lock_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2499"><td class="num" id="LN2499">2499</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2500"><td class="num" id="LN2500">2500</td><td class="line"> g_source_remove (window-&gt;priv-&gt;lock_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2501"><td class="num" id="LN2501">2501</td><td class="line"> window-&gt;priv-&gt;lock_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2502"><td class="num" id="LN2502">2502</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2503"><td class="num" id="LN2503">2503</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;keyboard_watch_id != 0)</td></tr>
+<tr class="codeline" data-linenumber="2504"><td class="num" id="LN2504">2504</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2505"><td class="num" id="LN2505">2505</td><td class="line"> g_source_remove (window-&gt;priv-&gt;keyboard_watch_id);</td></tr>
+<tr class="codeline" data-linenumber="2506"><td class="num" id="LN2506">2506</td><td class="line"> window-&gt;priv-&gt;keyboard_watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2507"><td class="num" id="LN2507">2507</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2508"><td class="num" id="LN2508">2508</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2509"><td class="num" id="LN2509">2509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2510"><td class="num" id="LN2510">2510</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="2511"><td class="num" id="LN2511">2511</td><td class="line">gs_window_finalize (GObject *object)</td></tr>
+<tr class="codeline" data-linenumber="2512"><td class="num" id="LN2512">2512</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2513"><td class="num" id="LN2513">2513</td><td class="line"> GSWindow *window;</td></tr>
+<tr class="codeline" data-linenumber="2514"><td class="num" id="LN2514">2514</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2515"><td class="num" id="LN2515">2515</td><td class="line"> <span class='macro'>g_return_if_fail (object != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2516"><td class="num" id="LN2516">2516</td><td class="line"> <span class='macro'>g_return_if_fail (GS_IS_WINDOW (object))<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2517"><td class="num" id="LN2517">2517</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2518"><td class="num" id="LN2518">2518</td><td class="line"> window = <span class='macro'>GS_WINDOW (object)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((object)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2519"><td class="num" id="LN2519">2519</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2520"><td class="num" id="LN2520">2520</td><td class="line"> <span class='macro'>g_return_if_fail (window-&gt;priv != NULL)<span class='macro_popup'>do{ (void)0; }while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2521"><td class="num" id="LN2521">2521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2522"><td class="num" id="LN2522">2522</td><td class="line"> g_free (window-&gt;priv-&gt;logout_command);</td></tr>
+<tr class="codeline" data-linenumber="2523"><td class="num" id="LN2523">2523</td><td class="line"> g_free (window-&gt;priv-&gt;keyboard_command);</td></tr>
+<tr class="codeline" data-linenumber="2524"><td class="num" id="LN2524">2524</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2525"><td class="num" id="LN2525">2525</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;info_bar_timer_id &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="2526"><td class="num" id="LN2526">2526</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2527"><td class="num" id="LN2527">2527</td><td class="line"> g_source_remove (window-&gt;priv-&gt;info_bar_timer_id);</td></tr>
+<tr class="codeline" data-linenumber="2528"><td class="num" id="LN2528">2528</td><td class="line"> window-&gt;priv-&gt;info_bar_timer_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="2529"><td class="num" id="LN2529">2529</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2530"><td class="num" id="LN2530">2530</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2531"><td class="num" id="LN2531">2531</td><td class="line"> remove_watchdog_timer (window);</td></tr>
+<tr class="codeline" data-linenumber="2532"><td class="num" id="LN2532">2532</td><td class="line"> remove_popup_dialog_idle (window);</td></tr>
+<tr class="codeline" data-linenumber="2533"><td class="num" id="LN2533">2533</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2534"><td class="num" id="LN2534">2534</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;timer)</td></tr>
+<tr class="codeline" data-linenumber="2535"><td class="num" id="LN2535">2535</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2536"><td class="num" id="LN2536">2536</td><td class="line"> g_timer_destroy (window-&gt;priv-&gt;timer);</td></tr>
+<tr class="codeline" data-linenumber="2537"><td class="num" id="LN2537">2537</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2538"><td class="num" id="LN2538">2538</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2539"><td class="num" id="LN2539">2539</td><td class="line"> remove_key_events (window);</td></tr>
+<tr class="codeline" data-linenumber="2540"><td class="num" id="LN2540">2540</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2541"><td class="num" id="LN2541">2541</td><td class="line"> remove_command_watches (window);</td></tr>
+<tr class="codeline" data-linenumber="2542"><td class="num" id="LN2542">2542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2543"><td class="num" id="LN2543">2543</td><td class="line"> gs_window_dialog_finish (window);</td></tr>
+<tr class="codeline" data-linenumber="2544"><td class="num" id="LN2544">2544</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2545"><td class="num" id="LN2545">2545</td><td class="line"> <span class='keyword'>if</span> (window-&gt;priv-&gt;background_surface)</td></tr>
+<tr class="codeline" data-linenumber="2546"><td class="num" id="LN2546">2546</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="2547"><td class="num" id="LN2547">2547</td><td class="line"> cairo_surface_destroy (window-&gt;priv-&gt;background_surface);</td></tr>
+<tr class="codeline" data-linenumber="2548"><td class="num" id="LN2548">2548</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="2549"><td class="num" id="LN2549">2549</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2550"><td class="num" id="LN2550">2550</td><td class="line"> <span class='macro'>G_OBJECT_CLASS (gs_window_parent_class)<span class='macro_popup'>((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass<br>*) ((gs_window_parent_class)), (((GType) ((20) &lt;&lt; (2)))<br>)))))</span></span>-&gt;finalize (object);</td></tr>
+<tr class="codeline" data-linenumber="2551"><td class="num" id="LN2551">2551</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="2552"><td class="num" id="LN2552">2552</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2553"><td class="num" id="LN2553">2553</td><td class="line">GSWindow *</td></tr>
+<tr class="codeline" data-linenumber="2554"><td class="num" id="LN2554">2554</td><td class="line">gs_window_new (GdkMonitor *monitor,</td></tr>
+<tr class="codeline" data-linenumber="2555"><td class="num" id="LN2555">2555</td><td class="line"> gboolean lock_enabled)</td></tr>
+<tr class="codeline" data-linenumber="2556"><td class="num" id="LN2556">2556</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="2557"><td class="num" id="LN2557">2557</td><td class="line"> GObject *result;</td></tr>
+<tr class="codeline" data-linenumber="2558"><td class="num" id="LN2558">2558</td><td class="line"> GdkDisplay *display = gdk_monitor_get_display (monitor);</td></tr>
+<tr class="codeline" data-linenumber="2559"><td class="num" id="LN2559">2559</td><td class="line"> GdkScreen *screen = gdk_display_get_default_screen (display);</td></tr>
+<tr class="codeline" data-linenumber="2560"><td class="num" id="LN2560">2560</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2561"><td class="num" id="LN2561">2561</td><td class="line"> result = g_object_new (<span class='macro'>GS_TYPE_WINDOW<span class='macro_popup'>(gs_window_get_type ())</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2562"><td class="num" id="LN2562">2562</td><td class="line"> <span class='string_literal'>"type"</span>, GTK_WINDOW_POPUP,</td></tr>
+<tr class="codeline" data-linenumber="2563"><td class="num" id="LN2563">2563</td><td class="line"> <span class='string_literal'>"screen"</span>, screen,</td></tr>
+<tr class="codeline" data-linenumber="2564"><td class="num" id="LN2564">2564</td><td class="line"> <span class='string_literal'>"monitor"</span>, monitor,</td></tr>
+<tr class="codeline" data-linenumber="2565"><td class="num" id="LN2565">2565</td><td class="line"> <span class='string_literal'>"lock-enabled"</span>, lock_enabled,</td></tr>
+<tr class="codeline" data-linenumber="2566"><td class="num" id="LN2566">2566</td><td class="line"> <span class='string_literal'>"app-paintable"</span>, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="2567"><td class="num" id="LN2567">2567</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="2568"><td class="num" id="LN2568">2568</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="2569"><td class="num" id="LN2569">2569</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GS_WINDOW (result)<span class='macro_popup'>((((GSWindow*) (void *) g_type_check_instance_cast ((GTypeInstance<br>*) ((result)), ((gs_window_get_type ()))))))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="2570"><td class="num" id="LN2570">2570</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e73a25.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e73a25.html
new file mode 100644
index 0000000..81d11d5
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-e73a25.html
@@ -0,0 +1,848 @@
+<!doctype html>
+<html>
+<head>
+<title>xdg-user-dir-lookup.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 -->
+
+<!-- BUGTYPE Potential insecure memory buffer bounds restriction in call 'strcpy' -->
+
+<!-- BUGCATEGORY Security -->
+
+<!-- BUGFILE /rootdir/savers/xdg-user-dir-lookup.c -->
+
+<!-- FILENAME xdg-user-dir-lookup.c -->
+
+<!-- FUNCTIONNAME xdg_user_dir_lookup -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT e73a25bc73a371682b191389b8b120f2 -->
+
+<!-- BUGLINE 54 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>avers/xdg-user-dir-lookup.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 54, column 3</a><br />Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name xdg-user-dir-lookup.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/savers -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -D LIBEXECDIR="/usr/local/libexec" -D MATELOCALEDIR="/usr/local/share/locale" -D DATADIR="/usr/local/share" -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/savers -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c xdg-user-dir-lookup.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"54": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>This file is not licenced under the GPL like the rest of the code.</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>Its is under the MIT license, to encourage reuse by cut-and-paste.</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>Copyright (c) 2007 Red Hat, inc</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>Permission is hereby granted, free of charge, to any person</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>obtaining a copy of this software and associated documentation files</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>(the "Software"), to deal in the Software without restriction,</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>including without limitation the rights to use, copy, modify, merge,</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>publish, distribute, sublicense, and/or sell copies of the Software,</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>and to permit persons to whom the Software is furnished to do so,</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>subject to the following conditions:</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>The above copyright notice and this permission notice shall be</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>included in all copies or substantial portions of the Software.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>SOFTWARE.</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include "xdg-user-dir-lookup.h"</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='keyword'>char</span> *</td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line">xdg_user_dir_lookup (<span class='keyword'>const</span> <span class='keyword'>char</span> *type)</td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> FILE *file;</td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"> <span class='keyword'>char</span> *home_dir, *config_home, *config_file;</td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"> <span class='keyword'>char</span> buffer[512];</td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> <span class='keyword'>char</span> *user_dir;</td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> <span class='keyword'>char</span> *p, *d;</td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> <span class='keyword'>int</span> relative;</td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> home_dir = getenv (<span class='string_literal'>"HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='keyword'>if</span> (home_dir == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='keyword'>return</span> strdup (<span class='string_literal'>"/tmp"</span>);</td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> config_home = getenv (<span class='string_literal'>"XDG_CONFIG_HOME"</span>);</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> <span class='keyword'>if</span> (config_home == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> || config_home[0] == 0)</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> config_file = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/.config/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class="mrange">strcpy</span> (config_file, home_dir);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex; max-width:52em">Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119</div></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> strcat (config_file, <span class='string_literal'>"/.config/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> config_file = malloc (strlen (config_home) + strlen (<span class='string_literal'>"/user-dirs.dirs"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> strcpy (config_file, config_home);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> strcat (config_file, <span class='string_literal'>"/user-dirs.dirs"</span>);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> file = fopen (config_file, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> free (config_file);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> <span class='keyword'>if</span> (file == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> <span class='keyword'>goto</span> error;</td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> user_dir = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>while</span> (fgets (buffer, <span class='keyword'>sizeof</span> (buffer), file))</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>/* Remove newline at end */</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> size_t len = strlen (buffer);</td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> <span class='keyword'>if</span> (len != 0 &amp;&amp; buffer[len-1] == '\n')</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> buffer[len-1] = 0;</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"> p = buffer;</td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"XDG_"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, type, strlen (type)) != 0)</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> p += strlen (type);</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"_DIR"</span>, 4) != 0)</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> p += 4;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class='keyword'>if</span> (*p != '=')</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>while</span> (*p == ' ' || *p == '\t')</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>if</span> (*p != '"')</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> relative = 0;</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (strncmp (p, <span class='string_literal'>"$HOME/"</span>, 6) == 0)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> p += 6;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> relative = 1;</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (*p != '/')</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>continue</span>;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>if</span> (relative)</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> user_dir = malloc (strlen (home_dir) + 1 + strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/"</span>);</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> user_dir = malloc (strlen (p) + 1);</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> *user_dir = 0;</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> d = user_dir + strlen (user_dir);</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> <span class='keyword'>while</span> (*p &amp;&amp; *p != '"')</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> <span class='keyword'>if</span> ((*p == '\\') &amp;&amp; (*(p+1) != 0))</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> p++;</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *d++ = *p++;</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> *d = 0;</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> fclose (file);</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>if</span> (user_dir)</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line">error:</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> <span class='comment'>/* Special case desktop for historical compatibility */</span></td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>if</span> (strcmp (type, <span class='string_literal'>"DESKTOP"</span>) == 0)</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> user_dir = malloc (strlen (home_dir) + strlen (<span class='string_literal'>"/Desktop"</span>) + 1);</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> strcpy (user_dir, home_dir);</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> strcat (user_dir, <span class='string_literal'>"/Desktop"</span>);</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> user_dir;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>return</span> strdup (home_dir);</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"><span class='directive'>#ifdef STANDALONE</span></td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line">main (<span class='keyword'>int</span> argc, <span class='keyword'>char</span> *argv[])</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span> (argc != 2)</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"Usage %s &lt;dir-type&gt;\n"</span>, argv[0]);</td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> printf (<span class='string_literal'>"%s\n"</span>, xdg_user_dir_lookup (argv[1]));</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"><span class='directive'>#endif</span></td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fa48d9.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fa48d9.html
new file mode 100644
index 0000000..ca6f1d4
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fa48d9.html
@@ -0,0 +1,1490 @@
+<!doctype html>
+<html>
+<head>
+<title>gs-auth-pam.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC Value stored to 'ret' is never read -->
+
+<!-- BUGTYPE Dead assignment -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/gs-auth-pam.c -->
+
+<!-- FILENAME gs-auth-pam.c -->
+
+<!-- FUNCTIONNAME create_pam_handle -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT fa48d9dd114d264ba80ff8283ed7a8eb -->
+
+<!-- BUGLINE 382 -->
+
+<!-- BUGCOLUMN 2 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/gs-auth-pam.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 382, column 2</a><br />Value stored to 'ret' is never read</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name gs-auth-pam.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c gs-auth-pam.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"382": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2006 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2006 Ray Strode &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Copyright (C) 2003 Bill Nottingham &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* Copyright (c) 1993-2003 Jamie Zawinski &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_UNISTD_H<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'># include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include &lt;stdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include &lt;pwd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include &lt;grp.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include &lt;security/pam_appl.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include &lt;signal.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#include &lt;glib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='directive'>#include &lt;glib/gstdio.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='directive'>#include "gs-auth.h"</span></td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='directive'>#include "gs-auth-pam.h"</span></td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"><span class='directive'>#include "subprocs.h"</span></td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"><span class='comment'>/* Some time between Red Hat 4.2 and 7.0, the words were transposed</span></td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> <span class='comment'>in the various PAM_x_CRED macro names. Yay!</span></td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"><span class='directive'>#ifndef <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='directive'># define <span class='macro'>PAM_REFRESH_CRED<span class='macro_popup'>0x0010U</span></span> PAM_CRED_REFRESH</span></td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"><span class='directive'>#ifdef HAVE_PAM_FAIL_DELAY</span></td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"><span class='comment'>/* We handle delays ourself.*/</span></td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='comment'>/* Don't set this to 0 (Linux bug workaround.) */</span></td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> pam_fail_delay ((pamh), 1)</span></td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"><span class='directive'>#else /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"><span class='directive'># define <span class='macro'>PAM_NO_DELAY(pamh)<span class='macro_popup'>pam_fail_delay ((pamh), 1)</span></span> /* */</span></td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"><span class='directive'>#endif /* !HAVE_PAM_FAIL_DELAY */</span></td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"><span class='comment'>/* On SunOS 5.6, and on Linux with PAM 0.64, pam_strerror() takes two args.</span></td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> <span class='comment'>On some other Linux systems with some other version of PAM (e.g.,</span></td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='comment'>whichever Debian release comes with a 2.2.5 kernel) it takes one arg.</span></td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> <span class='comment'>I can't tell which is more "recent" or "correct" behavior, so configure</span></td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> <span class='comment'>figures out which is in use for us. Shoot me!</span></td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"><span class='directive'>#ifdef <span class='macro'>PAM_STRERROR_TWO_ARGS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((pamh), (status))</span></td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"><span class='directive'>#else /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"><span class='directive'># define <span class='macro'>PAM_STRERROR(pamh, status)<span class='macro_popup'>pam_strerror((pamh), (status))</span></span> pam_strerror((status))</span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"><span class='directive'>#endif /* !PAM_STRERROR_TWO_ARGS */</span></td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line"><span class='keyword'>static</span> gboolean verbose_enabled = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"><span class='keyword'>static</span> pam_handle_t *pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"><span class='keyword'>static</span> gboolean did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"><span class='keyword'>struct</span> pam_closure</td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *username;</td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> GSAuthMessageFunc cb_func;</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> gpointer cb_data;</td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> <span class='keyword'>int</span> signal_fd;</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> <span class='keyword'>int</span> result;</td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line">};</td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span></td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> <span class='keyword'>struct</span> pam_closure *closure;</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>char</span> **resp;</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> gboolean should_interrupt_stack;</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line">} GsAuthMessageHandlerData;</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"><span class='keyword'>static</span> GCond message_handled_condition;</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"><span class='keyword'>static</span> GMutex message_handler_mutex;</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line">GQuark</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line">gs_auth_error_quark (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> <span class='keyword'>static</span> GQuark quark = 0;</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>if</span> (! quark)</td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> quark = g_quark_from_static_string (<span class='string_literal'>"gs_auth_error"</span>);</td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> <span class='keyword'>return</span> quark;</td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"><span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line">gs_auth_set_verbose (gboolean enabled)</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> verbose_enabled = enabled;</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line">gs_auth_get_verbose (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> <span class='keyword'>return</span> verbose_enabled;</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line">auth_message_handler (GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> <span class='keyword'>char</span> **response,</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> *response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> <span class='keyword'>switch</span> (style)</td></tr>
+<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_ON:</td></tr>
+<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_PROMPT_ECHO_OFF:</td></tr>
+<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> <span class='keyword'>if</span> (msg != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span> &amp;&amp; g_str_has_prefix (msg, <span class='macro'>_(<span class='string_literal'>"Password:"</span>)<span class='macro_popup'>gettext ("Password:")</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> did_we_ask_for_password = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_ERROR_MSG:</td></tr>
+<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> <span class='keyword'>case</span> GS_AUTH_MESSAGE_TEXT_INFO:</td></tr>
+<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>default</span>:</td></tr>
+<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line"> <span class='macro'>g_assert_not_reached ()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line">gs_auth_queued_message_handler (gpointer user_data)</td></tr>
+<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"> GsAuthMessageHandlerData *data = user_data;</td></tr>
+<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> g_message (<span class='string_literal'>"Waiting for lock"</span>);</td></tr>
+<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> g_message (<span class='string_literal'>"Waiting for response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> res = data-&gt;closure-&gt;cb_func (data-&gt;style,</td></tr>
+<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> data-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> data-&gt;resp,</td></tr>
+<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> data-&gt;closure-&gt;cb_data);</td></tr>
+<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> data-&gt;should_interrupt_stack = res == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> g_cond_signal (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> g_message (<span class='string_literal'>"Got response"</span>);</td></tr>
+<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line">gs_auth_run_message_handler (<span class='keyword'>struct</span> pam_closure *c,</td></tr>
+<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> GSAuthMessageStyle style,</td></tr>
+<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *msg,</td></tr>
+<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='keyword'>char</span> **resp)</td></tr>
+<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> GsAuthMessageHandlerData data;</td></tr>
+<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> data.closure = c;</td></tr>
+<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> data.style = style;</td></tr>
+<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> data.msg = msg;</td></tr>
+<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> data.resp = resp;</td></tr>
+<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> data.should_interrupt_stack = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> g_mutex_lock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='comment'>/* Queue the callback in the gui (the main) thread</span></td></tr>
+<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> g_idle_add (gs_auth_queued_message_handler, &amp;data);</td></tr>
+<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> g_message (<span class='string_literal'>"Waiting for respose to message style %d: '%s'"</span>, style, msg);</td></tr>
+<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> <span class='comment'>/* Wait for the response</span></td></tr>
+<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> g_cond_wait (&amp;message_handled_condition,</td></tr>
+<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> &amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> g_mutex_unlock (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> g_message (<span class='string_literal'>"Got respose to message style %d: interrupt:%d"</span>, style, data.should_interrupt_stack);</td></tr>
+<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"> <span class='keyword'>return</span> data.should_interrupt_stack == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line">pam_conversation (<span class='keyword'>int</span> nmsgs,</td></tr>
+<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>struct</span> pam_message **msg,</td></tr>
+<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> <span class='keyword'>struct</span> pam_response **resp,</td></tr>
+<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> <span class='keyword'>void</span> *closure)</td></tr>
+<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> <span class='keyword'>int</span> replies = 0;</td></tr>
+<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='keyword'>struct</span> pam_response *reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>struct</span> pam_closure *c = (<span class='keyword'>struct</span> pam_closure *) closure;</td></tr>
+<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> gboolean res;</td></tr>
+<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> <span class='keyword'>int</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> reply = (<span class='keyword'>struct</span> pam_response *) calloc (nmsgs, <span class='keyword'>sizeof</span> (*reply));</td></tr>
+<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='keyword'>if</span> (reply == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> res = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> ret = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='keyword'>for</span> (replies = 0; replies &lt; nmsgs &amp;&amp; ret == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>; replies++)</td></tr>
+<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> GSAuthMessageStyle style;</td></tr>
+<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> <span class='keyword'>char</span> *utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> style = pam_style_to_gs_style (msg [replies]-&gt;msg_style);</td></tr>
+<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> utf8_msg = g_locale_to_utf8 (msg [replies]-&gt;msg,</td></tr>
+<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> -1,</td></tr>
+<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> <span class='comment'>/* if we couldn't convert text from locale then</span></td></tr>
+<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> <span class='comment'>* assume utf-8 and hope for the best */</span></td></tr>
+<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> <span class='keyword'>if</span> (utf8_msg == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> <span class='keyword'>char</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> <span class='keyword'>char</span> *q;</td></tr>
+<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> utf8_msg = g_strdup (msg [replies]-&gt;msg);</td></tr>
+<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> p = utf8_msg;</td></tr>
+<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>while</span> (*p != '\0' &amp;&amp; !g_utf8_validate ((<span class='keyword'>const</span> <span class='keyword'>char</span> *)p, -1, (<span class='keyword'>const</span> <span class='keyword'>char</span> **)&amp;q))</td></tr>
+<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> *q = '?';</td></tr>
+<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> p = q + 1;</td></tr>
+<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* handle message locally first */</span></td></tr>
+<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> auth_message_handler (style,</td></tr>
+<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> &amp;reply [replies].resp,</td></tr>
+<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> <span class='keyword'>if</span> (c-&gt;cb_func != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_message (<span class='string_literal'>"Handling message style %d: '%s'"</span>, style, utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='comment'>/* blocks until the gui responds</span></td></tr>
+<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> res = gs_auth_run_message_handler (c,</td></tr>
+<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> style,</td></tr>
+<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> utf8_msg,</td></tr>
+<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> &amp;reply [replies].resp);</td></tr>
+<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> g_message (<span class='string_literal'>"Msg handler returned %d"</span>, res);</td></tr>
+<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> <span class='comment'>/* If the handler returns FALSE - interrupt the PAM stack */</span></td></tr>
+<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> <span class='keyword'>if</span> (res)</td></tr>
+<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> reply [replies].resp_retcode = <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>int</span> i;</td></tr>
+<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> <span class='keyword'>for</span> (i = 0; i &lt;= replies; i++)</td></tr>
+<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> free (reply [i].resp);</td></tr>
+<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line"> free (reply);</td></tr>
+<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> reply = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"> ret = <span class='macro'>PAM_CONV_ERR<span class='macro_popup'>19</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> g_free (utf8_msg);</td></tr>
+<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> *resp = reply;</td></tr>
+<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line">close_pam_handle (<span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> status2 = pam_end (pam_handle, status);</td></tr>
+<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> g_message (<span class='string_literal'>" pam_end (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> (status2 == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='string_literal'>"Success"</span> : <span class='string_literal'>"Failure"</span>));</td></tr>
+<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line">create_pam_handle (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> <span class='keyword'>struct</span> pam_conv *conv,</td></tr>
+<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> <span class='keyword'>int</span> *status_code)</td></tr>
+<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *service = <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>char</span> *disp;</td></tr>
+<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> gboolean ret;</td></tr>
+<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>if</span> (pam_handle != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> g_warning (<span class='string_literal'>"create_pam_handle: Stale pam handle around, cleaning up"</span>);</td></tr>
+<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> close_pam_handle (<span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> <span class='comment'>/* init things */</span></td></tr>
+<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> status = -1;</td></tr>
+<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> disp = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> ret = <span class="mrange"><span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span></span>;</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:9ex">Value stored to 'ret' is never read</div></td></tr>
+<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='comment'>/* Initialize a PAM session for the user */</span></td></tr>
+<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> <span class='keyword'>if</span> ((status = pam_start (service, username, conv, &amp;pam_handle)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> pam_handle = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Unable to establish service %s: %s\n"</span>)<span class='macro_popup'>gettext ("Unable to establish service %s: %s\n")</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> <span class='macro'>PAM_STRERROR (NULL, status)<span class='macro_popup'>pam_strerror((((void*)0)), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> g_message (<span class='string_literal'>"pam_start (\"%s\", \"%s\", ...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> service,</td></tr>
+<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> username,</td></tr>
+<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> disp = g_strdup (display);</td></tr>
+<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> <span class='keyword'>if</span> (disp == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> disp = g_strdup (<span class='string_literal'>":0.0"</span>);</td></tr>
+<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line"> <span class='keyword'>if</span> ((status = pam_set_item (pam_handle, <span class='macro'>PAM_TTY<span class='macro_popup'>3</span></span>, disp)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> g_warning (<span class='macro'>_(<span class='string_literal'>"Can't set PAM_TTY=%s"</span>)<span class='macro_popup'>gettext ("Can't set PAM_TTY=%s")</span></span>, display);</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> ret = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"> ret = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line"> g_cond_init (&amp;message_handled_condition);</td></tr>
+<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> g_mutex_init (&amp;message_handler_mutex);</td></tr>
+<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> <span class='keyword'>if</span> (status_code != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> *status_code = status;</td></tr>
+<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free (disp);</td></tr>
+<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> <span class='keyword'>return</span> ret;</td></tr>
+<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line">set_pam_error (GError **error,</td></tr>
+<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>int</span> status)</td></tr>
+<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> <span class='keyword'>if</span> (status == <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span> || status == <span class='macro'>PAM_USER_UNKNOWN<span class='macro_popup'>10</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line"> <span class='keyword'>char</span> *msg;</td></tr>
+<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> <span class='keyword'>if</span> (did_we_ask_for_password)</td></tr>
+<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Incorrect password."</span>)<span class='macro_popup'>gettext ("Incorrect password.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> msg = g_strdup (<span class='macro'>_(<span class='string_literal'>"Authentication failed."</span>)<span class='macro_popup'>gettext ("Authentication failed.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> GS_AUTH_ERROR_AUTH_ERROR,</td></tr>
+<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> msg);</td></tr>
+<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> g_free (msg);</td></tr>
+<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"Not permitted to gain access at this time."</span>)<span class='macro_popup'>gettext ("Not permitted to gain access at this time.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (status == <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> g_set_error (error,</td></tr>
+<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> <span class='macro'>GS_AUTH_ERROR<span class='macro_popup'>gs_auth_error_quark ()</span></span>,</td></tr>
+<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GS_AUTH_ERROR_AUTH_DENIED,</td></tr>
+<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> <span class='string_literal'>"%s"</span>,</td></tr>
+<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> <span class='macro'>_(<span class='string_literal'>"No longer permitted to access the system."</span>)<span class='macro_popup'>gettext ("No longer permitted to access the system.")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr>
+<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line">gs_auth_thread_func (gpointer data)</td></tr>
+<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> <span class='keyword'>int</span> auth_operation_fd;</td></tr>
+<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> <span class='keyword'>static</span> <span class='keyword'>const</span> <span class='keyword'>int</span> flags = 0;</td></tr>
+<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> <span class='keyword'>int</span> status;</td></tr>
+<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>int</span> status2;</td></tr>
+<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> <span class='keyword'>struct</span> timespec timeout;</td></tr>
+<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> sigset_t set;</td></tr>
+<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>void</span> *p;</td></tr>
+<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> auth_operation_fd = <span class='macro'>GPOINTER_TO_INT (data)<span class='macro_popup'>((gint) (glong) (data))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> timeout.tv_sec = 0;</td></tr>
+<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> timeout.tv_nsec = 1;</td></tr>
+<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> set = block_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> status = pam_authenticate (pam_handle, flags);</td></tr>
+<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line"> sigtimedwait (&amp;set, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;timeout);</td></tr>
+<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> unblock_sigchld ();</td></tr>
+<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> g_message (<span class='string_literal'>" pam_authenticate (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> status,</td></tr>
+<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status)<span class='macro_popup'>pam_strerror((pam_handle), (status))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>if</span> ((status = pam_get_item (pam_handle, <span class='macro'>PAM_USER<span class='macro_popup'>2</span></span>, &amp;p)) != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> <span class='comment'>/* is not really an auth problem, but it will</span></td></tr>
+<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> <span class='comment'>pretty much look as such, it shouldn't really</span></td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> <span class='comment'>happen */</span></td></tr>
+<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='comment'>/* We don't actually care if the account modules fail or succeed,</span></td></tr>
+<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='comment'>* but we need to run them anyway because certain pam modules</span></td></tr>
+<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='comment'>* depend on side effects of the account modules getting run.</span></td></tr>
+<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> status2 = pam_acct_mgmt (pam_handle, 0);</td></tr>
+<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"> g_message (<span class='string_literal'>"pam_acct_mgmt (...) ==&gt; %d (%s)\n"</span>,</td></tr>
+<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> <span class='comment'>/* FIXME: should we handle these? */</span></td></tr>
+<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='keyword'>switch</span> (status2)</td></tr>
+<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_NEW_AUTHTOK_REQD<span class='macro_popup'>12</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_AUTHINFO_UNAVAIL<span class='macro_popup'>9</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_ACCT_EXPIRED<span class='macro_popup'>13</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> <span class='keyword'>case</span> <span class='macro'>PAM_PERM_DENIED<span class='macro_popup'>6</span></span>:</td></tr>
+<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> <span class='keyword'>default</span> :</td></tr>
+<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> <span class='comment'>/* Each time we successfully authenticate, refresh credentials,</span></td></tr>
+<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='comment'>for Kerberos/AFS/DCE/etc. If this fails, just ignore that</span></td></tr>
+<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>failure and blunder along; it shouldn't matter.</span></td></tr>
+<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> <span class='comment'>Note: this used to be PAM_REFRESH_CRED instead of</span></td></tr>
+<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> <span class='comment'>PAM_REINITIALIZE_CRED, but Jason Heiss &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>says that the Linux PAM library ignores that one, and only refreshes</span></td></tr>
+<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>credentials when using PAM_REINITIALIZE_CRED.</span></td></tr>
+<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> status2 = pam_setcred (pam_handle, <span class='macro'>PAM_REINITIALIZE_CRED<span class='macro_popup'>0x0008U</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (gs_auth_get_verbose ())</td></tr>
+<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> g_message (<span class='string_literal'>" pam_setcred (...) ==&gt; %d (%s)"</span>,</td></tr>
+<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> status2,</td></tr>
+<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='macro'>PAM_STRERROR (pam_handle, status2)<span class='macro_popup'>pam_strerror((pam_handle), (status2))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> <span class='comment'>/* we're done, close the fd and wake up the main</span></td></tr>
+<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>* loop</span></td></tr>
+<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> close (auth_operation_fd);</td></tr>
+<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>GINT_TO_POINTER (status)<span class='macro_popup'>((gpointer) (glong) (status))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line">gs_auth_loop_quit (GIOChannel *source,</td></tr>
+<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> GIOCondition condition,</td></tr>
+<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> gboolean *thread_done)</td></tr>
+<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> *thread_done = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> gtk_main_quit ();</td></tr>
+<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr>
+<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line">gs_auth_pam_verify_user (pam_handle_t *handle,</td></tr>
+<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>int</span> *status)</td></tr>
+<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> GThread *auth_thread;</td></tr>
+<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> GIOChannel *channel;</td></tr>
+<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> guint watch_id;</td></tr>
+<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>int</span> auth_operation_fds[2];</td></tr>
+<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='keyword'>int</span> auth_status;</td></tr>
+<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> gboolean thread_done;</td></tr>
+<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> channel = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> auth_status = <span class='macro'>PAM_AUTH_ERR<span class='macro_popup'>7</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='comment'>/* This pipe gives us a set of fds we can hook into</span></td></tr>
+<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> <span class='comment'>* the event loop to be notified when our helper thread</span></td></tr>
+<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> <span class='comment'>* is ready to be reaped.</span></td></tr>
+<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='keyword'>if</span> (pipe (auth_operation_fds) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[0], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> <span class='keyword'>if</span> (fcntl (auth_operation_fds[1], <span class='macro'>F_SETFD<span class='macro_popup'>2</span></span>, <span class='macro'>FD_CLOEXEC<span class='macro_popup'>1</span></span>) &lt; 0)</td></tr>
+<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> close (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close (auth_operation_fds[1]);</td></tr>
+<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> channel = g_io_channel_unix_new (auth_operation_fds[0]);</td></tr>
+<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='comment'>/* we use a recursive main loop to process ui events</span></td></tr>
+<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> <span class='comment'>* while we wait on a thread to handle the blocking parts</span></td></tr>
+<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> <span class='comment'>* of pam authentication.</span></td></tr>
+<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> thread_done = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> watch_id = g_io_add_watch (channel, G_IO_ERR | G_IO_HUP,</td></tr>
+<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> (GIOFunc) gs_auth_loop_quit, &amp;thread_done);</td></tr>
+<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> auth_thread = g_thread_new (<span class='string_literal'>"auththread"</span>,</td></tr>
+<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> gs_auth_thread_func,</td></tr>
+<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> <span class='macro'>GINT_TO_POINTER (auth_operation_fds[1])<span class='macro_popup'>((gpointer) (glong) (auth_operation_fds[1]))</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='keyword'>if</span> (auth_thread == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='keyword'>goto</span> out;</td></tr>
+<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> gtk_main ();</td></tr>
+<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> <span class='comment'>/* if the event loop was quit before the thread is done then we can't</span></td></tr>
+<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> <span class='comment'>* reap the thread without blocking on it finishing. The</span></td></tr>
+<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='comment'>* thread may not ever finish though if the pam module is blocking.</span></td></tr>
+<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> <span class='comment'>* The only time the event loop is going to stop when the thread isn't</span></td></tr>
+<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='comment'>* done, however, is if the dialog quits early (from, e.g., "cancel"),</span></td></tr>
+<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> <span class='comment'>* so we can just exit. An alternative option would be to switch to</span></td></tr>
+<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>* using pthreads directly and calling pthread_cancel.</span></td></tr>
+<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (!thread_done)</td></tr>
+<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> raise (<span class='macro'>SIGTERM<span class='macro_popup'>15</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> auth_status = <span class='macro'>GPOINTER_TO_INT (g_thread_join (auth_thread))<span class='macro_popup'>((gint) (glong) (g_thread_join (auth_thread)))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line">out:</td></tr>
+<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> <span class='keyword'>if</span> (watch_id != 0 &amp;&amp; !thread_done)</td></tr>
+<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> g_source_remove (watch_id);</td></tr>
+<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> watch_id = 0;</td></tr>
+<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> <span class='keyword'>if</span> (channel != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> g_io_channel_unref (channel);</td></tr>
+<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> <span class='keyword'>if</span> (status)</td></tr>
+<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> *status = auth_status;</td></tr>
+<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> <span class='keyword'>return</span> auth_status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line">gs_auth_verify_user (<span class='keyword'>const</span> <span class='keyword'>char</span> *username,</td></tr>
+<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *display,</td></tr>
+<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> GSAuthMessageFunc func,</td></tr>
+<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> gpointer data,</td></tr>
+<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> GError **error)</td></tr>
+<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>int</span> status = -1;</td></tr>
+<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='keyword'>struct</span> pam_conv conv;</td></tr>
+<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='keyword'>struct</span> pam_closure c;</td></tr>
+<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> <span class='keyword'>struct</span> passwd *pwent;</td></tr>
+<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> pwent = getpwnam (username);</td></tr>
+<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> <span class='keyword'>if</span> (pwent == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> c.username = username;</td></tr>
+<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> c.cb_func = func;</td></tr>
+<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> c.cb_data = data;</td></tr>
+<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> conv.conv = &amp;pam_conversation;</td></tr>
+<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> conv.appdata_ptr = (<span class='keyword'>void</span> *) &amp;c;</td></tr>
+<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> <span class='comment'>/* Initialize PAM. */</span></td></tr>
+<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> create_pam_handle (username, display, &amp;conv, &amp;status);</td></tr>
+<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> pam_set_item (pam_handle, <span class='macro'>PAM_USER_PROMPT<span class='macro_popup'>9</span></span>, <span class='macro'>_(<span class='string_literal'>"Username:"</span>)<span class='macro_popup'>gettext ("Username:")</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> <span class='macro'>PAM_NO_DELAY(pam_handle)<span class='macro_popup'>pam_fail_delay ((pam_handle), 1)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> did_we_ask_for_password = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line"> <span class='keyword'>if</span> (! gs_auth_pam_verify_user (pam_handle, &amp;status))</td></tr>
+<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"> <span class='keyword'>goto</span> done;</td></tr>
+<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line">done:</td></tr>
+<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> <span class='keyword'>if</span> (status != <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> set_pam_error (error, status);</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> close_pam_handle (status);</td></tr>
+<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> <span class='keyword'>return</span> (status == <span class='macro'>PAM_SUCCESS<span class='macro_popup'>0</span></span> ? <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span> : <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line">gs_auth_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line">gboolean</td></tr>
+<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line">gs_auth_priv_init (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> <span class='comment'>/* We have nothing to do at init-time.</span></td></tr>
+<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line"> <span class='comment'>However, we might as well do some error checking.</span></td></tr>
+<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> <span class='comment'>If "/etc/pam.d" exists and is a directory, but "/etc/pam.d/xlock"</span></td></tr>
+<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"> <span class='comment'>does not exist, warn that PAM probably isn't going to work.</span></td></tr>
+<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line"> <span class='comment'>This is a priv-init instead of a non-priv init in case the directory</span></td></tr>
+<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> <span class='comment'>is unreadable or something (don't know if that actually happens.)</span></td></tr>
+<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> dir [] = <span class='string_literal'>"/etc/pam.d"</span>;</td></tr>
+<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file [] = <span class='string_literal'>"/etc/pam.d/"</span> <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> file2 [] = <span class='string_literal'>"/etc/pam.conf"</span>;</td></tr>
+<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> <span class='keyword'>struct</span> stat st;</td></tr>
+<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (dir, &amp;st) == 0 &amp;&amp; st.st_mode &amp; <span class='macro'>S_IFDIR<span class='macro_popup'>0040000</span></span>)</td></tr>
+<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file, &amp;st) != 0)</td></tr>
+<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> g_warning (<span class='string_literal'>"%s does not exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> file);</td></tr>
+<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (<span class='macro'>g_stat<span class='macro_popup'>stat</span></span> (file2, &amp;st) == 0)</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> FILE *f = <span class='macro'>g_fopen<span class='macro_popup'>fopen</span></span> (file2, <span class='string_literal'>"r"</span>);</td></tr>
+<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='keyword'>if</span> (f)</td></tr>
+<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> gboolean ok = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"> <span class='keyword'>char</span> buf[255];</td></tr>
+<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line"> <span class='keyword'>while</span> (fgets (buf, <span class='keyword'>sizeof</span>(buf), f))</td></tr>
+<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> <span class='keyword'>if</span> (strstr (buf, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>))</td></tr>
+<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> ok = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> <span class='keyword'>break</span>;</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> fclose (f);</td></tr>
+<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line"> <span class='keyword'>if</span> (!ok)</td></tr>
+<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"> g_warning (<span class='string_literal'>"%s does not list the `%s' service.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> file2, <span class='macro'>PAM_SERVICE_NAME<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> <span class='comment'>/* else warn about file2 existing but being unreadable? */</span></td></tr>
+<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> g_warning (<span class='string_literal'>"Neither %s nor %s exist.\n"</span></td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> <span class='string_literal'>"Authentication via PAM is unlikely to work."</span>,</td></tr>
+<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> file2, file);</td></tr>
+<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> <span class='comment'>/* Return true anyway, just in case. */</span></td></tr>
+<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fc5910.html b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fc5910.html
new file mode 100644
index 0000000..154c308
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/report-fc5910.html
@@ -0,0 +1,815 @@
+<!doctype html>
+<html>
+<head>
+<title>test-fade.c</title>
+
+<style type="text/css">
+body { color:#000000; background-color:#ffffff }
+body { font-family:Helvetica, sans-serif; font-size:10pt }
+h1 { font-size:14pt }
+.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; }
+.FileNav { margin-left: 5px; margin-right: 5px; display: inline; }
+.FileNav a { text-decoration:none; font-size: larger; }
+.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; }
+.divider { background-color: gray; }
+.code { border-collapse:collapse; width:100%; }
+.code { font-family: "Monospace", monospace; font-size:10pt }
+.code { line-height: 1.2em }
+.comment { color: green; font-style: oblique }
+.keyword { color: blue }
+.string_literal { color: red }
+.directive { color: darkmagenta }
+
+/* Macros and variables could have pop-up notes hidden by default.
+ - Macro pop-up: expansion of the macro
+ - Variable pop-up: value (table) of the variable */
+.macro_popup, .variable_popup { display: none; }
+
+/* Pop-up appears on mouse-hover event. */
+.macro:hover .macro_popup, .variable:hover .variable_popup {
+ display: block;
+ padding: 2px;
+ -webkit-border-radius:5px;
+ -webkit-box-shadow:1px 1px 7px #000;
+ border-radius:5px;
+ box-shadow:1px 1px 7px #000;
+ position: absolute;
+ top: -1em;
+ left:10em;
+ z-index: 1
+}
+
+.macro_popup {
+ border: 2px solid red;
+ background-color:#FFF0F0;
+ font-weight: normal;
+}
+
+.variable_popup {
+ border: 2px solid blue;
+ background-color:#F0F0FF;
+ font-weight: bold;
+ font-family: Helvetica, sans-serif;
+ font-size: 9pt;
+}
+
+/* Pop-up notes needs a relative position as a base where they pops up. */
+.macro, .variable {
+ background-color: PaleGoldenRod;
+ position: relative;
+}
+.macro { color: DarkMagenta; }
+
+#tooltiphint {
+ position: fixed;
+ width: 50em;
+ margin-left: -25em;
+ left: 50%;
+ padding: 10px;
+ border: 1px solid #b0b0b0;
+ border-radius: 2px;
+ box-shadow: 1px 1px 7px black;
+ background-color: #c0c0c0;
+ z-index: 2;
+}
+
+.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
+.num { text-align:right; font-size:8pt }
+.num { color:#444444 }
+.line { padding-left: 1ex; border-left: 3px solid #ccc }
+.line { white-space: pre }
+.msg { -webkit-box-shadow:1px 1px 7px #000 }
+.msg { box-shadow:1px 1px 7px #000 }
+.msg { -webkit-border-radius:5px }
+.msg { border-radius:5px }
+.msg { font-family:Helvetica, sans-serif; font-size:8pt }
+.msg { float:left }
+.msg { position:relative }
+.msg { padding:0.25em 1ex 0.25em 1ex }
+.msg { margin-top:10px; margin-bottom:10px }
+.msg { font-weight:bold }
+.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
+.msgT { padding:0x; spacing:0x }
+.msgEvent { background-color:#fff8b4; color:#000000 }
+.msgControl { background-color:#bbbbbb; color:#000000 }
+.msgNote { background-color:#ddeeff; color:#000000 }
+.mrange { background-color:#dfddf3 }
+.mrange { border-bottom:1px solid #6F9DBE }
+.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
+.PathIndex { -webkit-border-radius:8px }
+.PathIndex { border-radius:8px }
+.PathIndexEvent { background-color:#bfba87 }
+.PathIndexControl { background-color:#8c8c8c }
+.PathIndexPopUp { background-color: #879abc; }
+.PathNav a { text-decoration:none; font-size: larger }
+.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
+.CodeRemovalHint { background-color:#de1010 }
+.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
+.msg.selected{ background-color:orange !important; }
+
+table.simpletable {
+ padding: 5px;
+ font-size:12pt;
+ margin:20px;
+ border-collapse: collapse; border-spacing: 0px;
+}
+td.rowname {
+ text-align: right;
+ vertical-align: top;
+ font-weight: bold;
+ color:#444444;
+ padding-right:2ex;
+}
+
+/* Hidden text. */
+input.spoilerhider + label {
+ cursor: pointer;
+ text-decoration: underline;
+ display: block;
+}
+input.spoilerhider {
+ display: none;
+}
+input.spoilerhider ~ .spoiler {
+ overflow: hidden;
+ margin: 10px auto 0;
+ height: 0;
+ opacity: 0;
+}
+input.spoilerhider:checked + label + .spoiler{
+ height: auto;
+ opacity: 1;
+}
+</style>
+</head>
+<body>
+<!-- BUGDESC This statement is never executed -->
+
+<!-- BUGTYPE Unreachable code -->
+
+<!-- BUGCATEGORY Unused code -->
+
+<!-- BUGFILE /rootdir/src/test-fade.c -->
+
+<!-- FILENAME test-fade.c -->
+
+<!-- FUNCTIONNAME main -->
+
+<!-- ISSUEHASHCONTENTOFLINEINCONTEXT fc59103ad66b19a0cee9a0bcdfab85b4 -->
+
+<!-- BUGLINE 94 -->
+
+<!-- BUGCOLUMN 3 -->
+
+<!-- BUGPATHLENGTH 1 -->
+
+<!-- BUGMETAEND -->
+<!-- REPORTHEADER -->
+<h3>Bug Summary</h3>
+<table class="simpletable">
+<tr><td class="rowname">File:</td><td>rc/test-fade.c</td></tr>
+<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 94, column 3</a><br />This statement is never executed</td></tr>
+
+</table>
+<!-- REPORTSUMMARYEXTRA -->
+<h3>Annotated Source Code</h3>
+<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a>
+ to see keyboard shortcuts</p>
+<input type="checkbox" class="spoilerhider" id="showinvocation" />
+<label for="showinvocation" >Show analyzer invocation</label>
+<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test-fade.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.0 -D HAVE_CONFIG_H -I . -I .. -I . -I . -D MATEMENU_I_KNOW_THIS_IS_UNSTABLE -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/mate-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I /usr/include/mate-menus -D PREFIX="/usr/local" -D BINDIR="/usr/local/bin" -D LIBDIR="/usr/local/lib" -D LIBEXECDIR="/usr/local/libexec" -D DATADIR="/usr/local/share" -D SYSCONFDIR="/usr/local/etc" -D MATELOCALEDIR="/usr/local/share/locale" -D PKGLIBEXECDIR="/usr/local/libexec/mate-screensaver" -D SAVERDIR="/usr/local/libexec/mate-screensaver" -D THEMESDIR="/usr/local/share/mate-screensaver/themes" -D GTKBUILDERDIR="/usr/local/share/mate-screensaver" -D MATE_SCREENSAVER_GL_HELPER_PATH="/usr/local/libexec/mate-screensaver-gl-helper" -D PAM_SERVICE_NAME="mate-screensaver" -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -internal-isystem /usr/lib64/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-07-29-132358-6660-1 -x c test-fade.c
+</div>
+<div id='tooltiphint' hidden="true">
+ <p>Keyboard shortcuts: </p>
+ <ul>
+ <li>Use 'j/k' keys for keyboard navigation</li>
+ <li>Use 'Shift+S' to show/hide relevant lines</li>
+ <li>Use '?' to toggle this window</li>
+ </ul>
+ <a href="#" onclick="toggleHelp(); return false;">Close</a>
+</div>
+<script type='text/javascript'>
+var relevant_lines = {"1": {"94": 1}};
+
+var filterCounterexample = function (hide) {
+ var tables = document.getElementsByClassName("code");
+ for (var t=0; t<tables.length; t++) {
+ var table = tables[t];
+ var file_id = table.getAttribute("data-fileid");
+ var lines_in_fid = relevant_lines[file_id];
+ if (!lines_in_fid) {
+ lines_in_fid = {};
+ }
+ var lines = table.getElementsByClassName("codeline");
+ for (var i=0; i<lines.length; i++) {
+ var el = lines[i];
+ var lineNo = el.getAttribute("data-linenumber");
+ if (!lines_in_fid[lineNo]) {
+ if (hide) {
+ el.setAttribute("hidden", "");
+ } else {
+ el.removeAttribute("hidden");
+ }
+ }
+ }
+ }
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // SHIFT + S
+ if (event.shiftKey && event.keyCode == 83) {
+ var checked = document.getElementsByName("showCounterexample")[0].checked;
+ filterCounterexample(!checked);
+ document.getElementsByName("showCounterexample")[0].click();
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+
+document.addEventListener("DOMContentLoaded", function() {
+ document.querySelector('input[name="showCounterexample"]').onchange=
+ function (event) {
+ filterCounterexample(this.checked);
+ };
+});
+</script>
+
+<form>
+ <input type="checkbox" name="showCounterexample" id="showCounterexample" />
+ <label for="showCounterexample">
+ Show only relevant lines
+ </label>
+ <input type="checkbox" name="showArrows"
+ id="showArrows" style="margin-left: 10px" />
+ <label for="showArrows">
+ Show control flow arrows
+ </label>
+</form>
+
+<script type='text/javascript'>
+// Return range of numbers from a range [lower, upper).
+function range(lower, upper) {
+ var array = [];
+ for (var i = lower; i <= upper; ++i) {
+ array.push(i);
+ }
+ return array;
+}
+
+var getRelatedArrowIndices = function(pathId) {
+ // HTML numeration of events is a bit different than it is in the path.
+ // Everything is rotated one step to the right, so the last element
+ // (error diagnostic) has index 0.
+ if (pathId == 0) {
+ // arrowIndices has at least 2 elements
+ pathId = arrowIndices.length - 1;
+ }
+
+ return range(arrowIndices[pathId], arrowIndices[pathId - 1]);
+}
+
+var highlightArrowsForSelectedEvent = function() {
+ const selectedNum = findNum();
+ const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum);
+ arrowIndicesToHighlight.forEach((index) => {
+ var arrow = document.querySelector("#arrow" + index);
+ if(arrow) {
+ classListAdd(arrow, "selected")
+ }
+ });
+}
+
+var getAbsoluteBoundingRect = function(element) {
+ const relative = element.getBoundingClientRect();
+ return {
+ left: relative.left + window.pageXOffset,
+ right: relative.right + window.pageXOffset,
+ top: relative.top + window.pageYOffset,
+ bottom: relative.bottom + window.pageYOffset,
+ height: relative.height,
+ width: relative.width
+ };
+}
+
+var drawArrow = function(index) {
+ // This function is based on the great answer from SO:
+ // https://stackoverflow.com/a/39575674/11582326
+ var start = document.querySelector("#start" + index);
+ var end = document.querySelector("#end" + index);
+ var arrow = document.querySelector("#arrow" + index);
+
+ var startRect = getAbsoluteBoundingRect(start);
+ var endRect = getAbsoluteBoundingRect(end);
+
+ // It is an arrow from a token to itself, no need to visualize it.
+ if (startRect.top == endRect.top &&
+ startRect.left == endRect.left)
+ return;
+
+ // Each arrow is a very simple Bézier curve, with two nodes and
+ // two handles. So, we need to calculate four points in the window:
+ // * start node
+ var posStart = { x: 0, y: 0 };
+ // * end node
+ var posEnd = { x: 0, y: 0 };
+ // * handle for the start node
+ var startHandle = { x: 0, y: 0 };
+ // * handle for the end node
+ var endHandle = { x: 0, y: 0 };
+ // One can visualize it as follows:
+ //
+ // start handle
+ // /
+ // X"""_.-""""X
+ // .' \
+ // / start node
+ // |
+ // |
+ // | end node
+ // \ /
+ // `->X
+ // X-'
+ // \
+ // end handle
+ //
+ // NOTE: (0, 0) is the top left corner of the window.
+
+ // We have 3 similar, but still different scenarios to cover:
+ //
+ // 1. Two tokens on different lines.
+ // -xxx
+ // /
+ // \
+ // -> xxx
+ // In this situation, we draw arrow on the left curving to the left.
+ // 2. Two tokens on the same line, and the destination is on the right.
+ // ____
+ // / \
+ // / V
+ // xxx xxx
+ // In this situation, we draw arrow above curving upwards.
+ // 3. Two tokens on the same line, and the destination is on the left.
+ // xxx xxx
+ // ^ /
+ // \____/
+ // In this situation, we draw arrow below curving downwards.
+ const onDifferentLines = startRect.top <= endRect.top - 5 ||
+ startRect.top >= endRect.top + 5;
+ const leftToRight = startRect.left < endRect.left;
+
+ // NOTE: various magic constants are chosen empirically for
+ // better positioning and look
+ if (onDifferentLines) {
+ // Case #1
+ const topToBottom = startRect.top < endRect.top;
+ posStart.x = startRect.left - 1;
+ // We don't want to start it at the top left corner of the token,
+ // it doesn't feel like this is where the arrow comes from.
+ // For this reason, we start it in the middle of the left side
+ // of the token.
+ posStart.y = startRect.top + startRect.height / 2;
+
+ // End node has arrow head and we give it a bit more space.
+ posEnd.x = endRect.left - 4;
+ posEnd.y = endRect.top;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ // We want bottom-to-top arrow to curve a bit more, so it doesn't
+ // overlap much with top-to-bottom curves (much more frequent).
+ x: topToBottom ? 15 : 25,
+ y: Math.min((posEnd.y - posStart.y) / 3, 10)
+ }
+
+ // When destination is on the different line, we can make a
+ // curvier arrow because we have space for it.
+ // So, instead of using
+ //
+ // startHandle.x = posStart.x - curvature.x
+ // endHandle.x = posEnd.x - curvature.x
+ //
+ // We use the leftmost of these two values for both handles.
+ startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x;
+ endHandle.x = startHandle.x;
+
+ // Curving downwards from the start node...
+ startHandle.y = posStart.y + curvature.y;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else if (leftToRight) {
+ // Case #2
+ // Starting from the top right corner...
+ posStart.x = startRect.right - 1;
+ posStart.y = startRect.top;
+
+ // ...and ending at the top left corner of the end token.
+ posEnd.x = endRect.left + 1;
+ posEnd.y = endRect.top - 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posEnd.x - posStart.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the right...
+ startHandle.x = posStart.x + curvature.x;
+ // ... and upwards from the start node.
+ startHandle.y = posStart.y - curvature.y;
+
+ // And to the left...
+ endHandle.x = posEnd.x - curvature.x;
+ // ... and upwards from the end node.
+ endHandle.y = posEnd.y - curvature.y;
+
+ } else {
+ // Case #3
+ // Starting from the bottom right corner...
+ posStart.x = startRect.right;
+ posStart.y = startRect.bottom;
+
+ // ...and ending also at the bottom right corner, but of the end token.
+ posEnd.x = endRect.right - 1;
+ posEnd.y = endRect.bottom + 1;
+
+ // Utility object with x and y offsets for handles.
+ var curvature = {
+ x: Math.min((posStart.x - posEnd.x) / 3, 15),
+ y: 5
+ }
+
+ // Curving to the left...
+ startHandle.x = posStart.x - curvature.x;
+ // ... and downwards from the start node.
+ startHandle.y = posStart.y + curvature.y;
+
+ // And to the right...
+ endHandle.x = posEnd.x + curvature.x;
+ // ... and downwards from the end node.
+ endHandle.y = posEnd.y + curvature.y;
+ }
+
+ // Put it all together into a path.
+ // More information on the format:
+ // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths
+ var pathStr = "M" + posStart.x + "," + posStart.y + " " +
+ "C" + startHandle.x + "," + startHandle.y + " " +
+ endHandle.x + "," + endHandle.y + " " +
+ posEnd.x + "," + posEnd.y;
+
+ arrow.setAttribute("d", pathStr);
+};
+
+var drawArrows = function() {
+ const numOfArrows = document.querySelectorAll("path[id^=arrow]").length;
+ for (var i = 0; i < numOfArrows; ++i) {
+ drawArrow(i);
+ }
+}
+
+var toggleArrows = function(event) {
+ const arrows = document.querySelector("#arrows");
+ if (event.target.checked) {
+ arrows.setAttribute("visibility", "visible");
+ } else {
+ arrows.setAttribute("visibility", "hidden");
+ }
+}
+
+window.addEventListener("resize", drawArrows);
+document.addEventListener("DOMContentLoaded", function() {
+ // Whenever we show invocation, locations change, i.e. we
+ // need to redraw arrows.
+ document
+ .querySelector('input[id="showinvocation"]')
+ .addEventListener("click", drawArrows);
+ // Hiding irrelevant lines also should cause arrow rerender.
+ document
+ .querySelector('input[name="showCounterexample"]')
+ .addEventListener("change", drawArrows);
+ document
+ .querySelector('input[name="showArrows"]')
+ .addEventListener("change", toggleArrows);
+ drawArrows();
+ // Default highlighting for the last event.
+ highlightArrowsForSelectedEvent();
+});
+</script>
+
+<script type='text/javascript'>
+var digitMatcher = new RegExp("[0-9]+");
+
+var querySelectorAllArray = function(selector) {
+ return Array.prototype.slice.call(
+ document.querySelectorAll(selector));
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+ querySelectorAllArray(".PathNav > a").forEach(
+ function(currentValue, currentIndex) {
+ var hrefValue = currentValue.getAttribute("href");
+ currentValue.onclick = function() {
+ scrollTo(document.querySelector(hrefValue));
+ return false;
+ };
+ });
+});
+
+var findNum = function() {
+ var s = document.querySelector(".msg.selected");
+ if (!s || s.id == "EndPath") {
+ return 0;
+ }
+ var out = parseInt(digitMatcher.exec(s.id)[0]);
+ return out;
+};
+
+var classListAdd = function(el, theClass) {
+ if(!el.className.baseVal)
+ el.className += " " + theClass;
+ else
+ el.className.baseVal += " " + theClass;
+};
+
+var classListRemove = function(el, theClass) {
+ var className = (!el.className.baseVal) ?
+ el.className : el.className.baseVal;
+ className = className.replace(" " + theClass, "");
+ if(!el.className.baseVal)
+ el.className = className;
+ else
+ el.className.baseVal = className;
+};
+
+var scrollTo = function(el) {
+ querySelectorAllArray(".selected").forEach(function(s) {
+ classListRemove(s, "selected");
+ });
+ classListAdd(el, "selected");
+ window.scrollBy(0, el.getBoundingClientRect().top -
+ (window.innerHeight / 2));
+ highlightArrowsForSelectedEvent();
+};
+
+var move = function(num, up, numItems) {
+ if (num == 1 && up || num == numItems - 1 && !up) {
+ return 0;
+ } else if (num == 0 && up) {
+ return numItems - 1;
+ } else if (num == 0 && !up) {
+ return 1 % numItems;
+ }
+ return up ? num - 1 : num + 1;
+}
+
+var numToId = function(num) {
+ if (num == 0) {
+ return document.getElementById("EndPath")
+ }
+ return document.getElementById("Path" + num);
+};
+
+var navigateTo = function(up) {
+ var numItems = document.querySelectorAll(
+ ".line > .msgEvent, .line > .msgControl").length;
+ var currentSelected = findNum();
+ var newSelected = move(currentSelected, up, numItems);
+ var newEl = numToId(newSelected, numItems);
+
+ // Scroll element into center.
+ scrollTo(newEl);
+};
+
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ // key 'j'
+ if (event.keyCode == 74) {
+ navigateTo(/*up=*/false);
+ // key 'k'
+ } else if (event.keyCode == 75) {
+ navigateTo(/*up=*/true);
+ } else {
+ return;
+ }
+ event.preventDefault();
+}, true);
+</script>
+
+<script type='text/javascript'>
+
+var toggleHelp = function() {
+ var hint = document.querySelector("#tooltiphint");
+ var attributeName = "hidden";
+ if (hint.hasAttribute(attributeName)) {
+ hint.removeAttribute(attributeName);
+ } else {
+ hint.setAttribute("hidden", "true");
+ }
+};
+window.addEventListener("keydown", function (event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+ if (event.key == "?") {
+ toggleHelp();
+ } else {
+ return;
+ }
+ event.preventDefault();
+});
+</script>
+
+<style type="text/css">
+ svg {
+ position:absolute;
+ top:0;
+ left:0;
+ height:100%;
+ width:100%;
+ pointer-events: none;
+ overflow: visible
+ }
+ .arrow {
+ stroke-opacity: 0.2;
+ stroke-width: 1;
+ marker-end: url(#arrowhead);
+ }
+
+ .arrow.selected {
+ stroke-opacity: 0.6;
+ stroke-width: 2;
+ marker-end: url(#arrowheadSelected);
+ }
+
+ .arrowhead {
+ orient: auto;
+ stroke: none;
+ opacity: 0.6;
+ fill: blue;
+ }
+</style>
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <marker id="arrowheadSelected" class="arrowhead" opacity="0.6"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ <marker id="arrowhead" class="arrowhead" opacity="0.2"
+ viewBox="0 0 10 10" refX="3" refY="5"
+ markerWidth="4" markerHeight="4">
+ <path d="M 0 0 L 10 5 L 0 10 z" />
+ </marker>
+ </defs>
+ <g id="arrows" fill="none" stroke="blue" visibility="hidden">
+
+ </g>
+</svg>
+<script type='text/javascript'>
+const arrowIndices = [ 0,0 ]
+</script>
+<table class="code" data-fileid="1">
+<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-</span></td></tr>
+<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>* Copyright (C) 2005 William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (C) 2012-2021 MATE Developers</span></td></tr>
+<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>* This program is free software; you can redistribute it and/or</span></td></tr>
+<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* modify it under the terms of the GNU General Public License as</span></td></tr>
+<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* published by the Free Software Foundation; either version 2 of the</span></td></tr>
+<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* License, or (at your option) any later version.</span></td></tr>
+<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* This program is distributed in the hope that it will be useful, but</span></td></tr>
+<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr>
+<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></td></tr>
+<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* General Public License for more details.</span></td></tr>
+<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr>
+<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* along with this program; if not, write to the Free Software</span></td></tr>
+<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</span></td></tr>
+<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* 02110-1301, USA.</span></td></tr>
+<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* Authors: William Jon McCann &lt;[email protected]&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*</span></td></tr>
+<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>*/</span></td></tr>
+<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include "config.h"</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;stdlib.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;sys/time.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"><span class='directive'>#include &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include &lt;sys/wait.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;termios.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"><span class='directive'>#include &lt;glib/gi18n.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include &lt;gdk/gdkx.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include &lt;gtk/gtk.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "gs-fade.h"</span></td></tr>
+<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "gs-debug.h"</span></td></tr>
+<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='directive'>#ifdef <span class='macro'>HAVE_XF86VMODE_GAMMA<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"><span class='directive'># include &lt;X11/extensions/xf86vmode.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"><span class='directive'>#define <span class='macro'>XF86_VIDMODE_NAME<span class='macro_popup'>"XFree86-VidModeExtension"</span></span> "XFree86-VidModeExtension"</span></td></tr>
+<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr>
+<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line">test_fade (<span class='keyword'>void</span>)</td></tr>
+<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> GSFade *fade;</td></tr>
+<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"> <span class='keyword'>int</span> reps = 2;</td></tr>
+<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> <span class='keyword'>int</span> delay = 2;</td></tr>
+<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line"> fade = gs_fade_new ();</td></tr>
+<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"> <span class='keyword'>while</span> (reps-- &gt; 0)</td></tr>
+<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line"> g_print (<span class='string_literal'>"fading out..."</span>);</td></tr>
+<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> gs_fade_sync (fade, 1000);</td></tr>
+<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"> g_print (<span class='string_literal'>"done.\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> g_print (<span class='string_literal'>"fading in..."</span>);</td></tr>
+<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line"> gs_fade_reset (fade);</td></tr>
+<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> g_print (<span class='string_literal'>"done.\n"</span>);</td></tr>
+<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line"> <span class='keyword'>if</span> (delay)</td></tr>
+<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> sleep (delay);</td></tr>
+<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line"> g_object_unref (fade);</td></tr>
+<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line">}</td></tr>
+<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line"><span class='keyword'>int</span></td></tr>
+<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line">main (<span class='keyword'>int</span> argc,</td></tr>
+<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"> <span class='keyword'>char</span> **argv)</td></tr>
+<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">{</td></tr>
+<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GError *error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr>
+<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> <span class='keyword'>int</span> op, event, err;</td></tr>
+<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"><span class='directive'>#ifdef <span class='macro'>ENABLE_NLS<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> bindtextdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='macro'>MATELOCALEDIR<span class='macro_popup'>"/usr/local/share/locale"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"><span class='directive'># ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span></td></tr>
+<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> bind_textdomain_codeset (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>, <span class='string_literal'>"UTF-8"</span>);</td></tr>
+<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"><span class='directive'># endif</span></td></tr>
+<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> textdomain (<span class='macro'>GETTEXT_PACKAGE<span class='macro_popup'>"mate-screensaver"</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"><span class='directive'>#endif</span></td></tr>
+<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line"> <span class='keyword'>if</span> (error)</td></tr>
+<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"> <span class="mrange">fprintf</span> (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"%s\n"</span>, error-&gt;message);</td></tr>
+<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:17ex">This statement is never executed</div></td></tr>
+<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> <span class='keyword'>if</span> (! gtk_init_with_args (&amp;argc, &amp;argv, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;error))</td></tr>
+<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> fprintf (<span class='macro'>stderr<span class='macro_popup'>stderr</span></span>, <span class='string_literal'>"%s"</span>, error-&gt;message);</td></tr>
+<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> g_error_free (error);</td></tr>
+<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> exit (1);</td></tr>
+<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='keyword'>if</span> (! XQueryExtension (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, <span class='macro'>XF86_VIDMODE_NAME<span class='macro_popup'>"XFree86-VidModeExtension"</span></span>, &amp;op, &amp;event, &amp;err))</td></tr>
+<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_message (<span class='string_literal'>"no "</span> <span class='macro'>XF86_VIDMODE_NAME<span class='macro_popup'>"XFree86-VidModeExtension"</span></span> <span class='string_literal'>" extension"</span>);</td></tr>
+<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"><span class='directive'># ifdef <span class='macro'>HAVE_XF86VMODE_GAMMA<span class='macro_popup'>1</span></span></span></td></tr>
+<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> <span class='keyword'>int</span> major;</td></tr>
+<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='keyword'>int</span> minor;</td></tr>
+<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> <span class='keyword'>if</span> (! XF86VidModeQueryVersion (<span class='macro'>GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())<span class='macro_popup'>(gdk_x11_display_get_xdisplay (gdk_display_get_default ()))</span></span>, &amp;major, &amp;minor))</td></tr>
+<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_message (<span class='string_literal'>"unable to get "</span> <span class='macro'>XF86_VIDMODE_NAME<span class='macro_popup'>"XFree86-VidModeExtension"</span></span> <span class='string_literal'>" version"</span>);</td></tr>
+<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> <span class='keyword'>else</span></td></tr>
+<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> {</td></tr>
+<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> g_message (<span class='macro'>XF86_VIDMODE_NAME<span class='macro_popup'>"XFree86-VidModeExtension"</span></span> <span class='string_literal'>" version %d.%d"</span>, major, minor);</td></tr>
+<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"><span class='directive'># else /* !HAVE_XF86VMODE_GAMMA */</span></td></tr>
+<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_message (<span class='string_literal'>"no support for display's "</span> <span class='macro'>XF86_VIDMODE_NAME<span class='macro_popup'>"XFree86-VidModeExtension"</span></span> <span class='string_literal'>" extension"</span>);</td></tr>
+<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"><span class='directive'># endif /* !HAVE_XF86VMODE_GAMMA */</span></td></tr>
+<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> }</td></tr>
+<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> gs_debug_init (<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>, <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr>
+<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> test_fade ();</td></tr>
+<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> gs_debug_shutdown ();</td></tr>
+<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> </td></tr>
+<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> <span class='keyword'>return</span> 0;</td></tr>
+<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line">}</td></tr>
+</table></body></html>
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/scanview.css b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/scanview.css
new file mode 100644
index 0000000..cf8a5a6
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/scanview.css
@@ -0,0 +1,62 @@
+body { color:#000000; background-color:#ffffff }
+body { font-family: Helvetica, sans-serif; font-size:9pt }
+h1 { font-size: 14pt; }
+h2 { font-size: 12pt; }
+table { font-size:9pt }
+table { border-spacing: 0px; border: 1px solid black }
+th, table thead {
+ background-color:#eee; color:#666666;
+ font-weight: bold; cursor: default;
+ text-align:center;
+ font-weight: bold; font-family: Verdana;
+ white-space:nowrap;
+}
+.W { font-size:0px }
+th, td { padding:5px; padding-left:8px; text-align:left }
+td.SUMM_DESC { padding-left:12px }
+td.DESC { white-space:pre }
+td.Q { text-align:right }
+td { text-align:left }
+tbody.scrollContent { overflow:auto }
+
+table.form_group {
+ background-color: #ccc;
+ border: 1px solid #333;
+ padding: 2px;
+}
+
+table.form_inner_group {
+ background-color: #ccc;
+ border: 1px solid #333;
+ padding: 0px;
+}
+
+table.form {
+ background-color: #999;
+ border: 1px solid #333;
+ padding: 2px;
+}
+
+td.form_label {
+ text-align: right;
+ vertical-align: top;
+}
+/* For one line entires */
+td.form_clabel {
+ text-align: right;
+ vertical-align: center;
+}
+td.form_value {
+ text-align: left;
+ vertical-align: top;
+}
+td.form_submit {
+ text-align: right;
+ vertical-align: top;
+}
+
+h1.SubmitFail {
+ color: #f00;
+}
+h1.SubmitOk {
+}
diff --git a/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/sorttable.js b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/sorttable.js
new file mode 100644
index 0000000..32faa07
--- /dev/null
+++ b/2022-07-29-132358-6660-1@ba864816eb23_fix-20220729/sorttable.js
@@ -0,0 +1,492 @@
+/*
+ SortTable
+ version 2
+ 7th April 2007
+ Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
+
+ Instructions:
+ Download this file
+ Add <script src="sorttable.js"></script> to your HTML
+ Add class="sortable" to any table you'd like to make sortable
+ Click on the headers to sort
+
+ Thanks to many, many people for contributions and suggestions.
+ Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
+ This basically means: do what you want with it.
+*/
+
+
+var stIsIE = /*@cc_on!@*/false;
+
+sorttable = {
+ init: function() {
+ // quit if this function has already been called
+ if (arguments.callee.done) return;
+ // flag this function so we don't do the same thing twice
+ arguments.callee.done = true;
+ // kill the timer
+ if (_timer) clearInterval(_timer);
+
+ if (!document.createElement || !document.getElementsByTagName) return;
+
+ sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
+
+ forEach(document.getElementsByTagName('table'), function(table) {
+ if (table.className.search(/\bsortable\b/) != -1) {
+ sorttable.makeSortable(table);
+ }
+ });
+
+ },
+
+ makeSortable: function(table) {
+ if (table.getElementsByTagName('thead').length == 0) {
+ // table doesn't have a tHead. Since it should have, create one and
+ // put the first table row in it.
+ the = document.createElement('thead');
+ the.appendChild(table.rows[0]);
+ table.insertBefore(the,table.firstChild);
+ }
+ // Safari doesn't support table.tHead, sigh
+ if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
+
+ if (table.tHead.rows.length != 1) return; // can't cope with two header rows
+
+ // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
+ // "total" rows, for example). This is B&R, since what you're supposed
+ // to do is put them in a tfoot. So, if there are sortbottom rows,
+ // for backward compatibility, move them to tfoot (creating it if needed).
+ sortbottomrows = [];
+ for (var i=0; i<table.rows.length; i++) {
+ if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
+ sortbottomrows[sortbottomrows.length] = table.rows[i];
+ }
+ }
+ if (sortbottomrows) {
+ if (table.tFoot == null) {
+ // table doesn't have a tfoot. Create one.
+ tfo = document.createElement('tfoot');
+ table.appendChild(tfo);
+ }
+ for (var i=0; i<sortbottomrows.length; i++) {
+ tfo.appendChild(sortbottomrows[i]);
+ }
+ delete sortbottomrows;
+ }
+
+ // work through each column and calculate its type
+ headrow = table.tHead.rows[0].cells;
+ for (var i=0; i<headrow.length; i++) {
+ // manually override the type with a sorttable_type attribute
+ if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
+ mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
+ if (mtch) { override = mtch[1]; }
+ if (mtch && typeof sorttable["sort_"+override] == 'function') {
+ headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
+ } else {
+ headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
+ }
+ // make it clickable to sort
+ headrow[i].sorttable_columnindex = i;
+ headrow[i].sorttable_tbody = table.tBodies[0];
+ dean_addEvent(headrow[i],"click", function(e) {
+
+ if (this.className.search(/\bsorttable_sorted\b/) != -1) {
+ // if we're already sorted by this column, just
+ // reverse the table, which is quicker
+ sorttable.reverse(this.sorttable_tbody);
+ this.className = this.className.replace('sorttable_sorted',
+ 'sorttable_sorted_reverse');
+ this.removeChild(document.getElementById('sorttable_sortfwdind'));
+ sortrevind = document.createElement('span');
+ sortrevind.id = "sorttable_sortrevind";
+ sortrevind.innerHTML = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ this.appendChild(sortrevind);
+ return;
+ }
+ if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
+ // if we're already sorted by this column in reverse, just
+ // re-reverse the table, which is quicker
+ sorttable.reverse(this.sorttable_tbody);
+ this.className = this.className.replace('sorttable_sorted_reverse',
+ 'sorttable_sorted');
+ this.removeChild(document.getElementById('sorttable_sortrevind'));
+ sortfwdind = document.createElement('span');
+ sortfwdind.id = "sorttable_sortfwdind";
+ sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ this.appendChild(sortfwdind);
+ return;
+ }
+
+ // remove sorttable_sorted classes
+ theadrow = this.parentNode;
+ forEach(theadrow.childNodes, function(cell) {
+ if (cell.nodeType == 1) { // an element
+ cell.className = cell.className.replace('sorttable_sorted_reverse','');
+ cell.className = cell.className.replace('sorttable_sorted','');
+ }
+ });
+ sortfwdind = document.getElementById('sorttable_sortfwdind');
+ if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
+ sortrevind = document.getElementById('sorttable_sortrevind');
+ if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
+
+ this.className += ' sorttable_sorted';
+ sortfwdind = document.createElement('span');
+ sortfwdind.id = "sorttable_sortfwdind";
+ sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ this.appendChild(sortfwdind);
+
+ // build an array to sort. This is a Schwartzian transform thing,
+ // i.e., we "decorate" each row with the actual sort key,
+ // sort based on the sort keys, and then put the rows back in order
+ // which is a lot faster because you only do getInnerText once per row
+ row_array = [];
+ col = this.sorttable_columnindex;
+ rows = this.sorttable_tbody.rows;
+ for (var j=0; j<rows.length; j++) {
+ row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
+ }
+ /* If you want a stable sort, uncomment the following line */
+ sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
+ /* and comment out this one */
+ //row_array.sort(this.sorttable_sortfunction);
+
+ tb = this.sorttable_tbody;
+ for (var j=0; j<row_array.length; j++) {
+ tb.appendChild(row_array[j][1]);
+ }
+
+ delete row_array;
+ });
+ }
+ }
+ },
+
+ guessType: function(table, column) {
+ // guess the type of a column based on its first non-blank row
+ sortfn = sorttable.sort_alpha;
+ for (var i=0; i<table.tBodies[0].rows.length; i++) {
+ text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
+ if (text != '') {
+ if (text.match(/^-?[�$�]?[\d,.]+%?$/)) {
+ return sorttable.sort_numeric;
+ }
+ // check for a date: dd/mm/yyyy or dd/mm/yy
+ // can have / or . or - as separator
+ // can be mm/dd as well
+ possdate = text.match(sorttable.DATE_RE)
+ if (possdate) {
+ // looks like a date
+ first = parseInt(possdate[1]);
+ second = parseInt(possdate[2]);
+ if (first > 12) {
+ // definitely dd/mm
+ return sorttable.sort_ddmm;
+ } else if (second > 12) {
+ return sorttable.sort_mmdd;
+ } else {
+ // looks like a date, but we can't tell which, so assume
+ // that it's dd/mm (English imperialism!) and keep looking
+ sortfn = sorttable.sort_ddmm;
+ }
+ }
+ }
+ }
+ return sortfn;
+ },
+
+ getInnerText: function(node) {
+ // gets the text we want to use for sorting for a cell.
+ // strips leading and trailing whitespace.
+ // this is *not* a generic getInnerText function; it's special to sorttable.
+ // for example, you can override the cell text with a customkey attribute.
+ // it also gets .value for <input> fields.
+
+ hasInputs = (typeof node.getElementsByTagName == 'function') &&
+ node.getElementsByTagName('input').length;
+
+ if (node.getAttribute("sorttable_customkey") != null) {
+ return node.getAttribute("sorttable_customkey");
+ }
+ else if (typeof node.textContent != 'undefined' && !hasInputs) {
+ return node.textContent.replace(/^\s+|\s+$/g, '');
+ }
+ else if (typeof node.innerText != 'undefined' && !hasInputs) {
+ return node.innerText.replace(/^\s+|\s+$/g, '');
+ }
+ else if (typeof node.text != 'undefined' && !hasInputs) {
+ return node.text.replace(/^\s+|\s+$/g, '');
+ }
+ else {
+ switch (node.nodeType) {
+ case 3:
+ if (node.nodeName.toLowerCase() == 'input') {
+ return node.value.replace(/^\s+|\s+$/g, '');
+ }
+ case 4:
+ return node.nodeValue.replace(/^\s+|\s+$/g, '');
+ break;
+ case 1:
+ case 11:
+ var innerText = '';
+ for (var i = 0; i < node.childNodes.length; i++) {
+ innerText += sorttable.getInnerText(node.childNodes[i]);
+ }
+ return innerText.replace(/^\s+|\s+$/g, '');
+ break;
+ default:
+ return '';
+ }
+ }
+ },
+
+ reverse: function(tbody) {
+ // reverse the rows in a tbody
+ newrows = [];
+ for (var i=0; i<tbody.rows.length; i++) {
+ newrows[newrows.length] = tbody.rows[i];
+ }
+ for (var i=newrows.length-1; i>=0; i--) {
+ tbody.appendChild(newrows[i]);
+ }
+ delete newrows;
+ },
+
+ /* sort functions
+ each sort function takes two parameters, a and b
+ you are comparing a[0] and b[0] */
+ sort_numeric: function(a,b) {
+ aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
+ if (isNaN(aa)) aa = 0;
+ bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));
+ if (isNaN(bb)) bb = 0;
+ return aa-bb;
+ },
+ sort_alpha: function(a,b) {
+ if (a[0]==b[0]) return 0;
+ if (a[0]<b[0]) return -1;
+ return 1;
+ },
+ sort_ddmm: function(a,b) {
+ mtch = a[0].match(sorttable.DATE_RE);
+ y = mtch[3]; m = mtch[2]; d = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt1 = y+m+d;
+ mtch = b[0].match(sorttable.DATE_RE);
+ y = mtch[3]; m = mtch[2]; d = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt2 = y+m+d;
+ if (dt1==dt2) return 0;
+ if (dt1<dt2) return -1;
+ return 1;
+ },
+ sort_mmdd: function(a,b) {
+ mtch = a[0].match(sorttable.DATE_RE);
+ y = mtch[3]; d = mtch[2]; m = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt1 = y+m+d;
+ mtch = b[0].match(sorttable.DATE_RE);
+ y = mtch[3]; d = mtch[2]; m = mtch[1];
+ if (m.length == 1) m = '0'+m;
+ if (d.length == 1) d = '0'+d;
+ dt2 = y+m+d;
+ if (dt1==dt2) return 0;
+ if (dt1<dt2) return -1;
+ return 1;
+ },
+
+ shaker_sort: function(list, comp_func) {
+ // A stable sort function to allow multi-level sorting of data
+ // see: http://en.wikipedia.org/wiki/Cocktail_sort
+ // thanks to Joseph Nahmias
+ var b = 0;
+ var t = list.length - 1;
+ var swap = true;
+
+ while(swap) {
+ swap = false;
+ for(var i = b; i < t; ++i) {
+ if ( comp_func(list[i], list[i+1]) > 0 ) {
+ var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
+ swap = true;
+ }
+ } // for
+ t--;
+
+ if (!swap) break;
+
+ for(var i = t; i > b; --i) {
+ if ( comp_func(list[i], list[i-1]) < 0 ) {
+ var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
+ swap = true;
+ }
+ } // for
+ b++;
+
+ } // while(swap)
+ }
+}
+
+/* ******************************************************************
+ Supporting functions: bundled here to avoid depending on a library
+ ****************************************************************** */
+
+// Dean Edwards/Matthias Miller/John Resig
+
+/* for Mozilla/Opera9 */
+if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", sorttable.init, false);
+}
+
+/* for Internet Explorer */
+/*@cc_on @*/
+/*@if (@_win32)
+ document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
+ var script = document.getElementById("__ie_onload");
+ script.onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ sorttable.init(); // call the onload handler
+ }
+ };
+/*@end @*/
+
+/* for Safari */
+if (/WebKit/i.test(navigator.userAgent)) { // sniff
+ var _timer = setInterval(function() {
+ if (/loaded|complete/.test(document.readyState)) {
+ sorttable.init(); // call the onload handler
+ }
+ }, 10);
+}
+
+/* for other browsers */
+window.onload = sorttable.init;
+
+// written by Dean Edwards, 2005
+// with input from Tino Zijdel, Matthias Miller, Diego Perini
+
+// http://dean.edwards.name/weblog/2005/10/add-event/
+
+function dean_addEvent(element, type, handler) {
+ if (element.addEventListener) {
+ element.addEventListener(type, handler, false);
+ } else {
+ // assign each event handler a unique ID
+ if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
+ // create a hash table of event types for the element
+ if (!element.events) element.events = {};
+ // create a hash table of event handlers for each element/event pair
+ var handlers = element.events[type];
+ if (!handlers) {
+ handlers = element.events[type] = {};
+ // store the existing event handler (if there is one)
+ if (element["on" + type]) {
+ handlers[0] = element["on" + type];
+ }
+ }
+ // store the event handler in the hash table
+ handlers[handler.$$guid] = handler;
+ // assign a global event handler to do all the work
+ element["on" + type] = handleEvent;
+ }
+};
+// a counter used to create unique IDs
+dean_addEvent.guid = 1;
+
+function removeEvent(element, type, handler) {
+ if (element.removeEventListener) {
+ element.removeEventListener(type, handler, false);
+ } else {
+ // delete the event handler from the hash table
+ if (element.events && element.events[type]) {
+ delete element.events[type][handler.$$guid];
+ }
+ }
+};
+
+function handleEvent(event) {
+ var returnValue = true;
+ // grab the event object (IE uses a global event object)
+ event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
+ // get a reference to the hash table of event handlers
+ var handlers = this.events[event.type];
+ // execute each event handler
+ for (var i in handlers) {
+ this.$$handleEvent = handlers[i];
+ if (this.$$handleEvent(event) === false) {
+ returnValue = false;
+ }
+ }
+ return returnValue;
+};
+
+function fixEvent(event) {
+ // add W3C standard event methods
+ event.preventDefault = fixEvent.preventDefault;
+ event.stopPropagation = fixEvent.stopPropagation;
+ return event;
+};
+fixEvent.preventDefault = function() {
+ this.returnValue = false;
+};
+fixEvent.stopPropagation = function() {
+ this.cancelBubble = true;
+}
+
+// Dean's forEach: http://dean.edwards.name/base/forEach.js
+/*
+ forEach, version 1.0
+ Copyright 2006, Dean Edwards
+ License: http://www.opensource.org/licenses/mit-license.php
+*/
+
+// array-like enumeration
+if (!Array.forEach) { // mozilla already supports this
+ Array.forEach = function(array, block, context) {
+ for (var i = 0; i < array.length; i++) {
+ block.call(context, array[i], i, array);
+ }
+ };
+}
+
+// generic enumeration
+Function.prototype.forEach = function(object, block, context) {
+ for (var key in object) {
+ if (typeof this.prototype[key] == "undefined") {
+ block.call(context, object[key], key, object);
+ }
+ }
+};
+
+// character enumeration
+String.forEach = function(string, block, context) {
+ Array.forEach(string.split(""), function(chr, index) {
+ block.call(context, chr, index, string);
+ });
+};
+
+// globally resolve forEach enumeration
+var forEach = function(object, block, context) {
+ if (object) {
+ var resolve = Object; // default
+ if (object instanceof Function) {
+ // functions have a "length" property
+ resolve = Function;
+ } else if (object.forEach instanceof Function) {
+ // the object implements a custom forEach method so use that
+ object.forEach(block, context);
+ return;
+ } else if (typeof object == "string") {
+ // the object is a string
+ resolve = String;
+ } else if (typeof object.length == "number") {
+ // the object is array-like
+ resolve = Array;
+ }
+ resolve.forEach(object, block, context);
+ }
+};