Bug 1612166 - Stop shipping all calendar skin files to all platforms. r=Fallen
authorPaul Morris <paul@thunderbird.net>
Fri, 31 Jan 2020 15:32:56 -0500
changeset 28759 0dc699fa42c68a8fb115a9fb61509fd3d7f4bb25
parent 28758 b55b6873476a54a0712ddff905bd45e52ffbcf35
child 28760 171779b184e0be3f5b397bd985d4a3d1a371ac58
push id17023
push usergeoff@darktrojan.net
push dateThu, 13 Feb 2020 22:14:36 +0000
treeherdercomm-central@027b7fafc431 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersFallen
bugs1612166
Bug 1612166 - Stop shipping all calendar skin files to all platforms. r=Fallen
calendar/base/jar.mn
calendar/base/moz.build
calendar/base/themes/common/jar.inc.mn
calendar/base/themes/linux/jar.mn
calendar/base/themes/linux/moz.build
calendar/base/themes/moz.build
calendar/base/themes/osx/jar.mn
calendar/base/themes/osx/moz.build
calendar/base/themes/windows/jar.mn
calendar/base/themes/windows/moz.build
calendar/lightning/jar.mn
calendar/lightning/moz.build
calendar/lightning/themes/common/jar.inc.mn
calendar/lightning/themes/linux/jar.mn
calendar/lightning/themes/linux/moz.build
calendar/lightning/themes/moz.build
calendar/lightning/themes/osx/jar.mn
calendar/lightning/themes/osx/moz.build
calendar/lightning/themes/windows/jar.mn
calendar/lightning/themes/windows/moz.build
mail/installer/allowed-dupes.mn
--- a/calendar/base/jar.mn
+++ b/calendar/base/jar.mn
@@ -89,138 +89,8 @@ calendar.jar:
     content/widgets/calendar-alarm-widget.js                    (content/widgets/calendar-alarm-widget.js)
     content/widgets/calendar-dnd-widgets.js                     (content/widgets/calendar-dnd-widgets.js)
     content/widgets/calendar-minimonth.js                       (content/widgets/calendar-minimonth.js)
     content/widgets/calendar-modebox.js                         (content/widgets/calendar-modebox.js)
     content/calendar-subscriptions-list.js                      (content/widgets/calendar-subscriptions-list.js)
     content/calApplicationUtils.js                              (src/calApplicationUtils.js)
     content/calFilter.js                                        (src/calFilter.js)
     content/WindowsNTToZoneInfoTZId.properties                  (src/WindowsNTToZoneInfoTZId.properties)
