<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
authorMark Finkle <mfinkle@mozilla.com>
Thu, 26 Mar 2009 00:30:04 -0500
changeset 115 0878e47086b866995af01a42ae442c637af88a7c
parent 114 0daaac93ea350d378352d3f135164898d9ada3ca
child 116 a6038143acd010f52f677cd7615117cc79ee0be9
push id34
push usermfinkle@mozilla.com
push dateThu, 26 Mar 2009 05:32:51 +0000
bugs365436, 455247, 159758, 476549, 296272, 346787, 346971, 348057, 356769, 360945, 360971, 360974, 362423
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> Attachment 365436 Details for Bug 455247</title> <link rel="Top" href="https://bugzilla.mozilla.org/"> <link rel="Up" href="show_bug.cgi?id=455247"> <link rel="Show" title="Dependency Tree" href="showdependencytree.cgi?id=455247&amp;hide_resolved=1"> <link rel="Show" title="Dependency Graph" href="showdependencygraph.cgi?id=455247"> <link rel="Show" title="Votes (0)" href="votes.cgi?action=show_bug&amp;bug_id=455247"> <link rel="Show" title="Bug Activity" href="show_activity.cgi?id=455247"> <link rel="Show" title="Printer-Friendly Version" href="show_bug.cgi?format=multiple&amp;id=455247"> <link rel="Saved&nbsp;Searches" title="My Bugs" href="buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailreporter1=1&amp;emailtype1=exact&amp;email1=mark.finkle%40gmail.com&amp;field0-0-0=bug_status&amp;type0-0-0=notequals&amp;value0-0-0=UNCONFIRMED&amp;field0-0-1=reporter&amp;type0-0-1=equals&amp;value0-0-1=mark.finkle%40gmail.com"> <link rel="Saved&nbsp;Searches" title="DOC Bugs" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=DOC%20Bugs"> <link rel="Saved&nbsp;Searches" title="Embedding" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Embedding"> <link rel="Saved&nbsp;Searches" title="Fennec" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Fennec"> <link rel="Saved&nbsp;Searches" title="Fennec GFB" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Fennec%20GFB"> <link rel="Saved&nbsp;Searches" title="JSC Bugs" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=JSC%20Bugs"> <link rel="Saved&nbsp;Searches" title="Mobile Bugs" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Mobile%20Bugs"> <link rel="Saved&nbsp;Searches" title="Watched Bugs" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Watched%20Bugs"> <link rel="Saved&nbsp;Searches" title="WR ALL Bugs" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=WR%20ALL%20Bugs"> <link rel="Saved&nbsp;Searches" title="WR Bugs" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=WR%20Bugs"> <link rel="Saved&nbsp;Searches" title="XE Bugs" href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=XE%20Bugs"> <link rel="Saved&nbsp;Search" title="Bugs Filed Today (reed&#64;mozilla.com)" href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=Bugs%20Filed%20Today&amp;sharer_id=159758"> <link rel="Saved&nbsp;Search" title="tb3-blocking-plus-and-question (dmose&#64;mozilla.org)" href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=tb3-blocking-plus-and-question&amp;sharer_id=1537"> <link rel="Saved&nbsp;Search" title="tb3needs (dmose&#64;mozilla.org)" href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=tb3needs&amp;sharer_id=1537"> <link href="skins/standard/global.css" rel="stylesheet" type="text/css"> <!--[if IE]> <link href="skins/standard/IE-fixes.css" rel="stylesheet" type="text/css"> <![endif]--> <link href="skins/standard/global.css" rel="stylesheet" title="Classic" type="text/css"> <!--[if IE]> <link href="skins/standard/IE-fixes.css" rel="stylesheet" title="Classic" type="text/css"> <![endif]--> <link href="skins/contrib/Dusk/global.css" rel="alternate stylesheet" title="Dusk" type="text/css"> <!--[if IE]> <link href="skins/contrib/Dusk/IE-fixes.css" rel="alternate stylesheet" title="Dusk" type="text/css"> <![endif]--> <link href="skins/custom/global.css" rel="stylesheet" type="text/css"> <!--[if IE]> <link href="skins/custom/IE-fixes.css" rel="stylesheet" type="text/css"> <![endif]--> <link rel="search" type="application/opensearchdescription+xml" title="Bugzilla@Mozilla" href="./search_plugin.cgi"> <link rel="shortcut icon" href="skins/custom/images/bugzilla.png" > </head> <body onload="" class="bugzilla-mozilla-org"> <div id="mozilla-org"><a href="http://www.mozilla.org/" title="Visit mozilla.org">Visit mozilla.org</a></div> <div id="header"> <div id="banner"> </div> <table border="0" cellspacing="0" cellpadding="0" id="titles"> <tr> <td id="title"> <p>Bugzilla@Mozilla &ndash; Attachment 365436 Details for <i><a href="show_bug.cgi?id=455247" title="UNCONFIRMED - x11 backend of the gtk+ embedding widget needs to be updated">Bug 455247</a></i></p> </td> <td id="subtitle"> <p class="subheader">x11 backend of the gtk+ embedding widget needs to be updated</p> </td> </tr> </table> <ul class="links"> <li><a href="./">Home</a></li> <li><span class="separator">| </span><a href="enter_bug.cgi">New</a></li> <li><span class="separator">| </span><a href="query.cgi">Search</a></li> <li class="form"> <span class="separator">| </span> <form action="buglist.cgi" method="get" onsubmit="if (this.quicksearch.value == '') { alert('Please enter one or more search terms first.'); return false; } return true;"> <input class="txt" type="text" id="quicksearch_top" name="quicksearch"> <input class="btn" type="submit" value="Find" id="find_top"></form></li> <li><span class="separator">| </span><a href="report.cgi">Reports</a></li> <li> <span class="separator">| </span> <a href="request.cgi?requester=mark.finkle%40gmail.com&amp;requestee=mark.finkle%40gmail.com&amp;do_union=1&amp;group=type&amp;action=queue">My Requests</a></li> <li><span class="separator">| </span><a href="votes.cgi?action=show_user">My&nbsp;Votes</a></li> <li><span class="separator">| </span><a href="userprefs.cgi">Preferences</a></li> <li> <span class="separator">| </span> <a href="http://www.bugzilla.org/docs/tip/html/attachments.html" target="_blank">Help</a> </li> <li> <span class="separator">| </span> <a href="relogin.cgi">Log&nbsp;out</a> mark.finkle&#64;gmail.com</li> </ul> </div> <div id="bugzilla-body"> <!-- <div style="border: 2px dotted red; -moz-radius: 10px"> <p style="padding: 5px; margin: 0px; color: red; text-align: center;">We will be <a href="show_bug.cgi?id=476549">upgrading our Bugzilla instance</a> today (Monday, February 2) at 5:00pm PST (1:00am Tue UTC) to pick up upstream fixes. No downtime is expected, but if there is any it will be brief.</p> </div> <br> --> <script type="text/javascript"> <!-- var prev_mode = 'raw'; var current_mode = 'raw'; var has_edited = 0; var has_viewed_as_diff = 0; function editAsComment() { switchToMode('edit'); has_edited = 1; } function undoEditAsComment() { switchToMode(prev_mode); } function redoEditAsComment() { switchToMode('edit'); } function viewDiff() { switchToMode('diff'); // If we have not viewed as diff before, set the view diff frame URL if (!has_viewed_as_diff) { var viewDiffFrame = document.getElementById('viewDiffFrame'); viewDiffFrame.src = 'attachment.cgi?id=365436&action=diff&headers=0'; has_viewed_as_diff = 1; } } function viewRaw() { switchToMode('raw'); } function switchToMode(mode) { if (mode == current_mode) { alert('switched to same mode! This should not happen.'); return; } // Switch out of current mode if (current_mode == 'edit') { hideElementById('editFrame'); hideElementById('undoEditButton'); } else if (current_mode == 'raw') { hideElementById('viewFrame'); hideElementById('viewDiffButton'); hideElementById(has_edited ? 'redoEditButton' : 'editButton'); hideElementById('smallCommentFrame'); } else if (current_mode == 'diff') { hideElementById('viewDiffFrame'); hideElementById('viewRawButton'); hideElementById(has_edited ? 'redoEditButton' : 'editButton'); hideElementById('smallCommentFrame'); } // Switch into new mode if (mode == 'edit') { showElementById('editFrame'); showElementById('undoEditButton'); } else if (mode == 'raw') { showElementById('viewFrame'); showElementById('viewDiffButton'); showElementById(has_edited ? 'redoEditButton' : 'editButton'); showElementById('smallCommentFrame'); } else if (mode == 'diff') { showElementById('viewDiffFrame'); showElementById('viewRawButton'); showElementById(has_edited ? 'redoEditButton' : 'editButton'); showElementById('smallCommentFrame'); } prev_mode = current_mode; current_mode = mode; } function hideElementById(id) { var elm = document.getElementById(id); if (elm) { elm.style.display = 'none'; } } function showElementById(id, val) { var elm = document.getElementById(id); if (elm) { if (!val) val = 'inline'; elm.style.display = val; } } function normalizeComments() { // Remove the unused comment field from the document so its contents // do not get transmitted back to the server. var small = document.getElementById('smallCommentFrame'); var big = document.getElementById('editFrame'); if ( (small) && (small.style.display == 'none') ) { small.parentNode.removeChild(small); } if ( (big) && (big.style.display == 'none') ) { big.parentNode.removeChild(big); } } //--> </script> <form method="post" action="attachment.cgi" onsubmit="normalizeComments();"> <input type="hidden" name="id" value="365436"> <input type="hidden" name="action" value="update"> <input type="hidden" name="contenttypemethod" value="manual"> <input type="hidden" name="delta_ts" value="2009-03-12 15:16:29"> <table class="attachment_info" width="100%"> <tr> <td width="25%"> <small> <b><label for="description">Description</label>:</b><br><textarea name="description" id="description" wrap="soft" rows="3" cols="25">X11 and win32 GTK backend update</textarea><br> <b><label for="filename">Filename</label>:</b><br> <input type="text" size="20" id="filename" name="filename" value="patch"><br> <b>Size:</b> 34.72 KB<br> <b><label for="contenttypeentry">MIME Type</label>:</b><br> <input type="text" size="20" id="contenttypeentry" name="contenttypeentry" value="text/plain"><br> <b><label for="cf_fixed_in">Fixed In</label>:</b><br> <input type="checkbox" id="ispatch" name="ispatch" value="1" checked="checked"> <label for="ispatch">patch</label> <input type="checkbox" id="isobsolete" name="isobsolete" value="1" > <label for="isobsolete">obsolete</label> <br> </small> <script type="text/javascript"> <!-- // Enables or disables a requestee field depending on whether or not // the user is requesting the corresponding flag. function toggleRequesteeField(flagField, no_focus) { // Convert the ID of the flag field into the ID of its corresponding // requestee field and then use the ID to get the field. var id = flagField.name.replace(/flag(_type)?-(\d+)/, "requestee$1-$2"); var requesteeField = document.getElementById(id); if (!requesteeField) return; // Enable or disable the requestee field based on the value // of the flag field. if (flagField.value == "?") { requesteeField.parentNode.style.display = ""; if (!no_focus) requesteeField.focus(); } else requesteeField.parentNode.style.display = "none"; } // Disables requestee fields when the window is loaded since they shouldn't // be enabled until the user requests that flag type. function disableRequesteeFields() { var inputElements = document.getElementsByTagName("input"); var selectElements = document.getElementsByTagName("select"); //You cannot update Node lists, so you must create an array to combine the NodeLists var allElements = []; for( var i=0; i < inputElements.length; i++ ) { allElements[allElements.length] = inputElements.item(i); } for( var i=0; i < selectElements.length; i++ ) { //Combine inputs with selects allElements[allElements.length] = selectElements.item(i); } var inputElement, id, flagField; for ( var i=0 ; i<allElements.length ; i++ ) { inputElement = allElements[i]; if (inputElement.name.search(/^requestee(_type)?-(\d+)$/) != -1) { // Convert the ID of the requestee field into the ID of its corresponding // flag field and then use the ID to get the field. id = inputElement.name.replace(/requestee(_type)?-(\d+)/, "flag$1-$2"); flagField = document.getElementById(id); if (flagField && flagField.value != "?") inputElement.parentNode.style.display = "none"; } } } window.onload = disableRequesteeFields; // --> </script> <table id="flags"> <tr> <th colspan="3" align="left"> Flags: </th> <th> Requestee: </th> </tr> <tr> <td> <span title="Juan Pablo &lt;juanpablougarte&#64;gmail.com&gt;">juanpablougarte</span>: </td> <td> <label title="-multiplicable-specifically requestable- All components except for Bugzilla. The patch has passed review by a module owner or peer." for="flag-296272">review</label> </td> <td> <select id="flag-296272" name="flag-296272" title="-multiplicable-specifically requestable- All components except for Bugzilla. The patch has passed review by a module owner or peer." onchange="toggleRequesteeField(this);" class="flag_select flagname_review"> <option value="X"></option> <option value="?" selected>?</option> <option value="+" >+</option> <option value="-" >-</option> </select> </td> <td> <span style="white-space: nowrap;"> (<input type="text" size="30" maxlength="255" id="requestee-296272" name="requestee-296272" value="mark.finkle&#64;gmail.com">) </span> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="-specifically requestable- Core, Directory, NSPR, Documentation:Help Viewer, NSS, JSS, Camino, Firefox, Thunderbird, Mozilla Application Suite, Composer, Toolkit, Other Applications, and Fennec. The patch has passed review by a super-reviewer." for="flag_type-5">superreview</label> </td> <td> <select id="flag_type-5" name="flag_type-5" title="-specifically requestable- Core, Directory, NSPR, Documentation:Help Viewer, NSS, JSS, Camino, Firefox, Thunderbird, Mozilla Application Suite, Composer, Toolkit, Other Applications, and Fennec. The patch has passed review by a super-reviewer." onchange="toggleRequesteeField(this);" class="flag_select flagname_superreview"> <option value="X"></option> <option value="?">?</option> <option value="+">+</option> <option value="-">-</option> </select> </td> <td> <span style="white-space: nowrap;"> (<input type="text" size="30" maxlength="255" id="requestee_type-5" name="requestee_type-5">) </span> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="-specifically requestable- Firefox, Core, Toolkit, Calendar, Other Applications, Fennec, Thunderbird :: this UI change has been approved by a UI peer" for="flag_type-203">ui&#8209;review</label> </td> <td> <select id="flag_type-203" name="flag_type-203" title="-specifically requestable- Firefox, Core, Toolkit, Calendar, Other Applications, Fennec, Thunderbird :: this UI change has been approved by a UI peer" onchange="toggleRequesteeField(this);" class="flag_select flagname_ui-review"> <option value="X"></option> <option value="?">?</option> <option value="+">+</option> <option value="-">-</option> </select> </td> <td> <span style="white-space: nowrap;"> (<input type="text" size="30" maxlength="255" id="requestee_type-203" name="requestee_type-203">) </span> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="Use this flag to request approval to land the patch for 1.9.1" for="flag_type-478">approval1.9.1</label> </td> <td> <select id="flag_type-478" name="flag_type-478" title="Use this flag to request approval to land the patch for 1.9.1" onchange="toggleRequesteeField(this);" class="flag_select flagname_approval1.9.1"> <option value="X"></option> <option value="?">?</option> </select> </td> <td> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="Use this flag to request approval to land the patch during the drivers&#64;mozilla.org-managed checkin period for Mozilla 1.9.0.8" for="flag_type-513">approval1.9.0.8</label> </td> <td> <select id="flag_type-513" name="flag_type-513" title="Use this flag to request approval to land the patch during the drivers&#64;mozilla.org-managed checkin period for Mozilla 1.9.0.8" onchange="toggleRequesteeField(this);" class="flag_select flagname_approval1.9.0.8"> <option value="X"></option> <option value="?">?</option> </select> </td> <td> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="Use this flag to request approval to land the patch during the drivers&#64;mozilla.org-managed checkin period for Mozilla 1.9.0.9" for="flag_type-499">approval1.9.0.9</label> </td> <td> <select id="flag_type-499" name="flag_type-499" title="Use this flag to request approval to land the patch during the drivers&#64;mozilla.org-managed checkin period for Mozilla 1.9.0.9" onchange="toggleRequesteeField(this);" class="flag_select flagname_approval1.9.0.9"> <option value="X"></option> <option value="?">?</option> </select> </td> <td> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="Use this flag to request approval to land the patch on MOZILLA_1_8_BRANCH after the current release is done." for="flag_type-486">approval1.8.1.next</label> </td> <td> <select id="flag_type-486" name="flag_type-486" title="Use this flag to request approval to land the patch on MOZILLA_1_8_BRANCH after the current release is done." onchange="toggleRequesteeField(this);" class="flag_select flagname_approval1.8.1.next"> <option value="X"></option> <option value="?">?</option> </select> </td> <td> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="Use this flag to request approval to land the patch during the drivers&#64;mozilla.org-managed checkin period for Mozilla 1.9.0.10" for="flag_type-511">approval1.9.0.10</label> </td> <td> <select id="flag_type-511" name="flag_type-511" title="Use this flag to request approval to land the patch during the drivers&#64;mozilla.org-managed checkin period for Mozilla 1.9.0.10" onchange="toggleRequesteeField(this);" class="flag_select flagname_approval1.9.0.10"> <option value="X"></option> <option value="?">?</option> </select> </td> <td> </td> </tr> <tr> <td>&nbsp;</td> <td> <label title="Use this flag to request approval to land the patch on the MOZILLA_1_8_0_BRANCH for the next Mozilla 1.8.0.x vendor release" for="flag_type-370">approval1.8.0.next</label> </td> <td> <select id="flag_type-370" name="flag_type-370" title="Use this flag to request approval to land the patch on the MOZILLA_1_8_0_BRANCH for the next Mozilla 1.8.0.x vendor release" onchange="toggleRequesteeField(this);" class="flag_select flagname_approval1.8.0.next"> <option value="X"></option> <option value="?">?</option> </select> </td> <td> </td> </tr> <tr><td colspan="3"><hr></td></tr> <tr> <td colspan="2"> addl. <label title="-multiplicable-specifically requestable- All components except for Bugzilla. The patch has passed review by a module owner or peer." for="flag_type-4">review</label> </td> <td> <select id="flag_type-4" name="flag_type-4" title="-multiplicable-specifically requestable- All components except for Bugzilla. The patch has passed review by a module owner or peer." onchange="toggleRequesteeField(this);" class="flag_select flagname_review"> <option value="X"></option> <option value="?">?</option> <option value="+">+</option> <option value="-">-</option> </select> </td> <td> <span style="white-space: nowrap;"> (<input type="text" size="30" maxlength="255" id="requestee_type-4" name="requestee_type-4">) </span> </td> </tr> </table><br> <div id="smallCommentFrame"> <b><small><label for="comment">Comment</label> (on the bug):</small></b><br><textarea name="comment" id="comment" wrap="soft" rows="5" cols="25"></textarea><br> </div> <input type="submit" value="Submit" id="update"><br><br> <strong>Actions:</strong> <a href="attachment.cgi?id=365436">View</a> | <a href="attachment.cgi?id=365436&amp;action=diff">Diff</a> </td> <td width="75%"><textarea name="comment" id="editFrame" style="height: 400px; width: 100%; display: none" wrap="soft" rows="10" cols="80">&gt;diff -r cecafde2dd75 gtk/common/moz-web-view-common.cpp &gt;--- a/gtk/common/moz-web-view-common.cpp Tue Feb 24 09:41:07 2009 -0500 &gt;+++ b/gtk/common/moz-web-view-common.cpp Wed Mar 04 14:37:57 2009 -0200 &gt;&#64;&#64; -36,10 +36,7 &#64;&#64; &gt; * ***** END LICENSE BLOCK ***** */ &gt; &gt; #include &quot;nsError.h&quot; &gt;- &gt;-#include &quot;embed.h&quot; &gt; #include &quot;EmbeddingSetup.h&quot; &gt;-#include &quot;moz-web-view.h&quot; &gt; #include &quot;moz-web-view-common.h&quot; &gt; #include &quot;moz-web-view-marshal.h&quot; &gt; &gt;&#64;&#64; -229,39 +226,40 &#64;&#64; &gt; return viewable_type; &gt; } &gt; &gt;+static gchar * &gt;+moz_web_view_get_prop(MozWebView *view, const gchar *prop) &gt;+{ &gt;+ gchar *ret = NULL; &gt;+ g_return_val_if_fail(MOZ_IS_WEB_VIEW(view), NULL); &gt;+ &gt;+ g_object_get(G_OBJECT(view), prop, &amp;ret, NULL); &gt;+ &gt;+ return ret; &gt;+} &gt; &gt; /******************************************************* &gt; * MozWebView accessors * &gt; *******************************************************/ &gt; gchar * &gt;+moz_web_view_get_requested_uri(MozWebView *view) &gt;+{ &gt;+ return moz_web_view_get_prop (view, &quot;requested-uri&quot;); &gt;+} &gt;+ &gt;+gchar * &gt; moz_web_view_get_title(MozWebView *view) &gt; { &gt;- gchar *ret = NULL; &gt;- g_return_val_if_fail(MOZ_IS_WEB_VIEW(view), NULL); &gt;- &gt;- g_object_get(G_OBJECT(view), &quot;title&quot;, &amp;ret, NULL); &gt;- &gt;- return ret; &gt;+ return moz_web_view_get_prop (view, &quot;title&quot;); &gt; } &gt; &gt; gchar * &gt; moz_web_view_get_status(MozWebView *view) &gt; { &gt;- gchar *ret = NULL; &gt;- g_return_val_if_fail(MOZ_IS_WEB_VIEW(view), NULL); &gt;- &gt;- g_object_get(G_OBJECT(view), &quot;status&quot;, &amp;ret, NULL); &gt;- &gt;- return ret; &gt;+ return moz_web_view_get_prop (view, &quot;status&quot;); &gt; } &gt; &gt; gchar * &gt; moz_web_view_get_location(MozWebView *view) &gt; { &gt;- gchar *ret = NULL; &gt;- g_return_val_if_fail(MOZ_IS_WEB_VIEW(view), NULL); &gt;- &gt;- g_object_get(G_OBJECT(view), &quot;location&quot;, &amp;ret, NULL); &gt;- &gt;- return ret; &gt;+ return moz_web_view_get_prop (view, &quot;location&quot;); &gt; } &gt;diff -r cecafde2dd75 gtk/common/moz-web-view-common.h &gt;--- a/gtk/common/moz-web-view-common.h Tue Feb 24 09:41:07 2009 -0500 &gt;+++ b/gtk/common/moz-web-view-common.h Wed Mar 04 14:37:57 2009 -0200 &gt;&#64;&#64; -1,6 +1,9 &#64;&#64; &gt; #ifndef MOZ_WEB_VIEW_GTK_COMMON_H &gt; #define MOZ_WEB_VIEW_GTK_COMMON_H &gt; &gt;+#include &lt;moz-web-view.h&gt; &gt;+#include &lt;embed.h&gt; &gt;+ &gt; G_BEGIN_DECLS &gt; &gt; #define MOZ_TYPE_VIEWABLE (moz_viewable_get_type ()) &gt;&#64;&#64; -31,6 +34,22 &#64;&#64; &gt; &gt; GType moz_viewable_get_type (void) G_GNUC_CONST; &gt; &gt;+enum { &gt;+ TITLE_CHANGED, &gt;+ STATUS_CHANGED, &gt;+ LOCATION_CHANGED, &gt;+ URI_REQUESTED, &gt;+ DOCUMENT_LOADED, &gt;+ LAST_SIGNAL &gt;+}; &gt;+ &gt;+enum { &gt;+ PROP_0, &gt;+ PROP_REQUESTED_URI, &gt;+ PROP_TITLE, &gt;+ PROP_STATUS, &gt;+ PROP_LOCATION &gt;+}; &gt; &gt; G_END_DECLS &gt; &gt;diff -r cecafde2dd75 gtk/include/moz-web-view.h &gt;--- a/gtk/include/moz-web-view.h Tue Feb 24 09:41:07 2009 -0500 &gt;+++ b/gtk/include/moz-web-view.h Wed Mar 04 14:37:57 2009 -0200 &gt;&#64;&#64; -22,12 +22,6 &#64;&#64; &gt; &gt; struct _MozWebViewClass { &gt; GtkBinClass parent_class; &gt;- &gt;- void (*title_changed) (MozWebViewClass *view, const char *title); &gt;- void (*status_changed) (MozWebViewClass *view, const char *status); &gt;- void (*location_changed) (MozWebViewClass *view, const char *uri); &gt;- gboolean (*uri_requested) (MozWebViewClass *view, const char *uri); &gt;- void (*document_loaded) (MozWebViewClass *view); &gt; }; &gt; &gt; GType moz_web_view_get_type (void); &gt;&#64;&#64; -41,9 +35,10 &#64;&#64; &gt; gsize len); &gt; &gt; /* Apis implemented in common/moz-web-view-common.cpp follow */ &gt;-gchar * moz_web_view_get_title (MozWebView *view); &gt;-gchar * moz_web_view_get_status (MozWebView *view); &gt;-gchar * moz_web_view_get_location (MozWebView *view); &gt;+gchar * moz_web_view_get_requested_uri (MozWebView *view); &gt;+gchar * moz_web_view_get_title (MozWebView *view); &gt;+gchar * moz_web_view_get_status (MozWebView *view); &gt;+gchar * moz_web_view_get_location (MozWebView *view); &gt; &gt; gboolean moz_web_view_init_embedding (const gchar *profile_path); &gt; gboolean moz_web_view_term_embedding (void); &gt;diff -r cecafde2dd75 gtk/win32/moz-web-view.cpp &gt;--- a/gtk/win32/moz-web-view.cpp Tue Feb 24 09:41:07 2009 -0500 &gt;+++ b/gtk/win32/moz-web-view.cpp Wed Mar 04 14:37:57 2009 -0200 &gt;&#64;&#64; -35,17 +35,11 &#64;&#64; &gt; * &gt; * ***** END LICENSE BLOCK ***** */ &gt; &gt;- &gt; // Glib/System includes &gt; #include &lt;string.h&gt; &gt; #include &lt;gdk/gdkwin32.h&gt; &gt;-#include &lt;gtk/gtk.h&gt; &gt;- &gt;-// Mozilla header files &gt;-#include &quot;embed.h&quot; &gt; &gt; // Local includes &gt;-#include &quot;moz-web-view.h&quot; &gt; #include &quot;moz-web-view-common.h&quot; &gt; &gt; #define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MOZ_TYPE_WEB_VIEW, MozWebViewPriv)) &gt;&#64;&#64; -60,41 +54,35 &#64;&#64; &gt; &gt; &gt; /* GObjectClass */ &gt;-static void moz_web_view_finalize (GObject *object); &gt;-static void moz_web_view_set_property (GObject *object, &gt;- guint prop_id, &gt;- const GValue *value, &gt;- GParamSpec *pspec); &gt;-static void moz_web_view_get_property (GObject *object, &gt;- guint prop_id, &gt;- GValue *value, &gt;- GParamSpec *pspec); &gt;+static void moz_web_view_finalize (GObject *object); &gt;+static void moz_web_view_set_property (GObject *object, &gt;+ guint prop_id, &gt;+ const GValue *value, &gt;+ GParamSpec *pspec); &gt;+static void moz_web_view_get_property (GObject *object, &gt;+ guint prop_id, &gt;+ GValue *value, &gt;+ GParamSpec *pspec); &gt; &gt; /* GtkWidgetClass */ &gt;-static void moz_web_view_realize (GtkWidget *widget); &gt;-static void moz_web_view_unrealize (GtkWidget *widget); &gt;-static void moz_web_view_hierarchy_changed (GtkWidget *widget, &gt;- GtkWidget *previous_toplevel); &gt;-static void moz_web_view_size_allocate (GtkWidget *widget, &gt;- GtkAllocation *allocation); &gt;-static void moz_web_view_map (GtkWidget *widget); &gt;-static void moz_web_view_unmap (GtkWidget *widget); &gt;- &gt;-/* MozViewableIface */ &gt;-static void moz_web_view_viewable_init (MozViewableIface *iface); &gt;+static void moz_web_view_realize (GtkWidget *widget); &gt;+static void moz_web_view_unrealize (GtkWidget *widget); &gt;+static void moz_web_view_hierarchy_changed (GtkWidget *widget, &gt;+ GtkWidget *previous_toplevel); &gt;+static void moz_web_view_size_allocate (GtkWidget *widget, &gt;+ GtkAllocation *allocation); &gt;+static void moz_web_view_map (GtkWidget *widget); &gt;+static void moz_web_view_unmap (GtkWidget *widget); &gt; &gt; /* various local stubs */ &gt;-static gboolean handle_toplevel_configure (GtkWidget *toplevel, &gt;- GdkEventConfigure *event, &gt;- GtkWidget *widget); &gt;-static HWND create_native_window (GtkWidget *widget); &gt;-static LRESULT window_procedure (HWND hwnd, &gt;- UINT message, &gt;- WPARAM wparam, &gt;- LPARAM lparam); &gt;-static void update_property (MozWebView *view, &gt;- gint prop_id, &gt;- const gchar *new_value); &gt;+static gboolean handle_toplevel_configure (GtkWidget *toplevel, &gt;+ GdkEventConfigure *event, &gt;+ GtkWidget *widget); &gt;+static HWND create_native_window (GtkWidget *widget); &gt;+static LRESULT window_procedure (HWND hwnd, &gt;+ UINT message, &gt;+ WPARAM wparam, &gt;+ LPARAM lparam); &gt; &gt; class ViewListener; &gt; struct _MozWebViewPriv { &gt;&#64;&#64; -113,56 +101,75 &#64;&#64; &gt; gchar *location; &gt; }; &gt; &gt;-enum { &gt;- PROP_0, &gt;- PROP_REQUESTED_URI, &gt;- PROP_TITLE, &gt;- PROP_STATUS, &gt;- PROP_LOCATION &gt;-}; &gt;+static guint signals[LAST_SIGNAL] = { 0 }; &gt;+ &gt;+static void &gt;+moz_web_view_viewable_init (MozViewableIface *iface) {} &gt; &gt; G_DEFINE_TYPE_WITH_CODE (MozWebView, moz_web_view, GTK_TYPE_BIN, &gt;- G_IMPLEMENT_INTERFACE (MOZ_TYPE_VIEWABLE, &gt;- moz_web_view_viewable_init)) &gt;+ G_IMPLEMENT_INTERFACE (MOZ_TYPE_VIEWABLE, &gt;+ moz_web_view_viewable_init)) &gt; &gt;-/******************************************************************* &gt;- * ViewListener here * &gt;- *******************************************************************/ &gt;+static void &gt;+update_property (MozWebView *view, gint prop_id, const gchar *new_value) &gt;+{ &gt;+ MozWebViewPriv *priv = view-&gt;priv; &gt;+ const gchar *name = NULL; &gt;+ gchar **ptr; &gt;+ &gt;+ switch (prop_id) { &gt;+ case PROP_REQUESTED_URI: ptr = &amp;(priv-&gt;requested_uri); name = &quot;requested-uri&quot;; break; &gt;+ case PROP_TITLE: ptr = &amp;(priv-&gt;title); name = &quot;title&quot;; break; &gt;+ case PROP_STATUS: ptr = &amp;(priv-&gt;status); name = &quot;status&quot;; break; &gt;+ case PROP_LOCATION: ptr = &amp;(priv-&gt;location); name = &quot;location&quot;; break; &gt;+ default: &gt;+ g_assert_not_reached (); &gt;+ break; &gt;+ } &gt;+ &gt;+ g_free (*ptr); &gt;+ *ptr = g_strdup (new_value); &gt;+ g_object_notify (G_OBJECT (view), name); &gt;+} &gt;+ &gt; class ViewListener : public MozViewListener { &gt; public: &gt; ViewListener(MozWebView *view) : mView(view) {} &gt; virtual ~ViewListener() {} &gt; &gt; virtual void SetTitle(const char *new_title) { &gt;- update_property(mView, PROP_TITLE, new_title); &gt;- g_signal_emit_by_name(G_OBJECT(mView), &quot;title-changed&quot;, new_title); &gt;+ update_property (mView, PROP_TITLE, new_title); &gt;+ g_signal_emit (mView, signals[TITLE_CHANGED], &gt;+ NULL, new_title); &gt; } &gt; &gt; virtual void StatusChanged(const char *new_status, PRUint32 flags) { &gt;- update_property(mView, PROP_STATUS, new_status); &gt;- g_signal_emit_by_name(G_OBJECT(mView), &quot;status-changed&quot;, new_status); &gt;+ update_property (mView, PROP_STATUS, new_status); &gt;+ g_signal_emit (mView, signals[STATUS_CHANGED], &gt;+ NULL, new_status); &gt; } &gt; &gt; virtual void LocationChanged(const char *new_uri) { &gt;- update_property(mView, PROP_LOCATION, new_uri); &gt;- g_signal_emit_by_name(G_OBJECT(mView), &quot;location-changed&quot;, new_uri); &gt;+ update_property (mView, PROP_LOCATION, new_uri); &gt;+ g_signal_emit (mView, signals[LOCATION_CHANGED], &gt;+ NULL, new_uri); &gt; } &gt; &gt;- virtual PRBool ViewListener::OpenURI(const char* new_uri) { &gt;- gboolean abort_load = FALSE; &gt;- &gt;- g_signal_emit_by_name(G_OBJECT(mView), &quot;uri-requested&quot;, &gt;- new_uri, &amp;abort_load); &gt;- &gt;- return abort_load; &gt;+ virtual PRBool OpenURI(const char* new_uri) { &gt;+ gboolean abort_load = FALSE; &gt;+ update_property (mView, PROP_REQUESTED_URI, new_uri); &gt;+ g_signal_emit (mView, signals[URI_REQUESTED], &gt;+ NULL, new_uri, &amp;abort_load); &gt;+ &gt;+ return abort_load; &gt; } &gt;- &gt;- virtual void ViewListener::DocumentLoaded() { &gt;- g_signal_emit_by_name(G_OBJECT(mView), &quot;document-loaded&quot;); &gt;+ &gt;+ virtual void DocumentLoaded() { &gt;+ g_signal_emit (mView, signals[DOCUMENT_LOADED], NULL); &gt; } &gt;- &gt;-private: &gt;- MozWebView *mView; &gt;+ &gt;+ private: &gt;+ MozWebView *mView; &gt; }; &gt; &gt; /******************************************************************* &gt;&#64;&#64; -184,6 +191,12 &#64;&#64; &gt; widget_klass-&gt;map = moz_web_view_map; &gt; widget_klass-&gt;unmap = moz_web_view_unmap; &gt; &gt;+ signals[TITLE_CHANGED] = g_signal_lookup (&quot;title-changed&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[STATUS_CHANGED] = g_signal_lookup (&quot;status-changed&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[LOCATION_CHANGED] = g_signal_lookup (&quot;location-changed&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[URI_REQUESTED] = g_signal_lookup (&quot;uri-requested&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[DOCUMENT_LOADED] = g_signal_lookup (&quot;document-loaded&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ &gt; /* Implement MozViewable properties */ &gt; g_object_class_override_property(object_klass, PROP_REQUESTED_URI, &quot;requested-uri&quot;); &gt; g_object_class_override_property(object_klass, PROP_TITLE, &quot;title&quot;); &gt;&#64;&#64; -209,92 +222,55 &#64;&#64; &gt; priv-&gt;view-&gt;SetListener(priv-&gt;listener); &gt; } &gt; &gt;-static void &gt;-moz_web_view_viewable_init(MozViewableIface *iface) &gt;-{ &gt;- &gt;-} &gt;- &gt; /******************************************************************* &gt; * GObjectClass * &gt; *******************************************************************/ &gt; static void &gt; moz_web_view_finalize(GObject *object) &gt; { &gt;- MozWebViewPriv *priv; &gt;- &gt;- priv = GET_PRIV(object); &gt;- &gt;- if (priv-&gt;view) &gt;- delete priv-&gt;view; &gt;+ g_return_if_fail(object != NULL); &gt;+ g_return_if_fail(MOZ_IS_WEB_VIEW(object)); &gt; &gt;- if (priv-&gt;listener) &gt;- delete priv-&gt;listener; &gt;+ MozWebView *view = MOZ_WEB_VIEW(object); &gt; &gt;- if (priv-&gt;app) &gt;- delete priv-&gt;app; &gt;+ g_free (view-&gt;priv-&gt;requested_uri); &gt;+ g_free (view-&gt;priv-&gt;title); &gt;+ g_free (view-&gt;priv-&gt;status); &gt;+ g_free (view-&gt;priv-&gt;location); &gt; &gt;- if (priv-&gt;requested_uri) &gt;- g_free(priv-&gt;requested_uri); &gt;+ delete view-&gt;priv-&gt;app; &gt;+ delete view-&gt;priv-&gt;view; &gt;+ delete view-&gt;priv-&gt;listener; &gt; &gt;- if (priv-&gt;title) &gt;- g_free(priv-&gt;title); &gt;- &gt; (G_OBJECT_CLASS(moz_web_view_parent_class)-&gt;finalize)(object); &gt; } &gt; &gt; static void &gt;-moz_web_view_get_property(GObject *object, &gt;- guint prop_id, &gt;- GValue *value, &gt;- GParamSpec *pspec) &gt;+moz_web_view_get_property (GObject *object, &gt;+ guint prop_id, &gt;+ GValue *value, &gt;+ GParamSpec *pspec) &gt; { &gt;- MozWebViewPriv *priv; &gt;- &gt;- priv = GET_PRIV(object); &gt;- &gt;- switch (prop_id) { &gt;- case PROP_REQUESTED_URI: &gt;- g_value_set_string(value, priv-&gt;requested_uri); &gt;- break; &gt;- case PROP_TITLE: &gt;- g_value_set_string(value, priv-&gt;title); &gt;- break; &gt;- case PROP_STATUS: &gt;- g_value_set_string(value, priv-&gt;status); &gt;- break; &gt;- case PROP_LOCATION: &gt;- g_value_set_string(value, priv-&gt;location); &gt;- break; &gt;- &gt;- default: &gt;- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); &gt;- break; &gt;- } &gt;-} &gt;- &gt;-static void &gt;-update_property(MozWebView *view, &gt;- gint prop_id, &gt;- const gchar *new_value) &gt;-{ &gt;- MozWebViewPriv *priv = GET_PRIV(view); &gt;- gchar **ptr; &gt;- gchar *name = NULL; &gt;+ MozWebViewPriv *priv = MOZ_WEB_VIEW (object)-&gt;priv; &gt; &gt; switch (prop_id) { &gt;- case PROP_REQUESTED_URI: ptr = &amp;(priv-&gt;requested_uri); name = &quot;requested-uri&quot;; break; &gt;- case PROP_TITLE: ptr = &amp;(priv-&gt;title); name = &quot;title&quot;; break; &gt;- case PROP_STATUS: ptr = &amp;(priv-&gt;status); name = &quot;status&quot;; break; &gt;- case PROP_LOCATION: ptr = &amp;(priv-&gt;location); name = &quot;location&quot;; break; &gt;- default: &gt;- g_assert_not_reached(); &gt;- break; &gt;- } &gt;+ case PROP_REQUESTED_URI: &gt;+ g_value_set_string (value, priv-&gt;requested_uri); &gt;+ break; &gt;+ case PROP_TITLE: &gt;+ g_value_set_string (value, priv-&gt;title); &gt;+ break; &gt;+ case PROP_STATUS: &gt;+ g_value_set_string (value, priv-&gt;status); &gt;+ break; &gt;+ case PROP_LOCATION: &gt;+ g_value_set_string (value, priv-&gt;location); &gt;+ break; &gt; &gt;- if (*ptr) g_free(*ptr); &gt;- *ptr = g_strdup(new_value); &gt;- g_object_notify(G_OBJECT(view), name); &gt;+ default: &gt;+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); &gt;+ break; &gt;+ } &gt; } &gt; &gt; /******************************************************************* &gt;&#64;&#64; -303,12 +279,10 &#64;&#64; &gt; static void &gt; moz_web_view_realize(GtkWidget *widget) &gt; { &gt;- MozWebViewPriv *priv; &gt;+ MozWebViewPriv *priv = GET_PRIV(widget); &gt; GdkWindowAttr attributes; &gt; gint attributes_mask; &gt;- &gt;- priv = GET_PRIV(widget); &gt;- &gt;+ &gt; GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); &gt; &gt; attributes.window_type = GDK_WINDOW_CHILD; &gt;&#64;&#64; -338,7 +312,7 &#64;&#64; &gt; gtk_style_set_background(widget-&gt;style, widget-&gt;window, GTK_STATE_NORMAL); &gt; &gt; if (priv-&gt;requested_uri) &gt;- moz_web_view_load_uri(MOZ_WEB_VIEW(widget), priv-&gt;requested_uri); &gt;+ moz_web_view_load_uri(MOZ_WEB_VIEW(widget), priv-&gt;requested_uri); &gt; } &gt; &gt; static void &gt;&#64;&#64; -368,14 +342,14 &#64;&#64; &gt; DBG(g_print(&quot;Hierarchy changed ! toplevel %p previous_toplevel %p\n&quot;, toplevel, previous_toplevel)); &gt; &gt; if (GTK_IS_WINDOW(toplevel)) { &gt;- g_signal_connect(G_OBJECT(toplevel), &quot;configure-event&quot;, &gt;- G_CALLBACK(handle_toplevel_configure), widget); &gt;- } &gt;+ g_signal_connect(G_OBJECT(toplevel), &quot;configure-event&quot;, &gt;+ G_CALLBACK(handle_toplevel_configure), widget); &gt;+ } &gt; &gt; if (GTK_IS_WINDOW(previous_toplevel)) { &gt;- g_signal_handlers_disconnect_by_func &gt;- (G_OBJECT(previous_toplevel), &gt;- (gpointer)handle_toplevel_configure, widget); &gt;+ g_signal_handlers_disconnect_by_func(G_OBJECT(previous_toplevel), &gt;+ (gpointer)handle_toplevel_configure, &gt;+ widget); &gt; } &gt; } &gt; &gt;&#64;&#64; -390,18 +364,17 &#64;&#64; &gt; widget-&gt;allocation = *allocation; &gt; &gt; if (GTK_WIDGET_REALIZED(widget)) { &gt;- gint x, y; &gt;+ gint x, y; &gt; &gt;- gdk_window_get_position(widget-&gt;window, &amp;x, &amp;y); &gt;- x += allocation-&gt;x; &gt;- y += allocation-&gt;y; &gt;- &gt;- SetWindowPos(priv-&gt;native_window, NULL, &gt;- x, y, &gt;- allocation-&gt;width, allocation-&gt;height, &gt;- SWP_NOACTIVATE | SWP_NOZORDER); &gt;- &gt;- priv-&gt;view-&gt;SetPositionAndSize(0, 0, allocation-&gt;width, allocation-&gt;height); &gt;+ gdk_window_get_position(widget-&gt;window, &amp;x, &amp;y); &gt;+ x += allocation-&gt;x; &gt;+ y += allocation-&gt;y; &gt;+ &gt;+ SetWindowPos(priv-&gt;native_window, NULL, x, y, &gt;+ allocation-&gt;width, allocation-&gt;height, &gt;+ SWP_NOACTIVATE | SWP_NOZORDER); &gt;+ &gt;+ priv-&gt;view-&gt;SetPositionAndSize(0, 0, allocation-&gt;width, allocation-&gt;height); &gt; } &gt; } &gt; &gt;&#64;&#64; -422,7 +395,7 &#64;&#64; &gt; MozWebViewPriv *priv = GET_PRIV(widget); &gt; &gt; GTK_WIDGET_CLASS(moz_web_view_parent_class)-&gt;unmap(widget); &gt;- &gt;+ &gt; ShowWindow(priv-&gt;native_window, SW_HIDE); &gt; } &gt; &gt;&#64;&#64; -439,17 +412,16 &#64;&#64; &gt; &gt; priv = GET_PRIV(widget); &gt; &gt;- DBG(g_print(&quot;Configure event !\n&quot;)); &gt;- &gt;+ DBG(g_print(&quot;Configure event !\n&quot;)); &gt;+ &gt; gdk_window_get_position(widget-&gt;window, &amp;x, &amp;y); &gt; x += widget-&gt;allocation.x; &gt; y += widget-&gt;allocation.y; &gt;- &gt;- SetWindowPos(priv-&gt;native_window, NULL, &gt;- x, y, &gt;- widget-&gt;allocation.width, widget-&gt;allocation.height, &gt;- SWP_NOACTIVATE | SWP_NOZORDER); &gt;- &gt;+ &gt;+ SetWindowPos(priv-&gt;native_window, NULL, x, y, &gt;+ widget-&gt;allocation.width, widget-&gt;allocation.height, &gt;+ SWP_NOACTIVATE | SWP_NOZORDER); &gt;+ &gt; return FALSE; &gt; } &gt; &gt;&#64;&#64; -474,36 +446,34 &#64;&#64; &gt; * havent set the widget data yet. &gt; */ &gt; if (widget) &gt;- priv = GET_PRIV(widget); &gt;- else { &gt;- return DefWindowProcW(hwnd, message, wparam, lparam); &gt;- } &gt;- &gt;+ priv = GET_PRIV(widget); &gt;+ else &gt;+ return DefWindowProcW(hwnd, message, wparam, lparam); &gt;+ &gt; switch (message) { &gt;- case WM_INITDIALOG: &gt;- case WM_INITMENU: &gt;- case WM_DESTROY: &gt;- return TRUE; &gt;- case WM_SYSCOMMAND: &gt;- if (wparam == SC_CLOSE) { &gt;- DBG(g_print(&quot;Close message..\n&quot;)); &gt;- return TRUE; &gt;- } &gt;- break; &gt;- &gt;- case WM_ACTIVATE: &gt;- switch (wparam) { &gt;- case WA_ACTIVE: &gt;- case WA_CLICKACTIVE: &gt;- priv-&gt;view-&gt;SetFocus(true); &gt;- break; &gt;- case WA_INACTIVE: &gt;- priv-&gt;view-&gt;SetFocus(false); &gt;- break; &gt;- default: &gt;- break; &gt;- } &gt;- break; &gt;+ case WM_INITDIALOG: &gt;+ case WM_INITMENU: &gt;+ case WM_DESTROY: &gt;+ return TRUE; &gt;+ case WM_SYSCOMMAND: &gt;+ if (wparam == SC_CLOSE) { &gt;+ DBG(g_print(&quot;Close message..\n&quot;)); &gt;+ return TRUE; &gt;+ } &gt;+ break; &gt;+ case WM_ACTIVATE: &gt;+ switch (wparam) { &gt;+ case WA_ACTIVE: &gt;+ case WA_CLICKACTIVE: &gt;+ priv-&gt;view-&gt;SetFocus(true); &gt;+ break; &gt;+ case WA_INACTIVE: &gt;+ priv-&gt;view-&gt;SetFocus(false); &gt;+ break; &gt;+ default: &gt;+ break; &gt;+ } &gt;+ break; &gt; } &gt; return DefWindowProcW(hwnd, message, wparam, lparam); &gt; } &gt;&#64;&#64; -541,47 +511,46 &#64;&#64; &gt; DWORD dwStyle, dwExStyle; &gt; &gt; if (!klass) { &gt;- static WNDCLASSEXW wcl; &gt;+ static WNDCLASSEXW wcl; &gt; &gt;- wcl.cbSize = sizeof(WNDCLASSEX); &gt;- wcl.style = 0; &gt;+ wcl.cbSize = sizeof(WNDCLASSEX); &gt;+ wcl.style = 0; &gt; &gt;- /* DON'T set CS_&lt;H,V&gt;REDRAW. It causes total redraw &gt;- * on WM_SIZE and WM_MOVE. Flicker, Performance! &gt;- */ &gt;- wcl.lpfnWndProc = (WNDPROC)window_procedure; &gt;- wcl.cbClsExtra = 0; &gt;- wcl.cbWndExtra = 0; &gt;- wcl.hInstance = GetModuleHandle(NULL); &gt;- wcl.hIcon = 0; &gt;- wcl.hIconSm = 0; &gt;- wcl.lpszMenuName = NULL; &gt;- wcl.hIcon = NULL; &gt;- wcl.hIconSm = NULL; &gt;- wcl.hbrBackground = NULL; &gt;- wcl.hCursor = LoadCursor(NULL, IDC_ARROW); &gt;- wcl.lpszClassName = L&quot;MozWindow&quot;; &gt;- &gt;- klass = RegisterClassExW(&amp;wcl); &gt;- &gt;+ /* DON'T set CS_&lt;H,V&gt;REDRAW. It causes total redraw &gt;+ * on WM_SIZE and WM_MOVE. Flicker, Performance! &gt;+ */ &gt;+ wcl.lpfnWndProc = (WNDPROC)window_procedure; &gt;+ wcl.cbClsExtra = 0; &gt;+ wcl.cbWndExtra = 0; &gt;+ wcl.hInstance = GetModuleHandle(NULL); &gt;+ wcl.hIcon = 0; &gt;+ wcl.hIconSm = 0; &gt;+ wcl.lpszMenuName = NULL; &gt;+ wcl.hIcon = NULL; &gt;+ wcl.hIconSm = NULL; &gt;+ wcl.hbrBackground = NULL; &gt;+ wcl.hCursor = LoadCursor(NULL, IDC_ARROW); &gt;+ wcl.lpszClassName = L&quot;MozWindow&quot;; &gt;+ &gt;+ klass = RegisterClassExW(&amp;wcl); &gt; } &gt;- &gt;+ &gt; dwExStyle = WS_EX_TOOLWINDOW; // for popup windows &gt; dwStyle = WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; // popup window &gt; &gt; parent_handle = (HWND)GDK_WINDOW_HWND(gtk_widget_get_parent_window(widget)); &gt; window_handle = CreateWindowExW(dwExStyle, &gt;- MAKEINTRESOURCEW(klass), &gt;- L&quot;&quot;, &gt;- dwStyle, &gt;- 0, 0, 1, 1, &gt;- parent_handle, &gt;- NULL, &gt;- GetModuleHandle(NULL), &gt;- NULL); &gt;+ MAKEINTRESOURCEW(klass), &gt;+ L&quot;&quot;, &gt;+ dwStyle, &gt;+ 0, 0, 1, 1, &gt;+ parent_handle, &gt;+ NULL, &gt;+ GetModuleHandle(NULL), &gt;+ NULL); &gt; &gt; SetProp(window_handle, &quot;moz-view-widget&quot;, (HANDLE)widget); &gt;- &gt;+ &gt; return window_handle; &gt; } &gt; &gt;&#64;&#64; -595,24 +564,21 &#64;&#64; &gt; } &gt; &gt; void &gt;-moz_web_view_load_uri(MozWebView *view, const gchar *uri) &gt;-{ &gt;- MozWebViewPriv *priv; &gt;- &gt;+moz_web_view_load_uri(MozWebView *view, const gchar *uri) &gt;+{ &gt; g_return_if_fail(MOZ_IS_WEB_VIEW(view)); &gt; g_return_if_fail(uri &amp;&amp; uri[0]); &gt; &gt;- priv = GET_PRIV(view); &gt;- &gt;- if (priv-&gt;requested_uri &amp;&amp; priv-&gt;requested_uri != uri) &gt;- g_free(priv-&gt;requested_uri); &gt;- &gt;- priv-&gt;requested_uri = g_strdup(uri); &gt;- &gt;- if (GTK_WIDGET_REALIZED(view)) &gt;- priv-&gt;view-&gt;LoadURI(priv-&gt;requested_uri); &gt;- &gt;- g_object_notify(G_OBJECT(view), &quot;requested-uri&quot;); &gt;+ if (GTK_WIDGET_REALIZED (view)) &gt;+ { &gt;+ view-&gt;priv-&gt;view-&gt;LoadURI(uri); &gt;+ } &gt;+ else &gt;+ { &gt;+ /* widget not realized, the requested uri will be loaded when realized */ &gt;+ g_free (view-&gt;priv-&gt;requested_uri); &gt;+ view-&gt;priv-&gt;requested_uri = g_strdup (uri); &gt;+ } &gt; } &gt; &gt; void &gt;&#64;&#64; -622,16 +588,12 &#64;&#64; &gt; const gchar *data, &gt; gsize len) &gt; { &gt;- MozWebViewPriv *priv; &gt;- &gt; g_return_if_fail(MOZ_IS_WEB_VIEW(view)); &gt; g_return_if_fail(base_uri != NULL); &gt; g_return_if_fail(content_type != NULL); &gt; g_return_if_fail(data != NULL); &gt; g_return_if_fail(len &gt; 0); &gt; &gt;- priv = GET_PRIV(view); &gt;- &gt; if (GTK_WIDGET_REALIZED(view)) &gt;- priv-&gt;view-&gt;LoadData(base_uri, content_type, (PRUint8 *)data, (PRUint32)len); &gt;+ view-&gt;priv-&gt;view-&gt;LoadData(base_uri, content_type, (PRUint8 *)data, (PRUint32)len); &gt; } &gt;diff -r cecafde2dd75 gtk/win32/win32gtk.vcproj &gt;--- a/gtk/win32/win32gtk.vcproj Tue Feb 24 09:41:07 2009 -0500 &gt;+++ b/gtk/win32/win32gtk.vcproj Wed Mar 04 14:37:57 2009 -0200 &gt;&#64;&#64; -196,10 +196,6 &#64;&#64; &gt; &gt; &gt; &lt;/File&gt; &gt; &lt;File &gt;- RelativePath=&quot;..\common\moz-web-view-common.cpp&quot; &gt;- &gt; &gt;- &lt;/File&gt; &gt;- &lt;File &gt; RelativePath=&quot;..\common\moz-web-view-common.h&quot; &gt; &gt; &gt; &lt;/File&gt; &gt;&#64;&#64; -224,10 +220,18 &#64;&#64; &gt; UniqueIdentifier=&quot;{4FC737F1-C7A5-4376-A066-2A32D752A2FF}&quot; &gt; &gt; &gt; &lt;File &gt;+ RelativePath=&quot;..\..\common\ConsoleListener.cpp&quot; &gt;+ &gt; &gt;+ &lt;/File&gt; &gt;+ &lt;File &gt; RelativePath=&quot;..\..\common\ContentListener.cpp&quot; &gt; &gt; &gt; &lt;/File&gt; &gt; &lt;File &gt;+ RelativePath=&quot;..\..\common\DOMEventListener.cpp&quot; &gt;+ &gt; &gt;+ &lt;/File&gt; &gt;+ &lt;File &gt; RelativePath=&quot;..\..\common\embed.cpp&quot; &gt; &gt; &gt; &lt;/File&gt; &gt;&#64;&#64; -236,6 +240,10 &#64;&#64; &gt; &gt; &gt; &lt;/File&gt; &gt; &lt;File &gt;+ RelativePath=&quot;..\common\moz-web-view-common.cpp&quot; &gt;+ &gt; &gt;+ &lt;/File&gt; &gt;+ &lt;File &gt; RelativePath=&quot;..\common\moz-web-view-marshal.c&quot; &gt; &gt; &gt; &lt;/File&gt; &gt;&#64;&#64; -248,7 +256,7 &#64;&#64; &gt; &gt; &gt; &lt;/File&gt; &gt; &lt;File &gt;- RelativePath=&quot;.\win32gtk.def&quot; &gt;+ RelativePath=&quot;.\mozwebview.def&quot; &gt; &gt; &gt; &lt;/File&gt; &gt; &lt;/Filter&gt; &gt;diff -r cecafde2dd75 gtk/x11/moz-web-view.cpp &gt;--- a/gtk/x11/moz-web-view.cpp Tue Feb 24 09:41:07 2009 -0500 &gt;+++ b/gtk/x11/moz-web-view.cpp Wed Mar 04 14:37:57 2009 -0200 &gt;&#64;&#64; -1,47 +1,89 &#64;&#64; &gt;-#include &quot;moz-web-view.h&quot; &gt;+#include &quot;moz-web-view-common.h&quot; &gt; &gt;-#include &lt;gtk/gtkwindow.h&gt; &gt;-#include &quot;embed.h&quot; &gt;- &gt;-enum { &gt;- TITLE_CHANGED, &gt;- STATUS_CHANGED, &gt;- LOCATION_CHANGED, &gt;- LAST_SIGNAL &gt;+class ViewListener; &gt;+struct _MozWebViewPriv { &gt;+ MozView *view; &gt;+ GtkWidget *offscreen; &gt;+ GtkWidget *mozWidget; &gt;+ ViewListener *listener; &gt;+ &gt;+ /* Record some properties here */ &gt;+ gchar *requested_uri; &gt;+ gchar *title; &gt;+ gchar *status; &gt;+ gchar *location; &gt; }; &gt; &gt; static guint signals[LAST_SIGNAL] = { 0 }; &gt; &gt;+static void &gt;+update_property (MozWebView *view, gint prop_id, const gchar *new_value) &gt;+{ &gt;+ MozWebViewPriv *priv = view-&gt;priv; &gt;+ const gchar *name = NULL; &gt;+ gchar **ptr; &gt;+ &gt;+ switch (prop_id) { &gt;+ case PROP_REQUESTED_URI: ptr = &amp;(priv-&gt;requested_uri); name = &quot;requested-uri&quot;; break; &gt;+ case PROP_TITLE: ptr = &amp;(priv-&gt;title); name = &quot;title&quot;; break; &gt;+ case PROP_STATUS: ptr = &amp;(priv-&gt;status); name = &quot;status&quot;; break; &gt;+ case PROP_LOCATION: ptr = &amp;(priv-&gt;location); name = &quot;location&quot;; break; &gt;+ default: &gt;+ g_assert_not_reached (); &gt;+ break; &gt;+ } &gt;+ &gt;+ g_free (*ptr); &gt;+ *ptr = g_strdup (new_value); &gt;+ g_object_notify (G_OBJECT (view), name); &gt;+} &gt;+ &gt; class ViewListener : public MozViewListener { &gt; public: &gt; ViewListener(MozWebView *view) : mView(view) {} &gt; virtual ~ViewListener() {} &gt; &gt; virtual void SetTitle(const char *new_title) { &gt;- g_signal_emit(G_OBJECT(mView), signals[TITLE_CHANGED], 0, new_title); &gt;+ update_property (mView, PROP_TITLE, new_title); &gt;+ g_signal_emit (mView, signals[TITLE_CHANGED], &gt;+ NULL, new_title); &gt; } &gt; &gt; virtual void StatusChanged(const char *new_status, PRUint32 flags) { &gt;- g_signal_emit(G_OBJECT(mView), signals[STATUS_CHANGED], 0, new_status); &gt;+ update_property (mView, PROP_STATUS, new_status); &gt;+ g_signal_emit (mView, signals[STATUS_CHANGED], &gt;+ NULL, new_status); &gt; } &gt; &gt; virtual void LocationChanged(const char *new_uri) { &gt;- g_signal_emit(G_OBJECT(mView), signals[LOCATION_CHANGED], 0, new_uri); &gt;+ update_property (mView, PROP_LOCATION, new_uri); &gt;+ g_signal_emit (mView, signals[LOCATION_CHANGED], &gt;+ NULL, new_uri); &gt; } &gt; &gt;-private: &gt;- MozWebView *mView; &gt;+ virtual PRBool OpenURI(const char* new_uri) { &gt;+ gboolean abort_load = FALSE; &gt;+ update_property (mView, PROP_REQUESTED_URI, new_uri); &gt;+ g_signal_emit (mView, signals[URI_REQUESTED], &gt;+ NULL, new_uri, &amp;abort_load); &gt;+ &gt;+ return abort_load; &gt;+ } &gt;+ &gt;+ virtual void DocumentLoaded() { &gt;+ g_signal_emit (mView, signals[DOCUMENT_LOADED], NULL); &gt;+ } &gt;+ &gt;+ private: &gt;+ MozWebView *mView; &gt; }; &gt; &gt;-struct _MozWebViewPriv { &gt;- MozView *view; &gt;- GtkWidget *offscreen; &gt;- GtkWidget *offscreen_window; &gt;- GtkWidget *mozWidget; &gt;- ViewListener *listener; &gt;-}; &gt;+static void &gt;+moz_web_view_viewable_init (MozViewableIface *iface) {} &gt; &gt;-G_DEFINE_TYPE(MozWebView, moz_web_view, GTK_TYPE_BIN) &gt;+G_DEFINE_TYPE_WITH_CODE (MozWebView, moz_web_view, GTK_TYPE_BIN, &gt;+ G_IMPLEMENT_INTERFACE (MOZ_TYPE_VIEWABLE, &gt;+ moz_web_view_viewable_init)) &gt; &gt; static void &gt; moz_web_view_map(GtkWidget *widget) &gt;&#64;&#64; -110,8 +152,8 &#64;&#64; &gt; &amp;attributes, attributes_mask); &gt; gdk_window_set_user_data(widget-&gt;window, view); &gt; &gt;- widget-&gt;style = gtk_style_attach(widget-&gt;style, widget-&gt;window); &gt; gtk_style_set_background(widget-&gt;style, widget-&gt;window, GTK_STATE_NORMAL); &gt;+ widget-&gt;style = gtk_style_attach (widget-&gt;style, widget-&gt;window); &gt; } &gt; &gt; static void &gt;&#64;&#64; -144,8 +186,8 &#64;&#64; &gt; widget-&gt;allocation = *alloc; &gt; &gt; if (GTK_WIDGET_REALIZED(widget)) { &gt;- gdk_window_move_resize(widget-&gt;window, &gt;- alloc-&gt;x, alloc-&gt;y, alloc-&gt;width, alloc-&gt;height); &gt;+ gdk_window_move_resize(widget-&gt;window, alloc-&gt;x, alloc-&gt;y, &gt;+ alloc-&gt;width, alloc-&gt;height); &gt; view-&gt;priv-&gt;view-&gt;SetPositionAndSize(0, 0, alloc-&gt;width, alloc-&gt;height); &gt; } &gt; } &gt;&#64;&#64; -158,16 +200,6 &#64;&#64; &gt; &gt; MozWebView *view = MOZ_WEB_VIEW(object); &gt; &gt;- if (view-&gt;priv-&gt;view) { &gt;- delete view-&gt;priv-&gt;view; &gt;- view-&gt;priv-&gt;view = NULL; &gt;- } &gt;- &gt;- if (view-&gt;priv-&gt;listener) { &gt;- delete view-&gt;priv-&gt;listener; &gt;- view-&gt;priv-&gt;listener = NULL; &gt;- } &gt;- &gt; if (view-&gt;priv-&gt;offscreen) { &gt; gtk_widget_destroy(view-&gt;priv-&gt;offscreen); &gt; view-&gt;priv-&gt;offscreen = NULL; &gt;&#64;&#64; -182,7 +214,43 &#64;&#64; &gt; &gt; MozWebView *view = MOZ_WEB_VIEW(object); &gt; &gt;- delete view-&gt;priv; &gt;+ g_free (view-&gt;priv-&gt;requested_uri); &gt;+ g_free (view-&gt;priv-&gt;title); &gt;+ g_free (view-&gt;priv-&gt;status); &gt;+ g_free (view-&gt;priv-&gt;location); &gt;+ &gt;+ delete view-&gt;priv-&gt;view; &gt;+ delete view-&gt;priv-&gt;listener; &gt;+ &gt;+ (G_OBJECT_CLASS(moz_web_view_parent_class)-&gt;finalize)(object); &gt;+} &gt;+ &gt;+static void &gt;+moz_web_view_get_property (GObject *object, &gt;+ guint prop_id, &gt;+ GValue *value, &gt;+ GParamSpec *pspec) &gt;+{ &gt;+ MozWebViewPriv *priv = MOZ_WEB_VIEW (object)-&gt;priv; &gt;+ &gt;+ switch (prop_id) { &gt;+ case PROP_REQUESTED_URI: &gt;+ g_value_set_string (value, priv-&gt;requested_uri); &gt;+ break; &gt;+ case PROP_TITLE: &gt;+ g_value_set_string (value, priv-&gt;title); &gt;+ break; &gt;+ case PROP_STATUS: &gt;+ g_value_set_string (value, priv-&gt;status); &gt;+ break; &gt;+ case PROP_LOCATION: &gt;+ g_value_set_string (value, priv-&gt;location); &gt;+ break; &gt;+ &gt;+ default: &gt;+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); &gt;+ break; &gt;+ } &gt; } &gt; &gt; static void &gt;&#64;&#64; -193,6 +261,8 &#64;&#64; &gt; GtkObjectClass *object_class = GTK_OBJECT_CLASS(klass); &gt; GObjectClass *gobject_class = G_OBJECT_CLASS(klass); &gt; &gt;+ gobject_class-&gt;get_property = moz_web_view_get_property; &gt;+ &gt; widget_class-&gt;realize = moz_web_view_realize; &gt; widget_class-&gt;unrealize = moz_web_view_unrealize; &gt; widget_class-&gt;map = moz_web_view_map; &gt;&#64;&#64; -203,39 +273,23 &#64;&#64; &gt; &gt; gobject_class-&gt;finalize = moz_web_view_finalize; &gt; &gt;- signals[TITLE_CHANGED] = &gt;- g_signal_new(&quot;title-changed&quot;, &gt;- G_TYPE_FROM_CLASS(klass), &gt;- G_SIGNAL_RUN_FIRST, &gt;- G_STRUCT_OFFSET(MozWebViewClass, title_changed), &gt;- NULL, NULL, &gt;- g_cclosure_marshal_VOID__STRING, &gt;- G_TYPE_NONE, 1, G_TYPE_STRING); &gt;+ signals[TITLE_CHANGED] = g_signal_lookup (&quot;title-changed&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[STATUS_CHANGED] = g_signal_lookup (&quot;status-changed&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[LOCATION_CHANGED] = g_signal_lookup (&quot;location-changed&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[URI_REQUESTED] = g_signal_lookup (&quot;uri-requested&quot;, MOZ_TYPE_WEB_VIEW); &gt;+ signals[DOCUMENT_LOADED] = g_signal_lookup (&quot;document-loaded&quot;, MOZ_TYPE_WEB_VIEW); &gt; &gt;- signals[STATUS_CHANGED] = &gt;- g_signal_new(&quot;status-changed&quot;, &gt;- G_TYPE_FROM_CLASS(klass), &gt;- G_SIGNAL_RUN_FIRST, &gt;- G_STRUCT_OFFSET(MozWebViewClass, status_changed), &gt;- NULL, NULL, &gt;- g_cclosure_marshal_VOID__STRING, &gt;- G_TYPE_NONE, 1, G_TYPE_STRING); &gt;- &gt;- signals[LOCATION_CHANGED] = &gt;- g_signal_new(&quot;location-changed&quot;, &gt;- G_TYPE_FROM_CLASS(klass), &gt;- G_SIGNAL_RUN_FIRST, &gt;- G_STRUCT_OFFSET(MozWebViewClass, location_changed), &gt;- NULL, NULL, &gt;- g_cclosure_marshal_VOID__STRING, &gt;- G_TYPE_NONE, 1, G_TYPE_STRING); &gt;- &gt;+ /* Implement MozViewable properties */ &gt;+ g_object_class_override_property (gobject_class, PROP_REQUESTED_URI, &quot;requested-uri&quot;); &gt;+ g_object_class_override_property (gobject_class, PROP_TITLE, &quot;title&quot;); &gt;+ g_object_class_override_property (gobject_class, PROP_STATUS, &quot;status&quot;); &gt;+ g_object_class_override_property (gobject_class, PROP_LOCATION, &quot;location&quot;); &gt; } &gt; &gt; static void &gt; moz_web_view_init(MozWebView *view) &gt; { &gt;- view-&gt;priv = new MozWebViewPriv(); &gt;+ view-&gt;priv = g_new0 (MozWebViewPriv, 1); &gt; view-&gt;priv-&gt;view = new MozView(); &gt; view-&gt;priv-&gt;listener = new ViewListener(view); &gt; view-&gt;priv-&gt;view-&gt;SetListener(view-&gt;priv-&gt;listener); &gt;&#64;&#64; -248,7 +302,9 &#64;&#64; &gt; view-&gt;priv-&gt;mozWidget = gtk_bin_get_child(GTK_BIN(view-&gt;priv-&gt;offscreen)); &gt; } &gt; &gt;-// Public &gt;+/******************************************************************* &gt;+ * API * &gt;+ *******************************************************************/ &gt; &gt; GtkWidget * &gt; moz_web_view_new() &gt;&#64;&#64; -257,7 +313,26 &#64;&#64; &gt; } &gt; &gt; void &gt;-moz_web_view_load_uri(MozWebView *view, const char *uri) &gt;+moz_web_view_load_uri(MozWebView *view, const gchar *uri) &gt; { &gt;+ g_return_if_fail(MOZ_IS_WEB_VIEW(view)); &gt;+ g_return_if_fail(uri &amp;&amp; uri[0]); &gt;+ &gt; view-&gt;priv-&gt;view-&gt;LoadURI(uri); &gt; } &gt;+ &gt;+void &gt;+moz_web_view_load_data(MozWebView *view, &gt;+ const gchar *base_uri, &gt;+ const gchar *content_type, &gt;+ const gchar *data, &gt;+ gsize len) &gt;+{ &gt;+ g_return_if_fail(MOZ_IS_WEB_VIEW(view)); &gt;+ g_return_if_fail(base_uri != NULL); &gt;+ g_return_if_fail(content_type != NULL); &gt;+ g_return_if_fail(data != NULL); &gt;+ g_return_if_fail(len &gt; 0); &gt;+ &gt;+ view-&gt;priv-&gt;view-&gt;LoadData(base_uri, content_type, (PRUint8 *)data, (PRUint32)len); &gt;+} </textarea> <iframe id="viewFrame" src="attachment.cgi?id=365436" style="height: 400px; width: 100%;"> <b>You cannot view the attachment while viewing its details because your browser does not support IFRAMEs. <a href="attachment.cgi?id=365436">View the attachment on a separate page</a>.</b> </iframe> <script type="text/javascript"> <!-- if (typeof document.getElementById == "function") { document.write('<iframe id="viewDiffFrame" style="height: 400px; width: 100%; display: none;"><\/iframe>'); document.write('<button type="button" id="editButton" onclick="editAsComment();">Edit Attachment As Comment<\/button>'); document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment<\/button>'); document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment<\/button>'); document.write('<button type="button" id="viewDiffButton" onclick="viewDiff();">View Attachment As Diff<\/button>'); document.write('<button type="button" id="viewRawButton" onclick="viewRaw();" style="display: none;">View Attachment As Raw<\/button>'); } //--> </script> </td> </tr> </table> Attachments on this Bug: <a href="attachment.cgi?id=346787&amp;action=edit">346787</a> | <a href="attachment.cgi?id=346971&amp;action=edit">346971</a> | <a href="attachment.cgi?id=348057&amp;action=edit">348057</a> | <a href="attachment.cgi?id=356769&amp;action=edit">356769</a> | <a href="attachment.cgi?id=360945&amp;action=edit">360945</a> | <a href="attachment.cgi?id=360971&amp;action=edit">360971</a> | <a href="attachment.cgi?id=360974&amp;action=edit">360974</a> | <a href="attachment.cgi?id=362423&amp;action=edit">362423</a> | 365436 </form> <br> </div> <div id="footer"> <div class="intro"></div> <ul id="useful-links"> <li id="links-actions"> <div class="label">Actions: </div><ul class="links"> <li><a href="./">Home</a></li> <li><span class="separator">| </span><a href="enter_bug.cgi">New</a></li> <li><span class="separator">| </span><a href="query.cgi">Search</a></li> <li class="form"> <span class="separator">| </span> <form action="buglist.cgi" method="get" onsubmit="if (this.quicksearch.value == '') { alert('Please enter one or more search terms first.'); return false; } return true;"> <input class="txt" type="text" id="quicksearch_bottom" name="quicksearch"> <input class="btn" type="submit" value="Find" id="find_bottom"></form></li> <li><span class="separator">| </span><a href="report.cgi">Reports</a></li> <li> <span class="separator">| </span> <a href="request.cgi?requester=mark.finkle%40gmail.com&amp;requestee=mark.finkle%40gmail.com&amp;do_union=1&amp;group=type&amp;action=queue">My Requests</a></li> <li><span class="separator">| </span><a href="votes.cgi?action=show_user">My&nbsp;Votes</a></li> <li><span class="separator">| </span><a href="userprefs.cgi">Preferences</a></li> <li> <span class="separator">| </span> <a href="http://www.bugzilla.org/docs/tip/html/attachments.html" target="_blank">Help</a> </li> <li> <span class="separator">| </span> <a href="relogin.cgi">Log&nbsp;out</a> mark.finkle&#64;gmail.com</li> </ul> </li> <li id="links-saved"> <div class="label"> Saved Searches: </div> <ul class="links"> <li><a href="buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailreporter1=1&amp;emailtype1=exact&amp;email1=mark.finkle%40gmail.com&amp;field0-0-0=bug_status&amp;type0-0-0=notequals&amp;value0-0-0=UNCONFIRMED&amp;field0-0-1=reporter&amp;type0-0-1=equals&amp;value0-0-1=mark.finkle%40gmail.com">My Bugs</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=DOC%20Bugs">DOC Bugs</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Embedding">Embedding</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Fennec">Fennec</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Fennec%20GFB">Fennec GFB</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=JSC%20Bugs">JSC Bugs</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Mobile%20Bugs">Mobile Bugs</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=Watched%20Bugs">Watched Bugs</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=WR%20ALL%20Bugs">WR ALL Bugs</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=WR%20Bugs">WR Bugs</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=XE%20Bugs">XE Bugs</a></li> <br> <li> <a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=Bugs%20Filed%20Today&amp;sharer_id=159758" class="shared" title="Shared by Reed Loden [:reed] &lt;reed&#64;mozilla.com&gt;" >Bugs&nbsp;Filed&nbsp;Today</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=tb3-blocking-plus-and-question&amp;sharer_id=1537" class="shared" title="Shared by Dan Mosedale (:dmose) &lt;dmose&#64;mozilla.org&gt;" >tb3&#8209;blocking&#8209;plus&#8209;and&#8209;question</a></li> <li><span class="separator">| </span> <a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=tb3needs&amp;sharer_id=1537" class="shared" title="Shared by Dan Mosedale (:dmose) &lt;dmose&#64;mozilla.org&gt;" >tb3needs</a></li> </ul> </li> </ul> <div class="outro"></div> </div> </body> </html>