User:Mnyromyr: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
Some unordered thoughts about SeaMonkey and things I'd like to see hacked, maybe even by myself. '''<tt>;-)</tt>'''
Some unordered thoughts about SeaMonkey and things I'd like to see hacked, maybe even by myself. '''<tt>;-)</tt>'''
<ul>
<ul>
  <li>[[User:Mnyromyr#SeaMonkey_.2Fxpfe_to_.2Ftoolkit_widget_transition|SeaMonkey /xpfe to /toolkit widget transition]]</li>
  <li>[https://bugzilla.mozilla.org/show_bug.cgi?id=360488 Stuff we (may) want to port over from Thunderbird into SeaMonkey MailNews (bug 360488)]</li>
  <li>[[User:Mnyromyr:TB2SM|Stuff we (may) want to port over from Thunderbird into SeaMonkey MailNews]]</li>
  <li>'''[[SeaMonkey:MailNews:CodingStyle|Guide on approved SeaMonkey MailNews coding style]]'''</li>
  <li>[[User:Mnyromyr:MailFilters|Improvements for SeaMonkey MailNews filters]]</li>
  <li>[[User:Mnyromyr:MailFilters|Improvements for SeaMonkey MailNews filters]]</li>
  <li>[[User:Mnyromyr:MailViews|Fixing Message Views]]</li>
  <li>[[User:Mnyromyr:MessageViews|Fixing Message Views]]</li>
<li>[[User:Mnyromyr:BayesFacts|Technical Notes on the Bayesian Junk Filter]]</li>
<li>[[User:Mnyromyr:SeaMonkeyXPFE2toolkit_widget_transition|SeaMonkey /xpfe to /toolkit widget transition]] (historic)</li>
</ul>
</ul>
== SeaMonkey /xpfe to /toolkit widget transition ==
It is a stated [http://wiki.mozilla.org/index.php?title=SeaMonkey:Project_Goals#Future_Releases (future) goal] of the SeaMonkey project to switch to the "new" XUL widget toolkit used by XULRunner, Firefox, Thunderbird, etc.
But apart from the backend stuff like /bootstrap etc., porting the Seamonkey ''bindings'' will also pose quite some problems. Toolbars, for example, are quite different: /xpfe has grippies, /toolkit's toolbars are customizable... (And both are non-movable, btw.)
The actual transition to toolkit has been outlined like this:
KaiRo 1) pack the toolkit version via jar.mn where we have a null diff
KaiRo 2) work on doing the same for all easy cases (contribute eventual
  improvements from our side to toolkit)
KaiRo 3) for the hard stuff: eventually create new xbl files/bindings in the
  communicator/ package that extend toolkit versions, or that do our
  own implementations where applicable
Work has already begun to identify those widgets falling under 1) or 2) above, and up to now, this has only lead to a '''loss''' of functionality for SeaMonkey, because /toolkit peers are (not unexpectedly) unwilling to take back stuff they kicked out before (see [https://bugzilla.mozilla.org/show_bug.cgi?id=282187 bug 282187] for details).
===So how do we cope with this?===
While the loss of a minor context menu item might be acceptable in the light of a greater cause, making eg. /xpfe toolbars base upon /toolkit (as in 3) above) will be problematic:
1. Make chrome://global/content/bindings/* refer to /toolkit and introduce chrome://xpfe/content/bindings/* for /xpfe
<ul>This means touching all Seamonkey stuff that relies upon the /xpfe implementation and will break (lots of? how many?) addons doing the same.
All these /xpfe bindings would inherit as much as possible from the /toolkit version. Files "interested" in the /xpfe widgets would have to include a special <tt>xpfe.css</tt> stylesheet with the /xpfe widget's -moz-binding rules.</ul>
<ul>''We need to get an overview about which SeaMonkey addons will break!''</ul>
2. Keep chrome://global/content/bindings/* refer to /xpfe and introduce chrome://toolkit/content/bindings/* for /toolkit
<ul>This will not work without changes to /toolkit, because /toolkit bindings expect to be available via chrome://global/content/bindings/* (as do /xpfe bindings) and so would refer to the (wrong) /xpfe ones.</ul>
3. Drop /xpfe and put all the stuff into /toolkit
<ul>This means putting lots of #ifdefs into /toolkit, because they most probably won't accept all the stuff back they dropped. Furthermore, it's a quite ugly.</ul>
4. Make /xpfe binding files include the /toolkit files via some ?xbl-include? magic
<ul>This needs two steps:
<ul>
  <li>introduce chrome://toolkit/content/bindings/* for /toolkit binding files. These files remain unchanged and thus refer internally to chrome://global/content/bindings/* still.</li>
  <li>implement an ?xbl-include? processing instruction (''or do we already have something like that?''), so that the /xpfe bindings can include the /toolkit files on file level.</li>
</ul>
</ul>
<ul>This will keep all /xpfe chrome://global/content/bindings/* references intact while using unchanged /toolkit bindings as a base, but this, too, is very hackish.</ul>
5. Just keep /xpfe in sync with /toolkit by backporting interesting stuff
<ul>While this is the easiest way with regard to infrastructural changes, it may be quite tedious to watch out for changes in /toolkit files.</ul>
6. Use the existing ''communicator'' infrastructure as it's supposed to be included by all main windows!
<ul>This means that we can shadow the toolkit bindings in xul.css with our own in /xpfe/communicator/resources/content/communicator.css! No extra magic foo is required...</ul>
When first writing this, I saw 4. (and maybe 5.) as viable roads, but both
neglect the XULRunner case. Targetting XULRunner will mean that we have no (nice) chance of tinkering with the toolkit itself, we're bound to derive from it.
But then Neil told me about the communicator.css, and now the toolbar transition [https://bugzilla.mozilla.org/show_bug.cgi?id=282188 bug 282188] has a ''little'' patch that even allows for usage of both toolkit and XPFE bindings...
The derived bindings there are stored in chrome://communicator/content/bindings/, more are likely to follow.
(Oh, now that I alter this page I see that Neil did propose that, too - nice :) )

Latest revision as of 20:11, 21 August 2009