-% skin calendar classic/1.0 %skin/linux/
-% skin calendar classic/1.0 %skin/osx/ os=Darwin
-% skin calendar classic/1.0 %skin/windows/ os=WINNT
-% skin calendar-common classic/1.0 %skin/common/
-    skin/common/calendar-alarms.css                             (themes/common/calendar-alarms.css)
-    skin/common/calendar-attendees.css                          (themes/common/calendar-attendees.css)
-    skin/common/calendar-creation-wizard.css                    (themes/common/calendar-creation-wizard.css)
-    skin/common/calendar-daypicker.css                          (themes/common/calendar-daypicker.css)
-    skin/common/calendar-itip-icons.svg                         (themes/common/calendar-itip-icons.svg)
-    skin/common/calendar-occurrence-prompt.css                  (themes/common/calendar-occurrence-prompt.css)
-    skin/common/calendar-occurrence.svg                         (themes/common/calendar-occurrence.svg)
-    skin/common/calendar-preferences.css                        (themes/common/calendar-preferences.css)
-    skin/common/calendar-providerUninstall-dialog.css           (themes/common/calendar-providerUninstall-dialog.css)
-    skin/common/calendar-task-tree.css                          (themes/common/calendar-task-tree.css)
-    skin/common/calendar-task-view.css                          (themes/common/calendar-task-view.css)
-    skin/common/calendar-unifinder.css                          (themes/common/calendar-unifinder.css)
-    skin/common/calendar-views.css                              (themes/common/calendar-views.css)
-    skin/common/dialogs/calendar-alarm-dialog.css               (themes/common/dialogs/calendar-alarm-dialog.css)
-    skin/common/dialogs/calendar-event-dialog.css               (themes/common/dialogs/calendar-event-dialog.css)
-    skin/common/dialogs/calendar-invitations-dialog.css         (themes/common/dialogs/calendar-invitations-dialog.css)
-    skin/common/dialogs/calendar-subscriptions-dialog.css       (themes/common/dialogs/calendar-subscriptions-dialog.css)
-    skin/common/calendar-properties-dialog.css                  (themes/common/dialogs/calendar-properties-dialog.css)
-    skin/common/calendar-timezone-highlighter.css               (themes/common/dialogs/calendar-timezone-highlighter.css)
-    skin/common/calendar-event-dialog-attendees.png             (themes/common/dialogs/images/calendar-event-dialog-attendees.png)
-    skin/common/calendar-invitations-dialog-button-images.png   (themes/common/dialogs/images/calendar-invitations-dialog-button-images.png)
-    skin/common/calendar-invitations-dialog-list-images.png     (themes/common/dialogs/images/calendar-invitations-dialog-list-images.png)
-    skin/common/chain-lock.svg                                  (themes/common/dialogs/images/chain-lock.svg)
-    skin/common/chain-unlock.svg                                (themes/common/dialogs/images/chain-unlock.svg)
-    skin/common/link-image-bottom.svg                           (themes/common/dialogs/images/link-image-bottom.svg)
-    skin/common/link-image-top.svg                              (themes/common/dialogs/images/link-image-top.svg)
-    skin/common/statusbar-priority.svg                          (themes/common/dialogs/images/statusbar-priority.svg)
-    skin/common/icons/alarm-no.svg                              (themes/common/icons/alarm-no.svg)
-    skin/common/icons/alarm.svg                                 (themes/common/icons/alarm.svg)
-    ../icons/default/calendar-alarm-dialog.png                  (themes/common/icons/calendar-alarm-dialog.png)
-    ../icons/default/calendar-event-dialog.png                  (themes/common/icons/calendar-event-dialog.png)
-    ../icons/default/calendar-event-summary-dialog.png          (themes/common/icons/calendar-event-summary-dialog.png)
-    skin/common/icons/calendar-tab.svg                          (themes/common/icons/calendar-tab.svg)
-    ../icons/default/calendar-task-dialog.png                   (themes/common/icons/calendar-task-dialog.png)
-    ../icons/default/calendar-task-summary-dialog.png           (themes/common/icons/calendar-task-summary-dialog.png)
-    skin/common/icons/category.svg                              (themes/common/icons/category.svg)
-    skin/common/icons/complete.svg                              (themes/common/icons/complete.svg)
-    skin/common/icons/confidential.svg                          (themes/common/icons/confidential.svg)
-    skin/common/icons/decline.svg                               (themes/common/icons/decline.svg)
-    skin/common/icons/edit.svg                                  (themes/common/icons/edit.svg)
-    skin/common/icons/email.svg                                 (themes/common/icons/email.svg)
-    skin/common/icons/event.svg                                 (themes/common/icons/event.svg)
-    skin/common/icons/find.svg                                  (themes/common/icons/find.svg)
-    skin/common/icons/freebusy.svg                              (themes/common/icons/freebusy.svg)
-    skin/common/icons/icon32.svg                                (themes/common/icons/icon32.svg)
-    skin/common/icons/imip-bar.svg                              (themes/common/icons/imip-bar.svg)
-    skin/common/icons/locked.svg                                (themes/common/icons/locked.svg)
-    skin/common/icons/newevent.svg                              (themes/common/icons/newevent.svg)
-    skin/common/icons/newtask.svg                               (themes/common/icons/newtask.svg)
-    skin/common/icons/pane.svg                                  (themes/common/icons/pane.svg)
-    skin/common/icons/priority.svg                              (themes/common/icons/priority.svg)
-    skin/common/icons/private.svg                               (themes/common/icons/private.svg)
-    skin/common/icons/save-close.svg                            (themes/common/icons/save-close.svg)
-    skin/common/icons/status.svg                                (themes/common/icons/status.svg)
-    skin/common/icons/synchronize.svg                           (themes/common/icons/synchronize.svg)
-    skin/common/icons/task-tab.svg                              (themes/common/icons/task-tab.svg)
-    skin/common/icons/task.svg                                  (themes/common/icons/task.svg)
-    skin/common/icons/tentative.svg                             (themes/common/icons/tentative.svg)
-    skin/common/icons/timezones.svg                             (themes/common/icons/timezones.svg)
-    skin/common/icons/today.svg                                 (themes/common/icons/today.svg)
-    skin/common/icons/warn.svg                                  (themes/common/icons/warn.svg)
-    skin/common/attendee-icons.png                              (themes/common/images/attendee-icons.png)
-    skin/common/checkbox-images.png                             (themes/common/images/checkbox-images.png)
-    skin/common/event-continue.svg                              (themes/common/images/event-continue.svg)
-    skin/common/event-end.svg                                   (themes/common/images/event-end.svg)
-    skin/common/event-grippy-bottom.png                         (themes/common/images/event-grippy-bottom.png)
-    skin/common/event-grippy-left.png                           (themes/common/images/event-grippy-left.png)
-    skin/common/event-grippy-right.png                          (themes/common/images/event-grippy-right.png)
-    skin/common/event-grippy-top.png                            (themes/common/images/event-grippy-top.png)
-    skin/common/event-start.svg                                 (themes/common/images/event-start.svg)
-    skin/common/task-images.png                                 (themes/common/images/task-images.png)
-    skin/common/timezone_map.png                                (themes/common/images/timezone_map.png)
-    skin/common/timezones.png                                   (themes/common/images/timezones.png)
-    skin/common/todo-complete.svg                               (themes/common/images/todo-complete.svg)
-    skin/common/todo.svg                                        (themes/common/images/todo.svg)
-    skin/common/today-pane.css                                  (themes/common/today-pane.css)
-    skin/common/view-cycler.svg                                 (themes/common/view-cycler.svg)
-    skin/common/widgets/calendar-widgets.css                    (themes/common/widgets/calendar-widgets.css)
-    skin/common/widgets/drag-center.svg                         (themes/common/widgets/images/drag-center.svg)
-    skin/common/widgets/nav-arrow.svg                           (themes/common/widgets/images/nav-arrow.svg)
-    skin/common/widgets/nav-today.svg                           (themes/common/widgets/images/nav-today.svg)
-    skin/common/widgets/minimonth.css                           (themes/common/widgets/minimonth.css)
-    skin/common/icons/cal-icon24.png                            (themes/linux/images/cal-icon24.png)
-
-# Linux theme files
-    skin/linux/calendar-daypicker.css                           (themes/linux/calendar-daypicker.css)
-    skin/linux/calendar-task-tree.css                           (themes/linux/calendar-task-tree.css)
-    skin/linux/calendar-task-view.css                           (themes/linux/calendar-task-view.css)
-    skin/linux/calendar-unifinder.css                           (themes/linux/calendar-unifinder.css)
-    skin/linux/calendar-views.css                               (themes/linux/calendar-views.css)
-    skin/linux/calendar-alarm-dialog.css                        (themes/linux/dialogs/calendar-alarm-dialog.css)
-    skin/linux/calendar-event-dialog.css                        (themes/linux/dialogs/calendar-event-dialog.css)
-    skin/linux/calendar-subscriptions-dialog.css                (themes/linux/dialogs/calendar-subscriptions-dialog.css)
-    skin/linux/calendar-invitations-dialog.css                  (themes/linux/dialogs/calendar-invitations-dialog.css)
-    skin/linux/today-pane.css                                   (themes/linux/today-pane.css)
-    skin/linux/widgets/calendar-widgets.css                     (themes/linux/widgets/calendar-widgets.css)
-
-# OS X theme files
-    skin/osx/calendar-daypicker.css                             (themes/osx/calendar-daypicker.css)
-    skin/osx/calendar-task-tree.css                             (themes/osx/calendar-task-tree.css)
-    skin/osx/calendar-task-view.css                             (themes/osx/calendar-task-view.css)
-    skin/osx/calendar-unifinder.css                             (themes/osx/calendar-unifinder.css)
-    skin/osx/calendar-views.css                                 (themes/osx/calendar-views.css)
-    skin/osx/calendar-alarm-dialog.css                          (themes/osx/dialogs/calendar-alarm-dialog.css)
-    skin/osx/calendar-event-dialog.css                          (themes/osx/dialogs/calendar-event-dialog.css)
-    skin/osx/calendar-invitations-dialog.css                    (themes/osx/dialogs/calendar-invitations-dialog.css)
-    skin/osx/calendar-subscriptions-dialog.css                  (themes/osx/dialogs/calendar-subscriptions-dialog.css)
-    skin/osx/checkbox-images-graphite.png                       (themes/osx/images/checkbox-images-graphite.png)
-    skin/osx/checkbox-images.png                                (themes/osx/images/checkbox-images.png)
-    skin/osx/locked-selected-mac.svg                            (themes/osx/images/locked-selected-mac.svg)
-    skin/osx/warn-selected-mac.svg                              (themes/osx/images/warn-selected-mac.svg)
-    skin/osx/today-pane.css                                     (themes/osx/today-pane.css)
-    skin/osx/widgets/calendar-widgets.css                       (themes/osx/widgets/calendar-widgets.css)
-
-# Windows theme files
-    skin/windows/calendar-daypicker.css                         (themes/windows/calendar-daypicker.css)
-    skin/windows/calendar-task-tree.css                         (themes/windows/calendar-task-tree.css)
-    skin/windows/calendar-task-view.css                         (themes/windows/calendar-task-view.css)
-    skin/windows/calendar-unifinder.css                         (themes/windows/calendar-unifinder.css)
-    skin/windows/calendar-views.css                             (themes/windows/calendar-views.css)
-    skin/windows/calendar-alarm-dialog.css                      (themes/windows/dialogs/calendar-alarm-dialog.css)
-    skin/windows/calendar-event-dialog.css                      (themes/windows/dialogs/calendar-event-dialog.css)
-    skin/windows/calendar-invitations-dialog.css                (themes/windows/dialogs/calendar-invitations-dialog.css)
-    skin/windows/calendar-subscriptions-dialog.css              (themes/windows/dialogs/calendar-subscriptions-dialog.css)
-    skin/windows/today-pane.css                                 (themes/windows/today-pane.css)
-    skin/windows/widgets/calendar-widgets.css                   (themes/windows/widgets/calendar-widgets.css)
--- a/calendar/base/moz.build
+++ b/calendar/base/moz.build
@@ -3,16 +3,17 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 DIRS = [
     'public',
     'backend',
     'src',
     'modules',
+    'themes',
 ]
 
 JAR_MANIFESTS += ['jar.mn']
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
     DEFINES['THEME'] = 'windows'
 elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
     DEFINES['THEME'] = 'osx'
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/common/jar.inc.mn
@@ -0,0 +1,93 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# This is not a complete / proper jar manifest. It is included by the
+# actual theme-specific manifests, so that shared resources need only
+# be specified once. As a result, the source file paths are relative
+# to the location of the actual manifest.
+
+% skin calendar-common classic/1.0 %skin/common/
+    skin/common/calendar-alarms.css                             (../common/calendar-alarms.css)
+    skin/common/calendar-attendees.css                          (../common/calendar-attendees.css)
+    skin/common/calendar-creation-wizard.css                    (../common/calendar-creation-wizard.css)
+    skin/common/calendar-daypicker.css                          (../common/calendar-daypicker.css)
+    skin/common/calendar-itip-icons.svg                         (../common/calendar-itip-icons.svg)
+    skin/common/calendar-occurrence-prompt.css                  (../common/calendar-occurrence-prompt.css)
+    skin/common/calendar-occurrence.svg                         (../common/calendar-occurrence.svg)
+    skin/common/calendar-preferences.css                        (../common/calendar-preferences.css)
+    skin/common/calendar-providerUninstall-dialog.css           (../common/calendar-providerUninstall-dialog.css)
+    skin/common/calendar-task-tree.css                          (../common/calendar-task-tree.css)
+    skin/common/calendar-task-view.css                          (../common/calendar-task-view.css)
+    skin/common/calendar-unifinder.css                          (../common/calendar-unifinder.css)
+    skin/common/calendar-views.css                              (../common/calendar-views.css)
+    skin/common/dialogs/calendar-alarm-dialog.css               (../common/dialogs/calendar-alarm-dialog.css)
+    skin/common/dialogs/calendar-event-dialog.css               (../common/dialogs/calendar-event-dialog.css)
+    skin/common/dialogs/calendar-invitations-dialog.css         (../common/dialogs/calendar-invitations-dialog.css)
+    skin/common/dialogs/calendar-subscriptions-dialog.css       (../common/dialogs/calendar-subscriptions-dialog.css)
+    skin/common/calendar-properties-dialog.css                  (../common/dialogs/calendar-properties-dialog.css)
+    skin/common/calendar-timezone-highlighter.css               (../common/dialogs/calendar-timezone-highlighter.css)
+    skin/common/calendar-event-dialog-attendees.png             (../common/dialogs/images/calendar-event-dialog-attendees.png)
+    skin/common/calendar-invitations-dialog-button-images.png   (../common/dialogs/images/calendar-invitations-dialog-button-images.png)
+    skin/common/calendar-invitations-dialog-list-images.png     (../common/dialogs/images/calendar-invitations-dialog-list-images.png)
+    skin/common/chain-lock.svg                                  (../common/dialogs/images/chain-lock.svg)
+    skin/common/chain-unlock.svg                                (../common/dialogs/images/chain-unlock.svg)
+    skin/common/link-image-bottom.svg                           (../common/dialogs/images/link-image-bottom.svg)
+    skin/common/link-image-top.svg                              (../common/dialogs/images/link-image-top.svg)
+    skin/common/statusbar-priority.svg                          (../common/dialogs/images/statusbar-priority.svg)
+    skin/common/icons/alarm-no.svg                              (../common/icons/alarm-no.svg)
+    skin/common/icons/alarm.svg                                 (../common/icons/alarm.svg)
+    ../icons/default/calendar-alarm-dialog.png                  (../common/icons/calendar-alarm-dialog.png)
+    ../icons/default/calendar-event-dialog.png                  (../common/icons/calendar-event-dialog.png)
+    ../icons/default/calendar-event-summary-dialog.png          (../common/icons/calendar-event-summary-dialog.png)
+    skin/common/icons/calendar-tab.svg                          (../common/icons/calendar-tab.svg)
+    ../icons/default/calendar-task-dialog.png                   (../common/icons/calendar-task-dialog.png)
+    ../icons/default/calendar-task-summary-dialog.png           (../common/icons/calendar-task-summary-dialog.png)
+    skin/common/icons/category.svg                              (../common/icons/category.svg)
+    skin/common/icons/complete.svg                              (../common/icons/complete.svg)
+    skin/common/icons/confidential.svg                          (../common/icons/confidential.svg)
+    skin/common/icons/decline.svg                               (../common/icons/decline.svg)
+    skin/common/icons/edit.svg                                  (../common/icons/edit.svg)
+    skin/common/icons/email.svg                                 (../common/icons/email.svg)
+    skin/common/icons/event.svg                                 (../common/icons/event.svg)
+    skin/common/icons/find.svg                                  (../common/icons/find.svg)
+    skin/common/icons/freebusy.svg                              (../common/icons/freebusy.svg)
+    skin/common/icons/icon32.svg                                (../common/icons/icon32.svg)
+    skin/common/icons/imip-bar.svg                              (../common/icons/imip-bar.svg)
+    skin/common/icons/locked.svg                                (../common/icons/locked.svg)
+    skin/common/icons/newevent.svg                              (../common/icons/newevent.svg)
+    skin/common/icons/newtask.svg                               (../common/icons/newtask.svg)
+    skin/common/icons/pane.svg                                  (../common/icons/pane.svg)
+    skin/common/icons/priority.svg                              (../common/icons/priority.svg)
+    skin/common/icons/private.svg                               (../common/icons/private.svg)
+    skin/common/icons/save-close.svg                            (../common/icons/save-close.svg)
+    skin/common/icons/status.svg                                (../common/icons/status.svg)
+    skin/common/icons/synchronize.svg                           (../common/icons/synchronize.svg)
+    skin/common/icons/task-tab.svg                              (../common/icons/task-tab.svg)
+    skin/common/icons/task.svg                                  (../common/icons/task.svg)
+    skin/common/icons/tentative.svg                             (../common/icons/tentative.svg)
+    skin/common/icons/timezones.svg                             (../common/icons/timezones.svg)
+    skin/common/icons/today.svg                                 (../common/icons/today.svg)
+    skin/common/icons/warn.svg                                  (../common/icons/warn.svg)
+    skin/common/attendee-icons.png                              (../common/images/attendee-icons.png)
+    skin/common/checkbox-images.png                             (../common/images/checkbox-images.png)
+    skin/common/event-continue.svg                              (../common/images/event-continue.svg)
+    skin/common/event-end.svg                                   (../common/images/event-end.svg)
+    skin/common/event-grippy-bottom.png                         (../common/images/event-grippy-bottom.png)
+    skin/common/event-grippy-left.png                           (../common/images/event-grippy-left.png)
+    skin/common/event-grippy-right.png                          (../common/images/event-grippy-right.png)
+    skin/common/event-grippy-top.png                            (../common/images/event-grippy-top.png)
+    skin/common/event-start.svg                                 (../common/images/event-start.svg)
+    skin/common/task-images.png                                 (../common/images/task-images.png)
+    skin/common/timezone_map.png                                (../common/images/timezone_map.png)
+    skin/common/timezones.png                                   (../common/images/timezones.png)
+    skin/common/todo-complete.svg                               (../common/images/todo-complete.svg)
+    skin/common/todo.svg                                        (../common/images/todo.svg)
+    skin/common/today-pane.css                                  (../common/today-pane.css)
+    skin/common/view-cycler.svg                                 (../common/view-cycler.svg)
+    skin/common/widgets/calendar-widgets.css                    (../common/widgets/calendar-widgets.css)
+    skin/common/widgets/drag-center.svg                         (../common/widgets/images/drag-center.svg)
+    skin/common/widgets/nav-arrow.svg                           (../common/widgets/images/nav-arrow.svg)
+    skin/common/widgets/nav-today.svg                           (../common/widgets/images/nav-today.svg)
+    skin/common/widgets/minimonth.css                           (../common/widgets/minimonth.css)
+    skin/common/icons/cal-icon24.png                            (../linux/images/cal-icon24.png)
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/linux/jar.mn
@@ -0,0 +1,18 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+calendar.jar:
+% skin calendar classic/1.0 %skin/linux/
+#include ../common/jar.inc.mn
+    skin/linux/calendar-daypicker.css                           (calendar-daypicker.css)
+    skin/linux/calendar-task-tree.css                           (calendar-task-tree.css)
+    skin/linux/calendar-task-view.css                           (calendar-task-view.css)
+    skin/linux/calendar-unifinder.css                           (calendar-unifinder.css)
+    skin/linux/calendar-views.css                               (calendar-views.css)
+    skin/linux/calendar-alarm-dialog.css                        (dialogs/calendar-alarm-dialog.css)
+    skin/linux/calendar-event-dialog.css                        (dialogs/calendar-event-dialog.css)
+    skin/linux/calendar-subscriptions-dialog.css                (dialogs/calendar-subscriptions-dialog.css)
+    skin/linux/calendar-invitations-dialog.css                  (dialogs/calendar-invitations-dialog.css)
+    skin/linux/today-pane.css                                   (today-pane.css)
+    skin/linux/widgets/calendar-widgets.css                     (widgets/calendar-widgets.css)
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/linux/moz.build
@@ -0,0 +1,6 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ['jar.mn']
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/moz.build
@@ -0,0 +1,11 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
+    DIRS += ['linux']
+elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
+    DIRS += ['osx']
+else:
+    DIRS += ['windows']
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/osx/jar.mn
@@ -0,0 +1,22 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+calendar.jar:
+% skin calendar classic/1.0 %skin/osx/ os=Darwin
+#include ../common/jar.inc.mn
+    skin/osx/calendar-daypicker.css                             (calendar-daypicker.css)
+    skin/osx/calendar-task-tree.css                             (calendar-task-tree.css)
+    skin/osx/calendar-task-view.css                             (calendar-task-view.css)
+    skin/osx/calendar-unifinder.css                             (calendar-unifinder.css)
+    skin/osx/calendar-views.css                                 (calendar-views.css)
+    skin/osx/calendar-alarm-dialog.css                          (dialogs/calendar-alarm-dialog.css)
+    skin/osx/calendar-event-dialog.css                          (dialogs/calendar-event-dialog.css)
+    skin/osx/calendar-invitations-dialog.css                    (dialogs/calendar-invitations-dialog.css)
+    skin/osx/calendar-subscriptions-dialog.css                  (dialogs/calendar-subscriptions-dialog.css)
+    skin/osx/checkbox-images-graphite.png                       (images/checkbox-images-graphite.png)
+    skin/osx/checkbox-images.png                                (images/checkbox-images.png)
+    skin/osx/locked-selected-mac.svg                            (images/locked-selected-mac.svg)
+    skin/osx/warn-selected-mac.svg                              (images/warn-selected-mac.svg)
+    skin/osx/today-pane.css                                     (today-pane.css)
+    skin/osx/widgets/calendar-widgets.css                       (widgets/calendar-widgets.css)
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/osx/moz.build
@@ -0,0 +1,6 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ['jar.mn']
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/windows/jar.mn
@@ -0,0 +1,18 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+calendar.jar:
+% skin calendar classic/1.0 %skin/windows/ os=WINNT
+#include ../common/jar.inc.mn
+    skin/windows/calendar-daypicker.css                         (calendar-daypicker.css)
+    skin/windows/calendar-task-tree.css                         (calendar-task-tree.css)
+    skin/windows/calendar-task-view.css                         (calendar-task-view.css)
+    skin/windows/calendar-unifinder.css                         (calendar-unifinder.css)
+    skin/windows/calendar-views.css                             (calendar-views.css)
+    skin/windows/calendar-alarm-dialog.css                      (dialogs/calendar-alarm-dialog.css)
+    skin/windows/calendar-event-dialog.css                      (dialogs/calendar-event-dialog.css)
+    skin/windows/calendar-invitations-dialog.css                (dialogs/calendar-invitations-dialog.css)
+    skin/windows/calendar-subscriptions-dialog.css              (dialogs/calendar-subscriptions-dialog.css)
+    skin/windows/today-pane.css                                 (today-pane.css)
+    skin/windows/widgets/calendar-widgets.css                   (widgets/calendar-widgets.css)
new file mode 100644
--- /dev/null
+++ b/calendar/base/themes/windows/moz.build
@@ -0,0 +1,6 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ['jar.mn']
--- a/calendar/lightning/jar.mn
+++ b/calendar/lightning/jar.mn
@@ -31,45 +31,16 @@ lightning.jar:
     content/lightning-utils.js                             (content/lightning-utils.js)
     content/messenger-overlay-sidebar.js                   (content/messenger-overlay-sidebar.js)
     content/messenger-overlay-preferences.js               (content/messenger-overlay-preferences.js)
 *   content/messenger-overlay-preferences.inc.xhtml        (content/messenger-overlay-preferences.inc.xhtml)
     content/caldav-lightning-calendar-creation.js          (../providers/caldav/content/caldav-lightning-calendar-creation.js)
     content/caldav-lightning-calendar-properties.js        (../providers/caldav/content/caldav-lightning-calendar-properties.js)
     content/caldav-lightning-utils.js                      (../providers/caldav/content/caldav-lightning-utils.js)
 
