mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
5000953110
--HG-- rename : widget/public/LookAndFeel.h => widget/LookAndFeel.h rename : widget/public/WidgetTraceEvent.h => widget/WidgetTraceEvent.h rename : widget/src/android/AndroidBridge.cpp => widget/android/AndroidBridge.cpp rename : widget/src/android/AndroidBridge.h => widget/android/AndroidBridge.h rename : widget/src/android/AndroidDirectTexture.cpp => widget/android/AndroidDirectTexture.cpp rename : widget/src/android/AndroidDirectTexture.h => widget/android/AndroidDirectTexture.h rename : widget/src/android/AndroidGraphicBuffer.cpp => widget/android/AndroidGraphicBuffer.cpp rename : widget/src/android/AndroidGraphicBuffer.h => widget/android/AndroidGraphicBuffer.h rename : widget/src/android/AndroidJNI.cpp => widget/android/AndroidJNI.cpp rename : widget/src/android/AndroidJavaWrappers.cpp => widget/android/AndroidJavaWrappers.cpp rename : widget/src/android/AndroidJavaWrappers.h => widget/android/AndroidJavaWrappers.h rename : widget/src/android/GfxInfo.cpp => widget/android/GfxInfo.cpp rename : widget/src/android/GfxInfo.h => widget/android/GfxInfo.h rename : widget/src/android/Makefile.in => widget/android/Makefile.in rename : widget/src/android/nsAppShell.cpp => widget/android/nsAppShell.cpp rename : widget/src/android/nsAppShell.h => widget/android/nsAppShell.h rename : widget/src/android/nsClipboard.cpp => widget/android/nsClipboard.cpp rename : widget/src/android/nsClipboard.h => widget/android/nsClipboard.h rename : widget/src/android/nsDeviceContextAndroid.cpp => widget/android/nsDeviceContextAndroid.cpp rename : widget/src/android/nsDeviceContextAndroid.h => widget/android/nsDeviceContextAndroid.h rename : widget/src/android/nsFilePicker.cpp => widget/android/nsFilePicker.cpp rename : widget/src/android/nsFilePicker.h => widget/android/nsFilePicker.h rename : widget/src/android/nsIAndroidBridge.idl => widget/android/nsIAndroidBridge.idl rename : widget/src/android/nsIMEPicker.cpp => widget/android/nsIMEPicker.cpp rename : widget/src/android/nsIMEPicker.h => widget/android/nsIMEPicker.h rename : widget/src/android/nsIdleServiceAndroid.cpp => widget/android/nsIdleServiceAndroid.cpp rename : widget/src/android/nsIdleServiceAndroid.h => widget/android/nsIdleServiceAndroid.h rename : widget/src/android/nsLookAndFeel.cpp => widget/android/nsLookAndFeel.cpp rename : widget/src/android/nsLookAndFeel.h => widget/android/nsLookAndFeel.h rename : widget/src/android/nsPrintOptionsAndroid.cpp => widget/android/nsPrintOptionsAndroid.cpp rename : widget/src/android/nsPrintOptionsAndroid.h => widget/android/nsPrintOptionsAndroid.h rename : widget/src/android/nsScreenManagerAndroid.cpp => widget/android/nsScreenManagerAndroid.cpp rename : widget/src/android/nsScreenManagerAndroid.h => widget/android/nsScreenManagerAndroid.h rename : widget/src/android/nsWidgetFactory.cpp => widget/android/nsWidgetFactory.cpp rename : widget/src/android/nsWindow.cpp => widget/android/nsWindow.cpp rename : widget/src/android/nsWindow.h => widget/android/nsWindow.h rename : widget/src/build/Makefile.in => widget/build/Makefile.in rename : widget/src/build/nsWinWidgetFactory.cpp => widget/build/nsWinWidgetFactory.cpp rename : widget/src/build/res/aliasb.cur => widget/build/res/aliasb.cur rename : widget/src/build/res/cell.cur => widget/build/res/cell.cur rename : widget/src/build/res/col_resize.cur => widget/build/res/col_resize.cur rename : widget/src/build/res/copy.cur => widget/build/res/copy.cur rename : widget/src/build/res/grab.cur => widget/build/res/grab.cur rename : widget/src/build/res/grabbing.cur => widget/build/res/grabbing.cur rename : widget/src/build/res/none.cur => widget/build/res/none.cur rename : widget/src/build/res/row_resize.cur => widget/build/res/row_resize.cur rename : widget/src/build/res/select.cur => widget/build/res/select.cur rename : widget/src/build/res/vertical_text.cur => widget/build/res/vertical_text.cur rename : widget/src/build/res/zoom_in.cur => widget/build/res/zoom_in.cur rename : widget/src/build/res/zoom_out.cur => widget/build/res/zoom_out.cur rename : widget/src/build/widget.rc => widget/build/widget.rc rename : widget/src/cocoa/ComplexTextInputPanel.h => widget/cocoa/ComplexTextInputPanel.h rename : widget/src/cocoa/ComplexTextInputPanel.mm => widget/cocoa/ComplexTextInputPanel.mm rename : widget/src/cocoa/CustomCocoaEvents.h => widget/cocoa/CustomCocoaEvents.h rename : widget/src/cocoa/GfxInfo.h => widget/cocoa/GfxInfo.h rename : widget/src/cocoa/GfxInfo.mm => widget/cocoa/GfxInfo.mm rename : widget/src/cocoa/Makefile.in => widget/cocoa/Makefile.in rename : widget/src/cocoa/TextInputHandler.h => widget/cocoa/TextInputHandler.h rename : widget/src/cocoa/TextInputHandler.mm => widget/cocoa/TextInputHandler.mm rename : widget/src/cocoa/WidgetTraceEvent.mm => widget/cocoa/WidgetTraceEvent.mm rename : widget/src/cocoa/crashtests/373122-1-inner.html => widget/cocoa/crashtests/373122-1-inner.html rename : widget/src/cocoa/crashtests/373122-1.html => widget/cocoa/crashtests/373122-1.html rename : widget/src/cocoa/crashtests/397209-1.html => widget/cocoa/crashtests/397209-1.html rename : widget/src/cocoa/crashtests/403296-1.xhtml => widget/cocoa/crashtests/403296-1.xhtml rename : widget/src/cocoa/crashtests/419737-1.html => widget/cocoa/crashtests/419737-1.html rename : widget/src/cocoa/crashtests/435223-1.html => widget/cocoa/crashtests/435223-1.html rename : widget/src/cocoa/crashtests/444260-1.xul => widget/cocoa/crashtests/444260-1.xul rename : widget/src/cocoa/crashtests/444864-1.html => widget/cocoa/crashtests/444864-1.html rename : widget/src/cocoa/crashtests/449111-1.html => widget/cocoa/crashtests/449111-1.html rename : widget/src/cocoa/crashtests/460349-1.xhtml => widget/cocoa/crashtests/460349-1.xhtml rename : widget/src/cocoa/crashtests/460387-1.html => widget/cocoa/crashtests/460387-1.html rename : widget/src/cocoa/crashtests/464589-1.html => widget/cocoa/crashtests/464589-1.html rename : widget/src/cocoa/crashtests/crashtests.list => widget/cocoa/crashtests/crashtests.list rename : widget/src/cocoa/cursors/arrowN.tiff => widget/cocoa/cursors/arrowN.tiff rename : widget/src/cocoa/cursors/arrowS.tiff => widget/cocoa/cursors/arrowS.tiff rename : widget/src/cocoa/cursors/colResize.tiff => widget/cocoa/cursors/colResize.tiff rename : widget/src/cocoa/cursors/help.tiff => widget/cocoa/cursors/help.tiff rename : widget/src/cocoa/cursors/rowResize.tiff => widget/cocoa/cursors/rowResize.tiff rename : widget/src/cocoa/cursors/sizeNE.tiff => widget/cocoa/cursors/sizeNE.tiff rename : widget/src/cocoa/cursors/sizeNESW.tiff => widget/cocoa/cursors/sizeNESW.tiff rename : widget/src/cocoa/cursors/sizeNS.tiff => widget/cocoa/cursors/sizeNS.tiff rename : widget/src/cocoa/cursors/sizeNW.tiff => widget/cocoa/cursors/sizeNW.tiff rename : widget/src/cocoa/cursors/sizeNWSE.tiff => widget/cocoa/cursors/sizeNWSE.tiff rename : widget/src/cocoa/cursors/sizeSE.tiff => widget/cocoa/cursors/sizeSE.tiff rename : widget/src/cocoa/cursors/sizeSW.tiff => widget/cocoa/cursors/sizeSW.tiff rename : widget/src/cocoa/cursors/spin1.tiff => widget/cocoa/cursors/spin1.tiff rename : widget/src/cocoa/cursors/spin2.tiff => widget/cocoa/cursors/spin2.tiff rename : widget/src/cocoa/cursors/spin3.tiff => widget/cocoa/cursors/spin3.tiff rename : widget/src/cocoa/cursors/spin4.tiff => widget/cocoa/cursors/spin4.tiff rename : widget/src/cocoa/cursors/vtIBeam.tiff => widget/cocoa/cursors/vtIBeam.tiff rename : widget/src/cocoa/cursors/zoomIn.tiff => widget/cocoa/cursors/zoomIn.tiff rename : widget/src/cocoa/cursors/zoomOut.tiff => widget/cocoa/cursors/zoomOut.tiff rename : widget/src/cocoa/mozView.h => widget/cocoa/mozView.h rename : widget/src/cocoa/nsAppShell.h => widget/cocoa/nsAppShell.h rename : widget/src/cocoa/nsAppShell.mm => widget/cocoa/nsAppShell.mm rename : widget/src/cocoa/nsBidiKeyboard.h => widget/cocoa/nsBidiKeyboard.h rename : widget/src/cocoa/nsBidiKeyboard.mm => widget/cocoa/nsBidiKeyboard.mm rename : widget/src/cocoa/nsChangeObserver.h => widget/cocoa/nsChangeObserver.h rename : widget/src/cocoa/nsChildView.h => widget/cocoa/nsChildView.h rename : widget/src/cocoa/nsChildView.mm => widget/cocoa/nsChildView.mm rename : widget/src/cocoa/nsClipboard.h => widget/cocoa/nsClipboard.h rename : widget/src/cocoa/nsClipboard.mm => widget/cocoa/nsClipboard.mm rename : widget/src/cocoa/nsCocoaFeatures.h => widget/cocoa/nsCocoaFeatures.h rename : widget/src/cocoa/nsCocoaFeatures.mm => widget/cocoa/nsCocoaFeatures.mm rename : widget/src/cocoa/nsCocoaUtils.h => widget/cocoa/nsCocoaUtils.h rename : widget/src/cocoa/nsCocoaUtils.mm => widget/cocoa/nsCocoaUtils.mm rename : widget/src/cocoa/nsCocoaWindow.h => widget/cocoa/nsCocoaWindow.h rename : widget/src/cocoa/nsCocoaWindow.mm => widget/cocoa/nsCocoaWindow.mm rename : widget/src/cocoa/nsCursorManager.h => widget/cocoa/nsCursorManager.h rename : widget/src/cocoa/nsCursorManager.mm => widget/cocoa/nsCursorManager.mm rename : widget/src/cocoa/nsDeviceContextSpecX.h => widget/cocoa/nsDeviceContextSpecX.h rename : widget/src/cocoa/nsDeviceContextSpecX.mm => widget/cocoa/nsDeviceContextSpecX.mm rename : widget/src/cocoa/nsDragService.h => widget/cocoa/nsDragService.h rename : widget/src/cocoa/nsDragService.mm => widget/cocoa/nsDragService.mm rename : widget/src/cocoa/nsFilePicker.h => widget/cocoa/nsFilePicker.h rename : widget/src/cocoa/nsFilePicker.mm => widget/cocoa/nsFilePicker.mm rename : widget/src/cocoa/nsIdleServiceX.h => widget/cocoa/nsIdleServiceX.h rename : widget/src/cocoa/nsIdleServiceX.mm => widget/cocoa/nsIdleServiceX.mm rename : widget/src/cocoa/nsLookAndFeel.h => widget/cocoa/nsLookAndFeel.h rename : widget/src/cocoa/nsLookAndFeel.mm => widget/cocoa/nsLookAndFeel.mm rename : widget/src/cocoa/nsMacCursor.h => widget/cocoa/nsMacCursor.h rename : widget/src/cocoa/nsMacCursor.mm => widget/cocoa/nsMacCursor.mm rename : widget/src/cocoa/nsMacDockSupport.h => widget/cocoa/nsMacDockSupport.h rename : widget/src/cocoa/nsMacDockSupport.mm => widget/cocoa/nsMacDockSupport.mm rename : widget/src/cocoa/nsMenuBarX.h => widget/cocoa/nsMenuBarX.h rename : widget/src/cocoa/nsMenuBarX.mm => widget/cocoa/nsMenuBarX.mm rename : widget/src/cocoa/nsMenuBaseX.h => widget/cocoa/nsMenuBaseX.h rename : widget/src/cocoa/nsMenuGroupOwnerX.h => widget/cocoa/nsMenuGroupOwnerX.h rename : widget/src/cocoa/nsMenuGroupOwnerX.mm => widget/cocoa/nsMenuGroupOwnerX.mm rename : widget/src/cocoa/nsMenuItemIconX.h => widget/cocoa/nsMenuItemIconX.h rename : widget/src/cocoa/nsMenuItemIconX.mm => widget/cocoa/nsMenuItemIconX.mm rename : widget/src/cocoa/nsMenuItemX.h => widget/cocoa/nsMenuItemX.h rename : widget/src/cocoa/nsMenuItemX.mm => widget/cocoa/nsMenuItemX.mm rename : widget/src/cocoa/nsMenuUtilsX.h => widget/cocoa/nsMenuUtilsX.h rename : widget/src/cocoa/nsMenuUtilsX.mm => widget/cocoa/nsMenuUtilsX.mm rename : widget/src/cocoa/nsMenuX.h => widget/cocoa/nsMenuX.h rename : widget/src/cocoa/nsMenuX.mm => widget/cocoa/nsMenuX.mm rename : widget/src/cocoa/nsNativeThemeCocoa.h => widget/cocoa/nsNativeThemeCocoa.h rename : widget/src/cocoa/nsNativeThemeCocoa.mm => widget/cocoa/nsNativeThemeCocoa.mm rename : widget/src/cocoa/nsNativeThemeColors.h => widget/cocoa/nsNativeThemeColors.h rename : widget/src/cocoa/nsPIWidgetCocoa.idl => widget/cocoa/nsPIWidgetCocoa.idl rename : widget/src/cocoa/nsPrintDialogX.h => widget/cocoa/nsPrintDialogX.h rename : widget/src/cocoa/nsPrintDialogX.mm => widget/cocoa/nsPrintDialogX.mm rename : widget/src/cocoa/nsPrintOptionsX.h => widget/cocoa/nsPrintOptionsX.h rename : widget/src/cocoa/nsPrintOptionsX.mm => widget/cocoa/nsPrintOptionsX.mm rename : widget/src/cocoa/nsPrintSettingsX.h => widget/cocoa/nsPrintSettingsX.h rename : widget/src/cocoa/nsPrintSettingsX.mm => widget/cocoa/nsPrintSettingsX.mm rename : widget/src/cocoa/nsScreenCocoa.h => widget/cocoa/nsScreenCocoa.h rename : widget/src/cocoa/nsScreenCocoa.mm => widget/cocoa/nsScreenCocoa.mm rename : widget/src/cocoa/nsScreenManagerCocoa.h => widget/cocoa/nsScreenManagerCocoa.h rename : widget/src/cocoa/nsScreenManagerCocoa.mm => widget/cocoa/nsScreenManagerCocoa.mm rename : widget/src/cocoa/nsSound.h => widget/cocoa/nsSound.h rename : widget/src/cocoa/nsSound.mm => widget/cocoa/nsSound.mm rename : widget/src/cocoa/nsStandaloneNativeMenu.h => widget/cocoa/nsStandaloneNativeMenu.h rename : widget/src/cocoa/nsStandaloneNativeMenu.mm => widget/cocoa/nsStandaloneNativeMenu.mm rename : widget/src/cocoa/nsToolkit.h => widget/cocoa/nsToolkit.h rename : widget/src/cocoa/nsToolkit.mm => widget/cocoa/nsToolkit.mm rename : widget/src/cocoa/nsWidgetFactory.mm => widget/cocoa/nsWidgetFactory.mm rename : widget/src/cocoa/nsWindowMap.h => widget/cocoa/nsWindowMap.h rename : widget/src/cocoa/nsWindowMap.mm => widget/cocoa/nsWindowMap.mm rename : widget/src/cocoa/resources/MainMenu.nib/classes.nib => widget/cocoa/resources/MainMenu.nib/classes.nib rename : widget/src/cocoa/resources/MainMenu.nib/info.nib => widget/cocoa/resources/MainMenu.nib/info.nib rename : widget/src/cocoa/resources/MainMenu.nib/keyedobjects.nib => widget/cocoa/resources/MainMenu.nib/keyedobjects.nib rename : widget/src/crashtests/303901-1.html => widget/crashtests/303901-1.html rename : widget/src/crashtests/303901-2.html => widget/crashtests/303901-2.html rename : widget/src/crashtests/380359-1.xhtml => widget/crashtests/380359-1.xhtml rename : widget/src/crashtests/crashtests.list => widget/crashtests/crashtests.list rename : widget/src/gonk/Framebuffer.cpp => widget/gonk/Framebuffer.cpp rename : widget/src/gonk/Framebuffer.h => widget/gonk/Framebuffer.h rename : widget/src/gonk/Makefile.in => widget/gonk/Makefile.in rename : widget/src/gonk/nsAppShell.cpp => widget/gonk/nsAppShell.cpp rename : widget/src/gonk/nsAppShell.h => widget/gonk/nsAppShell.h rename : widget/src/gonk/nsLookAndFeel.cpp => widget/gonk/nsLookAndFeel.cpp rename : widget/src/gonk/nsLookAndFeel.h => widget/gonk/nsLookAndFeel.h rename : widget/src/gonk/nsScreenManagerGonk.cpp => widget/gonk/nsScreenManagerGonk.cpp rename : widget/src/gonk/nsScreenManagerGonk.h => widget/gonk/nsScreenManagerGonk.h rename : widget/src/gonk/nsWidgetFactory.cpp => widget/gonk/nsWidgetFactory.cpp rename : widget/src/gonk/nsWindow.cpp => widget/gonk/nsWindow.cpp rename : widget/src/gonk/nsWindow.h => widget/gonk/nsWindow.h rename : widget/src/gtk2/Makefile.in => widget/gtk2/Makefile.in rename : widget/src/gtk2/WidgetTraceEvent.cpp => widget/gtk2/WidgetTraceEvent.cpp rename : widget/src/gtk2/crashtests/673390-1.html => widget/gtk2/crashtests/673390-1.html rename : widget/src/gtk2/crashtests/crashtests.list => widget/gtk2/crashtests/crashtests.list rename : widget/src/gtk2/gtk2compat.h => widget/gtk2/gtk2compat.h rename : widget/src/gtk2/gtk2drawing.c => widget/gtk2/gtk2drawing.c rename : widget/src/gtk2/gtkdrawing.h => widget/gtk2/gtkdrawing.h rename : widget/src/gtk2/maiRedundantObjectFactory.c => widget/gtk2/maiRedundantObjectFactory.c rename : widget/src/gtk2/maiRedundantObjectFactory.h => widget/gtk2/maiRedundantObjectFactory.h rename : widget/src/gtk2/mozcontainer.c => widget/gtk2/mozcontainer.c rename : widget/src/gtk2/mozcontainer.h => widget/gtk2/mozcontainer.h rename : widget/src/gtk2/nsAppShell.cpp => widget/gtk2/nsAppShell.cpp rename : widget/src/gtk2/nsAppShell.h => widget/gtk2/nsAppShell.h rename : widget/src/gtk2/nsBidiKeyboard.cpp => widget/gtk2/nsBidiKeyboard.cpp rename : widget/src/gtk2/nsBidiKeyboard.h => widget/gtk2/nsBidiKeyboard.h rename : widget/src/gtk2/nsCUPSShim.cpp => widget/gtk2/nsCUPSShim.cpp rename : widget/src/gtk2/nsCUPSShim.h => widget/gtk2/nsCUPSShim.h rename : widget/src/gtk2/nsClipboard.cpp => widget/gtk2/nsClipboard.cpp rename : widget/src/gtk2/nsClipboard.h => widget/gtk2/nsClipboard.h rename : widget/src/gtk2/nsDeviceContextSpecG.cpp => widget/gtk2/nsDeviceContextSpecG.cpp rename : widget/src/gtk2/nsDeviceContextSpecG.h => widget/gtk2/nsDeviceContextSpecG.h rename : widget/src/gtk2/nsDragService.cpp => widget/gtk2/nsDragService.cpp rename : widget/src/gtk2/nsDragService.h => widget/gtk2/nsDragService.h rename : widget/src/gtk2/nsFilePicker.cpp => widget/gtk2/nsFilePicker.cpp rename : widget/src/gtk2/nsFilePicker.h => widget/gtk2/nsFilePicker.h rename : widget/src/gtk2/nsGTKToolkit.h => widget/gtk2/nsGTKToolkit.h rename : widget/src/gtk2/nsGtkCursors.h => widget/gtk2/nsGtkCursors.h rename : widget/src/gtk2/nsGtkIMModule.cpp => widget/gtk2/nsGtkIMModule.cpp rename : widget/src/gtk2/nsGtkIMModule.h => widget/gtk2/nsGtkIMModule.h rename : widget/src/gtk2/nsGtkKeyUtils.cpp => widget/gtk2/nsGtkKeyUtils.cpp rename : widget/src/gtk2/nsGtkKeyUtils.h => widget/gtk2/nsGtkKeyUtils.h rename : widget/src/gtk2/nsIImageToPixbuf.h => widget/gtk2/nsIImageToPixbuf.h rename : widget/src/gtk2/nsIdleServiceGTK.cpp => widget/gtk2/nsIdleServiceGTK.cpp rename : widget/src/gtk2/nsIdleServiceGTK.h => widget/gtk2/nsIdleServiceGTK.h rename : widget/src/gtk2/nsImageToPixbuf.cpp => widget/gtk2/nsImageToPixbuf.cpp rename : widget/src/gtk2/nsImageToPixbuf.h => widget/gtk2/nsImageToPixbuf.h rename : widget/src/gtk2/nsLookAndFeel.cpp => widget/gtk2/nsLookAndFeel.cpp rename : widget/src/gtk2/nsLookAndFeel.h => widget/gtk2/nsLookAndFeel.h rename : widget/src/gtk2/nsNativeKeyBindings.cpp => widget/gtk2/nsNativeKeyBindings.cpp rename : widget/src/gtk2/nsNativeKeyBindings.h => widget/gtk2/nsNativeKeyBindings.h rename : widget/src/gtk2/nsNativeThemeGTK.cpp => widget/gtk2/nsNativeThemeGTK.cpp rename : widget/src/gtk2/nsNativeThemeGTK.h => widget/gtk2/nsNativeThemeGTK.h rename : widget/src/gtk2/nsPSPrinters.cpp => widget/gtk2/nsPSPrinters.cpp rename : widget/src/gtk2/nsPSPrinters.h => widget/gtk2/nsPSPrinters.h rename : widget/src/gtk2/nsPaperPS.cpp => widget/gtk2/nsPaperPS.cpp rename : widget/src/gtk2/nsPaperPS.h => widget/gtk2/nsPaperPS.h rename : widget/src/gtk2/nsPrintDialogGTK.cpp => widget/gtk2/nsPrintDialogGTK.cpp rename : widget/src/gtk2/nsPrintDialogGTK.h => widget/gtk2/nsPrintDialogGTK.h rename : widget/src/gtk2/nsPrintOptionsGTK.cpp => widget/gtk2/nsPrintOptionsGTK.cpp rename : widget/src/gtk2/nsPrintOptionsGTK.h => widget/gtk2/nsPrintOptionsGTK.h rename : widget/src/gtk2/nsPrintSettingsGTK.cpp => widget/gtk2/nsPrintSettingsGTK.cpp rename : widget/src/gtk2/nsPrintSettingsGTK.h => widget/gtk2/nsPrintSettingsGTK.h rename : widget/src/gtk2/nsScreenGtk.cpp => widget/gtk2/nsScreenGtk.cpp rename : widget/src/gtk2/nsScreenGtk.h => widget/gtk2/nsScreenGtk.h rename : widget/src/gtk2/nsScreenManagerGtk.cpp => widget/gtk2/nsScreenManagerGtk.cpp rename : widget/src/gtk2/nsScreenManagerGtk.h => widget/gtk2/nsScreenManagerGtk.h rename : widget/src/gtk2/nsSound.cpp => widget/gtk2/nsSound.cpp rename : widget/src/gtk2/nsSound.h => widget/gtk2/nsSound.h rename : widget/src/gtk2/nsToolkit.cpp => widget/gtk2/nsToolkit.cpp rename : widget/src/gtk2/nsWidgetFactory.cpp => widget/gtk2/nsWidgetFactory.cpp rename : widget/src/gtk2/nsWindow.cpp => widget/gtk2/nsWindow.cpp rename : widget/src/gtk2/nsWindow.h => widget/gtk2/nsWindow.h rename : widget/src/gtkxtbin/Makefile.in => widget/gtkxtbin/Makefile.in rename : widget/src/gtkxtbin/gtk2xtbin.c => widget/gtkxtbin/gtk2xtbin.c rename : widget/src/gtkxtbin/gtk2xtbin.h => widget/gtkxtbin/gtk2xtbin.h rename : widget/src/gtkxtbin/xembed.h => widget/gtkxtbin/xembed.h rename : widget/public/nsEvent.h => widget/nsEvent.h rename : widget/public/nsGUIEvent.h => widget/nsGUIEvent.h rename : widget/public/nsGUIEventIPC.h => widget/nsGUIEventIPC.h rename : widget/public/nsIAppShell.idl => widget/nsIAppShell.idl rename : widget/public/nsIBaseWindow.idl => widget/nsIBaseWindow.idl rename : widget/public/nsIBidiKeyboard.idl => widget/nsIBidiKeyboard.idl rename : widget/public/nsIClipboard.idl => widget/nsIClipboard.idl rename : widget/public/nsIClipboardDragDropHookList.idl => widget/nsIClipboardDragDropHookList.idl rename : widget/public/nsIClipboardDragDropHooks.idl => widget/nsIClipboardDragDropHooks.idl rename : widget/public/nsIClipboardHelper.idl => widget/nsIClipboardHelper.idl rename : widget/public/nsIClipboardOwner.idl => widget/nsIClipboardOwner.idl rename : widget/public/nsIDeviceContextSpec.h => widget/nsIDeviceContextSpec.h rename : widget/public/nsIDragService.idl => widget/nsIDragService.idl rename : widget/public/nsIDragSession.idl => widget/nsIDragSession.idl rename : widget/public/nsIDragSessionGTK.h => widget/nsIDragSessionGTK.h rename : widget/public/nsIDragSessionOS2.h => widget/nsIDragSessionOS2.h rename : widget/public/nsIFilePicker.idl => widget/nsIFilePicker.idl rename : widget/public/nsIFormatConverter.idl => widget/nsIFormatConverter.idl rename : widget/public/nsIGfxInfo.idl => widget/nsIGfxInfo.idl rename : widget/public/nsIGfxInfoDebug.idl => widget/nsIGfxInfoDebug.idl rename : widget/public/nsIIMEPicker.idl => widget/nsIIMEPicker.idl rename : widget/public/nsIIdleService.idl => widget/nsIIdleService.idl rename : widget/public/nsIJumpListBuilder.idl => widget/nsIJumpListBuilder.idl rename : widget/public/nsIJumpListItem.idl => widget/nsIJumpListItem.idl rename : widget/public/nsIMacDockSupport.idl => widget/nsIMacDockSupport.idl rename : widget/public/nsINativeKeyBindings.h => widget/nsINativeKeyBindings.h rename : widget/public/nsINativeMenuService.h => widget/nsINativeMenuService.h rename : widget/public/nsIPluginWidget.h => widget/nsIPluginWidget.h rename : widget/public/nsIPrintDialogService.h => widget/nsIPrintDialogService.h rename : widget/public/nsIPrintOptions.idl => widget/nsIPrintOptions.idl rename : widget/public/nsIPrintSession.idl => widget/nsIPrintSession.idl rename : widget/public/nsIPrintSettings.idl => widget/nsIPrintSettings.idl rename : widget/public/nsIPrintSettingsService.idl => widget/nsIPrintSettingsService.idl rename : widget/public/nsIPrintSettingsWin.idl => widget/nsIPrintSettingsWin.idl rename : widget/public/nsIRollupListener.h => widget/nsIRollupListener.h rename : widget/public/nsIRwsService.idl => widget/nsIRwsService.idl rename : widget/public/nsIScreen.idl => widget/nsIScreen.idl rename : widget/public/nsIScreenManager.idl => widget/nsIScreenManager.idl rename : widget/public/nsISound.idl => widget/nsISound.idl rename : widget/public/nsIStandaloneNativeMenu.idl => widget/nsIStandaloneNativeMenu.idl rename : widget/public/nsITaskbarOverlayIconController.idl => widget/nsITaskbarOverlayIconController.idl rename : widget/public/nsITaskbarPreview.idl => widget/nsITaskbarPreview.idl rename : widget/public/nsITaskbarPreviewButton.idl => widget/nsITaskbarPreviewButton.idl rename : widget/public/nsITaskbarPreviewController.idl => widget/nsITaskbarPreviewController.idl rename : widget/public/nsITaskbarProgress.idl => widget/nsITaskbarProgress.idl rename : widget/public/nsITaskbarTabPreview.idl => widget/nsITaskbarTabPreview.idl rename : widget/public/nsITaskbarWindowPreview.idl => widget/nsITaskbarWindowPreview.idl rename : widget/public/nsITransferable.idl => widget/nsITransferable.idl rename : widget/public/nsIWidget.h => widget/nsIWidget.h rename : widget/public/nsIWinTaskbar.idl => widget/nsIWinTaskbar.idl rename : widget/public/nsNativeWidget.h => widget/nsNativeWidget.h rename : widget/public/nsWidgetInitData.h => widget/nsWidgetInitData.h rename : widget/public/nsWidgetsCID.h => widget/nsWidgetsCID.h rename : widget/src/os2/Makefile.in => widget/os2/Makefile.in rename : widget/src/os2/MozSounds.cmd => widget/os2/MozSounds.cmd rename : widget/src/os2/README.firefox => widget/os2/README.firefox rename : widget/src/os2/README.seamonkey => widget/os2/README.seamonkey rename : widget/src/os2/README.thunderbird => widget/os2/README.thunderbird rename : widget/src/os2/nsAppShell.cpp => widget/os2/nsAppShell.cpp rename : widget/src/os2/nsAppShell.h => widget/os2/nsAppShell.h rename : widget/src/os2/nsBidiKeyboard.cpp => widget/os2/nsBidiKeyboard.cpp rename : widget/src/os2/nsBidiKeyboard.h => widget/os2/nsBidiKeyboard.h rename : widget/src/os2/nsClipboard.cpp => widget/os2/nsClipboard.cpp rename : widget/src/os2/nsClipboard.h => widget/os2/nsClipboard.h rename : widget/src/os2/nsDeviceContextSpecOS2.cpp => widget/os2/nsDeviceContextSpecOS2.cpp rename : widget/src/os2/nsDeviceContextSpecOS2.h => widget/os2/nsDeviceContextSpecOS2.h rename : widget/src/os2/nsDragService.cpp => widget/os2/nsDragService.cpp rename : widget/src/os2/nsDragService.h => widget/os2/nsDragService.h rename : widget/src/os2/nsFilePicker.cpp => widget/os2/nsFilePicker.cpp rename : widget/src/os2/nsFilePicker.h => widget/os2/nsFilePicker.h rename : widget/src/os2/nsGfxDefs.h => widget/os2/nsGfxDefs.h rename : widget/src/os2/nsIdleServiceOS2.cpp => widget/os2/nsIdleServiceOS2.cpp rename : widget/src/os2/nsIdleServiceOS2.h => widget/os2/nsIdleServiceOS2.h rename : widget/src/os2/nsLookAndFeel.cpp => widget/os2/nsLookAndFeel.cpp rename : widget/src/os2/nsLookAndFeel.h => widget/os2/nsLookAndFeel.h rename : widget/src/os2/nsOS2Uni.cpp => widget/os2/nsOS2Uni.cpp rename : widget/src/os2/nsOS2Uni.h => widget/os2/nsOS2Uni.h rename : widget/src/os2/nsPrintOS2.cpp => widget/os2/nsPrintOS2.cpp rename : widget/src/os2/nsPrintOS2.h => widget/os2/nsPrintOS2.h rename : widget/src/os2/nsPrintOptionsOS2.cpp => widget/os2/nsPrintOptionsOS2.cpp rename : widget/src/os2/nsPrintOptionsOS2.h => widget/os2/nsPrintOptionsOS2.h rename : widget/src/os2/nsPrintdOS2.h => widget/os2/nsPrintdOS2.h rename : widget/src/os2/nsRwsService.cpp => widget/os2/nsRwsService.cpp rename : widget/src/os2/nsRwsService.h => widget/os2/nsRwsService.h rename : widget/src/os2/nsScreenManagerOS2.cpp => widget/os2/nsScreenManagerOS2.cpp rename : widget/src/os2/nsScreenManagerOS2.h => widget/os2/nsScreenManagerOS2.h rename : widget/src/os2/nsScreenOS2.cpp => widget/os2/nsScreenOS2.cpp rename : widget/src/os2/nsScreenOS2.h => widget/os2/nsScreenOS2.h rename : widget/src/os2/nsSound.cpp => widget/os2/nsSound.cpp rename : widget/src/os2/nsSound.h => widget/os2/nsSound.h rename : widget/src/os2/nsWidgetFactory.cpp => widget/os2/nsWidgetFactory.cpp rename : widget/src/os2/nsWindow.cpp => widget/os2/nsWindow.cpp rename : widget/src/os2/nsWindow.h => widget/os2/nsWindow.h rename : widget/src/os2/os2FrameWindow.cpp => widget/os2/os2FrameWindow.cpp rename : widget/src/os2/os2FrameWindow.h => widget/os2/os2FrameWindow.h rename : widget/src/os2/res/aliasb.ptr => widget/os2/res/aliasb.ptr rename : widget/src/os2/res/arrow_wait.ptr => widget/os2/res/arrow_wait.ptr rename : widget/src/os2/res/cell.ptr => widget/os2/res/cell.ptr rename : widget/src/os2/res/col_resize.ptr => widget/os2/res/col_resize.ptr rename : widget/src/os2/res/copy.ptr => widget/os2/res/copy.ptr rename : widget/src/os2/res/crosshair.ptr => widget/os2/res/crosshair.ptr rename : widget/src/os2/res/dndtext.ico => widget/os2/res/dndtext.ico rename : widget/src/os2/res/dndurl.ico => widget/os2/res/dndurl.ico rename : widget/src/os2/res/grab.ptr => widget/os2/res/grab.ptr rename : widget/src/os2/res/grabbing.ptr => widget/os2/res/grabbing.ptr rename : widget/src/os2/res/help.ptr => widget/os2/res/help.ptr rename : widget/src/os2/res/none.ptr => widget/os2/res/none.ptr rename : widget/src/os2/res/row_resize.ptr => widget/os2/res/row_resize.ptr rename : widget/src/os2/res/select.ptr => widget/os2/res/select.ptr rename : widget/src/os2/res/vertical_text.ptr => widget/os2/res/vertical_text.ptr rename : widget/src/os2/res/zoom_in.ptr => widget/os2/res/zoom_in.ptr rename : widget/src/os2/res/zoom_out.ptr => widget/os2/res/zoom_out.ptr rename : widget/src/os2/rws.h => widget/os2/rws.h rename : widget/src/os2/rwserr.h => widget/os2/rwserr.h rename : widget/src/os2/wdgtos2rc.h => widget/os2/wdgtos2rc.h rename : widget/src/os2/widget.rc => widget/os2/widget.rc rename : widget/src/qt/Makefile.in => widget/qt/Makefile.in rename : widget/src/qt/faststartupqt/Makefile.in => widget/qt/faststartupqt/Makefile.in rename : widget/src/qt/faststartupqt/mozqwidgetfast.cpp => widget/qt/faststartupqt/mozqwidgetfast.cpp rename : widget/src/qt/faststartupqt/mozqwidgetfast.h => widget/qt/faststartupqt/mozqwidgetfast.h rename : widget/src/qt/faststartupqt/nsFastStartupQt.cpp => widget/qt/faststartupqt/nsFastStartupQt.cpp rename : widget/src/qt/faststartupqt/nsFastStartupQt.h => widget/qt/faststartupqt/nsFastStartupQt.h rename : widget/src/qt/mozSwipeGesture.cpp => widget/qt/mozSwipeGesture.cpp rename : widget/src/qt/mozSwipeGesture.h => widget/qt/mozSwipeGesture.h rename : widget/src/qt/moziqwidget.h => widget/qt/moziqwidget.h rename : widget/src/qt/mozqorientationsensorfilter.cpp => widget/qt/mozqorientationsensorfilter.cpp rename : widget/src/qt/mozqorientationsensorfilter.h => widget/qt/mozqorientationsensorfilter.h rename : widget/src/qt/mozqwidget.cpp => widget/qt/mozqwidget.cpp rename : widget/src/qt/mozqwidget.h => widget/qt/mozqwidget.h rename : widget/src/qt/nsAppShell.cpp => widget/qt/nsAppShell.cpp rename : widget/src/qt/nsAppShell.h => widget/qt/nsAppShell.h rename : widget/src/qt/nsBidiKeyboard.cpp => widget/qt/nsBidiKeyboard.cpp rename : widget/src/qt/nsBidiKeyboard.h => widget/qt/nsBidiKeyboard.h rename : widget/src/qt/nsClipboard.cpp => widget/qt/nsClipboard.cpp rename : widget/src/qt/nsClipboard.h => widget/qt/nsClipboard.h rename : widget/src/qt/nsCommonWidget.cpp => widget/qt/nsCommonWidget.cpp rename : widget/src/qt/nsCommonWidget.h => widget/qt/nsCommonWidget.h rename : widget/src/qt/nsDeviceContextSpecQt.cpp => widget/qt/nsDeviceContextSpecQt.cpp rename : widget/src/qt/nsDeviceContextSpecQt.h => widget/qt/nsDeviceContextSpecQt.h rename : widget/src/qt/nsDragService.cpp => widget/qt/nsDragService.cpp rename : widget/src/qt/nsDragService.h => widget/qt/nsDragService.h rename : widget/src/qt/nsFilePicker.cpp => widget/qt/nsFilePicker.cpp rename : widget/src/qt/nsFilePicker.h => widget/qt/nsFilePicker.h rename : widget/src/qt/nsIdleServiceQt.cpp => widget/qt/nsIdleServiceQt.cpp rename : widget/src/qt/nsIdleServiceQt.h => widget/qt/nsIdleServiceQt.h rename : widget/src/qt/nsLookAndFeel.cpp => widget/qt/nsLookAndFeel.cpp rename : widget/src/qt/nsLookAndFeel.h => widget/qt/nsLookAndFeel.h rename : widget/src/qt/nsMFilePicker.cpp => widget/qt/nsMFilePicker.cpp rename : widget/src/qt/nsMFilePicker.h => widget/qt/nsMFilePicker.h rename : widget/src/qt/nsNativeThemeQt.cpp => widget/qt/nsNativeThemeQt.cpp rename : widget/src/qt/nsNativeThemeQt.h => widget/qt/nsNativeThemeQt.h rename : widget/src/qt/nsPrintDialogQt.cpp => widget/qt/nsPrintDialogQt.cpp rename : widget/src/qt/nsPrintDialogQt.h => widget/qt/nsPrintDialogQt.h rename : widget/src/qt/nsPrintOptionsQt.cpp => widget/qt/nsPrintOptionsQt.cpp rename : widget/src/qt/nsPrintOptionsQt.h => widget/qt/nsPrintOptionsQt.h rename : widget/src/qt/nsPrintSettingsQt.cpp => widget/qt/nsPrintSettingsQt.cpp rename : widget/src/qt/nsPrintSettingsQt.h => widget/qt/nsPrintSettingsQt.h rename : widget/src/qt/nsQtKeyUtils.cpp => widget/qt/nsQtKeyUtils.cpp rename : widget/src/qt/nsQtKeyUtils.h => widget/qt/nsQtKeyUtils.h rename : widget/src/qt/nsScreenManagerQt.cpp => widget/qt/nsScreenManagerQt.cpp rename : widget/src/qt/nsScreenManagerQt.h => widget/qt/nsScreenManagerQt.h rename : widget/src/qt/nsScreenQt.cpp => widget/qt/nsScreenQt.cpp rename : widget/src/qt/nsScreenQt.h => widget/qt/nsScreenQt.h rename : widget/src/qt/nsSound.cpp => widget/qt/nsSound.cpp rename : widget/src/qt/nsSound.h => widget/qt/nsSound.h rename : widget/src/qt/nsWidgetFactory.cpp => widget/qt/nsWidgetFactory.cpp rename : widget/src/qt/nsWindow.cpp => widget/qt/nsWindow.cpp rename : widget/src/qt/nsWindow.h => widget/qt/nsWindow.h rename : widget/src/shared/Makefile.in => widget/shared/Makefile.in rename : widget/src/shared/WidgetUtils.cpp => widget/shared/WidgetUtils.cpp rename : widget/src/shared/WidgetUtils.h => widget/shared/WidgetUtils.h rename : widget/src/shared/nsShmImage.cpp => widget/shared/nsShmImage.cpp rename : widget/src/shared/nsShmImage.h => widget/shared/nsShmImage.h rename : widget/src/shared/x11/Makefile.in => widget/shared/x11/Makefile.in rename : widget/src/shared/x11/keysym2ucs.c => widget/shared/x11/keysym2ucs.c rename : widget/src/shared/x11/keysym2ucs.h => widget/shared/x11/keysym2ucs.h rename : widget/src/windows/AudioSession.cpp => widget/windows/AudioSession.cpp rename : widget/src/windows/AudioSession.h => widget/windows/AudioSession.h rename : widget/src/windows/GfxInfo.cpp => widget/windows/GfxInfo.cpp rename : widget/src/windows/GfxInfo.h => widget/windows/GfxInfo.h rename : widget/src/windows/IEnumFE.cpp => widget/windows/IEnumFE.cpp rename : widget/src/windows/IEnumFE.h => widget/windows/IEnumFE.h rename : widget/src/windows/JumpListBuilder.cpp => widget/windows/JumpListBuilder.cpp rename : widget/src/windows/JumpListBuilder.h => widget/windows/JumpListBuilder.h rename : widget/src/windows/JumpListItem.cpp => widget/windows/JumpListItem.cpp rename : widget/src/windows/JumpListItem.h => widget/windows/JumpListItem.h rename : widget/src/windows/KeyboardLayout.cpp => widget/windows/KeyboardLayout.cpp rename : widget/src/windows/KeyboardLayout.h => widget/windows/KeyboardLayout.h rename : widget/src/windows/LSPAnnotator.cpp => widget/windows/LSPAnnotator.cpp rename : widget/src/windows/Makefile.in => widget/windows/Makefile.in rename : widget/src/windows/TaskbarPreview.cpp => widget/windows/TaskbarPreview.cpp rename : widget/src/windows/TaskbarPreview.h => widget/windows/TaskbarPreview.h rename : widget/src/windows/TaskbarPreviewButton.cpp => widget/windows/TaskbarPreviewButton.cpp rename : widget/src/windows/TaskbarPreviewButton.h => widget/windows/TaskbarPreviewButton.h rename : widget/src/windows/TaskbarTabPreview.cpp => widget/windows/TaskbarTabPreview.cpp rename : widget/src/windows/TaskbarTabPreview.h => widget/windows/TaskbarTabPreview.h rename : widget/src/windows/TaskbarWindowPreview.cpp => widget/windows/TaskbarWindowPreview.cpp rename : widget/src/windows/TaskbarWindowPreview.h => widget/windows/TaskbarWindowPreview.h rename : widget/src/windows/WidgetTraceEvent.cpp => widget/windows/WidgetTraceEvent.cpp rename : widget/src/windows/WinTaskbar.cpp => widget/windows/WinTaskbar.cpp rename : widget/src/windows/WinTaskbar.h => widget/windows/WinTaskbar.h rename : widget/src/windows/WindowHook.cpp => widget/windows/WindowHook.cpp rename : widget/src/windows/WindowHook.h => widget/windows/WindowHook.h rename : widget/src/windows/nsAppShell.cpp => widget/windows/nsAppShell.cpp rename : widget/src/windows/nsAppShell.h => widget/windows/nsAppShell.h rename : widget/src/windows/nsBidiKeyboard.cpp => widget/windows/nsBidiKeyboard.cpp rename : widget/src/windows/nsBidiKeyboard.h => widget/windows/nsBidiKeyboard.h rename : widget/src/windows/nsClipboard.cpp => widget/windows/nsClipboard.cpp rename : widget/src/windows/nsClipboard.h => widget/windows/nsClipboard.h rename : widget/src/windows/nsDataObj.cpp => widget/windows/nsDataObj.cpp rename : widget/src/windows/nsDataObj.h => widget/windows/nsDataObj.h rename : widget/src/windows/nsDataObjCollection.cpp => widget/windows/nsDataObjCollection.cpp rename : widget/src/windows/nsDataObjCollection.h => widget/windows/nsDataObjCollection.h rename : widget/src/windows/nsDeviceContextSpecWin.cpp => widget/windows/nsDeviceContextSpecWin.cpp rename : widget/src/windows/nsDeviceContextSpecWin.h => widget/windows/nsDeviceContextSpecWin.h rename : widget/src/windows/nsDragService.cpp => widget/windows/nsDragService.cpp rename : widget/src/windows/nsDragService.h => widget/windows/nsDragService.h rename : widget/src/windows/nsFilePicker.cpp => widget/windows/nsFilePicker.cpp rename : widget/src/windows/nsFilePicker.h => widget/windows/nsFilePicker.h rename : widget/src/windows/nsIMM32Handler.cpp => widget/windows/nsIMM32Handler.cpp rename : widget/src/windows/nsIMM32Handler.h => widget/windows/nsIMM32Handler.h rename : widget/src/windows/nsIdleServiceWin.cpp => widget/windows/nsIdleServiceWin.cpp rename : widget/src/windows/nsIdleServiceWin.h => widget/windows/nsIdleServiceWin.h rename : widget/src/windows/nsImageClipboard.cpp => widget/windows/nsImageClipboard.cpp rename : widget/src/windows/nsImageClipboard.h => widget/windows/nsImageClipboard.h rename : widget/src/windows/nsLookAndFeel.cpp => widget/windows/nsLookAndFeel.cpp rename : widget/src/windows/nsLookAndFeel.h => widget/windows/nsLookAndFeel.h rename : widget/src/windows/nsNativeDragSource.cpp => widget/windows/nsNativeDragSource.cpp rename : widget/src/windows/nsNativeDragSource.h => widget/windows/nsNativeDragSource.h rename : widget/src/windows/nsNativeDragTarget.cpp => widget/windows/nsNativeDragTarget.cpp rename : widget/src/windows/nsNativeDragTarget.h => widget/windows/nsNativeDragTarget.h rename : widget/src/windows/nsNativeThemeWin.cpp => widget/windows/nsNativeThemeWin.cpp rename : widget/src/windows/nsNativeThemeWin.h => widget/windows/nsNativeThemeWin.h rename : widget/src/windows/nsPrintOptionsWin.cpp => widget/windows/nsPrintOptionsWin.cpp rename : widget/src/windows/nsPrintOptionsWin.h => widget/windows/nsPrintOptionsWin.h rename : widget/src/windows/nsPrintSettingsWin.cpp => widget/windows/nsPrintSettingsWin.cpp rename : widget/src/windows/nsPrintSettingsWin.h => widget/windows/nsPrintSettingsWin.h rename : widget/src/windows/nsScreenManagerWin.cpp => widget/windows/nsScreenManagerWin.cpp rename : widget/src/windows/nsScreenManagerWin.h => widget/windows/nsScreenManagerWin.h rename : widget/src/windows/nsScreenWin.cpp => widget/windows/nsScreenWin.cpp rename : widget/src/windows/nsScreenWin.h => widget/windows/nsScreenWin.h rename : widget/src/windows/nsSound.cpp => widget/windows/nsSound.cpp rename : widget/src/windows/nsSound.h => widget/windows/nsSound.h rename : widget/src/windows/nsTextStore.cpp => widget/windows/nsTextStore.cpp rename : widget/src/windows/nsTextStore.h => widget/windows/nsTextStore.h rename : widget/src/windows/nsToolkit.cpp => widget/windows/nsToolkit.cpp rename : widget/src/windows/nsToolkit.h => widget/windows/nsToolkit.h rename : widget/src/windows/nsUXThemeConstants.h => widget/windows/nsUXThemeConstants.h rename : widget/src/windows/nsUXThemeData.cpp => widget/windows/nsUXThemeData.cpp rename : widget/src/windows/nsUXThemeData.h => widget/windows/nsUXThemeData.h rename : widget/src/windows/nsWinGesture.cpp => widget/windows/nsWinGesture.cpp rename : widget/src/windows/nsWinGesture.h => widget/windows/nsWinGesture.h rename : widget/src/windows/nsWindow.cpp => widget/windows/nsWindow.cpp rename : widget/src/windows/nsWindow.h => widget/windows/nsWindow.h rename : widget/src/windows/nsWindowDbg.cpp => widget/windows/nsWindowDbg.cpp rename : widget/src/windows/nsWindowDbg.h => widget/windows/nsWindowDbg.h rename : widget/src/windows/nsWindowDefs.h => widget/windows/nsWindowDefs.h rename : widget/src/windows/nsWindowGfx.cpp => widget/windows/nsWindowGfx.cpp rename : widget/src/windows/nsWindowGfx.h => widget/windows/nsWindowGfx.h rename : widget/src/windows/nsdefs.h => widget/windows/nsdefs.h rename : widget/src/windows/resource.h => widget/windows/resource.h rename : widget/src/windows/tests/Makefile.in => widget/windows/tests/Makefile.in rename : widget/src/windows/tests/TestWinDND.cpp => widget/windows/tests/TestWinDND.cpp rename : widget/src/xpwidgets/GfxDriverInfo.cpp => widget/xpwidgets/GfxDriverInfo.cpp rename : widget/src/xpwidgets/GfxDriverInfo.h => widget/xpwidgets/GfxDriverInfo.h rename : widget/src/xpwidgets/GfxInfoBase.cpp => widget/xpwidgets/GfxInfoBase.cpp rename : widget/src/xpwidgets/GfxInfoBase.h => widget/xpwidgets/GfxInfoBase.h rename : widget/src/xpwidgets/GfxInfoCollector.h => widget/xpwidgets/GfxInfoCollector.h rename : widget/src/xpwidgets/GfxInfoWebGL.cpp => widget/xpwidgets/GfxInfoWebGL.cpp rename : widget/src/xpwidgets/GfxInfoWebGL.h => widget/xpwidgets/GfxInfoWebGL.h rename : widget/src/xpwidgets/GfxInfoX11.cpp => widget/xpwidgets/GfxInfoX11.cpp rename : widget/src/xpwidgets/GfxInfoX11.h => widget/xpwidgets/GfxInfoX11.h rename : widget/src/xpwidgets/Makefile.in => widget/xpwidgets/Makefile.in rename : widget/src/xpwidgets/PuppetWidget.cpp => widget/xpwidgets/PuppetWidget.cpp rename : widget/src/xpwidgets/PuppetWidget.h => widget/xpwidgets/PuppetWidget.h rename : widget/src/xpwidgets/nsAppShellSingleton.h => widget/xpwidgets/nsAppShellSingleton.h rename : widget/src/xpwidgets/nsBaseAppShell.cpp => widget/xpwidgets/nsBaseAppShell.cpp rename : widget/src/xpwidgets/nsBaseAppShell.h => widget/xpwidgets/nsBaseAppShell.h rename : widget/src/xpwidgets/nsBaseClipboard.cpp => widget/xpwidgets/nsBaseClipboard.cpp rename : widget/src/xpwidgets/nsBaseClipboard.h => widget/xpwidgets/nsBaseClipboard.h rename : widget/src/xpwidgets/nsBaseDragService.cpp => widget/xpwidgets/nsBaseDragService.cpp rename : widget/src/xpwidgets/nsBaseDragService.h => widget/xpwidgets/nsBaseDragService.h rename : widget/src/xpwidgets/nsBaseFilePicker.cpp => widget/xpwidgets/nsBaseFilePicker.cpp rename : widget/src/xpwidgets/nsBaseFilePicker.h => widget/xpwidgets/nsBaseFilePicker.h rename : widget/src/xpwidgets/nsBaseWidget.cpp => widget/xpwidgets/nsBaseWidget.cpp rename : widget/src/xpwidgets/nsBaseWidget.h => widget/xpwidgets/nsBaseWidget.h rename : widget/src/xpwidgets/nsClipboardHelper.cpp => widget/xpwidgets/nsClipboardHelper.cpp rename : widget/src/xpwidgets/nsClipboardHelper.h => widget/xpwidgets/nsClipboardHelper.h rename : widget/src/xpwidgets/nsClipboardPrivacyHandler.cpp => widget/xpwidgets/nsClipboardPrivacyHandler.cpp rename : widget/src/xpwidgets/nsClipboardPrivacyHandler.h => widget/xpwidgets/nsClipboardPrivacyHandler.h rename : widget/src/xpwidgets/nsFilePickerProxy.cpp => widget/xpwidgets/nsFilePickerProxy.cpp rename : widget/src/xpwidgets/nsFilePickerProxy.h => widget/xpwidgets/nsFilePickerProxy.h rename : widget/src/xpwidgets/nsHTMLFormatConverter.cpp => widget/xpwidgets/nsHTMLFormatConverter.cpp rename : widget/src/xpwidgets/nsHTMLFormatConverter.h => widget/xpwidgets/nsHTMLFormatConverter.h rename : widget/src/xpwidgets/nsIdleService.cpp => widget/xpwidgets/nsIdleService.cpp rename : widget/src/xpwidgets/nsIdleService.h => widget/xpwidgets/nsIdleService.h rename : widget/src/xpwidgets/nsNativeTheme.cpp => widget/xpwidgets/nsNativeTheme.cpp rename : widget/src/xpwidgets/nsNativeTheme.h => widget/xpwidgets/nsNativeTheme.h rename : widget/src/xpwidgets/nsPrimitiveHelpers.cpp => widget/xpwidgets/nsPrimitiveHelpers.cpp rename : widget/src/xpwidgets/nsPrimitiveHelpers.h => widget/xpwidgets/nsPrimitiveHelpers.h rename : widget/src/xpwidgets/nsPrintOptionsImpl.cpp => widget/xpwidgets/nsPrintOptionsImpl.cpp rename : widget/src/xpwidgets/nsPrintOptionsImpl.h => widget/xpwidgets/nsPrintOptionsImpl.h rename : widget/src/xpwidgets/nsPrintSession.cpp => widget/xpwidgets/nsPrintSession.cpp rename : widget/src/xpwidgets/nsPrintSession.h => widget/xpwidgets/nsPrintSession.h rename : widget/src/xpwidgets/nsPrintSettingsImpl.cpp => widget/xpwidgets/nsPrintSettingsImpl.cpp rename : widget/src/xpwidgets/nsPrintSettingsImpl.h => widget/xpwidgets/nsPrintSettingsImpl.h rename : widget/src/xpwidgets/nsTransferable.cpp => widget/xpwidgets/nsTransferable.cpp rename : widget/src/xpwidgets/nsTransferable.h => widget/xpwidgets/nsTransferable.h rename : widget/src/xpwidgets/nsXPLookAndFeel.cpp => widget/xpwidgets/nsXPLookAndFeel.cpp rename : widget/src/xpwidgets/nsXPLookAndFeel.h => widget/xpwidgets/nsXPLookAndFeel.h rename : widget/src/xremoteclient/Makefile.in => widget/xremoteclient/Makefile.in rename : widget/src/xremoteclient/XRemoteClient.cpp => widget/xremoteclient/XRemoteClient.cpp rename : widget/src/xremoteclient/XRemoteClient.h => widget/xremoteclient/XRemoteClient.h rename : widget/src/xremoteclient/XRemoteClientFactory.cpp => widget/xremoteclient/XRemoteClientFactory.cpp rename : widget/src/xremoteclient/mozilla-xremote-client.cpp => widget/xremoteclient/mozilla-xremote-client.cpp rename : widget/src/xremoteclient/nsRemoteClient.h => widget/xremoteclient/nsRemoteClient.h
767 lines
28 KiB
Plaintext
767 lines
28 KiB
Plaintext
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||
/* ***** BEGIN LICENSE BLOCK *****
|
||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||
*
|
||
* The contents of this file are subject to the Mozilla Public License
|
||
* Version 1.1 (the "License"); you may not use this file except in
|
||
* compliance with the License. You may obtain a copy of the License at
|
||
* http://www.mozilla.org/MPL/
|
||
*
|
||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||
* for the specific language governing rights and limitations under the
|
||
* License.
|
||
*
|
||
* The Original Code is mozilla.org code.
|
||
*
|
||
* The Initial Developer of the Original Code is
|
||
* Netscape Communications Corporation.
|
||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||
* the Initial Developer. All Rights Reserved.
|
||
*
|
||
* Contributor(s):
|
||
* Simon Fraser <sfraser@netscape.com>
|
||
* Josh Aas <josh@mozilla.com>
|
||
*
|
||
* Alternatively, the contents of this file may be used under the terms of
|
||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||
* of those above. If you wish to allow use of your version of this file only
|
||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||
* use your version of this file under the terms of the MPL, indicate your
|
||
* decision by deleting the provisions above and replace them with the notice
|
||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||
* the provisions above, a recipient may use your version of this file under
|
||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||
*
|
||
* ***** END LICENSE BLOCK ***** */
|
||
|
||
#include "nsToolkit.h"
|
||
|
||
#include <ctype.h>
|
||
#include <stdlib.h>
|
||
#include <stdio.h>
|
||
|
||
#include <mach/mach_port.h>
|
||
#include <mach/mach_interface.h>
|
||
#include <mach/mach_init.h>
|
||
|
||
extern "C" {
|
||
#include <mach-o/getsect.h>
|
||
}
|
||
#include <mach-o/dyld.h>
|
||
#include <mach-o/nlist.h>
|
||
#include <mach/vm_map.h>
|
||
#include <unistd.h>
|
||
#include <dlfcn.h>
|
||
|
||
#import <Cocoa/Cocoa.h>
|
||
#import <IOKit/pwr_mgt/IOPMLib.h>
|
||
#import <IOKit/IOMessage.h>
|
||
|
||
#include "nsCocoaUtils.h"
|
||
#include "nsObjCExceptions.h"
|
||
|
||
#include "nsGkAtoms.h"
|
||
#include "nsIRollupListener.h"
|
||
#include "nsIWidget.h"
|
||
|
||
#include "nsIObserverService.h"
|
||
#include "nsIServiceManager.h"
|
||
|
||
#include "mozilla/Preferences.h"
|
||
|
||
using namespace mozilla;
|
||
|
||
// defined in nsChildView.mm
|
||
extern nsIRollupListener * gRollupListener;
|
||
extern nsIWidget * gRollupWidget;
|
||
|
||
static io_connect_t gRootPort = MACH_PORT_NULL;
|
||
|
||
nsToolkit* nsToolkit::gToolkit = nsnull;
|
||
|
||
nsToolkit::nsToolkit()
|
||
: mSleepWakeNotificationRLS(nsnull)
|
||
, mEventTapPort(nsnull)
|
||
, mEventTapRLS(nsnull)
|
||
{
|
||
MOZ_COUNT_CTOR(nsToolkit);
|
||
RegisterForSleepWakeNotifcations();
|
||
RegisterForAllProcessMouseEvents();
|
||
}
|
||
|
||
nsToolkit::~nsToolkit()
|
||
{
|
||
MOZ_COUNT_DTOR(nsToolkit);
|
||
RemoveSleepWakeNotifcations();
|
||
UnregisterAllProcessMouseEventHandlers();
|
||
}
|
||
|
||
void
|
||
nsToolkit::PostSleepWakeNotification(const char* aNotification)
|
||
{
|
||
nsCOMPtr<nsIObserverService> observerService = do_GetService("@mozilla.org/observer-service;1");
|
||
if (observerService)
|
||
observerService->NotifyObservers(nsnull, aNotification, nsnull);
|
||
}
|
||
|
||
// http://developer.apple.com/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/PowerMgmt/chapter_10_section_3.html
|
||
static void ToolkitSleepWakeCallback(void *refCon, io_service_t service, natural_t messageType, void * messageArgument)
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
||
|
||
switch (messageType)
|
||
{
|
||
case kIOMessageSystemWillSleep:
|
||
// System is going to sleep now.
|
||
nsToolkit::PostSleepWakeNotification("sleep_notification");
|
||
::IOAllowPowerChange(gRootPort, (long)messageArgument);
|
||
break;
|
||
|
||
case kIOMessageCanSystemSleep:
|
||
// In this case, the computer has been idle for several minutes
|
||
// and will sleep soon so you must either allow or cancel
|
||
// this notification. Important: if you don’t respond, there will
|
||
// be a 30-second timeout before the computer sleeps.
|
||
// In Mozilla's case, we always allow sleep.
|
||
::IOAllowPowerChange(gRootPort,(long)messageArgument);
|
||
break;
|
||
|
||
case kIOMessageSystemHasPoweredOn:
|
||
// Handle wakeup.
|
||
nsToolkit::PostSleepWakeNotification("wake_notification");
|
||
break;
|
||
}
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK;
|
||
}
|
||
|
||
nsresult
|
||
nsToolkit::RegisterForSleepWakeNotifcations()
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
|
||
|
||
IONotificationPortRef notifyPortRef;
|
||
|
||
NS_ASSERTION(!mSleepWakeNotificationRLS, "Already registered for sleep/wake");
|
||
|
||
gRootPort = ::IORegisterForSystemPower(0, ¬ifyPortRef, ToolkitSleepWakeCallback, &mPowerNotifier);
|
||
if (gRootPort == MACH_PORT_NULL) {
|
||
NS_ERROR("IORegisterForSystemPower failed");
|
||
return NS_ERROR_FAILURE;
|
||
}
|
||
|
||
mSleepWakeNotificationRLS = ::IONotificationPortGetRunLoopSource(notifyPortRef);
|
||
::CFRunLoopAddSource(::CFRunLoopGetCurrent(),
|
||
mSleepWakeNotificationRLS,
|
||
kCFRunLoopDefaultMode);
|
||
|
||
return NS_OK;
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
|
||
}
|
||
|
||
void
|
||
nsToolkit::RemoveSleepWakeNotifcations()
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
||
|
||
if (mSleepWakeNotificationRLS) {
|
||
::IODeregisterForSystemPower(&mPowerNotifier);
|
||
::CFRunLoopRemoveSource(::CFRunLoopGetCurrent(),
|
||
mSleepWakeNotificationRLS,
|
||
kCFRunLoopDefaultMode);
|
||
|
||
mSleepWakeNotificationRLS = nsnull;
|
||
}
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK;
|
||
}
|
||
|
||
// Converts aPoint from the CoreGraphics "global display coordinate" system
|
||
// (which includes all displays/screens and has a top-left origin) to its
|
||
// (presumed) Cocoa counterpart (assumed to be the same as the "screen
|
||
// coordinates" system), which has a bottom-left origin.
|
||
static NSPoint ConvertCGGlobalToCocoaScreen(CGPoint aPoint)
|
||
{
|
||
NSPoint cocoaPoint;
|
||
cocoaPoint.x = aPoint.x;
|
||
cocoaPoint.y = nsCocoaUtils::FlippedScreenY(aPoint.y);
|
||
return cocoaPoint;
|
||
}
|
||
|
||
// Since our event tap is "listen only", events arrive here a little after
|
||
// they've already been processed.
|
||
static CGEventRef EventTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN;
|
||
|
||
if ((type == kCGEventTapDisabledByUserInput) ||
|
||
(type == kCGEventTapDisabledByTimeout))
|
||
return event;
|
||
if (!gRollupWidget || !gRollupListener || [NSApp isActive])
|
||
return event;
|
||
// Don't bother with rightMouseDown events here -- because of the delay,
|
||
// we'll end up closing browser context menus that we just opened. Since
|
||
// these events usually raise a context menu, we'll handle them by hooking
|
||
// the @"com.apple.HIToolbox.beginMenuTrackingNotification" distributed
|
||
// notification (in nsAppShell.mm's AppShellDelegate).
|
||
if (type == kCGEventRightMouseDown)
|
||
return event;
|
||
NSWindow *ctxMenuWindow = (NSWindow*) gRollupWidget->GetNativeData(NS_NATIVE_WINDOW);
|
||
if (!ctxMenuWindow)
|
||
return event;
|
||
NSPoint screenLocation = ConvertCGGlobalToCocoaScreen(CGEventGetLocation(event));
|
||
// Don't roll up the rollup widget if our mouseDown happens over it (doing
|
||
// so would break the corresponding context menu).
|
||
if (NSPointInRect(screenLocation, [ctxMenuWindow frame]))
|
||
return event;
|
||
gRollupListener->Rollup(0);
|
||
return event;
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(NULL);
|
||
}
|
||
|
||
// Cocoa Firefox's use of custom context menus requires that we explicitly
|
||
// handle mouse events from other processes that the OS handles
|
||
// "automatically" for native context menus -- mouseMoved events so that
|
||
// right-click context menus work properly when our browser doesn't have the
|
||
// focus (bmo bug 368077), and mouseDown events so that our browser can
|
||
// dismiss a context menu when a mouseDown happens in another process (bmo
|
||
// bug 339945).
|
||
void
|
||
nsToolkit::RegisterForAllProcessMouseEvents()
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
||
|
||
// Don't do this for apps that (like Camino) use native context menus.
|
||
#ifdef MOZ_USE_NATIVE_POPUP_WINDOWS
|
||
return;
|
||
#endif /* MOZ_USE_NATIVE_POPUP_WINDOWS */
|
||
|
||
if (!mEventTapRLS) {
|
||
// Using an event tap for mouseDown events (instead of installing a
|
||
// handler for them on the EventMonitor target) works around an Apple
|
||
// bug that causes OS menus (like the Clock menu) not to work properly
|
||
// on OS X 10.4.X and below (bmo bug 381448).
|
||
// We install our event tap "listen only" to get around yet another Apple
|
||
// bug -- when we install it as an event filter on any kind of mouseDown
|
||
// event, that kind of event stops working in the main menu, and usually
|
||
// mouse event processing stops working in all apps in the current login
|
||
// session (so the entire OS appears to be hung)! The downside of
|
||
// installing listen-only is that events arrive at our handler slightly
|
||
// after they've already been processed.
|
||
mEventTapPort = CGEventTapCreate(kCGSessionEventTap,
|
||
kCGHeadInsertEventTap,
|
||
kCGEventTapOptionListenOnly,
|
||
CGEventMaskBit(kCGEventLeftMouseDown)
|
||
| CGEventMaskBit(kCGEventRightMouseDown)
|
||
| CGEventMaskBit(kCGEventOtherMouseDown),
|
||
EventTapCallback,
|
||
nsnull);
|
||
if (!mEventTapPort)
|
||
return;
|
||
mEventTapRLS = CFMachPortCreateRunLoopSource(nsnull, mEventTapPort, 0);
|
||
if (!mEventTapRLS) {
|
||
CFRelease(mEventTapPort);
|
||
mEventTapPort = nsnull;
|
||
return;
|
||
}
|
||
CFRunLoopAddSource(CFRunLoopGetCurrent(), mEventTapRLS, kCFRunLoopDefaultMode);
|
||
}
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK;
|
||
}
|
||
|
||
void
|
||
nsToolkit::UnregisterAllProcessMouseEventHandlers()
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
||
|
||
if (mEventTapRLS) {
|
||
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), mEventTapRLS,
|
||
kCFRunLoopDefaultMode);
|
||
CFRelease(mEventTapRLS);
|
||
mEventTapRLS = nsnull;
|
||
}
|
||
if (mEventTapPort) {
|
||
// mEventTapPort must be invalidated as well as released. Otherwise the
|
||
// event tap doesn't get destroyed until the browser process ends (it
|
||
// keeps showing up in the list returned by CGGetEventTapList()).
|
||
CFMachPortInvalidate(mEventTapPort);
|
||
CFRelease(mEventTapPort);
|
||
mEventTapPort = nsnull;
|
||
}
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK;
|
||
}
|
||
|
||
// Return the nsToolkit instance. If a toolkit does not yet exist, then one
|
||
// will be created.
|
||
// static
|
||
nsToolkit* nsToolkit::GetToolkit()
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN;
|
||
|
||
if (!gToolkit) {
|
||
gToolkit = new nsToolkit();
|
||
}
|
||
|
||
return gToolkit;
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(nsnull);
|
||
}
|
||
|
||
PRInt32 nsToolkit::OSXVersion()
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN;
|
||
|
||
static PRInt32 gOSXVersion = 0x0;
|
||
if (gOSXVersion == 0x0) {
|
||
OSErr err = ::Gestalt(gestaltSystemVersion, (SInt32*)&gOSXVersion);
|
||
if (err != noErr) {
|
||
// This should probably be changed when our minimum version changes
|
||
NS_ERROR("Couldn't determine OS X version, assuming 10.5");
|
||
gOSXVersion = MAC_OS_X_VERSION_10_5_HEX;
|
||
}
|
||
}
|
||
return gOSXVersion;
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(0);
|
||
}
|
||
|
||
bool nsToolkit::OnSnowLeopardOrLater()
|
||
{
|
||
return (OSXVersion() >= MAC_OS_X_VERSION_10_6_HEX);
|
||
}
|
||
|
||
bool nsToolkit::OnLionOrLater()
|
||
{
|
||
return (OSXVersion() >= MAC_OS_X_VERSION_10_7_HEX);
|
||
}
|
||
|
||
// An alternative to [NSObject poseAsClass:] that isn't deprecated on OS X
|
||
// Leopard and is available to 64-bit binaries on Leopard and above. Based on
|
||
// ideas and code from http://www.cocoadev.com/index.pl?MethodSwizzling.
|
||
// Since the Method type becomes an opaque type as of Objective-C 2.0, we'll
|
||
// have to switch to using accessor methods like method_exchangeImplementations()
|
||
// when we build 64-bit binaries that use Objective-C 2.0 (on and for Leopard
|
||
// and above). But these accessor methods aren't available in Objective-C 1
|
||
// (or on Tiger). So we need to access Method's members directly for (Tiger-
|
||
// capable) binaries (32-bit or 64-bit) that use Objective-C 1 (as long as we
|
||
// keep supporting Tiger).
|
||
//
|
||
// Be aware that, if aClass doesn't have an orgMethod selector but one of its
|
||
// superclasses does, the method substitution will (in effect) take place in
|
||
// that superclass (rather than in aClass itself). The substitution has
|
||
// effect on the class where it takes place and all of that class's
|
||
// subclasses. In order for method swizzling to work properly, posedMethod
|
||
// needs to be unique in the class where the substitution takes place and all
|
||
// of its subclasses.
|
||
nsresult nsToolkit::SwizzleMethods(Class aClass, SEL orgMethod, SEL posedMethod,
|
||
bool classMethods)
|
||
{
|
||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
|
||
|
||
Method original = nil;
|
||
Method posed = nil;
|
||
|
||
if (classMethods) {
|
||
original = class_getClassMethod(aClass, orgMethod);
|
||
posed = class_getClassMethod(aClass, posedMethod);
|
||
} else {
|
||
original = class_getInstanceMethod(aClass, orgMethod);
|
||
posed = class_getInstanceMethod(aClass, posedMethod);
|
||
}
|
||
|
||
if (!original || !posed)
|
||
return NS_ERROR_FAILURE;
|
||
|
||
#ifdef __LP64__
|
||
method_exchangeImplementations(original, posed);
|
||
#else
|
||
IMP aMethodImp = original->method_imp;
|
||
original->method_imp = posed->method_imp;
|
||
posed->method_imp = aMethodImp;
|
||
#endif
|
||
|
||
return NS_OK;
|
||
|
||
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
|
||
}
|
||
|
||
#ifndef __LP64__
|
||
|
||
void ScanImportedFunctions(const struct mach_header* mh, intptr_t vmaddr_slide);
|
||
|
||
int gInWebInitForCarbonLevel = 0;
|
||
|
||
void Hooked_WebInitForCarbon();
|
||
OSStatus Hooked_InstallEventLoopIdleTimer(
|
||
EventLoopRef inEventLoop,
|
||
EventTimerInterval inDelay,
|
||
EventTimerInterval inInterval,
|
||
EventLoopIdleTimerUPP inTimerProc,
|
||
void *inTimerData,
|
||
EventLoopTimerRef *outTimer
|
||
);
|
||
|
||
void (*WebKit_WebInitForCarbon)() = NULL;
|
||
OSStatus (*HIToolbox_InstallEventLoopIdleTimer)(
|
||
EventLoopRef inEventLoop,
|
||
EventTimerInterval inDelay,
|
||
EventTimerInterval inInterval,
|
||
EventLoopIdleTimerUPP inTimerProc,
|
||
void *inTimerData,
|
||
EventLoopTimerRef *outTimer
|
||
) = NULL;
|
||
|
||
typedef struct _nsHookedFunctionSpec {
|
||
const char *name; // Includes leading underscore
|
||
void *newAddress;
|
||
void **oldAddressPtr;
|
||
} nsHookedFunctionSpec;
|
||
|
||
nsHookedFunctionSpec gHookedFunctions[] = {
|
||
{"_WebInitForCarbon", (void *) Hooked_WebInitForCarbon,
|
||
(void **) &WebKit_WebInitForCarbon},
|
||
{"_InstallEventLoopIdleTimer", (void *) Hooked_InstallEventLoopIdleTimer,
|
||
(void **) &HIToolbox_InstallEventLoopIdleTimer},
|
||
{NULL, NULL, NULL}
|
||
};
|
||
|
||
// Plugins may exist that use the WebKit framework. Those that are
|
||
// Carbon-based need to call WebKit's WebInitForCarbon() method. There
|
||
// currently appears to be only one Carbon WebKit plugin --
|
||
// DivXBrowserPlugin (included with the DivX Web Player,
|
||
// http://www.divx.com/en/downloads/divx/mac). See bug 509130.
|
||
//
|
||
// The source-code for WebInitForCarbon() is in the WebKit source tree's
|
||
// WebKit/mac/Carbon/CarbonUtils.mm file. Among other things it installs
|
||
// an idle timer on the main event loop, whose target is the PoolCleaner()
|
||
// function (also in CarbonUtils.mm). WebInitForCarbon() allocates an
|
||
// NSAutoreleasePool object which it stores in the global sPool variable.
|
||
// PoolCleaner() periodically releases/drains sPool and creates another
|
||
// NSAutoreleasePool object to take its place. The intention is to ensure
|
||
// an autorelease pool is in place for whatever Objective-C code may be
|
||
// called by WebKit code, and that it periodically gets "cleaned". But we're
|
||
// already doing this ourselves. And PoolCleaner()'s periodic cleaning has a
|
||
// very bad effect on us -- it causes objects to be deleted prematurely, so
|
||
// that attempts to access them cause crashes. This is probably because, when
|
||
// WebInitForCarbon() is called from a plugin, one or more autorelease pools
|
||
// are already in place.
|
||
//
|
||
// To get around this we hook/subclass WebInitForCarbon() and
|
||
// InstallEventLoopIdleTimer() and make the latter return without doing
|
||
// anything when called from the former. This stops WebInitForCarbon()'s
|
||
// (useless and harmful) idle timer from ever being installed.
|
||
//
|
||
// PoolCleaner() only "works" if the autorelease pool count (returned by
|
||
// WKGetNSAutoreleasePoolCount(), stored in numPools) is the same as when
|
||
// sPool was last set. But WKGetNSAutoreleasePoolCount() only works on OS X
|
||
// 10.5 and below. So PoolCleaner() always fails 10.6 and above, and we
|
||
// needn't do anything there.
|
||
//
|
||
// WKGetNSAutoreleasePoolCount() is a thin wrapper around the following code:
|
||
//
|
||
// unsigned count = NSPushAutoreleasePool(0);
|
||
// NSPopAutoreleasePool(count);
|
||
// return count;
|
||
//
|
||
// NSPushAutoreleasePool() and NSPopAutoreleasePool() are undocumented
|
||
// functions from the Foundation framework. On OS X 10.5.X and below their
|
||
// declarations are (as best I can tell) as follows. ('capacity' is
|
||
// presumably the initial capacity, in number of items, of the autorelease
|
||
// pool to be created.)
|
||
//
|
||
// unsigned NSPushAutoreleasePool(unsigned capacity);
|
||
// void NSPopAutoreleasePool(unsigned offset);
|
||
//
|
||
// But as of OS X 10.6 these functions appear to have changed as follows:
|
||
//
|
||
// AutoreleasePool *NSPushAutoreleasePool(unsigned capacity);
|
||
// void NSPopAutoreleasePool(AutoreleasePool *aPool);
|
||
|
||
void Hooked_WebInitForCarbon()
|
||
{
|
||
++gInWebInitForCarbonLevel;
|
||
WebKit_WebInitForCarbon();
|
||
--gInWebInitForCarbonLevel;
|
||
}
|
||
|
||
OSStatus Hooked_InstallEventLoopIdleTimer(
|
||
EventLoopRef inEventLoop,
|
||
EventTimerInterval inDelay,
|
||
EventTimerInterval inInterval,
|
||
EventLoopIdleTimerUPP inTimerProc,
|
||
void *inTimerData,
|
||
EventLoopTimerRef *outTimer
|
||
)
|
||
{
|
||
OSStatus rv = noErr;
|
||
if (gInWebInitForCarbonLevel <= 0) {
|
||
rv = HIToolbox_InstallEventLoopIdleTimer(inEventLoop, inDelay, inInterval,
|
||
inTimerProc, inTimerData, outTimer);
|
||
}
|
||
return rv;
|
||
}
|
||
|
||
// Try to hook (or "subclass") the dynamically bound functions specified in
|
||
// gHookedFunctions. We don't hook these functions at their "original"
|
||
// addresses, so we can only "subclass" calls to them from modules other than
|
||
// the one in which they're defined. Of course, this only works for globally
|
||
// accessible functions.
|
||
void HookImportedFunctions()
|
||
{
|
||
// We currently only need to do anything on Tiger or Leopard.
|
||
if (nsToolkit::OnSnowLeopardOrLater())
|
||
return;
|
||
|
||
// _dyld_register_func_for_add_image() makes the dynamic linker runtime call
|
||
// ScanImportedFunctions() "once for each of the images that are currently
|
||
// loaded into the program" (including the main image, i.e. firefox-bin).
|
||
// When a new image is added (e.g. a plugin), ScanImportedFunctions() is
|
||
// called again with data for that image.
|
||
//
|
||
// Calling HookImportedFunctions() from loadHandler's constructor (i.e. as
|
||
// the current module is being loaded) minimizes the likelihood that the
|
||
// imported functions in the already-loaded images will get called while
|
||
// we're resetting their pointers.
|
||
//
|
||
// _dyld_register_func_for_add_image()'s behavior when a new image is added
|
||
// allows us to reset its imported functions' pointers before they ever get
|
||
// called.
|
||
_dyld_register_func_for_add_image(ScanImportedFunctions);
|
||
}
|
||
|
||
struct segment_command *GetSegmentFromMachHeader(const struct mach_header* mh,
|
||
const char *segname,
|
||
uint32_t *numFollowingCommands)
|
||
{
|
||
if (numFollowingCommands)
|
||
*numFollowingCommands = 0;
|
||
uint32_t numCommands = mh->ncmds;
|
||
struct segment_command *aCommand = (struct segment_command *)
|
||
((uint32_t)mh + sizeof(struct mach_header));
|
||
for (uint32_t i = 1; i <= numCommands; ++i) {
|
||
if (aCommand->cmd != LC_SEGMENT)
|
||
return NULL;
|
||
if (strcmp(segname, aCommand->segname) == 0) {
|
||
if (numFollowingCommands)
|
||
*numFollowingCommands = numCommands-i;
|
||
return aCommand;
|
||
}
|
||
aCommand = (struct segment_command *)
|
||
((uint32_t)aCommand + aCommand->cmdsize);
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
// Scan through parts of the "indirect symbol table" for imported functions
|
||
// (functions dynamically bound from another module) whose names match those
|
||
// we're trying to hook. If we find one, change the corresponding pointer/
|
||
// instruction in a "jump table" or "lazy pointer array" to point at the
|
||
// function's replacement. It appears we only need to look at "lazy bound"
|
||
// symbols -- non-"lazy" symbols seem to always be for (imported) data. (A
|
||
// lazy bound symbol is one that's only resolved on first "use".)
|
||
//
|
||
// Most of what we do here is documented by Apple
|
||
// (http://developer.apple.com/Mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html,
|
||
// http://developer.apple.com/mac/library/documentation/DeveloperTools/Reference/MachOReference/Reference/reference.html).
|
||
// When Apple doesn't explicitly document something (e.g. the format of the
|
||
// __LINKEDIT segment or the indirect symbol table), you can often get "hints"
|
||
// from the output of 'otool -l' or 'otool -I". And sometimes mach-o header
|
||
// files contain additional information -- for example the format of the
|
||
// indirect symbol table is described in the comment above the definitions of
|
||
// INDIRECT_SYMBOL_LOCAL and INDIRECT_SYMBOL_ABS in mach-o/loader.h.
|
||
//
|
||
// The "__jump_table" section of the "__IMPORT" segment is an array of
|
||
// assembler JMP or CALL instructions. It's only present in i386 binaries
|
||
// (ppc and x86_64 binaries use arrays of pointers). Each instruction is
|
||
// 5 bytes long. The format is a byte-length opcode (0xE9 for JMP, 0xE8 for
|
||
// CALL) followed by a four-byte relative address (relative to the start of
|
||
// the next instruction in the table). All the CALL instructions point to the
|
||
// same code -- a 'dyld_stub_binding_helper()' that somehow locates the lazy-
|
||
// bound function and replaces the CALL instruction with a JMP instruction
|
||
// to the appropriate function. If we replace the CALL instruction ourselves,
|
||
// dyld_stub_binding_helper() never gets called (and never needs to be).
|
||
void ScanImportedFunctions(const struct mach_header* mh, intptr_t vmaddr_slide)
|
||
{
|
||
// While we're looking through all our images/modules, also scan for the
|
||
// original addresses of the functions we plan to hook. Though
|
||
// NSLookupSymbolInImage() is deprecated (along with the entire NSModule
|
||
// API), it's by far the best (and most efficient) way to do what we need
|
||
// to do here (scan for the original addresses of symbols that aren't all
|
||
// loaded at the same time). It's still available to 64-bit apps on OS X
|
||
// 10.6.X.
|
||
for (uint32_t i = 0; gHookedFunctions[i].name; ++i) {
|
||
// Since a symbol might be defined more than once, we record only its
|
||
// "first" address.
|
||
if (*gHookedFunctions[i].oldAddressPtr)
|
||
continue;
|
||
NSSymbol symbol =
|
||
NSLookupSymbolInImage(mh, gHookedFunctions[i].name,
|
||
NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
|
||
if (symbol)
|
||
*gHookedFunctions[i].oldAddressPtr = NSAddressOfSymbol(symbol);
|
||
}
|
||
|
||
uint32_t numFollowingCommands = 0;
|
||
struct segment_command *linkeditSegment =
|
||
GetSegmentFromMachHeader(mh, "__LINKEDIT", &numFollowingCommands);
|
||
if (!linkeditSegment)
|
||
return;
|
||
uint32_t fileoffIncrement = linkeditSegment->vmaddr - linkeditSegment->fileoff;
|
||
|
||
struct symtab_command *symtab =
|
||
(struct symtab_command *)((uint32_t)linkeditSegment + linkeditSegment->cmdsize);
|
||
for (uint32_t i = 1;; ++i) {
|
||
if (symtab->cmd == LC_SYMTAB)
|
||
break;
|
||
if (i == numFollowingCommands)
|
||
return;
|
||
symtab = (struct symtab_command *) ((uint32_t)symtab + symtab->cmdsize);
|
||
}
|
||
uint32_t symbolTableOffset = symtab->symoff + fileoffIncrement + vmaddr_slide;
|
||
uint32_t stringTableOffset = symtab->stroff + fileoffIncrement + vmaddr_slide;
|
||
|
||
struct dysymtab_command *dysymtab =
|
||
(struct dysymtab_command *)((uint32_t)symtab + symtab->cmdsize);
|
||
if (dysymtab->cmd != LC_DYSYMTAB)
|
||
return;
|
||
uint32_t indirectSymbolTableOffset =
|
||
dysymtab->indirectsymoff + fileoffIncrement + vmaddr_slide;
|
||
|
||
// Some i386 binaries on OS X 10.6.X use a __la_symbol_ptr section (in the
|
||
// __DATA segment) instead of a __jump_table section (in the __IMPORT
|
||
// segment).
|
||
const struct section *lazySymbols = NULL;
|
||
#ifdef __i386__
|
||
struct segment_command *importSegment =
|
||
GetSegmentFromMachHeader(mh, "__IMPORT", nil);
|
||
const struct section *jumpTable =
|
||
getsectbynamefromheader(mh, "__IMPORT", "__jump_table");
|
||
if (!jumpTable)
|
||
#endif
|
||
{
|
||
lazySymbols = getsectbynamefromheader(mh, "__DATA", "__la_symbol_ptr");
|
||
if (!lazySymbols)
|
||
return;
|
||
}
|
||
uint32_t numLazySymbols = 0;
|
||
uint32_t lazyBytes = 0;
|
||
unsigned char *lazy = NULL;
|
||
#ifdef __i386__
|
||
uint32_t numJumpTableStubs = 0;
|
||
uint32_t stubsBytes = 0;
|
||
unsigned char *stubs = NULL;
|
||
vm_prot_t importSegProt = VM_PROT_NONE;
|
||
if (jumpTable) {
|
||
// Bail if we don't have an __IMPORT segment (which shouldn't be possible,
|
||
// but just in case).
|
||
if (!importSegment)
|
||
return;
|
||
importSegProt = importSegment->initprot;
|
||
// Bail if the size of each entry in the "jump table" isn't 5 bytes.
|
||
if (jumpTable->reserved2 != 5)
|
||
return;
|
||
numJumpTableStubs = jumpTable->size/5;
|
||
indirectSymbolTableOffset += jumpTable->reserved1*sizeof(uint32_t);
|
||
stubs = (unsigned char *)
|
||
(getsectdatafromheader(mh, "__IMPORT", "__jump_table", &stubsBytes) + vmaddr_slide);
|
||
// Bail if (for some reason) these figures don't agree.
|
||
if (stubsBytes != jumpTable->size)
|
||
return;
|
||
} else
|
||
#endif
|
||
{
|
||
numLazySymbols = lazySymbols->size/4;
|
||
indirectSymbolTableOffset += lazySymbols->reserved1*sizeof(uint32_t);
|
||
lazy = (unsigned char *)
|
||
(getsectdatafromheader(mh, "__DATA", "__la_symbol_ptr", &lazyBytes) + vmaddr_slide);
|
||
}
|
||
|
||
uint32_t items = 0;
|
||
#ifdef __i386__
|
||
if (jumpTable) {
|
||
items = numJumpTableStubs;
|
||
// If the __IMPORT segment is read-only, we'll need to make it writeable
|
||
// before trying to change entries in its jump table. Below we restore
|
||
// its original level of protection.
|
||
if (!(importSegProt & VM_PROT_WRITE)) {
|
||
void *protAddr = (void *) (importSegment->vmaddr + vmaddr_slide);
|
||
size_t protSize = importSegment->vmsize;
|
||
vm_protect(mach_task_self(), (vm_address_t) protAddr, protSize, NO,
|
||
importSegProt | VM_PROT_WRITE);
|
||
}
|
||
} else
|
||
#endif
|
||
{
|
||
items = numLazySymbols;
|
||
}
|
||
uint32_t *indirectSymbolTableItem = (uint32_t *) indirectSymbolTableOffset;
|
||
for (uint32_t i = 0; i < items; ++i, ++indirectSymbolTableItem) {
|
||
// Skip indirect symbol table items that are 0x80000000 (for a local
|
||
// symbol) and/or 0x40000000 (for an absolute symbol). See
|
||
// mach-o/loader.h.
|
||
if (0xF0000000 & *indirectSymbolTableItem)
|
||
continue;
|
||
struct nlist *symbolTableItem = (struct nlist *)
|
||
(symbolTableOffset + *indirectSymbolTableItem*sizeof(struct nlist));
|
||
char *stringTableItem = (char *) (stringTableOffset + symbolTableItem->n_un.n_strx);
|
||
|
||
for (uint32_t j = 0; gHookedFunctions[j].name; ++j) {
|
||
if (strcmp(stringTableItem, gHookedFunctions[j].name) != 0)
|
||
continue;
|
||
#ifdef __i386__
|
||
if (jumpTable) {
|
||
unsigned char *opcodeAddr = stubs + (i * 5);
|
||
int32_t *displacementAddr = (int32_t *) (opcodeAddr + 1);
|
||
int32_t eip = (int32_t) stubs + (i + 1) * 5;
|
||
int32_t displacement = (int32_t) (gHookedFunctions[j].newAddress) - eip;
|
||
displacementAddr[0] = displacement;
|
||
opcodeAddr[0] = 0xE9;
|
||
} else
|
||
#endif
|
||
{
|
||
int32_t *lazySymbolAddr = (int32_t *) (lazy + (i * 4));
|
||
lazySymbolAddr[0] = (int32_t) (gHookedFunctions[j].newAddress);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
#ifdef __i386__
|
||
// If we needed to make an __IMPORT segment writeable above, restore its
|
||
// original protection level here.
|
||
if (jumpTable && !(importSegProt & VM_PROT_WRITE)) {
|
||
void *protAddr = (void *) (importSegment->vmaddr + vmaddr_slide);
|
||
size_t protSize = importSegment->vmsize;
|
||
vm_protect(mach_task_self(), (vm_address_t) protAddr, protSize,
|
||
NO, importSegProt);
|
||
}
|
||
#endif
|
||
}
|
||
|
||
class loadHandler
|
||
{
|
||
public:
|
||
loadHandler();
|
||
~loadHandler() {}
|
||
};
|
||
|
||
loadHandler::loadHandler()
|
||
{
|
||
// Calling HookImportedFunctions() from here (i.e. as the current module is
|
||
// being loaded) minimizes the likelihood that the imported functions in
|
||
// the already-loaded images will get called while we're resetting their
|
||
// pointers.
|
||
HookImportedFunctions();
|
||
}
|
||
|
||
loadHandler handler = loadHandler();
|
||
|
||
#endif // __LP64__
|