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
1111 lines
42 KiB
Plaintext
1111 lines
42 KiB
Plaintext
/* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; -*- */
|
|
/* ***** 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 a Cocoa widget run loop and event implementation.
|
|
*
|
|
* The Initial Developer of the Original Code is Google Inc.
|
|
* Portions created by the Initial Developer are Copyright (C) 2006
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Mark Mentovai <mark@moxienet.com> (Original Author)
|
|
*
|
|
* 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 ***** */
|
|
|
|
/*
|
|
* Runs the main native Cocoa run loop, interrupting it as needed to process
|
|
* Gecko events.
|
|
*/
|
|
|
|
#import <Cocoa/Cocoa.h>
|
|
#include <dlfcn.h>
|
|
|
|
#include "CustomCocoaEvents.h"
|
|
#include "mozilla/WidgetTraceEvent.h"
|
|
#include "nsAppShell.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "nsIFile.h"
|
|
#include "nsDirectoryServiceDefs.h"
|
|
#include "nsString.h"
|
|
#include "nsIRollupListener.h"
|
|
#include "nsIWidget.h"
|
|
#include "nsThreadUtils.h"
|
|
#include "nsIWindowMediator.h"
|
|
#include "nsServiceManagerUtils.h"
|
|
#include "nsIInterfaceRequestor.h"
|
|
#include "nsIWebBrowserChrome.h"
|
|
#include "nsObjCExceptions.h"
|
|
#include "nsCocoaUtils.h"
|
|
#include "nsChildView.h"
|
|
#include "nsToolkit.h"
|
|
#include "TextInputHandler.h"
|
|
#include "mozilla/HangMonitor.h"
|
|
|
|
#include "npapi.h"
|
|
|
|
using namespace mozilla::widget;
|
|
|
|
// defined in nsChildView.mm
|
|
extern nsIRollupListener * gRollupListener;
|
|
extern nsIWidget * gRollupWidget;
|
|
|
|
// defined in nsCocoaWindow.mm
|
|
extern PRInt32 gXULModalLevel;
|
|
|
|
static bool gAppShellMethodsSwizzled = false;
|
|
// List of current Cocoa app-modal windows (nested if more than one).
|
|
nsCocoaAppModalWindowList *gCocoaAppModalWindowList = NULL;
|
|
|
|
// Push a Cocoa app-modal window onto the top of our list.
|
|
nsresult nsCocoaAppModalWindowList::PushCocoa(NSWindow *aWindow, NSModalSession aSession)
|
|
{
|
|
NS_ENSURE_STATE(aWindow && aSession);
|
|
mList.AppendElement(nsCocoaAppModalWindowListItem(aWindow, aSession));
|
|
return NS_OK;
|
|
}
|
|
|
|
// Pop the topmost Cocoa app-modal window off our list. aWindow and aSession
|
|
// are just used to check that it's what we expect it to be.
|
|
nsresult nsCocoaAppModalWindowList::PopCocoa(NSWindow *aWindow, NSModalSession aSession)
|
|
{
|
|
NS_ENSURE_STATE(aWindow && aSession);
|
|
|
|
for (int i = mList.Length(); i > 0; --i) {
|
|
nsCocoaAppModalWindowListItem &item = mList.ElementAt(i - 1);
|
|
if (item.mSession) {
|
|
NS_ASSERTION((item.mWindow == aWindow) && (item.mSession == aSession),
|
|
"PopCocoa() called without matching call to PushCocoa()!");
|
|
mList.RemoveElementAt(i - 1);
|
|
return NS_OK;
|
|
}
|
|
}
|
|
|
|
NS_ERROR("PopCocoa() called without matching call to PushCocoa()!");
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
// Push a Gecko-modal window onto the top of our list.
|
|
nsresult nsCocoaAppModalWindowList::PushGecko(NSWindow *aWindow, nsCocoaWindow *aWidget)
|
|
{
|
|
NS_ENSURE_STATE(aWindow && aWidget);
|
|
mList.AppendElement(nsCocoaAppModalWindowListItem(aWindow, aWidget));
|
|
return NS_OK;
|
|
}
|
|
|
|
// Pop the topmost Gecko-modal window off our list. aWindow and aWidget are
|
|
// just used to check that it's what we expect it to be.
|
|
nsresult nsCocoaAppModalWindowList::PopGecko(NSWindow *aWindow, nsCocoaWindow *aWidget)
|
|
{
|
|
NS_ENSURE_STATE(aWindow && aWidget);
|
|
|
|
for (int i = mList.Length(); i > 0; --i) {
|
|
nsCocoaAppModalWindowListItem &item = mList.ElementAt(i - 1);
|
|
if (item.mWidget) {
|
|
NS_ASSERTION((item.mWindow == aWindow) && (item.mWidget == aWidget),
|
|
"PopGecko() called without matching call to PushGecko()!");
|
|
mList.RemoveElementAt(i - 1);
|
|
return NS_OK;
|
|
}
|
|
}
|
|
|
|
NS_ERROR("PopGecko() called without matching call to PushGecko()!");
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
// The "current session" is normally the "session" corresponding to the
|
|
// top-most Cocoa app-modal window (both on the screen and in our list).
|
|
// But because Cocoa app-modal dialog can be "interrupted" by a Gecko-modal
|
|
// dialog, the top-most Cocoa app-modal dialog may already have finished
|
|
// (and no longer be visible). In this case we need to check the list for
|
|
// the "next" visible Cocoa app-modal window (and return its "session"), or
|
|
// (if no Cocoa app-modal window is visible) return nil. This way we ensure
|
|
// (as we need to) that all nested Cocoa app-modal sessions are dealt with
|
|
// before we get to any Gecko-modal session(s). See nsAppShell::
|
|
// ProcessNextNativeEvent() below.
|
|
NSModalSession nsCocoaAppModalWindowList::CurrentSession()
|
|
{
|
|
if (![NSApp _isRunningAppModal])
|
|
return nil;
|
|
|
|
NSModalSession currentSession = nil;
|
|
|
|
for (int i = mList.Length(); i > 0; --i) {
|
|
nsCocoaAppModalWindowListItem &item = mList.ElementAt(i - 1);
|
|
if (item.mSession && [item.mWindow isVisible]) {
|
|
currentSession = item.mSession;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return currentSession;
|
|
}
|
|
|
|
// Has a Gecko modal dialog popped up over a Cocoa app-modal dialog?
|
|
bool nsCocoaAppModalWindowList::GeckoModalAboveCocoaModal()
|
|
{
|
|
if (mList.IsEmpty())
|
|
return false;
|
|
|
|
nsCocoaAppModalWindowListItem &topItem = mList.ElementAt(mList.Length() - 1);
|
|
|
|
return (topItem.mWidget != nsnull);
|
|
}
|
|
|
|
// GeckoNSApplication
|
|
//
|
|
// Subclass of NSApplication for filtering out certain events.
|
|
@interface GeckoNSApplication : NSApplication
|
|
{
|
|
}
|
|
@end
|
|
|
|
@implementation GeckoNSApplication
|
|
|
|
- (void)sendEvent:(NSEvent *)anEvent
|
|
{
|
|
mozilla::HangMonitor::NotifyActivity();
|
|
if ([anEvent type] == NSApplicationDefined &&
|
|
[anEvent subtype] == kEventSubtypeTrace) {
|
|
mozilla::SignalTracerThread();
|
|
return;
|
|
}
|
|
[super sendEvent:anEvent];
|
|
}
|
|
|
|
- (NSEvent*)nextEventMatchingMask:(NSUInteger)mask
|
|
untilDate:(NSDate*)expiration
|
|
inMode:(NSString*)mode
|
|
dequeue:(BOOL)flag
|
|
{
|
|
if (expiration) {
|
|
mozilla::HangMonitor::Suspend();
|
|
}
|
|
return [super nextEventMatchingMask:mask
|
|
untilDate:expiration inMode:mode dequeue:flag];
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
// AppShellDelegate
|
|
//
|
|
// Cocoa bridge class. An object of this class is registered to receive
|
|
// notifications.
|
|
//
|
|
@interface AppShellDelegate : NSObject
|
|
{
|
|
@private
|
|
nsAppShell* mAppShell;
|
|
}
|
|
|
|
- (id)initWithAppShell:(nsAppShell*)aAppShell;
|
|
- (void)applicationWillTerminate:(NSNotification*)aNotification;
|
|
- (void)beginMenuTracking:(NSNotification*)aNotification;
|
|
@end
|
|
|
|
// nsAppShell implementation
|
|
|
|
NS_IMETHODIMP
|
|
nsAppShell::ResumeNative(void)
|
|
{
|
|
nsresult retval = nsBaseAppShell::ResumeNative();
|
|
if (NS_SUCCEEDED(retval) && (mSuspendNativeCount == 0) &&
|
|
mSkippedNativeCallback)
|
|
{
|
|
mSkippedNativeCallback = false;
|
|
ScheduleNativeEventCallback();
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
nsAppShell::nsAppShell()
|
|
: mAutoreleasePools(nsnull)
|
|
, mDelegate(nsnull)
|
|
, mCFRunLoop(NULL)
|
|
, mCFRunLoopSource(NULL)
|
|
, mRunningEventLoop(false)
|
|
, mStarted(false)
|
|
, mTerminated(false)
|
|
, mSkippedNativeCallback(false)
|
|
, mHadMoreEventsCount(0)
|
|
, mRecursionDepth(0)
|
|
, mNativeEventCallbackDepth(0)
|
|
, mNativeEventScheduledDepth(0)
|
|
{
|
|
// A Cocoa event loop is running here if (and only if) we've been embedded
|
|
// by a Cocoa app (like Camino).
|
|
mRunningCocoaEmbedded = [NSApp isRunning] ? true : false;
|
|
}
|
|
|
|
nsAppShell::~nsAppShell()
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
if (mCFRunLoop) {
|
|
if (mCFRunLoopSource) {
|
|
::CFRunLoopRemoveSource(mCFRunLoop, mCFRunLoopSource,
|
|
kCFRunLoopCommonModes);
|
|
::CFRelease(mCFRunLoopSource);
|
|
}
|
|
::CFRelease(mCFRunLoop);
|
|
}
|
|
|
|
if (mAutoreleasePools) {
|
|
NS_ASSERTION(::CFArrayGetCount(mAutoreleasePools) == 0,
|
|
"nsAppShell destroyed without popping all autorelease pools");
|
|
::CFRelease(mAutoreleasePools);
|
|
}
|
|
|
|
[mDelegate release];
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK
|
|
}
|
|
|
|
// Init
|
|
//
|
|
// Loads the nib (see bug 316076c21) and sets up the CFRunLoopSource used to
|
|
// interrupt the main native run loop.
|
|
//
|
|
// public
|
|
nsresult
|
|
nsAppShell::Init()
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
|
|
|
|
// No event loop is running yet (unless Camino is running, or another
|
|
// embedding app that uses NSApplicationMain()).
|
|
NSAutoreleasePool* localPool = [[NSAutoreleasePool alloc] init];
|
|
|
|
// mAutoreleasePools is used as a stack of NSAutoreleasePool objects created
|
|
// by |this|. CFArray is used instead of NSArray because NSArray wants to
|
|
// retain each object you add to it, and you can't retain an
|
|
// NSAutoreleasePool.
|
|
mAutoreleasePools = ::CFArrayCreateMutable(nsnull, 0, nsnull);
|
|
NS_ENSURE_STATE(mAutoreleasePools);
|
|
|
|
// Get the path of the nib file, which lives in the GRE location
|
|
nsCOMPtr<nsIFile> nibFile;
|
|
nsresult rv = NS_GetSpecialDirectory(NS_GRE_DIR, getter_AddRefs(nibFile));
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
nibFile->AppendNative(NS_LITERAL_CSTRING("res"));
|
|
nibFile->AppendNative(NS_LITERAL_CSTRING("MainMenu.nib"));
|
|
|
|
nsCAutoString nibPath;
|
|
rv = nibFile->GetNativePath(nibPath);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
// This call initializes NSApplication unless:
|
|
// 1) we're using xre -- NSApp's already been initialized by
|
|
// MacApplicationDelegate.mm's EnsureUseCocoaDockAPI().
|
|
// 2) Camino is running (or another embedding app that uses
|
|
// NSApplicationMain()) -- NSApp's already been initialized and
|
|
// its main run loop is already running.
|
|
[NSBundle loadNibFile:
|
|
[NSString stringWithUTF8String:(const char*)nibPath.get()]
|
|
externalNameTable:
|
|
[NSDictionary dictionaryWithObject:[GeckoNSApplication sharedApplication]
|
|
forKey:@"NSOwner"]
|
|
withZone:NSDefaultMallocZone()];
|
|
|
|
mDelegate = [[AppShellDelegate alloc] initWithAppShell:this];
|
|
NS_ENSURE_STATE(mDelegate);
|
|
|
|
// Add a CFRunLoopSource to the main native run loop. The source is
|
|
// responsible for interrupting the run loop when Gecko events are ready.
|
|
|
|
mCFRunLoop = [[NSRunLoop currentRunLoop] getCFRunLoop];
|
|
NS_ENSURE_STATE(mCFRunLoop);
|
|
::CFRetain(mCFRunLoop);
|
|
|
|
CFRunLoopSourceContext context;
|
|
bzero(&context, sizeof(context));
|
|
// context.version = 0;
|
|
context.info = this;
|
|
context.perform = ProcessGeckoEvents;
|
|
|
|
mCFRunLoopSource = ::CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &context);
|
|
NS_ENSURE_STATE(mCFRunLoopSource);
|
|
|
|
::CFRunLoopAddSource(mCFRunLoop, mCFRunLoopSource, kCFRunLoopCommonModes);
|
|
|
|
rv = nsBaseAppShell::Init();
|
|
|
|
#ifndef NP_NO_CARBON
|
|
TextInputHandler::InstallPluginKeyEventsHandler();
|
|
#endif
|
|
|
|
gCocoaAppModalWindowList = new nsCocoaAppModalWindowList;
|
|
if (!gAppShellMethodsSwizzled) {
|
|
nsToolkit::SwizzleMethods([NSApplication class], @selector(beginModalSessionForWindow:),
|
|
@selector(nsAppShell_NSApplication_beginModalSessionForWindow:));
|
|
nsToolkit::SwizzleMethods([NSApplication class], @selector(endModalSession:),
|
|
@selector(nsAppShell_NSApplication_endModalSession:));
|
|
// We should only replace the original terminate: method if we're not
|
|
// running in a Cocoa embedder (like Camino). See bug 604901.
|
|
if (!mRunningCocoaEmbedded) {
|
|
nsToolkit::SwizzleMethods([NSApplication class], @selector(terminate:),
|
|
@selector(nsAppShell_NSApplication_terminate:));
|
|
}
|
|
if (!nsToolkit::OnSnowLeopardOrLater()) {
|
|
dlopen("/System/Library/Frameworks/Carbon.framework/Frameworks/Print.framework/Versions/Current/Plugins/PrintCocoaUI.bundle/Contents/MacOS/PrintCocoaUI",
|
|
RTLD_LAZY);
|
|
Class PDEPluginCallbackClass = ::NSClassFromString(@"PDEPluginCallback");
|
|
nsresult rv1 = nsToolkit::SwizzleMethods(PDEPluginCallbackClass, @selector(initWithPrintWindowController:),
|
|
@selector(nsAppShell_PDEPluginCallback_initWithPrintWindowController:));
|
|
if (NS_SUCCEEDED(rv1)) {
|
|
nsToolkit::SwizzleMethods(PDEPluginCallbackClass, @selector(dealloc),
|
|
@selector(nsAppShell_PDEPluginCallback_dealloc));
|
|
}
|
|
}
|
|
gAppShellMethodsSwizzled = true;
|
|
}
|
|
|
|
[localPool release];
|
|
|
|
return rv;
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
|
|
}
|
|
|
|
// ProcessGeckoEvents
|
|
//
|
|
// The "perform" target of mCFRunLoop, called when mCFRunLoopSource is
|
|
// signalled from ScheduleNativeEventCallback.
|
|
//
|
|
// Arrange for Gecko events to be processed on demand (in response to a call
|
|
// to ScheduleNativeEventCallback(), if processing of Gecko events via "native
|
|
// methods" hasn't been suspended). This happens in NativeEventCallback().
|
|
//
|
|
// protected static
|
|
void
|
|
nsAppShell::ProcessGeckoEvents(void* aInfo)
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
nsAppShell* self = static_cast<nsAppShell*> (aInfo);
|
|
|
|
if (self->mRunningEventLoop) {
|
|
self->mRunningEventLoop = false;
|
|
|
|
// The run loop may be sleeping -- [NSRunLoop runMode:...]
|
|
// won't return until it's given a reason to wake up. Awaken it by
|
|
// posting a bogus event. There's no need to make the event
|
|
// presentable.
|
|
//
|
|
// But _don't_ set windowNumber to '-1' -- that can lead to nasty
|
|
// wierdness like bmo bug 397039 (a crash in [NSApp sendEvent:] on one of
|
|
// these fake events, because the -1 has gotten changed into the number
|
|
// of an actual NSWindow object, and that NSWindow object has just been
|
|
// destroyed). Setting windowNumber to '0' seems to work fine -- this
|
|
// seems to prevent the OS from ever trying to associate our bogus event
|
|
// with a particular NSWindow object.
|
|
[NSApp postEvent:[NSEvent otherEventWithType:NSApplicationDefined
|
|
location:NSMakePoint(0,0)
|
|
modifierFlags:0
|
|
timestamp:0
|
|
windowNumber:0
|
|
context:NULL
|
|
subtype:kEventSubtypeNone
|
|
data1:0
|
|
data2:0]
|
|
atStart:NO];
|
|
}
|
|
|
|
if (self->mSuspendNativeCount <= 0) {
|
|
++self->mNativeEventCallbackDepth;
|
|
self->NativeEventCallback();
|
|
--self->mNativeEventCallbackDepth;
|
|
} else {
|
|
self->mSkippedNativeCallback = true;
|
|
}
|
|
|
|
// Still needed to fix bug 343033 ("5-10 second delay or hang or crash
|
|
// when quitting Cocoa Firefox").
|
|
[NSApp postEvent:[NSEvent otherEventWithType:NSApplicationDefined
|
|
location:NSMakePoint(0,0)
|
|
modifierFlags:0
|
|
timestamp:0
|
|
windowNumber:0
|
|
context:NULL
|
|
subtype:kEventSubtypeNone
|
|
data1:0
|
|
data2:0]
|
|
atStart:NO];
|
|
|
|
// Normally every call to ScheduleNativeEventCallback() results in
|
|
// exactly one call to ProcessGeckoEvents(). So each Release() here
|
|
// normally balances exactly one AddRef() in ScheduleNativeEventCallback().
|
|
// But if Exit() is called just after ScheduleNativeEventCallback(), the
|
|
// corresponding call to ProcessGeckoEvents() will never happen. We check
|
|
// for this possibility in two different places -- here and in Exit()
|
|
// itself. If we find here that Exit() has been called (that mTerminated
|
|
// is true), it's because we've been called recursively, that Exit() was
|
|
// called from self->NativeEventCallback() above, and that we're unwinding
|
|
// the recursion. In this case we'll never be called again, and we balance
|
|
// here any extra calls to ScheduleNativeEventCallback().
|
|
//
|
|
// When ProcessGeckoEvents() is called recursively, it's because of a
|
|
// call to ScheduleNativeEventCallback() from NativeEventCallback(). We
|
|
// balance the "extra" AddRefs here (rather than always in Exit()) in order
|
|
// to ensure that 'self' stays alive until the end of this method. We also
|
|
// make sure not to finish the balancing until all the recursion has been
|
|
// unwound.
|
|
if (self->mTerminated) {
|
|
PRInt32 releaseCount = 0;
|
|
if (self->mNativeEventScheduledDepth > self->mNativeEventCallbackDepth) {
|
|
releaseCount = PR_ATOMIC_SET(&self->mNativeEventScheduledDepth,
|
|
self->mNativeEventCallbackDepth);
|
|
}
|
|
while (releaseCount-- > self->mNativeEventCallbackDepth)
|
|
self->Release();
|
|
} else {
|
|
// As best we can tell, every call to ProcessGeckoEvents() is triggered
|
|
// by a call to ScheduleNativeEventCallback(). But we've seen a few
|
|
// (non-reproducible) cases of double-frees that *might* have been caused
|
|
// by spontaneous calls (from the OS) to ProcessGeckoEvents(). So we
|
|
// deal with that possibility here.
|
|
if (PR_ATOMIC_DECREMENT(&self->mNativeEventScheduledDepth) < 0) {
|
|
PR_ATOMIC_SET(&self->mNativeEventScheduledDepth, 0);
|
|
NS_WARNING("Spontaneous call to ProcessGeckoEvents()!");
|
|
} else {
|
|
self->Release();
|
|
}
|
|
}
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK;
|
|
}
|
|
|
|
// WillTerminate
|
|
//
|
|
// Called by the AppShellDelegate when an NSApplicationWillTerminate
|
|
// notification is posted. After this method is called, native events should
|
|
// no longer be processed. The NSApplicationWillTerminate notification is
|
|
// only posted when [NSApp terminate:] is called, which doesn't happen on a
|
|
// "normal" application quit.
|
|
//
|
|
// public
|
|
void
|
|
nsAppShell::WillTerminate()
|
|
{
|
|
if (mTerminated)
|
|
return;
|
|
|
|
// Make sure that the nsAppExitEvent posted by nsAppStartup::Quit() (called
|
|
// from [MacApplicationDelegate applicationShouldTerminate:]) gets run.
|
|
NS_ProcessPendingEvents(NS_GetCurrentThread());
|
|
|
|
mTerminated = true;
|
|
}
|
|
|
|
// ScheduleNativeEventCallback
|
|
//
|
|
// Called (possibly on a non-main thread) when Gecko has an event that
|
|
// needs to be processed. The Gecko event needs to be processed on the
|
|
// main thread, so the native run loop must be interrupted.
|
|
//
|
|
// In nsBaseAppShell.cpp, the mNativeEventPending variable is used to
|
|
// ensure that ScheduleNativeEventCallback() is called no more than once
|
|
// per call to NativeEventCallback(). ProcessGeckoEvents() can skip its
|
|
// call to NativeEventCallback() if processing of Gecko events by native
|
|
// means is suspended (using nsIAppShell::SuspendNative()), which will
|
|
// suspend calls from nsBaseAppShell::OnDispatchedEvent() to
|
|
// ScheduleNativeEventCallback(). But when Gecko event processing by
|
|
// native means is resumed (in ResumeNative()), an extra call is made to
|
|
// ScheduleNativeEventCallback() (from ResumeNative()). This triggers
|
|
// another call to ProcessGeckoEvents(), which calls NativeEventCallback(),
|
|
// and nsBaseAppShell::OnDispatchedEvent() resumes calling
|
|
// ScheduleNativeEventCallback().
|
|
//
|
|
// protected virtual
|
|
void
|
|
nsAppShell::ScheduleNativeEventCallback()
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
if (mTerminated)
|
|
return;
|
|
|
|
// Each AddRef() here is normally balanced by exactly one Release() in
|
|
// ProcessGeckoEvents(). But there are exceptions, for which see
|
|
// ProcessGeckoEvents() and Exit().
|
|
NS_ADDREF_THIS();
|
|
PR_ATOMIC_INCREMENT(&mNativeEventScheduledDepth);
|
|
|
|
// This will invoke ProcessGeckoEvents on the main thread.
|
|
::CFRunLoopSourceSignal(mCFRunLoopSource);
|
|
::CFRunLoopWakeUp(mCFRunLoop);
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK;
|
|
}
|
|
|
|
// ProcessNextNativeEvent
|
|
//
|
|
// If aMayWait is false, process a single native event. If it is true, run
|
|
// the native run loop until stopped by ProcessGeckoEvents.
|
|
//
|
|
// Returns true if more events are waiting in the native event queue.
|
|
//
|
|
// But (now that we're using [NSRunLoop runMode:beforeDate:]) it's too
|
|
// expensive to call ProcessNextNativeEvent() many times in a row (in a
|
|
// tight loop), so we never return true more than kHadMoreEventsCountMax
|
|
// times in a row. This doesn't seem to cause native event starvation.
|
|
//
|
|
// protected virtual
|
|
bool
|
|
nsAppShell::ProcessNextNativeEvent(bool aMayWait)
|
|
{
|
|
bool moreEvents = false;
|
|
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
bool eventProcessed = false;
|
|
NSString* currentMode = nil;
|
|
|
|
if (mTerminated)
|
|
return false;
|
|
|
|
// We don't want any native events to be processed here (via Gecko) while
|
|
// Cocoa is displaying an app-modal dialog (as opposed to a window-modal
|
|
// "sheet" or a Gecko-modal dialog). Otherwise Cocoa event-processing loops
|
|
// may be interrupted, and inappropriate events may get through to the
|
|
// browser window(s) underneath. This resolves bmo bugs 419668 and 420967.
|
|
//
|
|
// But we need more complex handling (we need to make an exception) if a
|
|
// Gecko modal dialog is running above the Cocoa app-modal dialog -- for
|
|
// which see below.
|
|
if ([NSApp _isRunningAppModal] &&
|
|
(!gCocoaAppModalWindowList || !gCocoaAppModalWindowList->GeckoModalAboveCocoaModal()))
|
|
return false;
|
|
|
|
bool wasRunningEventLoop = mRunningEventLoop;
|
|
mRunningEventLoop = aMayWait;
|
|
NSDate* waitUntil = nil;
|
|
if (aMayWait)
|
|
waitUntil = [NSDate distantFuture];
|
|
|
|
NSRunLoop* currentRunLoop = [NSRunLoop currentRunLoop];
|
|
|
|
do {
|
|
// No autorelease pool is provided here, because OnProcessNextEvent
|
|
// and AfterProcessNextEvent are responsible for maintaining it.
|
|
NS_ASSERTION(mAutoreleasePools && ::CFArrayGetCount(mAutoreleasePools),
|
|
"No autorelease pool for native event");
|
|
|
|
// If an event is waiting to be processed, run the main event loop
|
|
// just long enough to process it. For some reason, using [NSApp
|
|
// nextEventMatchingMask:...] to dequeue the event and [NSApp sendEvent:]
|
|
// to "send" it causes trouble, so we no longer do that. (The trouble
|
|
// was very strange, and only happened while processing Gecko events on
|
|
// demand (via ProcessGeckoEvents()), as opposed to processing Gecko
|
|
// events in a tight loop (via nsBaseAppShell::Run()): Particularly in
|
|
// Camino, mouse-down events sometimes got dropped (or mis-handled), so
|
|
// that (for example) you sometimes needed to click more than once on a
|
|
// button to make it work (the zoom button was particularly susceptible).
|
|
// You also sometimes had to ctrl-click or right-click multiple times to
|
|
// bring up a context menu.)
|
|
|
|
// Now that we're using [NSRunLoop runMode:beforeDate:], it's too
|
|
// expensive to call ProcessNextNativeEvent() many times in a row, so we
|
|
// never return true more than kHadMoreEventsCountMax in a row. I'm not
|
|
// entirely sure why [NSRunLoop runMode:beforeDate:] is too expensive,
|
|
// since it and its cousin [NSRunLoop acceptInputForMode:beforeDate:] are
|
|
// designed to be called in a tight loop. Possibly the problem is due to
|
|
// combining [NSRunLoop runMode:beforeDate] with [NSApp
|
|
// nextEventMatchingMask:...].
|
|
|
|
// We special-case timer events (events of type NSPeriodic) to avoid
|
|
// starving them. Apple's documentation is very scanty, and it's now
|
|
// more scanty than it used to be. But it appears that [NSRunLoop
|
|
// acceptInputForMode:beforeDate:] doesn't process timer events at all,
|
|
// that it is called from [NSRunLoop runMode:beforeDate:], and that
|
|
// [NSRunLoop runMode:beforeDate:], though it does process timer events,
|
|
// doesn't return after doing so. To get around this, when aWait is
|
|
// false we check for timer events and process them using [NSApp
|
|
// sendEvent:]. When aWait is true [NSRunLoop runMode:beforeDate:]
|
|
// will only return on a "real" event. But there's code in
|
|
// ProcessGeckoEvents() that should (when need be) wake us up by sending
|
|
// a "fake" "real" event. (See Apple's current doc on [NSRunLoop
|
|
// runMode:beforeDate:] and a quote from what appears to be an older
|
|
// version of this doc at
|
|
// http://lists.apple.com/archives/cocoa-dev/2001/May/msg00559.html.)
|
|
|
|
// If the current mode is something else than NSDefaultRunLoopMode, look
|
|
// for events in that mode.
|
|
currentMode = [currentRunLoop currentMode];
|
|
if (!currentMode)
|
|
currentMode = NSDefaultRunLoopMode;
|
|
|
|
NSEvent* nextEvent = nil;
|
|
|
|
if (aMayWait) {
|
|
mozilla::HangMonitor::Suspend();
|
|
}
|
|
|
|
// If we're running modal (or not in a Gecko "main" event loop) we still
|
|
// need to use nextEventMatchingMask and sendEvent -- otherwise (in
|
|
// Minefield) the modal window (or non-main event loop) won't receive key
|
|
// events or most mouse events.
|
|
if ([NSApp _isRunningModal] || !InGeckoMainEventLoop()) {
|
|
if ((nextEvent = [NSApp nextEventMatchingMask:NSAnyEventMask
|
|
untilDate:waitUntil
|
|
inMode:currentMode
|
|
dequeue:YES])) {
|
|
// If we're in a Cocoa app-modal session that's been interrupted by a
|
|
// Gecko-modal dialog, send the event to the Cocoa app-modal dialog's
|
|
// session. This ensures that the app-modal session won't be starved
|
|
// of events, and fixes bugs 463473 and 442442. (The case of an
|
|
// ordinary Cocoa app-modal dialog has been dealt with above.)
|
|
//
|
|
// Otherwise (if we're in an ordinary Gecko-modal dialog, or if we're
|
|
// otherwise not in a Gecko main event loop), process the event as
|
|
// expected.
|
|
NSModalSession currentAppModalSession = nil;
|
|
if (gCocoaAppModalWindowList)
|
|
currentAppModalSession = gCocoaAppModalWindowList->CurrentSession();
|
|
|
|
mozilla::HangMonitor::NotifyActivity();
|
|
|
|
if (currentAppModalSession) {
|
|
[NSApp _modalSession:currentAppModalSession sendEvent:nextEvent];
|
|
} else {
|
|
[NSApp sendEvent:nextEvent];
|
|
}
|
|
eventProcessed = true;
|
|
}
|
|
} else {
|
|
if (aMayWait ||
|
|
(nextEvent = [NSApp nextEventMatchingMask:NSAnyEventMask
|
|
untilDate:nil
|
|
inMode:currentMode
|
|
dequeue:NO])) {
|
|
if (nextEvent && ([nextEvent type] == NSPeriodic)) {
|
|
nextEvent = [NSApp nextEventMatchingMask:NSAnyEventMask
|
|
untilDate:waitUntil
|
|
inMode:currentMode
|
|
dequeue:YES];
|
|
[NSApp sendEvent:nextEvent];
|
|
} else {
|
|
[currentRunLoop runMode:currentMode beforeDate:waitUntil];
|
|
}
|
|
eventProcessed = true;
|
|
}
|
|
}
|
|
} while (mRunningEventLoop);
|
|
|
|
if (eventProcessed && (mHadMoreEventsCount < kHadMoreEventsCountMax)) {
|
|
moreEvents = ([NSApp nextEventMatchingMask:NSAnyEventMask
|
|
untilDate:nil
|
|
inMode:currentMode
|
|
dequeue:NO] != nil);
|
|
}
|
|
|
|
if (moreEvents) {
|
|
// Once this reaches kHadMoreEventsCountMax, it will be reset to 0 the
|
|
// next time through (whether or not we process any events then).
|
|
++mHadMoreEventsCount;
|
|
} else {
|
|
mHadMoreEventsCount = 0;
|
|
}
|
|
|
|
mRunningEventLoop = wasRunningEventLoop;
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK;
|
|
|
|
if (!moreEvents) {
|
|
nsChildView::UpdateCurrentInputEventCount();
|
|
}
|
|
|
|
return moreEvents;
|
|
}
|
|
|
|
// Returns true if Gecko events are currently being processed in its "main"
|
|
// event loop (or one of its "main" event loops). Returns false if Gecko
|
|
// events are being processed in a "nested" event loop, or if we're not
|
|
// running in any sort of Gecko event loop. How we process native events in
|
|
// ProcessNextNativeEvent() turns on our decision (and if we make the wrong
|
|
// choice, the result may be a hang).
|
|
//
|
|
// We define the "main" event loop(s) as the place (or places) where Gecko
|
|
// event processing "normally" takes place, and all other Gecko event loops
|
|
// as "nested". The "nested" event loops are normally processed while a call
|
|
// from a "main" event loop is on the stack ... but not always. For example,
|
|
// the Venkman JavaScript debugger runs a "nested" event loop (in jsdService::
|
|
// EnterNestedEventLoop()) whenever it breaks into the current script. But
|
|
// if this happens as the result of the user pressing a key combination, there
|
|
// won't be any other Gecko event-processing call on the stack (e.g.
|
|
// NS_ProcessNextEvent() or NS_ProcessPendingEvents()). (In the current
|
|
// nsAppShell implementation, what counts as the "main" event loop is what
|
|
// nsBaseAppShell::NativeEventCallback() does to process Gecko events. We
|
|
// don't currently use nsBaseAppShell::Run().)
|
|
bool
|
|
nsAppShell::InGeckoMainEventLoop()
|
|
{
|
|
if ((gXULModalLevel > 0) || (mRecursionDepth > 0))
|
|
return false;
|
|
if (mNativeEventCallbackDepth <= 0)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
// Run
|
|
//
|
|
// Overrides the base class's Run() method to call [NSApp run] (which spins
|
|
// the native run loop until the application quits). Since (unlike the base
|
|
// class's Run() method) we don't process any Gecko events here, they need
|
|
// to be processed elsewhere (in NativeEventCallback(), called from
|
|
// ProcessGeckoEvents()).
|
|
//
|
|
// Camino calls [NSApp run] on its own (via NSApplicationMain()), and so
|
|
// doesn't call nsAppShell::Run().
|
|
//
|
|
// public
|
|
NS_IMETHODIMP
|
|
nsAppShell::Run(void)
|
|
{
|
|
NS_ASSERTION(!mStarted, "nsAppShell::Run() called multiple times");
|
|
if (mStarted)
|
|
return NS_OK;
|
|
|
|
mStarted = true;
|
|
NS_OBJC_TRY_ABORT([NSApp run]);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsAppShell::Exit(void)
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
|
|
|
|
// This method is currently called more than once -- from (according to
|
|
// mento) an nsAppExitEvent dispatched by nsAppStartup::Quit() and from an
|
|
// XPCOM shutdown notification that nsBaseAppShell has registered to
|
|
// receive. So we need to ensure that multiple calls won't break anything.
|
|
// But we should also complain about it (since it isn't quite kosher).
|
|
if (mTerminated) {
|
|
NS_WARNING("nsAppShell::Exit() called redundantly");
|
|
return NS_OK;
|
|
}
|
|
|
|
mTerminated = true;
|
|
|
|
delete gCocoaAppModalWindowList;
|
|
gCocoaAppModalWindowList = NULL;
|
|
|
|
#ifndef NP_NO_CARBON
|
|
TextInputHandler::RemovePluginKeyEventsHandler();
|
|
#endif
|
|
|
|
// Quoting from Apple's doc on the [NSApplication stop:] method (from their
|
|
// doc on the NSApplication class): "If this method is invoked during a
|
|
// modal event loop, it will break that loop but not the main event loop."
|
|
// nsAppShell::Exit() shouldn't be called from a modal event loop. So if
|
|
// it is we complain about it (to users of debug builds) and call [NSApp
|
|
// stop:] one extra time. (I'm not sure if modal event loops can be nested
|
|
// -- Apple's docs don't say one way or the other. But the return value
|
|
// of [NSApp _isRunningModal] doesn't change immediately after a call to
|
|
// [NSApp stop:], so we have to assume that one extra call to [NSApp stop:]
|
|
// will do the job.)
|
|
BOOL cocoaModal = [NSApp _isRunningModal];
|
|
NS_ASSERTION(!cocoaModal,
|
|
"Don't call nsAppShell::Exit() from a modal event loop!");
|
|
if (cocoaModal)
|
|
[NSApp stop:nsnull];
|
|
[NSApp stop:nsnull];
|
|
|
|
// A call to Exit() just after a call to ScheduleNativeEventCallback()
|
|
// prevents the (normally) matching call to ProcessGeckoEvents() from
|
|
// happening. If we've been called from ProcessGeckoEvents() (as usually
|
|
// happens), we take care of it there. But if we have an unbalanced call
|
|
// to ScheduleNativeEventCallback() and ProcessGeckoEvents() isn't on the
|
|
// stack, we need to take care of the problem here.
|
|
if (!mNativeEventCallbackDepth && mNativeEventScheduledDepth) {
|
|
PRInt32 releaseCount = PR_ATOMIC_SET(&mNativeEventScheduledDepth, 0);
|
|
while (releaseCount-- > 0)
|
|
NS_RELEASE_THIS();
|
|
}
|
|
|
|
return nsBaseAppShell::Exit();
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
|
|
}
|
|
|
|
// OnProcessNextEvent
|
|
//
|
|
// This nsIThreadObserver method is called prior to processing an event.
|
|
// Set up an autorelease pool that will service any autoreleased Cocoa
|
|
// objects during this event. This includes native events processed by
|
|
// ProcessNextNativeEvent. The autorelease pool will be popped by
|
|
// AfterProcessNextEvent, it is important for these two methods to be
|
|
// tightly coupled.
|
|
//
|
|
// public
|
|
NS_IMETHODIMP
|
|
nsAppShell::OnProcessNextEvent(nsIThreadInternal *aThread, bool aMayWait,
|
|
PRUint32 aRecursionDepth)
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
|
|
|
|
mRecursionDepth = aRecursionDepth;
|
|
|
|
NS_ASSERTION(mAutoreleasePools,
|
|
"No stack on which to store autorelease pool");
|
|
|
|
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
|
|
::CFArrayAppendValue(mAutoreleasePools, pool);
|
|
|
|
return nsBaseAppShell::OnProcessNextEvent(aThread, aMayWait, aRecursionDepth);
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
|
|
}
|
|
|
|
// AfterProcessNextEvent
|
|
//
|
|
// This nsIThreadObserver method is called after event processing is complete.
|
|
// The Cocoa implementation cleans up the autorelease pool create by the
|
|
// previous OnProcessNextEvent call.
|
|
//
|
|
// public
|
|
NS_IMETHODIMP
|
|
nsAppShell::AfterProcessNextEvent(nsIThreadInternal *aThread,
|
|
PRUint32 aRecursionDepth)
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
|
|
|
|
mRecursionDepth = aRecursionDepth;
|
|
|
|
CFIndex count = ::CFArrayGetCount(mAutoreleasePools);
|
|
|
|
NS_ASSERTION(mAutoreleasePools && count,
|
|
"Processed an event, but there's no autorelease pool?");
|
|
|
|
const NSAutoreleasePool* pool = static_cast<const NSAutoreleasePool*>
|
|
(::CFArrayGetValueAtIndex(mAutoreleasePools, count - 1));
|
|
::CFArrayRemoveValueAtIndex(mAutoreleasePools, count - 1);
|
|
[pool release];
|
|
|
|
return nsBaseAppShell::AfterProcessNextEvent(aThread, aRecursionDepth);
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT;
|
|
}
|
|
|
|
|
|
// AppShellDelegate implementation
|
|
|
|
|
|
@implementation AppShellDelegate
|
|
// initWithAppShell:
|
|
//
|
|
// Constructs the AppShellDelegate object
|
|
- (id)initWithAppShell:(nsAppShell*)aAppShell
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
|
|
|
if ((self = [self init])) {
|
|
mAppShell = aAppShell;
|
|
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
selector:@selector(applicationWillTerminate:)
|
|
name:NSApplicationWillTerminateNotification
|
|
object:NSApp];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
selector:@selector(applicationDidBecomeActive:)
|
|
name:NSApplicationDidBecomeActiveNotification
|
|
object:NSApp];
|
|
[[NSDistributedNotificationCenter defaultCenter] addObserver:self
|
|
selector:@selector(beginMenuTracking:)
|
|
name:@"com.apple.HIToolbox.beginMenuTrackingNotification"
|
|
object:nil];
|
|
}
|
|
|
|
return self;
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
|
|
[super dealloc];
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK;
|
|
}
|
|
|
|
// applicationWillTerminate:
|
|
//
|
|
// Notify the nsAppShell that native event processing should be discontinued.
|
|
- (void)applicationWillTerminate:(NSNotification*)aNotification
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
mAppShell->WillTerminate();
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK;
|
|
}
|
|
|
|
// applicationDidBecomeActive
|
|
//
|
|
// Make sure TextInputHandler::sLastModifierState is updated when we become
|
|
// active (since we won't have received [ChildView flagsChanged:] messages
|
|
// while inactive).
|
|
- (void)applicationDidBecomeActive:(NSNotification*)aNotification
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
// [NSEvent modifierFlags] is valid on every kind of event, so we don't need
|
|
// to worry about getting an NSInternalInconsistencyException here.
|
|
NSEvent* currentEvent = [NSApp currentEvent];
|
|
if (currentEvent) {
|
|
TextInputHandler::sLastModifierState =
|
|
[currentEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask;
|
|
}
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK;
|
|
}
|
|
|
|
// beginMenuTracking
|
|
//
|
|
// Roll up our context menu (if any) when some other app (or the OS) opens
|
|
// any sort of menu. But make sure we don't do this for notifications we
|
|
// send ourselves (whose 'sender' will be @"org.mozilla.gecko.PopupWindow").
|
|
- (void)beginMenuTracking:(NSNotification*)aNotification
|
|
{
|
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
|
|
|
NSString *sender = [aNotification object];
|
|
if (!sender || ![sender isEqualToString:@"org.mozilla.gecko.PopupWindow"]) {
|
|
if (gRollupListener && gRollupWidget)
|
|
gRollupListener->Rollup(0);
|
|
}
|
|
|
|
NS_OBJC_END_TRY_ABORT_BLOCK;
|
|
}
|
|
|
|
@end
|
|
|
|
// We hook beginModalSessionForWindow: and endModalSession: in order to
|
|
// maintain a list of Cocoa app-modal windows (and the "sessions" to which
|
|
// they correspond). We need this in order to deal with the consequences
|
|
// of a Cocoa app-modal dialog being "interrupted" by a Gecko-modal dialog.
|
|
// See nsCocoaAppModalWindowList::CurrentSession() and
|
|
// nsAppShell::ProcessNextNativeEvent() above.
|
|
//
|
|
// We hook terminate: in order to make OS-initiated termination work nicely
|
|
// with Gecko's shutdown sequence. (Two ways to trigger OS-initiated
|
|
// termination: 1) Quit from the Dock menu; 2) Log out from (or shut down)
|
|
// your computer while the browser is active.)
|
|
@interface NSApplication (MethodSwizzling)
|
|
- (NSModalSession)nsAppShell_NSApplication_beginModalSessionForWindow:(NSWindow *)aWindow;
|
|
- (void)nsAppShell_NSApplication_endModalSession:(NSModalSession)aSession;
|
|
- (void)nsAppShell_NSApplication_terminate:(id)sender;
|
|
@end
|
|
|
|
@implementation NSApplication (MethodSwizzling)
|
|
|
|
// Called if and only if a Cocoa app-modal session is beginning. Always call
|
|
// gCocoaAppModalWindowList->PushCocoa() here (if gCocoaAppModalWindowList is
|
|
// non-nil).
|
|
- (NSModalSession)nsAppShell_NSApplication_beginModalSessionForWindow:(NSWindow *)aWindow
|
|
{
|
|
NSModalSession session =
|
|
[self nsAppShell_NSApplication_beginModalSessionForWindow:aWindow];
|
|
if (gCocoaAppModalWindowList)
|
|
gCocoaAppModalWindowList->PushCocoa(aWindow, session);
|
|
return session;
|
|
}
|
|
|
|
// Called to end any Cocoa modal session (app-modal or otherwise). Only call
|
|
// gCocoaAppModalWindowList->PopCocoa() when an app-modal session is ending
|
|
// (and when gCocoaAppModalWindowList is non-nil).
|
|
- (void)nsAppShell_NSApplication_endModalSession:(NSModalSession)aSession
|
|
{
|
|
BOOL wasRunningAppModal = [NSApp _isRunningAppModal];
|
|
NSWindow *prevAppModalWindow = [NSApp modalWindow];
|
|
[self nsAppShell_NSApplication_endModalSession:aSession];
|
|
if (gCocoaAppModalWindowList &&
|
|
wasRunningAppModal && (prevAppModalWindow != [NSApp modalWindow]))
|
|
gCocoaAppModalWindowList->PopCocoa(prevAppModalWindow, aSession);
|
|
}
|
|
|
|
// Called by the OS after [MacApplicationDelegate applicationShouldTerminate:]
|
|
// has returned NSTerminateNow. This method "subclasses" and replaces the
|
|
// OS's original implementation. The only thing the orginal method does which
|
|
// we need is that it posts NSApplicationWillTerminateNotification. Everything
|
|
// else is unneeded (because it's handled elsewhere), or actively interferes
|
|
// with Gecko's shutdown sequence. For example the original terminate: method
|
|
// causes the app to exit() inside [NSApp run] (called from nsAppShell::Run()
|
|
// above), which means that nothing runs after the call to nsAppStartup::Run()
|
|
// in XRE_Main(), which in particular means that ScopedXPCOMStartup's destructor
|
|
// and NS_ShutdownXPCOM() never get called.
|
|
- (void)nsAppShell_NSApplication_terminate:(id)sender
|
|
{
|
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSApplicationWillTerminateNotification
|
|
object:NSApp];
|
|
}
|
|
|
|
@end
|
|
|
|
@interface NSObject (PDEPluginCallbackMethodSwizzling)
|
|
- (id)nsAppShell_PDEPluginCallback_initWithPrintWindowController:(id)controller;
|
|
- (void)nsAppShell_PDEPluginCallback_dealloc;
|
|
@end
|
|
|
|
@implementation NSObject (PDEPluginCallbackMethodSwizzling)
|
|
|
|
// On Leopard, the PDEPluginCallback class in Apple's PrintCocoaUI module
|
|
// fails to retain and release its PMPrintWindowController object. This
|
|
// causes the PMPrintWindowController to sometimes be deleted prematurely,
|
|
// leading to crashes on attempts to access it. One example is bug 396680,
|
|
// caused by attempting to call a deleted PMPrintWindowController object's
|
|
// printSettings method. We work around the problem by hooking the
|
|
// appropriate methods and retaining and releasing the object ourselves.
|
|
// PrintCocoaUI.bundle is a "plugin" of the Carbon framework's Print
|
|
// framework.
|
|
|
|
- (id)nsAppShell_PDEPluginCallback_initWithPrintWindowController:(id)controller
|
|
{
|
|
return [self nsAppShell_PDEPluginCallback_initWithPrintWindowController:[controller retain]];
|
|
}
|
|
|
|
- (void)nsAppShell_PDEPluginCallback_dealloc
|
|
{
|
|
// Since the PDEPluginCallback class is undocumented (and the OS header
|
|
// files have no definition for it), we need to use low-level methods to
|
|
// access its _printWindowController variable. (object_getInstanceVariable()
|
|
// is also available in Objective-C 2.0, so this code is 64-bit safe.)
|
|
id _printWindowController = nil;
|
|
object_getInstanceVariable(self, "_printWindowController",
|
|
(void **) &_printWindowController);
|
|
[_printWindowController release];
|
|
[self nsAppShell_PDEPluginCallback_dealloc];
|
|
}
|
|
|
|
@end
|