-% skin lightning classic/1.0 %skin/linux/
-% skin lightning classic/1.0 %skin/osx/ os=Darwin
-% skin lightning classic/1.0 %skin/windows/ os=WINNT
-% skin lightning-common classic/1.0 %skin/lightning-common/
-    skin/lightning-common/accountCentral.css               (themes/common/accountCentral.css)
-    skin/lightning-common/html-item-editing.css            (themes/common/html-item-editing.css)
-    skin/lightning-common/todayButton-arrow.svg            (themes/common/images/todayButton-arrow.svg)
-    skin/lightning-common/imip.css                         (themes/common/imip.css)
-    skin/lightning-common/lightning.css                    (themes/common/lightning.css)
-    skin/lightning-common/lightning-toolbar.css            (themes/common/lightning-toolbar.css)
-    skin/lightning-common/suite-accountCentral.css         (themes/common/suite-accountCentral.css)
-    skin/lightning-common/datetimepickers.css              (../resources/skin/datetimepickers.css)
-    skin/lightning-common/dialogOverlay.css                (../resources/skin/dialogOverlay.css)
-
-# Linux theme files
-    skin/linux/imip.css                                    (themes/linux/imip.css)
-    skin/linux/lightning.css                               (themes/linux/lightning.css)
-    skin/linux/lightning-toolbar.css                       (themes/linux/lightning-toolbar.css)
-
-# OS X theme files
-    skin/osx/imip.css                                      (themes/osx/imip.css)
-    skin/osx/lightning.css                                 (themes/osx/lightning.css)
-    skin/osx/lightning-toolbar.css                         (themes/osx/lightning-toolbar.css)
-
-# Windows theme files
-    skin/windows/imip.css                                  (themes/windows/imip.css)
-    skin/windows/lightning.css                             (themes/windows/lightning.css)
-    skin/windows/lightning-toolbar.css                     (themes/windows/lightning-toolbar.css)
-
 calendar.jar:
     content/calendarCreation.js                   (../resources/content/calendarCreation.js)
     content/calendarCreation.xhtml                (../resources/content/calendarCreation.xhtml)
     content/datetimepickers/datetimepickers.js    (../resources/content/datetimepickers/datetimepickers.js)
     content/mouseoverPreviews.js                  (../resources/content/mouseoverPreviews.js)
     content/publish.js                            (../resources/content/publish.js)
     content/publishDialog.js                      (../resources/content/publishDialog.js)
     content/publishDialog.xhtml                   (../resources/content/publishDialog.xhtml)
