<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mark Finkle's Weblog &#187; XUL</title>
	<atom:link href="http://starkravingfinkle.org/blog/tags/xul/feed/" rel="self" type="application/rss+xml" />
	<link>http://starkravingfinkle.org/blog</link>
	<description></description>
	<lastBuildDate>Mon, 23 Jan 2012 08:07:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Firefox Android: Add-ons in a Native World</title>
		<link>http://starkravingfinkle.org/blog/2011/11/firefox-android-add-ons-in-a-native-world/</link>
		<comments>http://starkravingfinkle.org/blog/2011/11/firefox-android-add-ons-in-a-native-world/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 21:23:45 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Restartless]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=1126</guid>
		<description><![CDATA[One of the first things I yelled about when we were debating switching to a native Android UI for Firefox was add-on support. Using a XUL-based UI meant add-ons were free. The Mozilla platform has support for add-ons baked right in. Moving to a native UI would surely kill our ability to support add-ons, right? [...]]]></description>
			<content:encoded><![CDATA[<p>One of the first things I yelled about when we were debating switching to a native Android UI for Firefox was add-on support. Using a XUL-based UI meant add-ons were free. The Mozilla platform has support for add-ons baked right in. Moving to a native UI would surely kill our ability to support add-ons, right? <strong>Wrong!</strong></p>
<p>Add-ons are an important part of the Firefox story. Native UI builds of Firefox support add-ons. There are some things an add-on developer needs to be aware:</p>
<ul>
<li>The add-ons system is the same one used in other Mozilla applications. We did not invent a new add-on system.</li>
<li>Native UI builds are considered a new application and are not add-on compatible with the XUL versions. The application ID for native UI builds is: {aa3c5121-dab2-40e2-81ca-7ea25febc110}</li>
<li>There is no visible XUL in the UI, so using overlays to try to add or change UI is useless.</li>
<li>There is a simple NativeWindow object that allows you to manipulate parts of the native Android UI.</li>
<li>Services like <code>nsIPromptService</code> and <code>nsIAlertsService</code> are implemented to use native Android UI.</li>
<li>Since overlays are useless for UI and JavaScript APIs are available for native UI, you should seriously consider just making a restartless add-on.</li>
</ul>
<p><strong>NativeWindow</strong></p>
<p>We wanted to give add-on developers some APIs to manipulate the native Android UI, so we create a helper object called <code>NativeWindow</code>. The API is still young, but it gives you access to: Android Menu, Doorhanger Notifications, Context Menus (in web content) and Android popup toast alerts. The object is currently part of the main browser window, but we are considering moving it to a JS module. The basic API is here:</p>
<pre><code>
/*
 label: menu label
 icon: file:// or data: URI for an icon
 callback: JS function called when menu is tapped
 returns a menu ID that can be used to remove the menu
*/
menuID = NativeWindow.menu.add(label, icon, callback);
NativeWindow.menu.remove(menuID);

/*
 message: displayed text
 value: string based tag
 buttons: array of JS objects used to create buttons in the notification
 tabID: tab associated with this notification
 options: JS object that has 'persistence' and 'timeout' options
*/
NativeWindow.doorhanger.show(message, value, buttons, tabID, options);
NativeWindow.doorhanger.hide(value, tabID);

/*
 label: menu label
 selector: JS object that has a 'matches(element)' function. Used to show the menu.
 callback: JS function called when menu is tapped
 returns a menu ID that can be used to remove the menu
*/
menuID = NativeWindow.contextmenu.add(label, selector, callback);
NativeWindow.contextmenu.add(menuID);

/*
 message: displayed text
 duration: "short" or "long"; Used for alert timeout
*/
NativeWindow.toast.show(message, duration);
</code></pre>
<p>Some examples of what the API can do:</p>
<p><a href="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-doorhanger-cropped.png"><img src="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-doorhanger-cropped-300x277.png" alt="" title="native-api-doorhanger-cropped" width="300" height="277" class="alignnone size-medium wp-image-1131" /></a></p>
<p>Doorhanger Notification</p>
<hr/>
<p><a href="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-menu-cropped.png"><img src="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-menu-cropped-300x280.png" alt="" title="native-api-menu-cropped" width="300" height="280" class="alignnone size-medium wp-image-1132" /></a></p>
<p>Menu Item</p>
<hr/>
<p><a href="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-contextmenu-cropped.png"><img src="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-contextmenu-cropped-251x300.png" alt="" title="native-api-contextmenu-cropped" width="251" height="300" class="alignnone size-medium wp-image-1130" /></a></p>
<p>Context Menu Item</p>
<hr/>
<p><a href="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-toast-cropped.png"><img src="http://starkravingfinkle.org/blog/wp-content/uploads/2011/11/native-api-toast-cropped-300x216.png" alt="" title="native-api-toast-cropped" width="300" height="216" class="alignnone size-medium wp-image-1133" /></a></p>
<p>Toast Popup Alert</p>
<hr/>
<p>The NativeWindow API will continue to grow and mature, but I think even now it shows that add-ons can have first-class interactions with the native UI of Firefox. I am looking forward to developers trying it out and helping us push the API forward.</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2011/11/firefox-android-add-ons-in-a-native-world/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Fennec &#8211; Handling Add-on Options</title>
		<link>http://starkravingfinkle.org/blog/2009/09/fennec-handling-add-on-options/</link>
		<comments>http://starkravingfinkle.org/blog/2009/09/fennec-handling-add-on-options/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 14:23:28 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=522</guid>
		<description><![CDATA[The add-on (extension) mechanism built into the Mozilla platform is very powerful. One of the optional features is support for options (preferences) dialogs. As discussed in my last post, Fennec doesn&#8217;t like dialogs. In addition, Fennec has a simple, clean preference system. While designing the Fennec Add-ons Manager, we discussed how we would support add-on [...]]]></description>
			<content:encoded><![CDATA[<p>The add-on (extension) mechanism built into the Mozilla platform is very powerful. One of the optional features is support for options (preferences) dialogs. As discussed in my <a href="http://starkravingfinkle.org/blog/2009/09/fennec-prompts-alerts-and-dialogs-oh-my/">last post</a>, Fennec doesn&#8217;t like dialogs. In addition, Fennec has a simple, clean preference system. While designing the Fennec Add-ons Manager, we discussed how we would support add-on options. We didn&#8217;t want popup dialogs of random and complicated XUL.</p>
<p>After brainstorming a few ideas, we settled on a simple idea. Fennec uses special <code>&lt;setting&gt;</code> XUL tags to create it&#8217;s list of preferences. Add-ons would be forced to use the same tags. The options would be merged into the Fennec Add-on Manager, not displayed as a popup dialog. Of course, add-ons can support more than one application, so we needed to make sure that the options XUL for Fennec could coexist with the options XUL for other applications. Let&#8217;s take a look at how this all works:</p>
<p><strong>Install Manifest</strong></p>
<p>Add-ons use install.rdf to identify the XUL used for displaying the preferences. This is optional.</p>
<p><code>
&lt;em:optionsURL&gt;chrome://myaddon/content/options.xul&lt;/em:optionsURL&gt;
</code></p>
<p>This is needed for any add-on that wants to use an options dialog.</p>
<p><strong>Chrome Manifest</strong></p>
<p>Add-ons use the <a href="https://developer.mozilla.org/en/Chrome_Registration">chrome manifest</a> to selectively <a href="https://developer.mozilla.org/en/Chrome_Registration#override">override</a> XUL, and other resources, between different applications using the <a href="https://developer.mozilla.org/en/Chrome_Registration#application">application flags</a></p>
<p><code>
override chrome://myaddon/content/options.xul chrome://myaddon/content/fennec-options.xul application={a23983c0-fd0e-11dc-95ff-0800200c9a66}
</code></p>
<p>This will tell Mozilla to use <code>fennec-options.xul</code> anytime the <code>options.xul</code> resource is requested.</p>
<p><strong>Options XUL</strong></p>
<p>As I said, the XUL allowed for the Fennec options system is limited to a <a href="http://mxr.mozilla.org/mobile-browser/source/chrome/content/preferences/setting.xml">few new tags</a>. Here is an example of a Fennec options dialog:</p>
<pre><code>
&lt;?xml version="1.0"?&gt;

&lt;!DOCTYPE mydialog SYSTEM "chrome://myextension/locale/mydialog.dtd"&gt;

&lt;vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&gt;
  &lt;setting pref="extensions.myaddon.debugging" type="boolint" on="1" off="2" title="Enable debugging"/&gt;
  &lt;setting pref="extensions.myaddon.profiling" type="bool" title="Enable profiling"&gt;
    Profiling can affect the performance of the application
  &lt;/setting&gt;
  &lt;setting pref="extensions.myaddon.logging" type="bool" title="Save logs"/&gt;
  &lt;setting pref="extensions.myaddon.logging.path" type="string" title="Log folder"/&gt;
  &lt;setting type="button" title="Clear logs"&gt;
    &lt;button label="Clear" oncommand="MyAddon.clearLogs();"/&gt;
  &lt;/setting&gt;
&lt;/vbox&gt;
</code></pre>
<p>Note that we don&#8217;t have any <code>&lt;script&gt;</code> support and we are limited to <code>&lt;setting&gt;</code> tags. The root <code>&lt;vbox&gt;</code> just acts as a container, it isn&#8217;t merged into the main window. Here is how the options look in Fennec:</p>
<p><a href="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-addon-options-sample.png"><img alt="" src="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-addon-options-sample.png" title="Options Sample" class="alignnone" width="400" height="250" /></a></p>
<p>As always, we appreciate your feedback. I&#8217;m in the process of updating the <a href="https://wiki.mozilla.org/Mobile/Fennec/Extensions/BestPractices">Fennec Best Practices</a> documents with this information.</p>
<p>A big <strong>thank you</strong> goes out to Vivien Nicolas, a Mozilla intern in the Paris office, for turning my <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=512882">super-great design</a> into a reality. Shaver told me there&#8217;d be days like this!</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/09/fennec-handling-add-on-options/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fennec &#8211; Prompts, Alerts and Dialogs &#8211; Oh My</title>
		<link>http://starkravingfinkle.org/blog/2009/09/fennec-prompts-alerts-and-dialogs-oh-my/</link>
		<comments>http://starkravingfinkle.org/blog/2009/09/fennec-prompts-alerts-and-dialogs-oh-my/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 13:25:45 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XPCOM]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=512</guid>
		<description><![CDATA[If you&#8217;ve developed applications or extensions using the Mozilla platform, you know that there are tons of services and APIs available. We use those same capabilities when building Fennec. However, there are times when the default platform behavior is not desirable on mobile devices. When that happens, we could hack up our own system, or [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve developed applications or extensions using the Mozilla platform, you know that there are tons of services and APIs available. We use those same capabilities when building Fennec. However, there are times when the default platform behavior is not desirable on mobile devices. When that happens, we could hack up our own system, or we could re-implement the platform APIs to suit our needs. We try to do the latter.</p>
<p>Here are some APIs that have been reimplemented in Fennec: <a href="https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIAlertsService">nsIAlertsService</a>, <a href="https://developer.mozilla.org/en/nsIPromptService">nsIPromptService</a>, <a href="https://developer.mozilla.org/en/nsIDownloadManagerUI">nsIDownloadManagerUI</a>, and <a href="https://developer.mozilla.org/en/DOM/window.openDialog">window.openDialog()</a>. The primary reason all of these APIs have been reimplemented is that they open new XUL windows. We don&#8217;t like doing that in Fennec. Mostly because opening a XUL window is slow. But also because we love having tighter control over the look, feel and behavior of the UI elements.</p>
<p><strong>Services</strong></p>
<p>Since we re-implement the interfaces, <code>nsIAlertsService</code>, <code>nsIPromptService</code> and <code>nsIDownloadManagerUI</code> can be used just as they are on the desktop. The big difference is that none of them open new windows. The UI is embedded into the main window itself. It&#8217;s faster to display and easier to control and style the UI elements. In the case of the download manager, it&#8217;s designed to be embedded in the main window.</p>
<p><strong>Dialogs</strong></p>
<p>On the other hand, we couldn&#8217;t exactly match the way <code>window.openDialog()</code> worked, so we created a slightly different API: <code>importDialog()</code>. The big difference is that <code>importDialog()</code> actually merges the XUL dialog into the main window. It does not open a new XUL window.</p>
<p><code>
importDialog(aSrc, aArguments);
</code></p>
<ul>
<li><code>aSrc</code>: The chrome URL of the XUL dialog</li>
<li><code>aArguments</code>: A JavaScript object used to pass data to the dialog</li>
</ul>
<p>The XUL passed to <code>importDialog()</code> is very similar to XUL passed to <code>window.openDialog()</code>, with some limitations and caveats:</p>
<ul>
<li>Only <code>&lt;dialog&gt;</code> top level elements are permitted</li>
<li>Scripts are loaded via an attribute on the <code>&lt;dialog&gt;</code> element, not via the <code>&lt;script&gt;</code> tag</li>
</ul>
<p>Here is an example:</p>
<pre><code>
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE mydialog SYSTEM "chrome://myextension/locale/mydialog.dtd"&gt;
&lt;dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
      script="chrome://myextension/content/mydialog.js"&gt;
  
  &lt;label id="mydialog-title" crop="center"/&gt;

... some other widgets ...

  &lt;hbox pack="center"&gt;
    &lt;button label="&amp;ok.label;" oncommand="myDialog.doSomething();"/&gt;
  &lt;/hbox&gt;
&lt;/dialog&gt;
</code></pre>
<p>The XUL is merged into the existing window, almost like a XUL overlay. Because of this, element ID and JavaScript conflicts are possible, just like overlays. So be careful!</p>
<p>Obviously, add-on developers should use these features. We are looking for feedback as well. Perhaps we could get <code>importDialog()</code> working more like <code>window.openDialog()</code>.</p>
<p>A big <strong>thank you</strong> goes out to Fabrice Desré for working on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=489423">reimplementing nsIPromptService</a>. He created some great building blocks for Fennec.</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/09/fennec-prompts-alerts-and-dialogs-oh-my/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fennec &#8211; Of Screens and Orientation</title>
		<link>http://starkravingfinkle.org/blog/2009/09/fennec-of-screens-and-orientation/</link>
		<comments>http://starkravingfinkle.org/blog/2009/09/fennec-of-screens-and-orientation/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 03:37:56 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=495</guid>
		<description><![CDATA[Designing a portable application to run on many different mobile devices is a challenge. Screen sizes and pixel densities are different making it difficult to create the One Great Layout. In addition, mobile devices can change screen orientation, from portrait to landscape and back again. This is one area where using a markup-based UI language [...]]]></description>
			<content:encoded><![CDATA[<p>Designing a portable application to run on many different mobile devices is a challenge. Screen sizes and pixel densities are different making it difficult to create the <strong>One Great Layout</strong>. In addition, mobile devices can change screen orientation, from portrait to landscape and back again.</p>
<p>This is one area where using a markup-based UI language like <a href="https://developer.mozilla.org/en/XUL_Tutorial">XUL</a>, with it&#8217;s support for CSS, comes in handy. Currently, Fennec is being designed and tested to run on Nokia&#8217;s N810 &#038; <a href="http://www.techradar.com/news/phone-and-communications/mobile-phones/firefox-mobile-on-nokia-n900-first-screenshots-631189">N900</a> devices, HTC&#8217;s Touch Pro and Samsung&#8217;s Omnia &#038; Omnia II. Yes, Fennec can run on other Windows Mobile devices, but we don&#8217;t really test on every possible device&#8230; yet. <a href="http://elvis314.wordpress.com/">Joel</a> and the QA crew are working on that, but I digress.</p>
<p>Even with the target devices, we have several screen sizes, pixel densities and orientation requirements to support. Layout support in XUL and media query support in CSS really do the heavy lifting for us. The Fennec UI is the same on all these devices, but we have some layout constraints and CSS rules that allow us to morph the UI as the screen changes. Here are some of the ways we do it:</p>
<ul>
<li>Use physical dimensions whenever possible. Padding and margins are set using millimeters, not pixels. This minimizes the need for special rules for every different screen size and pixel density. Also, the UI is designed for touch, and the current design size for a touchable UI element is ~7.5mm. Your finger doesn&#8217;t change sizes to match the screen <img src='http://starkravingfinkle.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Use <a href="https://developer.mozilla.org/En/CSS/Media_queries">CSS media queries</a> to switch between screen sizes and pixel densities. Large sized images can be used on large screens/densities, while smaller images can be used on smaller screens/densities. The result should be an image that is roughly the same physical size on either device. </li>
<li>Use CSS media queries and <a href="https://developer.mozilla.org/en/CSS_Reference/Mozilla_Extensions">XUL box rules</a> to flow the UI when the device is rotated. A toolbar that works well vertically in landscape orientation, probably needs to flow horizontally in portrait orientation. It&#8217;s all about maximizing the usable space.</li>
</ul>
<p><strong>Screen Size</strong></p>
<p>Here is some example CSS we use for toggling between large and small screens/densities. As you can see, we use 400px as a cutoff:</p>
<pre><code>
/* high-res screens */
@media all and (min-device-width: 401px) {
  toolbarbutton {
    min-width: 64px !important; /* primary button size (match image pixels)*/
    min-height: 64px !important; /* primary button size (match image pixels) */
  }
}

/* low-res screens */
@media all and (max-device-width: 400px) {
  toolbarbutton {
    min-width: 36px !important; /* primary button size (match image pixels) */
    min-height: 36px !important; /* primary button size (match image pixels) */
  }
}
</code></pre>
<p><strong>Orientation</strong></p>
<p>The same kind of example, but this time for changing the direction of some UI elements when rotating the screen:</p>
<pre><code>
@media (orientation: landscape) {
  #panel-controls {
    -moz-box-orient: vertical;
    -moz-box-ordinal-group: 1; /* move to left of screen */
    -moz-box-pack: end; /* force children to align to bottom of screen */
  }
}

@media (orientation: portrait) {
  #panel-controls {
    -moz-box-orient: horizontal;
    -moz-box-ordinal-group: 1000; /* move to the bottom of the screen */
    -moz-box-pack: start; /* force children to align to left of screen */
  }
}
</code></pre>
<p><a href="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-options-landscape.png"><img alt="Landscape" src="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-options-landscape.png" title="Landscape" width="400" height="250" /></a></p>
<p><a href="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-options-portrait.png"><img alt="Portrait" src="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-options-portrait.png" title="Portrait" width="250" height="400" /></a></p>
<p>We also use the <a href="http://starkravingfinkle.org/blog/2008/06/xul-tip-wrapping-boxes/">XUL box wrapping tip</a>, I discussed previously, to allow elements to flow into multiple rows if there is not enough space to hold them in a single row.</p>
<p>If you&#8217;re developing add-ons for Fennec, please keep these situations in mind. Use the <a href="http://mxr.mozilla.org/mobile-browser/">Fennec code</a> as an example of how you can create a great user experience, regardless of screen size or orientation.</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/09/fennec-of-screens-and-orientation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fennec &#8211; More Theme Goodness</title>
		<link>http://starkravingfinkle.org/blog/2009/09/fennec-more-theme-goodness/</link>
		<comments>http://starkravingfinkle.org/blog/2009/09/fennec-more-theme-goodness/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 15:59:49 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=487</guid>
		<description><![CDATA[Recently, we released Fennec Beta 3 for Maemo (Alpha 3 for Windows Mobile is very close). The new release has several internal changes that might be of interest to add-on developers &#8211; or people curious as to how the darn thing works. Roy Frostig posted an nice article about the changes to the way we [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, we released <a href="http://blog.pavlov.net/2009/08/20/fennec-1-0-beta-3-for-maemo/">Fennec Beta 3 for Maemo</a> (Alpha 3 for Windows Mobile is very close). The new release has several internal changes that might be of interest to add-on developers &#8211; or people curious as to how the darn thing works.</p>
<p>Roy Frostig posted an <a href="http://froystig.wordpress.com/2009/08/20/rendering-with-tiles-in-fennec/">nice article</a> about the changes to the way we render web pages. The results are dramatic: panning is much smoother. The approach also gives us more ways to increase performance and user experience in the future by creating a great foundation.</p>
<p>We also landed what we hope is the final approach for styling the user interface. I previously posted about the affect of <a href="http://starkravingfinkle.org/blog/2009/06/fennec-performance-is-the-theme/">themes on performance</a> and how that drives the decisions we make. We are still using the images-for-buttons approach, but we had a problem. Using images-for-buttons doesn&#8217;t work for buttons with text, which can be variable in size.</p>
<p>We decided to extend the image-for-buttons approach for all buttons, using the <code>border-image</code> CSS property. Now all of our buttons have a nice, consistent look. We still have performance concerns with <code>border-image</code>, but we should be able to squeeze more speed out of the code. We also use the <code>border-image</code> approach to improve the appearance of the toggle controls and the radio option controls.</p>
<p><a href="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-new-toggles-and-buttons.png"><img alt="New Toggles and Buttons" src="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-new-toggles-and-buttons.png" title="New Toggles and Buttons" width="400" height="250" /></a></p>
<p><a href="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-new-awesomebar-buttons.png"><img alt="New Radios" src="http://people.mozilla.com/~mfinkle/fennec/screenshots/fennec-new-awesomebar-buttons.png" title="New Radios" width="400" height="250" /></a></p>
<p>In fact, add-ons can, and will in some cases, use the new button styles too. We are in the process of updating the <a href="https://wiki.mozilla.org/Mobile/Fennec/Extensions/BestPractices">Best Practices</a> document with how to make use of the themes and styles.</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/09/fennec-more-theme-goodness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Life for Old Projects</title>
		<link>http://starkravingfinkle.org/blog/2009/09/new-life-for-old-projects/</link>
		<comments>http://starkravingfinkle.org/blog/2009/09/new-life-for-old-projects/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 13:35:36 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=484</guid>
		<description><![CDATA[So much to do, so little time. My workspace is littered with projects I started but couldn&#8217;t find the time to keep going. It&#8217;s kinda sad and I do feel guilty. Sometimes those projects find a new life. Recently, two of my old projects found new life: FizzyPop and js-ctypes are both active again. Doug [...]]]></description>
			<content:encoded><![CDATA[<p>So much to do, so little time. My workspace is littered with projects I started but couldn&#8217;t find the time to keep going. It&#8217;s kinda sad and I do feel guilty.</p>
<p>Sometimes those projects find a new life. Recently, two of my old projects found new life: <a href="https://wiki.mozilla.org/FizzyPop">FizzyPop</a> and <a href="https://wiki.mozilla.org/JSctypes">js-ctypes</a> are both active again.</p>
<p><a href="http://www.mozdev.org/drupal/blog/17">Doug Warner</a> has started <a href="http://www.mozdev.org/drupal/blog/Project-Wizard-Get-Started-Your-Idea-without-Mundane-Setup">building</a> a Mozilla Project Wizard on the FizzyPop source code. Doug is requesting feedback for <a href="http://www.mozdev.org/drupal/blog/Help-Improve-Project-Wizard-Jetpack-JS-Modules-and-More">improvements</a>. You can try it out <a href="http://www.mozdev.org/projects/wizard">here</a>.</p>
<p>Dan Witte has started looking into moving js-ctypes into the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=513783">Mozilla tree</a>! There are also plans to add a nice JavaScript <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=513788">wrapper</a> API around the XPCOM too.</p>
<p>I feel less guilty now.</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/09/new-life-for-old-projects/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>XULRunner 1.9.0.11</title>
		<link>http://starkravingfinkle.org/blog/2009/06/xulrunner-1-9-0-11/</link>
		<comments>http://starkravingfinkle.org/blog/2009/06/xulrunner-1-9-0-11/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 05:16:06 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XPCOM]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=441</guid>
		<description><![CDATA[The newest official XULRunner has been released. XULRunner 1.9.0.11 matches the Firefox 3.0.11 release. For XULRunner developers, most of the changes in 1.9.0.11 are related to security and stability fixes. SQLite was upgraded to version 3.6.7. Runtimes SDKs Source tarball The coolest thing about this XULRunner release is how it was done. Mozilla&#8217;s Release Engineering [...]]]></description>
			<content:encoded><![CDATA[<p>The newest official <a href="https://developer.mozilla.org/en/XULRunner">XULRunner</a> has been released. <a href="http://developer.mozilla.org/en/docs/XULRunner_1.9_Release_Notes">XULRunner 1.9.0.11</a> matches the <a href="http://www.mozilla.com/en-US/firefox/3.0.11/releasenotes/">Firefox 3.0.11</a> release. For XULRunner developers, most of the changes in 1.9.0.11 are related to <a href="http://www.mozilla.org/security/known-vulnerabilities/firefox30.html#firefox3.0.11">security</a> and stability fixes. SQLite was upgraded to version 3.6.7.</p>
<p><a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.11/runtimes">Runtimes</a><br />
<a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.11/sdk">SDKs</a><br />
<a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.11/source">Source tarball</a></p>
<p>The coolest thing about this XULRunner release is how it was done. Mozilla&#8217;s Release Engineering group is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=494055">now doing</a> official XULRunner releases at the same time as Firefox releases. Previously, someone would manually <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=492549">file a bug</a>, make a patch, spin the builds and push the bits. A big thank you to the release crew for adding this to their release process.</p>
<p>Want to get started building <a href="http://www.mozilla.org/projects/mozilla-based.html">XULRunner applications</a>? We have an <a href="https://developer.mozilla.org/en/Getting_started_with_XULRunner">article</a> for that. It&#8217;s way better than the crappy XML UI framework you&#8217;re currently using <img src='http://starkravingfinkle.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/06/xulrunner-1-9-0-11/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ready for a Challenge?</title>
		<link>http://starkravingfinkle.org/blog/2009/05/ready-for-a-challenge/</link>
		<comments>http://starkravingfinkle.org/blog/2009/05/ready-for-a-challenge/#comments</comments>
		<pubDate>Wed, 13 May 2009 16:27:53 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XPCOM]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=421</guid>
		<description><![CDATA[Mozdev and Mozilla Europe have teamed up to create a Firefox Mobile (Fennec) Add-ons Challenge. The goal is to create or port add-ons to Fennec. You only need to propose a concept for now, but you&#8217;ll need to get the add-on ready for the upcoming Mozilla/Maemo developer weekend in Copenhagen on May 30-31. See Brian [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mozdev.org">Mozdev</a> and <a href="http://mozilla-europe.org/">Mozilla Europe </a>have teamed up to create a <a href="http://www.mozilla.com/en-US/mobile/">Firefox Mobile (Fennec)</a> Add-ons Challenge. The goal is to create or port add-ons to Fennec. You only need to propose a concept for now, but you&#8217;ll need to get the add-on ready for the upcoming <a href="http://wiki.maemo.org/MozillaMaemoDanishWeekend">Mozilla/Maemo developer weekend</a> in Copenhagen on May 30-31.</p>
<p>See <a href="http://www.mozdev.org/drupal/blog/Mozdev-Mozilla-Europe-Firefox-Mobile-Add-ons-Challenge">Brian King&#8217;s post</a> for more details.</p>
<p>I am interested to see innovative ideas for using the limited UI in Fennec, add-ons that focus on mobile-specific functionality, and code that exposes more of the Maemo device functionality to Mozilla (yes, XPCOM is likely involved).</p>
<p>I also wouldn&#8217;t mind some applets (either as add-ons or XUL apps) running on Maemo. Think about mobile-specific Chatzilla or FireFTP for example. By mobile-specific, I mean dramatically different UIs, not just porting the existing desktop UI. If many little focused applets work for the iPhone, why not for other mobile platforms? And with XUL/JS, it&#8217;s pretty easy to build them. Anyone got a XUL-based Twitter app? <img src='http://starkravingfinkle.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As always, we love to hear feedback from anyone building add-ons or apps on our mobile stack. Post comments, file <a href="http://bugzilla.mozilla.org">bug reports</a>, visit the <a href="http://irc.mozilla.org">IRC</a> channels (#mobile &#038; #extdev).</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/05/ready-for-a-challenge/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>XULRunner 1.9.0.7</title>
		<link>http://starkravingfinkle.org/blog/2009/03/xulrunner-1907/</link>
		<comments>http://starkravingfinkle.org/blog/2009/03/xulrunner-1907/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 13:53:23 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Embedding]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=403</guid>
		<description><![CDATA[While I was on vacation last week, the newest official XULRunner was spun up and has now been released. XULRunner 1.9.0.7 matches the Firefox 3.0.7 release. For XULRunner developers, most of the changes in 1.9.0.7 are related to security fixes. There are some cookie and XHR fixes in there too. You can also look at [...]]]></description>
			<content:encoded><![CDATA[<p>While I was on vacation last week, the newest official <a href="https://developer.mozilla.org/en/XULRunner">XULRunner</a> was spun up and has now been released. <a href="http://developer.mozilla.org/en/docs/XULRunner_1.9_Release_Notes">XULRunner 1.9.0.7</a> matches the <a href="http://www.mozilla.com/en-US/firefox/3.0.7/releasenotes/">Firefox 3.0.7</a> release. For XULRunner developers, most of the changes in 1.9.0.7 are related to <a href="http://www.mozilla.org/security/known-vulnerabilities/firefox30.html#firefox3.0.7">security fixes</a>. There are some cookie and XHR fixes in there too. You can also look at the <a href="https://bugzilla.mozilla.org/buglist.cgi?keywords_type=anywords&#038;keywords=fixed1.9.0.7+verified1.9.0.7">full list of fixed bugs</a>.</p>
<p><a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.7/runtimes">Runtimes</a><br />
<a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.7/sdk">SDKs</a><br />
<a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.7/source">Source tarball</a></p>
<p>Thanks to Dave Townsend and Nick Thomas for getting 1.9.0.7 out the door.</p>
<p>Want to get started building XULRunner applications? We have an <a href="https://developer.mozilla.org/en/Getting_started_with_XULRunner">article</a> for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/03/xulrunner-1907/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XULRunner 1.9.0.6</title>
		<link>http://starkravingfinkle.org/blog/2009/02/xulrunner-1906/</link>
		<comments>http://starkravingfinkle.org/blog/2009/02/xulrunner-1906/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 14:02:57 +0000</pubDate>
		<dc:creator>Mark Finkle</dc:creator>
				<category><![CDATA[Embedding]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://starkravingfinkle.org/blog/?p=387</guid>
		<description><![CDATA[The newest official XULRunner has been released. XULRunner 1.9.0.6 matches the Firefox 3.0.6 release. For XULRunner developers, most of the changes in 1.9.0.6 are related to security fixes. You can also look at the full list of fixed bugs. Runtimes SDKs Source tarball Update: We now have XULRunner builds for Windows Mobile! XULRunner runtimes now [...]]]></description>
			<content:encoded><![CDATA[<p>The newest official <a href="https://developer.mozilla.org/en/XULRunner">XULRunner</a> has been released. <a href="http://developer.mozilla.org/en/docs/XULRunner_1.9_Release_Notes">XULRunner 1.9.0.6</a> matches the <a href="http://www.mozilla.com/en-US/firefox/3.0.6/releasenotes/">Firefox 3.0.6</a> release. For XULRunner developers, most of the changes in 1.9.0.6 are related to <a href="http://www.mozilla.org/security/known-vulnerabilities/firefox30.html#firefox3.0.6">security fixes</a>. You can also look at the <a href="https://bugzilla.mozilla.org/buglist.cgi?keywords_type=anywords&#038;keywords=fixed1.9.0.6+verified1.9.0.6">full list of fixed bugs</a>.</p>
<p><a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.6/runtimes">Runtimes</a><br />
<a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.6/sdk">SDKs</a><br />
<a href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.0.6/source">Source tarball</a></p>
<p><strong>Update:</strong> We now have XULRunner builds for <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/mobile-browser-wince-arm/">Windows Mobile</a>! XULRunner runtimes now exist for Windows, Windows Mobile, OS X, Linux and <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/mobile-browser-linux-arm/">Maemo</a> (a mobile Linux). Another XULRunner port is underway: <a href="https://wiki.mozilla.org/Mobile/Symbian">Symbian OS</a> (S60).</p>
<p>Want to get started building XULRunner applications? We have an <a href="https://developer.mozilla.org/en/Getting_started_with_XULRunner">article</a> for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://starkravingfinkle.org/blog/2009/02/xulrunner-1906/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

