1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/widget/cocoa/nsWidgetFactory.mm Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,212 @@ 1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#include "nsIFactory.h" 1.10 +#include "nsISupports.h" 1.11 +#include "nsIComponentManager.h" 1.12 +#include "mozilla/ModuleUtils.h" 1.13 + 1.14 +#include "nsWidgetsCID.h" 1.15 + 1.16 +#include "nsChildView.h" 1.17 +#include "nsCocoaWindow.h" 1.18 +#include "nsAppShell.h" 1.19 +#include "nsAppShellSingleton.h" 1.20 +#include "nsFilePicker.h" 1.21 +#include "nsColorPicker.h" 1.22 + 1.23 +#include "nsClipboard.h" 1.24 +#include "nsClipboardHelper.h" 1.25 +#include "nsTransferable.h" 1.26 +#include "nsHTMLFormatConverter.h" 1.27 +#include "nsDragService.h" 1.28 +#include "nsToolkit.h" 1.29 + 1.30 +#include "nsLookAndFeel.h" 1.31 + 1.32 +#include "nsSound.h" 1.33 +#include "nsIdleServiceX.h" 1.34 +#include "NativeKeyBindings.h" 1.35 +#include "OSXNotificationCenter.h" 1.36 + 1.37 +#include "nsScreenManagerCocoa.h" 1.38 +#include "nsDeviceContextSpecX.h" 1.39 +#include "nsPrintOptionsX.h" 1.40 +#include "nsPrintDialogX.h" 1.41 +#include "nsPrintSession.h" 1.42 +#include "nsToolkitCompsCID.h" 1.43 + 1.44 +#include "mozilla/Module.h" 1.45 + 1.46 +using namespace mozilla; 1.47 +using namespace mozilla::widget; 1.48 + 1.49 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsCocoaWindow) 1.50 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsChildView) 1.51 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker) 1.52 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsColorPicker) 1.53 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound) 1.54 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable) 1.55 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter) 1.56 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboard) 1.57 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboardHelper) 1.58 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService) 1.59 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsScreenManagerCocoa) 1.60 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecX) 1.61 +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsX, Init) 1.62 +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintDialogServiceX, Init) 1.63 +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init) 1.64 +NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIdleServiceX, nsIdleServiceX::GetInstance) 1.65 +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(OSXNotificationCenter, Init) 1.66 + 1.67 +#include "nsMenuBarX.h" 1.68 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeMenuServiceX) 1.69 + 1.70 +#include "nsBidiKeyboard.h" 1.71 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsBidiKeyboard) 1.72 + 1.73 +#include "nsNativeThemeCocoa.h" 1.74 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsNativeThemeCocoa) 1.75 + 1.76 +#include "nsMacDockSupport.h" 1.77 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacDockSupport) 1.78 + 1.79 +#include "nsMacWebAppUtils.h" 1.80 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacWebAppUtils) 1.81 + 1.82 +#include "nsStandaloneNativeMenu.h" 1.83 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsStandaloneNativeMenu) 1.84 + 1.85 +#include "GfxInfo.h" 1.86 +namespace mozilla { 1.87 +namespace widget { 1.88 +// This constructor should really be shared with all platforms. 1.89 +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(GfxInfo, Init) 1.90 +} 1.91 +} 1.92 + 1.93 +NS_DEFINE_NAMED_CID(NS_WINDOW_CID); 1.94 +NS_DEFINE_NAMED_CID(NS_POPUP_CID); 1.95 +NS_DEFINE_NAMED_CID(NS_CHILD_CID); 1.96 +NS_DEFINE_NAMED_CID(NS_FILEPICKER_CID); 1.97 +NS_DEFINE_NAMED_CID(NS_COLORPICKER_CID); 1.98 +NS_DEFINE_NAMED_CID(NS_APPSHELL_CID); 1.99 +NS_DEFINE_NAMED_CID(NS_SOUND_CID); 1.100 +NS_DEFINE_NAMED_CID(NS_TRANSFERABLE_CID); 1.101 +NS_DEFINE_NAMED_CID(NS_HTMLFORMATCONVERTER_CID); 1.102 +NS_DEFINE_NAMED_CID(NS_CLIPBOARD_CID); 1.103 +NS_DEFINE_NAMED_CID(NS_CLIPBOARDHELPER_CID); 1.104 +NS_DEFINE_NAMED_CID(NS_DRAGSERVICE_CID); 1.105 +NS_DEFINE_NAMED_CID(NS_BIDIKEYBOARD_CID); 1.106 +NS_DEFINE_NAMED_CID(NS_THEMERENDERER_CID); 1.107 +NS_DEFINE_NAMED_CID(NS_SCREENMANAGER_CID); 1.108 +NS_DEFINE_NAMED_CID(NS_DEVICE_CONTEXT_SPEC_CID); 1.109 +NS_DEFINE_NAMED_CID(NS_PRINTSESSION_CID); 1.110 +NS_DEFINE_NAMED_CID(NS_PRINTSETTINGSSERVICE_CID); 1.111 +NS_DEFINE_NAMED_CID(NS_PRINTDIALOGSERVICE_CID); 1.112 +NS_DEFINE_NAMED_CID(NS_IDLE_SERVICE_CID); 1.113 +NS_DEFINE_NAMED_CID(NS_SYSTEMALERTSSERVICE_CID); 1.114 +NS_DEFINE_NAMED_CID(NS_NATIVEMENUSERVICE_CID); 1.115 +NS_DEFINE_NAMED_CID(NS_MACDOCKSUPPORT_CID); 1.116 +NS_DEFINE_NAMED_CID(NS_MACWEBAPPUTILS_CID); 1.117 +NS_DEFINE_NAMED_CID(NS_STANDALONENATIVEMENU_CID); 1.118 +NS_DEFINE_NAMED_CID(NS_GFXINFO_CID); 1.119 + 1.120 +static const mozilla::Module::CIDEntry kWidgetCIDs[] = { 1.121 + { &kNS_WINDOW_CID, false, NULL, nsCocoaWindowConstructor }, 1.122 + { &kNS_POPUP_CID, false, NULL, nsCocoaWindowConstructor }, 1.123 + { &kNS_CHILD_CID, false, NULL, nsChildViewConstructor }, 1.124 + { &kNS_FILEPICKER_CID, false, NULL, nsFilePickerConstructor, 1.125 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.126 + { &kNS_COLORPICKER_CID, false, NULL, nsColorPickerConstructor, 1.127 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.128 + { &kNS_APPSHELL_CID, false, NULL, nsAppShellConstructor }, 1.129 + { &kNS_SOUND_CID, false, NULL, nsSoundConstructor, 1.130 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.131 + { &kNS_TRANSFERABLE_CID, false, NULL, nsTransferableConstructor }, 1.132 + { &kNS_HTMLFORMATCONVERTER_CID, false, NULL, nsHTMLFormatConverterConstructor }, 1.133 + { &kNS_CLIPBOARD_CID, false, NULL, nsClipboardConstructor, 1.134 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.135 + { &kNS_CLIPBOARDHELPER_CID, false, NULL, nsClipboardHelperConstructor }, 1.136 + { &kNS_DRAGSERVICE_CID, false, NULL, nsDragServiceConstructor, 1.137 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.138 + { &kNS_BIDIKEYBOARD_CID, false, NULL, nsBidiKeyboardConstructor }, 1.139 + { &kNS_THEMERENDERER_CID, false, NULL, nsNativeThemeCocoaConstructor }, 1.140 + { &kNS_SCREENMANAGER_CID, false, NULL, nsScreenManagerCocoaConstructor }, 1.141 + { &kNS_DEVICE_CONTEXT_SPEC_CID, false, NULL, nsDeviceContextSpecXConstructor, 1.142 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.143 + { &kNS_PRINTSESSION_CID, false, NULL, nsPrintSessionConstructor, 1.144 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.145 + { &kNS_PRINTSETTINGSSERVICE_CID, false, NULL, nsPrintOptionsXConstructor }, 1.146 + { &kNS_PRINTDIALOGSERVICE_CID, false, NULL, nsPrintDialogServiceXConstructor, 1.147 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.148 + { &kNS_IDLE_SERVICE_CID, false, NULL, nsIdleServiceXConstructor }, 1.149 + { &kNS_SYSTEMALERTSSERVICE_CID, false, NULL, OSXNotificationCenterConstructor }, 1.150 + { &kNS_NATIVEMENUSERVICE_CID, false, NULL, nsNativeMenuServiceXConstructor }, 1.151 + { &kNS_MACDOCKSUPPORT_CID, false, NULL, nsMacDockSupportConstructor }, 1.152 + { &kNS_MACWEBAPPUTILS_CID, false, NULL, nsMacWebAppUtilsConstructor }, 1.153 + { &kNS_STANDALONENATIVEMENU_CID, false, NULL, nsStandaloneNativeMenuConstructor }, 1.154 + { &kNS_GFXINFO_CID, false, NULL, mozilla::widget::GfxInfoConstructor }, 1.155 + { NULL } 1.156 +}; 1.157 + 1.158 +static const mozilla::Module::ContractIDEntry kWidgetContracts[] = { 1.159 + { "@mozilla.org/widgets/window/mac;1", &kNS_WINDOW_CID }, 1.160 + { "@mozilla.org/widgets/popup/mac;1", &kNS_POPUP_CID }, 1.161 + { "@mozilla.org/widgets/childwindow/mac;1", &kNS_CHILD_CID }, 1.162 + { "@mozilla.org/filepicker;1", &kNS_FILEPICKER_CID, 1.163 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.164 + { "@mozilla.org/colorpicker;1", &kNS_COLORPICKER_CID, 1.165 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.166 + { "@mozilla.org/widget/appshell/mac;1", &kNS_APPSHELL_CID }, 1.167 + { "@mozilla.org/sound;1", &kNS_SOUND_CID, 1.168 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.169 + { "@mozilla.org/widget/transferable;1", &kNS_TRANSFERABLE_CID }, 1.170 + { "@mozilla.org/widget/htmlformatconverter;1", &kNS_HTMLFORMATCONVERTER_CID }, 1.171 + { "@mozilla.org/widget/clipboard;1", &kNS_CLIPBOARD_CID, 1.172 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.173 + { "@mozilla.org/widget/clipboardhelper;1", &kNS_CLIPBOARDHELPER_CID }, 1.174 + { "@mozilla.org/widget/dragservice;1", &kNS_DRAGSERVICE_CID, 1.175 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.176 + { "@mozilla.org/widget/bidikeyboard;1", &kNS_BIDIKEYBOARD_CID }, 1.177 + { "@mozilla.org/chrome/chrome-native-theme;1", &kNS_THEMERENDERER_CID }, 1.178 + { "@mozilla.org/gfx/screenmanager;1", &kNS_SCREENMANAGER_CID }, 1.179 + { "@mozilla.org/gfx/devicecontextspec;1", &kNS_DEVICE_CONTEXT_SPEC_CID, 1.180 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.181 + { "@mozilla.org/gfx/printsession;1", &kNS_PRINTSESSION_CID, 1.182 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.183 + { "@mozilla.org/gfx/printsettings-service;1", &kNS_PRINTSETTINGSSERVICE_CID }, 1.184 + { NS_PRINTDIALOGSERVICE_CONTRACTID, &kNS_PRINTDIALOGSERVICE_CID, 1.185 + mozilla::Module::MAIN_PROCESS_ONLY }, 1.186 + { "@mozilla.org/widget/idleservice;1", &kNS_IDLE_SERVICE_CID }, 1.187 + { "@mozilla.org/system-alerts-service;1", &kNS_SYSTEMALERTSSERVICE_CID }, 1.188 + { "@mozilla.org/widget/nativemenuservice;1", &kNS_NATIVEMENUSERVICE_CID }, 1.189 + { "@mozilla.org/widget/macdocksupport;1", &kNS_MACDOCKSUPPORT_CID }, 1.190 + { "@mozilla.org/widget/mac-web-app-utils;1", &kNS_MACWEBAPPUTILS_CID }, 1.191 + { "@mozilla.org/widget/standalonenativemenu;1", &kNS_STANDALONENATIVEMENU_CID }, 1.192 + { "@mozilla.org/gfx/info;1", &kNS_GFXINFO_CID }, 1.193 + { NULL } 1.194 +}; 1.195 + 1.196 +static void 1.197 +nsWidgetCocoaModuleDtor() 1.198 +{ 1.199 + NativeKeyBindings::Shutdown(); 1.200 + nsLookAndFeel::Shutdown(); 1.201 + nsToolkit::Shutdown(); 1.202 + nsAppShellShutdown(); 1.203 +} 1.204 + 1.205 +static const mozilla::Module kWidgetModule = { 1.206 + mozilla::Module::kVersion, 1.207 + kWidgetCIDs, 1.208 + kWidgetContracts, 1.209 + NULL, 1.210 + NULL, 1.211 + nsAppShellInit, 1.212 + nsWidgetCocoaModuleDtor 1.213 +}; 1.214 + 1.215 +NSMODULE_DEFN(nsWidgetMacModule) = &kWidgetModule;