--- a/calendar/lightning/moz.build
+++ b/calendar/lightning/moz.build
@@ -7,16 +7,17 @@ DIRS += [
     '../libical',
     '../base',
     '../providers',
     '../import-export',
     '../itip',
     'components',
     '../locales',
     'modules',
+    'themes',
 ]
 
 TEST_DIRS += ['../test']
 
 JAR_MANIFESTS += ['jar.mn']
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
     DEFINES['THEME'] = 'windows'
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/common/jar.inc.mn
@@ -0,0 +1,19 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# This is not a complete / proper jar manifest. It is included by the
+# actual theme-specific manifests, so that shared resources need only
+# be specified once. As a result, the source file paths are relative
+# to the location of the actual manifest.
+
+% skin lightning-common classic/1.0 %skin/lightning-common/
+    skin/lightning-common/accountCentral.css               (../common/accountCentral.css)
+    skin/lightning-common/html-item-editing.css            (../common/html-item-editing.css)
+    skin/lightning-common/todayButton-arrow.svg            (../common/images/todayButton-arrow.svg)
+    skin/lightning-common/imip.css                         (../common/imip.css)
+    skin/lightning-common/lightning.css                    (../common/lightning.css)
+    skin/lightning-common/lightning-toolbar.css            (../common/lightning-toolbar.css)
+    skin/lightning-common/suite-accountCentral.css         (../common/suite-accountCentral.css)
+    skin/lightning-common/datetimepickers.css              (../../../resources/skin/datetimepickers.css)
+    skin/lightning-common/dialogOverlay.css                (../../../resources/skin/dialogOverlay.css)
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/linux/jar.mn
@@ -0,0 +1,10 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+lightning.jar:
+% skin lightning classic/1.0 %skin/linux/
+#include ../common/jar.inc.mn
+    skin/linux/imip.css                                    (imip.css)
+    skin/linux/lightning.css                               (lightning.css)
+    skin/linux/lightning-toolbar.css                       (lightning-toolbar.css)
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/linux/moz.build
@@ -0,0 +1,6 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ['jar.mn']
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/moz.build
@@ -0,0 +1,11 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
+    DIRS += ['linux']
+elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
+    DIRS += ['osx']
+else:
+    DIRS += ['windows']
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/osx/jar.mn
@@ -0,0 +1,10 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+lightning.jar:
+% skin lightning classic/1.0 %skin/osx/ os=Darwin
+#include ../common/jar.inc.mn
+    skin/osx/imip.css                                      (imip.css)
+    skin/osx/lightning.css                                 (lightning.css)
+    skin/osx/lightning-toolbar.css                         (lightning-toolbar.css)
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/osx/moz.build
@@ -0,0 +1,6 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ['jar.mn']
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/windows/jar.mn
@@ -0,0 +1,10 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+lightning.jar:
+% skin lightning classic/1.0 %skin/windows/ os=WINNT
+#include ../common/jar.inc.mn
+    skin/windows/imip.css                                  (imip.css)
+    skin/windows/lightning.css                             (lightning.css)
+    skin/windows/lightning-toolbar.css                     (lightning-toolbar.css)
new file mode 100644
--- /dev/null
+++ b/calendar/lightning/themes/windows/moz.build
@@ -0,0 +1,6 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ['jar.mn']
--- a/mail/installer/allowed-dupes.mn
+++ b/mail/installer/allowed-dupes.mn
@@ -41,34 +41,16 @@ chrome/icons/default/default64.png
 # calendar
 components/calFilter.js
 chrome/calendar/content/calFilter.js
 components/calUtils.js
 chrome/calendar/content/calUtils.js
 chrome/calendar/skin/common/icons/calendar-tab.svg
 chrome/calendar/skin/common/icons/category.svg
 chrome/calendar/skin/common/icons/complete.svg
-chrome/calendar/skin/linux/calendar-event-dialog.css
-chrome/calendar/skin/windows/calendar-event-dialog.css
-chrome/calendar/skin/linux/calendar-invitations-dialog.css
-chrome/calendar/skin/windows/calendar-invitations-dialog.css
-chrome/calendar/skin/osx/calendar-subscriptions-dialog.css
-chrome/calendar/skin/windows/calendar-subscriptions-dialog.css
-chrome/calendar/skin/linux/calendar-daypicker.css
-chrome/calendar/skin/windows/calendar-daypicker.css
-chrome/calendar/skin/linux/calendar-alarm-dialog.css
-chrome/calendar/skin/windows/calendar-alarm-dialog.css
-chrome/calendar/skin/linux/calendar-management.css
-chrome/calendar/skin/windows/calendar-management.css
-chrome/calendar/skin/linux/widgets/calendar-widgets.css
-chrome/calendar/skin/windows/widgets/calendar-widgets.css
-chrome/lightning/skin/linux/imip.css
-chrome/lightning/skin/windows/imip.css
-chrome/lightning/skin/linux/lightning-toolbar.css
-chrome/lightning/skin/osx/lightning-toolbar.css
 
 # Variants of paths in mozilla/browser/installer/allowed-dupes.mn:
 # bug 658850
 @MOZ_APP_NAME@
 @MOZ_APP_NAME@-bin
 # devtools reduction is bug 1311178
 chrome/devtools/content/dom/content/dom-view.css
 chrome/devtools/content/dom/index.html