mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
c9d9685f5d
--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
1573 lines
52 KiB
C++
1573 lines
52 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* vim:expandtab:shiftwidth=4:tabstop=4:
|
|
*/
|
|
/* ***** 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 Christopher Blizzard
|
|
* <blizzard@mozilla.org>. Portions created by the Initial Developer
|
|
* are Copyright (C) 2001 the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Mats Palmgren <mats.palmgren@bredband.net>
|
|
* Masayuki Nakano <masayuki@d-toybox.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 ***** */
|
|
|
|
#ifdef MOZ_PLATFORM_MAEMO
|
|
#define MAEMO_CHANGES
|
|
#endif
|
|
|
|
#ifdef MOZ_LOGGING
|
|
#define FORCE_PR_LOG /* Allow logging in the release build */
|
|
#endif // MOZ_LOGGING
|
|
#include "prlog.h"
|
|
|
|
#include "nsGtkIMModule.h"
|
|
#include "nsWindow.h"
|
|
#include "mozilla/Preferences.h"
|
|
|
|
#ifdef MOZ_PLATFORM_MAEMO
|
|
#include "nsServiceManagerUtils.h"
|
|
#include "nsIObserverService.h"
|
|
#include "mozilla/Services.h"
|
|
#endif
|
|
|
|
using namespace mozilla;
|
|
using namespace mozilla::widget;
|
|
|
|
#ifdef PR_LOGGING
|
|
PRLogModuleInfo* gGtkIMLog = nsnull;
|
|
|
|
static const char*
|
|
GetRangeTypeName(PRUint32 aRangeType)
|
|
{
|
|
switch (aRangeType) {
|
|
case NS_TEXTRANGE_RAWINPUT:
|
|
return "NS_TEXTRANGE_RAWINPUT";
|
|
case NS_TEXTRANGE_CONVERTEDTEXT:
|
|
return "NS_TEXTRANGE_CONVERTEDTEXT";
|
|
case NS_TEXTRANGE_SELECTEDRAWTEXT:
|
|
return "NS_TEXTRANGE_SELECTEDRAWTEXT";
|
|
case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT:
|
|
return "NS_TEXTRANGE_SELECTEDCONVERTEDTEXT";
|
|
case NS_TEXTRANGE_CARETPOSITION:
|
|
return "NS_TEXTRANGE_CARETPOSITION";
|
|
default:
|
|
return "UNKNOWN SELECTION TYPE!!";
|
|
}
|
|
}
|
|
|
|
static const char*
|
|
GetEnabledStateName(PRUint32 aState)
|
|
{
|
|
switch (aState) {
|
|
case IMEState::DISABLED:
|
|
return "DISABLED";
|
|
case IMEState::ENABLED:
|
|
return "ENABLED";
|
|
case IMEState::PASSWORD:
|
|
return "PASSWORD";
|
|
case IMEState::PLUGIN:
|
|
return "PLUG_IN";
|
|
default:
|
|
return "UNKNOWN ENABLED STATUS!!";
|
|
}
|
|
}
|
|
#endif
|
|
|
|
nsGtkIMModule* nsGtkIMModule::sLastFocusedModule = nsnull;
|
|
|
|
#ifdef MOZ_PLATFORM_MAEMO
|
|
static bool gIsVirtualKeyboardOpened = false;
|
|
#endif
|
|
|
|
nsGtkIMModule::nsGtkIMModule(nsWindow* aOwnerWindow) :
|
|
mOwnerWindow(aOwnerWindow), mLastFocusedWindow(nsnull),
|
|
mContext(nsnull),
|
|
#ifndef NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
mSimpleContext(nsnull),
|
|
#endif
|
|
mDummyContext(nsnull),
|
|
mCompositionStart(PR_UINT32_MAX), mProcessingKeyEvent(nsnull),
|
|
mIsComposing(false), mIsIMFocused(false),
|
|
mIgnoreNativeCompositionEvent(false)
|
|
{
|
|
#ifdef PR_LOGGING
|
|
if (!gGtkIMLog) {
|
|
gGtkIMLog = PR_NewLogModule("nsGtkIMModuleWidgets");
|
|
}
|
|
#endif
|
|
Init();
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::Init()
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): Init, mOwnerWindow=%p",
|
|
this, mOwnerWindow));
|
|
|
|
MozContainer* container = mOwnerWindow->GetMozContainer();
|
|
NS_PRECONDITION(container, "container is null");
|
|
GdkWindow* gdkWindow = GTK_WIDGET(container)->window;
|
|
|
|
// NOTE: gtk_im_*_new() abort (kill) the whole process when it fails.
|
|
// So, we don't need to check the result.
|
|
|
|
// Normal context.
|
|
mContext = gtk_im_multicontext_new();
|
|
gtk_im_context_set_client_window(mContext, gdkWindow);
|
|
g_signal_connect(mContext, "preedit_changed",
|
|
G_CALLBACK(nsGtkIMModule::OnChangeCompositionCallback),
|
|
this);
|
|
g_signal_connect(mContext, "retrieve_surrounding",
|
|
G_CALLBACK(nsGtkIMModule::OnRetrieveSurroundingCallback),
|
|
this);
|
|
g_signal_connect(mContext, "delete_surrounding",
|
|
G_CALLBACK(nsGtkIMModule::OnDeleteSurroundingCallback),
|
|
this);
|
|
g_signal_connect(mContext, "commit",
|
|
G_CALLBACK(nsGtkIMModule::OnCommitCompositionCallback),
|
|
this);
|
|
g_signal_connect(mContext, "preedit_start",
|
|
G_CALLBACK(nsGtkIMModule::OnStartCompositionCallback),
|
|
this);
|
|
g_signal_connect(mContext, "preedit_end",
|
|
G_CALLBACK(nsGtkIMModule::OnEndCompositionCallback),
|
|
this);
|
|
|
|
#ifndef NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
// Simple context
|
|
mSimpleContext = gtk_im_context_simple_new();
|
|
gtk_im_context_set_client_window(mSimpleContext, gdkWindow);
|
|
g_signal_connect(mSimpleContext, "preedit_changed",
|
|
G_CALLBACK(&nsGtkIMModule::OnChangeCompositionCallback),
|
|
this);
|
|
g_signal_connect(mSimpleContext, "retrieve_surrounding",
|
|
G_CALLBACK(&nsGtkIMModule::OnRetrieveSurroundingCallback),
|
|
this);
|
|
g_signal_connect(mSimpleContext, "delete_surrounding",
|
|
G_CALLBACK(&nsGtkIMModule::OnDeleteSurroundingCallback),
|
|
this);
|
|
g_signal_connect(mSimpleContext, "commit",
|
|
G_CALLBACK(&nsGtkIMModule::OnCommitCompositionCallback),
|
|
this);
|
|
g_signal_connect(mSimpleContext, "preedit_start",
|
|
G_CALLBACK(nsGtkIMModule::OnStartCompositionCallback),
|
|
this);
|
|
g_signal_connect(mSimpleContext, "preedit_end",
|
|
G_CALLBACK(nsGtkIMModule::OnEndCompositionCallback),
|
|
this);
|
|
#endif // NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
|
|
// Dummy context
|
|
mDummyContext = gtk_im_multicontext_new();
|
|
gtk_im_context_set_client_window(mDummyContext, gdkWindow);
|
|
}
|
|
|
|
nsGtkIMModule::~nsGtkIMModule()
|
|
{
|
|
if (this == sLastFocusedModule) {
|
|
sLastFocusedModule = nsnull;
|
|
}
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p) was gone", this));
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnDestroyWindow(nsWindow* aWindow)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnDestroyWindow, aWindow=%p, mLastFocusedWindow=%p, mOwnerWindow=%p, mLastFocusedModule=%p",
|
|
this, aWindow, mLastFocusedWindow, mOwnerWindow, sLastFocusedModule));
|
|
|
|
NS_PRECONDITION(aWindow, "aWindow must not be null");
|
|
|
|
if (mLastFocusedWindow == aWindow) {
|
|
CancelIMEComposition(aWindow);
|
|
if (mIsIMFocused) {
|
|
Blur();
|
|
}
|
|
mLastFocusedWindow = nsnull;
|
|
}
|
|
|
|
if (mOwnerWindow != aWindow) {
|
|
return;
|
|
}
|
|
|
|
if (sLastFocusedModule == this) {
|
|
sLastFocusedModule = nsnull;
|
|
}
|
|
|
|
/**
|
|
* NOTE:
|
|
* The given window is the owner of this, so, we must release the
|
|
* contexts now. But that might be referred from other nsWindows
|
|
* (they are children of this. But we don't know why there are the
|
|
* cases). So, we need to clear the pointers that refers to contexts
|
|
* and this if the other referrers are still alive. See bug 349727.
|
|
*/
|
|
if (mContext) {
|
|
PrepareToDestroyContext(mContext);
|
|
gtk_im_context_set_client_window(mContext, nsnull);
|
|
g_object_unref(mContext);
|
|
mContext = nsnull;
|
|
}
|
|
|
|
#ifndef NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
if (mSimpleContext) {
|
|
gtk_im_context_set_client_window(mSimpleContext, nsnull);
|
|
g_object_unref(mSimpleContext);
|
|
mSimpleContext = nsnull;
|
|
}
|
|
#endif // NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
|
|
if (mDummyContext) {
|
|
// mContext and mDummyContext have the same slaveType and signal_data
|
|
// so no need for another workaround_gtk_im_display_closed.
|
|
gtk_im_context_set_client_window(mDummyContext, nsnull);
|
|
g_object_unref(mDummyContext);
|
|
mDummyContext = nsnull;
|
|
}
|
|
|
|
mOwnerWindow = nsnull;
|
|
mLastFocusedWindow = nsnull;
|
|
mInputContext.mIMEState.mEnabled = IMEState::DISABLED;
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" SUCCEEDED, Completely destroyed"));
|
|
}
|
|
|
|
// Work around gtk bug http://bugzilla.gnome.org/show_bug.cgi?id=483223:
|
|
// (and the similar issue of GTK+ IIIM)
|
|
// The GTK+ XIM and IIIM modules register handlers for the "closed" signal
|
|
// on the display, but:
|
|
// * The signal handlers are not disconnected when the module is unloaded.
|
|
//
|
|
// The GTK+ XIM module has another problem:
|
|
// * When the signal handler is run (with the module loaded) it tries
|
|
// XFree (and fails) on a pointer that did not come from Xmalloc.
|
|
//
|
|
// To prevent these modules from being unloaded, use static variables to
|
|
// hold ref of GtkIMContext class.
|
|
// For GTK+ XIM module, to prevent the signal handler from being run,
|
|
// find the signal handlers and remove them.
|
|
//
|
|
// GtkIMContextXIMs share XOpenIM connections and display closed signal
|
|
// handlers (where possible).
|
|
|
|
void
|
|
nsGtkIMModule::PrepareToDestroyContext(GtkIMContext *aContext)
|
|
{
|
|
MozContainer* container = mOwnerWindow->GetMozContainer();
|
|
NS_PRECONDITION(container, "The container of the window is null");
|
|
|
|
GtkIMMulticontext *multicontext = GTK_IM_MULTICONTEXT(aContext);
|
|
GtkIMContext *slave = multicontext->slave;
|
|
if (!slave) {
|
|
return;
|
|
}
|
|
|
|
GType slaveType = G_TYPE_FROM_INSTANCE(slave);
|
|
const gchar *im_type_name = g_type_name(slaveType);
|
|
if (strcmp(im_type_name, "GtkIMContextXIM") == 0) {
|
|
if (gtk_check_version(2, 12, 1) == NULL) {
|
|
return; // gtk bug has been fixed
|
|
}
|
|
|
|
struct GtkIMContextXIM
|
|
{
|
|
GtkIMContext parent;
|
|
gpointer private_data;
|
|
// ... other fields
|
|
};
|
|
|
|
gpointer signal_data =
|
|
reinterpret_cast<GtkIMContextXIM*>(slave)->private_data;
|
|
if (!signal_data) {
|
|
return;
|
|
}
|
|
|
|
g_signal_handlers_disconnect_matched(
|
|
gtk_widget_get_display(GTK_WIDGET(container)),
|
|
G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, signal_data);
|
|
|
|
// Add a reference to prevent the XIM module from being unloaded
|
|
// and reloaded: each time the module is loaded and used, it
|
|
// opens (and doesn't close) new XOpenIM connections.
|
|
static gpointer gtk_xim_context_class =
|
|
g_type_class_ref(slaveType);
|
|
// Mute unused variable warning:
|
|
gtk_xim_context_class = gtk_xim_context_class;
|
|
} else if (strcmp(im_type_name, "GtkIMContextIIIM") == 0) {
|
|
// Add a reference to prevent the IIIM module from being unloaded
|
|
static gpointer gtk_iiim_context_class =
|
|
g_type_class_ref(slaveType);
|
|
// Mute unused variable warning:
|
|
gtk_iiim_context_class = gtk_iiim_context_class;
|
|
}
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnFocusWindow(nsWindow* aWindow)
|
|
{
|
|
if (NS_UNLIKELY(IsDestroyed())) {
|
|
return;
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnFocusWindow, aWindow=%p, mLastFocusedWindow=%p",
|
|
this, aWindow, mLastFocusedWindow));
|
|
mLastFocusedWindow = aWindow;
|
|
Focus();
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnBlurWindow(nsWindow* aWindow)
|
|
{
|
|
if (NS_UNLIKELY(IsDestroyed())) {
|
|
return;
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnBlurWindow, aWindow=%p, mLastFocusedWindow=%p, mIsIMFocused=%s",
|
|
this, aWindow, mLastFocusedWindow, mIsIMFocused ? "YES" : "NO"));
|
|
|
|
if (!mIsIMFocused || mLastFocusedWindow != aWindow) {
|
|
return;
|
|
}
|
|
|
|
Blur();
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::OnKeyEvent(nsWindow* aCaller, GdkEventKey* aEvent,
|
|
bool aKeyDownEventWasSent /* = false */)
|
|
{
|
|
NS_PRECONDITION(aEvent, "aEvent must be non-null");
|
|
|
|
if (!IsEditable() || NS_UNLIKELY(IsDestroyed())) {
|
|
return false;
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnKeyEvent, aCaller=%p, aKeyDownEventWasSent=%s",
|
|
this, aCaller, aKeyDownEventWasSent ? "TRUE" : "FALSE"));
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" aEvent: type=%s, keyval=%s, unicode=0x%X",
|
|
aEvent->type == GDK_KEY_PRESS ? "GDK_KEY_PRESS" :
|
|
aEvent->type == GDK_KEY_RELEASE ? "GDK_KEY_RELEASE" : "Unknown",
|
|
gdk_keyval_name(aEvent->keyval),
|
|
gdk_keyval_to_unicode(aEvent->keyval)));
|
|
|
|
if (aCaller != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, the caller isn't focused window, mLastFocusedWindow=%p",
|
|
mLastFocusedWindow));
|
|
return false;
|
|
}
|
|
|
|
GtkIMContext* im = GetContext();
|
|
if (NS_UNLIKELY(!im)) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no context"));
|
|
return false;
|
|
}
|
|
|
|
mKeyDownEventWasSent = aKeyDownEventWasSent;
|
|
mFilterKeyEvent = true;
|
|
mProcessingKeyEvent = aEvent;
|
|
gboolean isFiltered = gtk_im_context_filter_keypress(im, aEvent);
|
|
mProcessingKeyEvent = nsnull;
|
|
|
|
// We filter the key event if the event was not committed (because
|
|
// it's probably part of a composition) or if the key event was
|
|
// committed _and_ changed. This way we still let key press
|
|
// events go through as simple key press events instead of
|
|
// composed characters.
|
|
bool filterThisEvent = isFiltered && mFilterKeyEvent;
|
|
|
|
if (mIsComposing && !isFiltered) {
|
|
if (aEvent->type == GDK_KEY_PRESS) {
|
|
if (!mDispatchedCompositionString.IsEmpty()) {
|
|
// If there is composition string, we shouldn't dispatch
|
|
// any keydown events during composition.
|
|
filterThisEvent = true;
|
|
} else {
|
|
// A Hangul input engine for SCIM doesn't emit preedit_end
|
|
// signal even when composition string becomes empty. On the
|
|
// other hand, we should allow to make composition with empty
|
|
// string for other languages because there *might* be such
|
|
// IM. For compromising this issue, we should dispatch
|
|
// compositionend event, however, we don't need to reset IM
|
|
// actually.
|
|
CommitCompositionBy(EmptyString());
|
|
filterThisEvent = false;
|
|
}
|
|
} else {
|
|
// Key release event may not be consumed by IM, however, we
|
|
// shouldn't dispatch any keyup event during composition.
|
|
filterThisEvent = true;
|
|
}
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" filterThisEvent=%s (isFiltered=%s, mFilterKeyEvent=%s)",
|
|
filterThisEvent ? "TRUE" : "FALSE", isFiltered ? "YES" : "NO",
|
|
mFilterKeyEvent ? "YES" : "NO"));
|
|
|
|
return filterThisEvent;
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnFocusChangeInGecko(bool aFocus)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnFocusChangeInGecko, aFocus=%s mIsComposing=%s, mIsIMFocused=%s, mIgnoreNativeCompositionEvent=%s",
|
|
this, aFocus ? "YES" : "NO", mIsComposing ? "YES" : "NO",
|
|
mIsIMFocused ? "YES" : "NO",
|
|
mIgnoreNativeCompositionEvent ? "YES" : "NO"));
|
|
if (aFocus) {
|
|
// If we failed to commit forcedely in previous focused editor,
|
|
// we should reopen the gate for native signals in new focused editor.
|
|
mIgnoreNativeCompositionEvent = false;
|
|
}
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::ResetIME()
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): ResetIME, mIsComposing=%s, mIsIMFocused=%s",
|
|
this, mIsComposing ? "YES" : "NO", mIsIMFocused ? "YES" : "NO"));
|
|
|
|
GtkIMContext *im = GetContext();
|
|
if (NS_UNLIKELY(!im)) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no context"));
|
|
return;
|
|
}
|
|
|
|
mIgnoreNativeCompositionEvent = true;
|
|
gtk_im_context_reset(im);
|
|
}
|
|
|
|
nsresult
|
|
nsGtkIMModule::ResetInputState(nsWindow* aCaller)
|
|
{
|
|
if (NS_UNLIKELY(IsDestroyed())) {
|
|
return NS_OK;
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): ResetInputState, aCaller=%p, mIsComposing=%s",
|
|
this, aCaller, mIsComposing ? "YES" : "NO"));
|
|
|
|
if (aCaller != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" WARNING: the caller isn't focused window, mLastFocusedWindow=%p",
|
|
mLastFocusedWindow));
|
|
return NS_OK;
|
|
}
|
|
|
|
if (!mIsComposing) {
|
|
return NS_OK;
|
|
}
|
|
|
|
// XXX We should commit composition ourselves temporary...
|
|
ResetIME();
|
|
CommitCompositionBy(mDispatchedCompositionString);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult
|
|
nsGtkIMModule::CancelIMEComposition(nsWindow* aCaller)
|
|
{
|
|
if (NS_UNLIKELY(IsDestroyed())) {
|
|
return NS_OK;
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): CancelIMEComposition, aCaller=%p",
|
|
this, aCaller));
|
|
|
|
if (aCaller != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, the caller isn't focused window, mLastFocusedWindow=%p",
|
|
mLastFocusedWindow));
|
|
return NS_OK;
|
|
}
|
|
|
|
if (!mIsComposing) {
|
|
return NS_OK;
|
|
}
|
|
|
|
GtkIMContext *im = GetContext();
|
|
if (NS_UNLIKELY(!im)) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no context"));
|
|
return NS_OK;
|
|
}
|
|
|
|
ResetIME();
|
|
CommitCompositionBy(EmptyString());
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::SetInputContext(nsWindow* aCaller,
|
|
const InputContext* aContext,
|
|
const InputContextAction* aAction)
|
|
{
|
|
if (NS_UNLIKELY(IsDestroyed())) {
|
|
return;
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): SetInputContext, aCaller=%p, aState=%s mHTMLInputType=%s",
|
|
this, aCaller, GetEnabledStateName(aContext->mIMEState.mEnabled),
|
|
NS_ConvertUTF16toUTF8(aContext->mHTMLInputType).get()));
|
|
|
|
if (aCaller != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, the caller isn't focused window, mLastFocusedWindow=%p",
|
|
mLastFocusedWindow));
|
|
return;
|
|
}
|
|
|
|
if (!mContext) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no context"));
|
|
return;
|
|
}
|
|
|
|
|
|
if (sLastFocusedModule != this) {
|
|
mInputContext = *aContext;
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" SUCCEEDED, but we're not active"));
|
|
return;
|
|
}
|
|
|
|
bool changingEnabledState =
|
|
aContext->mIMEState.mEnabled != mInputContext.mIMEState.mEnabled;
|
|
|
|
// Release current IME focus if IME is enabled.
|
|
if (changingEnabledState && IsEditable()) {
|
|
ResetInputState(mLastFocusedWindow);
|
|
Blur();
|
|
}
|
|
|
|
mInputContext = *aContext;
|
|
|
|
// Even when aState is not enabled state, we need to set IME focus.
|
|
// Because some IMs are updating the status bar of them at this time.
|
|
// Be aware, don't use aWindow here because this method shouldn't move
|
|
// focus actually.
|
|
if (changingEnabledState) {
|
|
Focus();
|
|
}
|
|
|
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
|
GtkIMContext *im = GetContext();
|
|
if (im) {
|
|
if (IsEnabled()) {
|
|
// Ensure that opening the virtual keyboard is allowed for this specific
|
|
// InputContext depending on the content.ime.strict.policy pref
|
|
if (mInputContext.mIMEState.mEnabled != IMEState::DISABLED &&
|
|
mInputContext.mIMEState.mEnabled != IMEState::PLUGIN &&
|
|
Preferences::GetBool("content.ime.strict_policy", false) &&
|
|
!aAction->ContentGotFocusByTrustedCause() &&
|
|
!aAction->UserMightRequestOpenVKB()) {
|
|
return;
|
|
}
|
|
|
|
// It is not desired that the hildon's autocomplete mechanism displays
|
|
// user previous entered passwds, so lets make completions invisible
|
|
// in these cases.
|
|
int mode;
|
|
g_object_get(im, "hildon-input-mode", &mode, NULL);
|
|
|
|
if (mInputContext.mIMEState.mEnabled == IMEState::ENABLED ||
|
|
mInputContext.mIMEState.mEnabled == IMEState::PLUGIN) {
|
|
mode &= ~HILDON_GTK_INPUT_MODE_INVISIBLE;
|
|
} else if (mInputContext.mIMEState.mEnabled == IMEState::PASSWORD) {
|
|
mode |= HILDON_GTK_INPUT_MODE_INVISIBLE;
|
|
}
|
|
|
|
// Turn off auto-capitalization for editboxes
|
|
mode &= ~HILDON_GTK_INPUT_MODE_AUTOCAP;
|
|
|
|
// Turn off predictive dictionaries for editboxes
|
|
mode &= ~HILDON_GTK_INPUT_MODE_DICTIONARY;
|
|
|
|
g_object_set(im, "hildon-input-mode",
|
|
(HildonGtkInputMode)mode, NULL);
|
|
gIsVirtualKeyboardOpened = true;
|
|
hildon_gtk_im_context_show(im);
|
|
} else {
|
|
gIsVirtualKeyboardOpened = false;
|
|
hildon_gtk_im_context_hide(im);
|
|
}
|
|
}
|
|
|
|
nsCOMPtr<nsIObserverService> observerService =
|
|
mozilla::services::GetObserverService();
|
|
if (observerService) {
|
|
nsAutoString rectBuf;
|
|
PRInt32 x, y, w, h;
|
|
gdk_window_get_position(aCaller->GetGdkWindow(), &x, &y);
|
|
gdk_window_get_size(aCaller->GetGdkWindow(), &w, &h);
|
|
rectBuf.Assign(NS_LITERAL_STRING("{\"left\": "));
|
|
rectBuf.AppendInt(x);
|
|
rectBuf.Append(NS_LITERAL_STRING(", \"top\": "));
|
|
rectBuf.AppendInt(y);
|
|
rectBuf.Append(NS_LITERAL_STRING(", \"right\": "));
|
|
rectBuf.AppendInt(w);
|
|
rectBuf.Append(NS_LITERAL_STRING(", \"bottom\": "));
|
|
rectBuf.AppendInt(h);
|
|
rectBuf.Append(NS_LITERAL_STRING("}"));
|
|
observerService->NotifyObservers(nsnull, "softkb-change",
|
|
rectBuf.get());
|
|
}
|
|
#endif
|
|
}
|
|
|
|
InputContext
|
|
nsGtkIMModule::GetInputContext()
|
|
{
|
|
mInputContext.mIMEState.mOpen = IMEState::OPEN_STATE_NOT_SUPPORTED;
|
|
return mInputContext;
|
|
}
|
|
|
|
/* static */
|
|
bool
|
|
nsGtkIMModule::IsVirtualKeyboardOpened()
|
|
{
|
|
#ifdef MOZ_PLATFORM_MAEMO
|
|
return gIsVirtualKeyboardOpened;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
GtkIMContext*
|
|
nsGtkIMModule::GetContext()
|
|
{
|
|
if (IsEnabled()) {
|
|
return mContext;
|
|
}
|
|
|
|
#ifndef NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
if (mInputContext.mIMEState.mEnabled == IMEState::PASSWORD) {
|
|
return mSimpleContext;
|
|
}
|
|
#endif // NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
|
|
return mDummyContext;
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::IsEnabled()
|
|
{
|
|
return mInputContext.mIMEState.mEnabled == IMEState::ENABLED ||
|
|
#ifdef NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
mInputContext.mIMEState.mEnabled == IMEState::PASSWORD ||
|
|
#endif // NS_IME_ENABLED_ON_PASSWORD_FIELD
|
|
mInputContext.mIMEState.mEnabled == IMEState::PLUGIN;
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::IsEditable()
|
|
{
|
|
return mInputContext.mIMEState.mEnabled == IMEState::ENABLED ||
|
|
mInputContext.mIMEState.mEnabled == IMEState::PLUGIN ||
|
|
mInputContext.mIMEState.mEnabled == IMEState::PASSWORD;
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::Focus()
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): Focus, sLastFocusedModule=%p",
|
|
this, sLastFocusedModule));
|
|
|
|
if (mIsIMFocused) {
|
|
NS_ASSERTION(sLastFocusedModule == this,
|
|
"We're not active, but the IM was focused?");
|
|
return;
|
|
}
|
|
|
|
GtkIMContext *im = GetContext();
|
|
if (!im) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no context"));
|
|
return;
|
|
}
|
|
|
|
if (sLastFocusedModule && sLastFocusedModule != this) {
|
|
sLastFocusedModule->Blur();
|
|
}
|
|
|
|
sLastFocusedModule = this;
|
|
|
|
gtk_im_context_focus_in(im);
|
|
mIsIMFocused = true;
|
|
|
|
if (!IsEnabled()) {
|
|
// We should release IME focus for uim and scim.
|
|
// These IMs are using snooper that is released at losing focus.
|
|
Blur();
|
|
}
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::Blur()
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): Blur, mIsIMFocused=%s",
|
|
this, mIsIMFocused ? "YES" : "NO"));
|
|
|
|
if (!mIsIMFocused) {
|
|
return;
|
|
}
|
|
|
|
GtkIMContext *im = GetContext();
|
|
if (!im) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no context"));
|
|
return;
|
|
}
|
|
|
|
gtk_im_context_focus_out(im);
|
|
mIsIMFocused = false;
|
|
}
|
|
|
|
/* static */
|
|
void
|
|
nsGtkIMModule::OnStartCompositionCallback(GtkIMContext *aContext,
|
|
nsGtkIMModule* aModule)
|
|
{
|
|
aModule->OnStartCompositionNative(aContext);
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnStartCompositionNative(GtkIMContext *aContext)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnStartCompositionNative, aContext=%p",
|
|
this, aContext));
|
|
|
|
// See bug 472635, we should do nothing if IM context doesn't match.
|
|
if (GetContext() != aContext) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, given context doesn't match, GetContext()=%p",
|
|
GetContext()));
|
|
return;
|
|
}
|
|
|
|
if (!DispatchCompositionStart()) {
|
|
return;
|
|
}
|
|
SetCursorPosition(mCompositionStart);
|
|
}
|
|
|
|
/* static */
|
|
void
|
|
nsGtkIMModule::OnEndCompositionCallback(GtkIMContext *aContext,
|
|
nsGtkIMModule* aModule)
|
|
{
|
|
aModule->OnEndCompositionNative(aContext);
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnEndCompositionNative(GtkIMContext *aContext)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnEndCompositionNative, aContext=%p",
|
|
this, aContext));
|
|
|
|
// See bug 472635, we should do nothing if IM context doesn't match.
|
|
if (GetContext() != aContext) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, given context doesn't match, GetContext()=%p",
|
|
GetContext()));
|
|
return;
|
|
}
|
|
|
|
bool shouldIgnoreThisEvent = ShouldIgnoreNativeCompositionEvent();
|
|
|
|
// Finish the cancelling mode here rather than DispatchCompositionEnd()
|
|
// because DispatchCompositionEnd() is called ourselves when we need to
|
|
// commit the composition string *before* the focus moves completely.
|
|
// Note that the native commit can be fired *after* ResetIME().
|
|
mIgnoreNativeCompositionEvent = false;
|
|
|
|
if (!mIsComposing || shouldIgnoreThisEvent) {
|
|
// If we already handled the commit event, we should do nothing here.
|
|
return;
|
|
}
|
|
|
|
// Be aware, widget can be gone
|
|
DispatchCompositionEnd();
|
|
}
|
|
|
|
/* static */
|
|
void
|
|
nsGtkIMModule::OnChangeCompositionCallback(GtkIMContext *aContext,
|
|
nsGtkIMModule* aModule)
|
|
{
|
|
aModule->OnChangeCompositionNative(aContext);
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnChangeCompositionNative(GtkIMContext *aContext)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnChangeCompositionNative, aContext=%p",
|
|
this, aContext));
|
|
|
|
// See bug 472635, we should do nothing if IM context doesn't match.
|
|
if (GetContext() != aContext) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, given context doesn't match, GetContext()=%p",
|
|
GetContext()));
|
|
return;
|
|
}
|
|
|
|
if (ShouldIgnoreNativeCompositionEvent()) {
|
|
return;
|
|
}
|
|
|
|
nsAutoString compositionString;
|
|
GetCompositionString(compositionString);
|
|
if (!mIsComposing && compositionString.IsEmpty()) {
|
|
mDispatchedCompositionString.Truncate();
|
|
return; // Don't start the composition with empty string.
|
|
}
|
|
|
|
// Be aware, widget can be gone
|
|
DispatchTextEvent(compositionString, true);
|
|
}
|
|
|
|
/* static */
|
|
gboolean
|
|
nsGtkIMModule::OnRetrieveSurroundingCallback(GtkIMContext *aContext,
|
|
nsGtkIMModule *aModule)
|
|
{
|
|
return aModule->OnRetrieveSurroundingNative(aContext);
|
|
}
|
|
|
|
gboolean
|
|
nsGtkIMModule::OnRetrieveSurroundingNative(GtkIMContext *aContext)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnRetrieveSurroundingNative, aContext=%p, current context=%p",
|
|
this, aContext, GetContext()));
|
|
|
|
if (GetContext() != aContext) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, given context doesn't match, GetContext()=%p",
|
|
GetContext()));
|
|
return FALSE;
|
|
}
|
|
|
|
nsAutoString uniStr;
|
|
PRUint32 cursorPos;
|
|
if (NS_FAILED(GetCurrentParagraph(uniStr, cursorPos))) {
|
|
return FALSE;
|
|
}
|
|
|
|
glong wbytes;
|
|
gchar *utf8_str = g_utf16_to_utf8((const gunichar2 *)uniStr.get(),
|
|
uniStr.Length(), NULL, &wbytes, NULL);
|
|
if (utf8_str == NULL) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" failed to convert utf16 string to utf8"));
|
|
return FALSE;
|
|
}
|
|
gtk_im_context_set_surrounding(aContext, utf8_str, wbytes,
|
|
g_utf8_offset_to_pointer(utf8_str, cursorPos) - utf8_str);
|
|
g_free(utf8_str);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* static */
|
|
gboolean
|
|
nsGtkIMModule::OnDeleteSurroundingCallback(GtkIMContext *aContext,
|
|
gint aOffset,
|
|
gint aNChars,
|
|
nsGtkIMModule *aModule)
|
|
{
|
|
return aModule->OnDeleteSurroundingNative(aContext, aOffset, aNChars);
|
|
}
|
|
|
|
gboolean
|
|
nsGtkIMModule::OnDeleteSurroundingNative(GtkIMContext *aContext,
|
|
gint aOffset,
|
|
gint aNChars)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnDeleteSurroundingNative, aContext=%p, current context=%p",
|
|
this, aContext, GetContext()));
|
|
|
|
if (GetContext() != aContext) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, given context doesn't match, GetContext()=%p",
|
|
GetContext()));
|
|
return FALSE;
|
|
}
|
|
|
|
if (NS_SUCCEEDED(DeleteText(aOffset, (PRUint32)aNChars))) {
|
|
return TRUE;
|
|
}
|
|
|
|
// failed
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, cannot delete text"));
|
|
return FALSE;
|
|
}
|
|
|
|
/* static */
|
|
void
|
|
nsGtkIMModule::OnCommitCompositionCallback(GtkIMContext *aContext,
|
|
const gchar *aString,
|
|
nsGtkIMModule* aModule)
|
|
{
|
|
aModule->OnCommitCompositionNative(aContext, aString);
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::OnCommitCompositionNative(GtkIMContext *aContext,
|
|
const gchar *aUTF8Char)
|
|
{
|
|
const gchar emptyStr = 0;
|
|
const gchar *commitString = aUTF8Char ? aUTF8Char : &emptyStr;
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnCommitCompositionNative, aContext=%p, current context=%p, commitString=\"%s\"",
|
|
this, aContext, GetContext(), commitString));
|
|
|
|
// See bug 472635, we should do nothing if IM context doesn't match.
|
|
if (GetContext() != aContext) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, given context doesn't match, GetContext()=%p",
|
|
GetContext()));
|
|
return;
|
|
}
|
|
|
|
// If we are not in composition and committing with empty string,
|
|
// we need to do nothing because if we continued to handle this
|
|
// signal, we would dispatch compositionstart, text, compositionend
|
|
// events with empty string. Of course, they are unnecessary events
|
|
// for Web applications and our editor.
|
|
if (!mIsComposing && !commitString[0]) {
|
|
return;
|
|
}
|
|
|
|
if (ShouldIgnoreNativeCompositionEvent()) {
|
|
return;
|
|
}
|
|
|
|
// If IME doesn't change their keyevent that generated this commit,
|
|
// don't send it through XIM - just send it as a normal key press
|
|
// event.
|
|
if (!mIsComposing && mProcessingKeyEvent) {
|
|
char keyval_utf8[8]; /* should have at least 6 bytes of space */
|
|
gint keyval_utf8_len;
|
|
guint32 keyval_unicode;
|
|
|
|
keyval_unicode = gdk_keyval_to_unicode(mProcessingKeyEvent->keyval);
|
|
keyval_utf8_len = g_unichar_to_utf8(keyval_unicode, keyval_utf8);
|
|
keyval_utf8[keyval_utf8_len] = '\0';
|
|
|
|
if (!strcmp(commitString, keyval_utf8)) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): OnCommitCompositionNative, we'll send normal key event",
|
|
this));
|
|
mFilterKeyEvent = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
NS_ConvertUTF8toUTF16 str(commitString);
|
|
CommitCompositionBy(str); // Be aware, widget can be gone
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::CommitCompositionBy(const nsAString& aString)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): CommitCompositionBy, aString=\"%s\", "
|
|
"mDispatchedCompositionString=\"%s\"",
|
|
this, NS_ConvertUTF16toUTF8(aString).get(),
|
|
NS_ConvertUTF16toUTF8(mDispatchedCompositionString).get()));
|
|
|
|
if (!DispatchTextEvent(aString, false)) {
|
|
return false;
|
|
}
|
|
// We should dispatch the compositionend event here because some IMEs
|
|
// might not fire "preedit_end" native event.
|
|
return DispatchCompositionEnd(); // Be aware, widget can be gone
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::GetCompositionString(nsAString &aCompositionString)
|
|
{
|
|
gchar *preedit_string;
|
|
gint cursor_pos;
|
|
PangoAttrList *feedback_list;
|
|
gtk_im_context_get_preedit_string(GetContext(), &preedit_string,
|
|
&feedback_list, &cursor_pos);
|
|
if (preedit_string && *preedit_string) {
|
|
CopyUTF8toUTF16(preedit_string, aCompositionString);
|
|
} else {
|
|
aCompositionString.Truncate();
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): GetCompositionString, result=\"%s\"",
|
|
this, preedit_string));
|
|
|
|
pango_attr_list_unref(feedback_list);
|
|
g_free(preedit_string);
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::DispatchCompositionStart()
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): DispatchCompositionStart", this));
|
|
|
|
if (mIsComposing) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" WARNING, we're already in composition"));
|
|
return true;
|
|
}
|
|
|
|
if (!mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no focused window in this module"));
|
|
return false;
|
|
}
|
|
|
|
nsEventStatus status;
|
|
nsQueryContentEvent selection(true, NS_QUERY_SELECTED_TEXT,
|
|
mLastFocusedWindow);
|
|
InitEvent(selection);
|
|
mLastFocusedWindow->DispatchEvent(&selection, status);
|
|
|
|
if (!selection.mSucceeded || selection.mReply.mOffset == PR_UINT32_MAX) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, cannot query the selection offset"));
|
|
return false;
|
|
}
|
|
|
|
mCompositionStart = selection.mReply.mOffset;
|
|
mDispatchedCompositionString.Truncate();
|
|
|
|
if (mProcessingKeyEvent && !mKeyDownEventWasSent &&
|
|
mProcessingKeyEvent->type == GDK_KEY_PRESS) {
|
|
// If this composition is started by a native keydown event, we need to
|
|
// dispatch our keydown event here (before composition start).
|
|
nsCOMPtr<nsIWidget> kungFuDeathGrip = mLastFocusedWindow;
|
|
bool isCancelled;
|
|
mLastFocusedWindow->DispatchKeyDownEvent(mProcessingKeyEvent,
|
|
&isCancelled);
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" keydown event is dispatched"));
|
|
if (static_cast<nsWindow*>(kungFuDeathGrip.get())->IsDestroyed() ||
|
|
kungFuDeathGrip != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" NOTE, the focused widget was destroyed/changed by keydown event"));
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (mIgnoreNativeCompositionEvent) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" WARNING, mIgnoreNativeCompositionEvent is already TRUE, but we forcedly reset"));
|
|
mIgnoreNativeCompositionEvent = false;
|
|
}
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" mCompositionStart=%u", mCompositionStart));
|
|
mIsComposing = true;
|
|
nsCompositionEvent compEvent(true, NS_COMPOSITION_START,
|
|
mLastFocusedWindow);
|
|
InitEvent(compEvent);
|
|
nsCOMPtr<nsIWidget> kungFuDeathGrip = mLastFocusedWindow;
|
|
mLastFocusedWindow->DispatchEvent(&compEvent, status);
|
|
if (static_cast<nsWindow*>(kungFuDeathGrip.get())->IsDestroyed() ||
|
|
kungFuDeathGrip != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" NOTE, the focused widget was destroyed/changed by compositionstart event"));
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::DispatchCompositionEnd()
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): DispatchCompositionEnd, "
|
|
"mDispatchedCompositionString=\"%s\"",
|
|
this, NS_ConvertUTF16toUTF8(mDispatchedCompositionString).get()));
|
|
|
|
if (!mIsComposing) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" WARNING, we have alrady finished the composition"));
|
|
return false;
|
|
}
|
|
|
|
if (!mLastFocusedWindow) {
|
|
mDispatchedCompositionString.Truncate();
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no focused window in this module"));
|
|
return false;
|
|
}
|
|
|
|
nsCompositionEvent compEvent(true, NS_COMPOSITION_END,
|
|
mLastFocusedWindow);
|
|
InitEvent(compEvent);
|
|
compEvent.data = mDispatchedCompositionString;
|
|
nsEventStatus status;
|
|
nsCOMPtr<nsIWidget> kungFuDeathGrip = mLastFocusedWindow;
|
|
mLastFocusedWindow->DispatchEvent(&compEvent, status);
|
|
mIsComposing = false;
|
|
mCompositionStart = PR_UINT32_MAX;
|
|
mDispatchedCompositionString.Truncate();
|
|
if (static_cast<nsWindow*>(kungFuDeathGrip.get())->IsDestroyed() ||
|
|
kungFuDeathGrip != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" NOTE, the focused widget was destroyed/changed by compositionend event"));
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::DispatchTextEvent(const nsAString &aCompositionString,
|
|
bool aCheckAttr)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): DispatchTextEvent, aCheckAttr=%s",
|
|
this, aCheckAttr ? "TRUE" : "FALSE"));
|
|
|
|
if (!mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no focused window in this module"));
|
|
return false;
|
|
}
|
|
|
|
if (!mIsComposing) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" The composition wasn't started, force starting..."));
|
|
nsCOMPtr<nsIWidget> kungFuDeathGrip = mLastFocusedWindow;
|
|
if (!DispatchCompositionStart()) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
nsEventStatus status;
|
|
nsRefPtr<nsWindow> lastFocusedWindow = mLastFocusedWindow;
|
|
|
|
if (aCompositionString != mDispatchedCompositionString) {
|
|
nsCompositionEvent compositionUpdate(true, NS_COMPOSITION_UPDATE,
|
|
mLastFocusedWindow);
|
|
InitEvent(compositionUpdate);
|
|
compositionUpdate.data = aCompositionString;
|
|
mDispatchedCompositionString = aCompositionString;
|
|
mLastFocusedWindow->DispatchEvent(&compositionUpdate, status);
|
|
if (lastFocusedWindow->IsDestroyed() ||
|
|
lastFocusedWindow != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" NOTE, the focused widget was destroyed/changed by compositionupdate"));
|
|
return false;
|
|
}
|
|
}
|
|
|
|
nsTextEvent textEvent(true, NS_TEXT_TEXT, mLastFocusedWindow);
|
|
InitEvent(textEvent);
|
|
|
|
PRUint32 targetOffset = mCompositionStart;
|
|
|
|
nsAutoTArray<nsTextRange, 4> textRanges;
|
|
if (aCheckAttr) {
|
|
// NOTE: SetTextRangeList() assumes that mDispatchedCompositionString
|
|
// has been updated already.
|
|
SetTextRangeList(textRanges);
|
|
for (PRUint32 i = 0; i < textRanges.Length(); i++) {
|
|
nsTextRange& range = textRanges[i];
|
|
if (range.mRangeType == NS_TEXTRANGE_SELECTEDRAWTEXT ||
|
|
range.mRangeType == NS_TEXTRANGE_SELECTEDCONVERTEDTEXT) {
|
|
targetOffset += range.mStartOffset;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
textEvent.rangeCount = textRanges.Length();
|
|
textEvent.rangeArray = textRanges.Elements();
|
|
textEvent.theText = mDispatchedCompositionString.get();
|
|
|
|
mLastFocusedWindow->DispatchEvent(&textEvent, status);
|
|
if (lastFocusedWindow->IsDestroyed() ||
|
|
lastFocusedWindow != mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" NOTE, the focused widget was destroyed/changed by text event"));
|
|
return false;
|
|
}
|
|
|
|
SetCursorPosition(targetOffset);
|
|
|
|
return true;
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::SetTextRangeList(nsTArray<nsTextRange> &aTextRangeList)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): SetTextRangeList", this));
|
|
|
|
NS_PRECONDITION(aTextRangeList.IsEmpty(), "aTextRangeList must be empty");
|
|
|
|
gchar *preedit_string;
|
|
gint cursor_pos;
|
|
PangoAttrList *feedback_list;
|
|
gtk_im_context_get_preedit_string(GetContext(), &preedit_string,
|
|
&feedback_list, &cursor_pos);
|
|
if (!preedit_string || !*preedit_string) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" preedit_string is null"));
|
|
pango_attr_list_unref(feedback_list);
|
|
g_free(preedit_string);
|
|
return;
|
|
}
|
|
|
|
PangoAttrIterator* iter;
|
|
iter = pango_attr_list_get_iterator(feedback_list);
|
|
if (!iter) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, iterator couldn't be allocated"));
|
|
pango_attr_list_unref(feedback_list);
|
|
g_free(preedit_string);
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* Depend on gtk2's implementation on XIM support.
|
|
* In aFeedback got from gtk2, there are only three types of data:
|
|
* PANGO_ATTR_UNDERLINE, PANGO_ATTR_FOREGROUND, PANGO_ATTR_BACKGROUND.
|
|
* Corresponding to XIMUnderline, XIMReverse.
|
|
* Don't take PANGO_ATTR_BACKGROUND into account, since
|
|
* PANGO_ATTR_BACKGROUND and PANGO_ATTR_FOREGROUND are always
|
|
* a couple.
|
|
*/
|
|
do {
|
|
PangoAttribute* attrUnderline =
|
|
pango_attr_iterator_get(iter, PANGO_ATTR_UNDERLINE);
|
|
PangoAttribute* attrForeground =
|
|
pango_attr_iterator_get(iter, PANGO_ATTR_FOREGROUND);
|
|
if (!attrUnderline && !attrForeground) {
|
|
continue;
|
|
}
|
|
|
|
// Get the range of the current attribute(s)
|
|
gint start, end;
|
|
pango_attr_iterator_range(iter, &start, &end);
|
|
|
|
nsTextRange range;
|
|
// XIMReverse | XIMUnderline
|
|
if (attrUnderline && attrForeground) {
|
|
range.mRangeType = NS_TEXTRANGE_SELECTEDCONVERTEDTEXT;
|
|
}
|
|
// XIMUnderline
|
|
else if (attrUnderline) {
|
|
range.mRangeType = NS_TEXTRANGE_CONVERTEDTEXT;
|
|
}
|
|
// XIMReverse
|
|
else if (attrForeground) {
|
|
range.mRangeType = NS_TEXTRANGE_SELECTEDRAWTEXT;
|
|
} else {
|
|
range.mRangeType = NS_TEXTRANGE_RAWINPUT;
|
|
}
|
|
|
|
gunichar2* uniStr = nsnull;
|
|
if (start == 0) {
|
|
range.mStartOffset = 0;
|
|
} else {
|
|
glong uniStrLen;
|
|
uniStr = g_utf8_to_utf16(preedit_string, start,
|
|
NULL, &uniStrLen, NULL);
|
|
if (uniStr) {
|
|
range.mStartOffset = uniStrLen;
|
|
g_free(uniStr);
|
|
uniStr = nsnull;
|
|
}
|
|
}
|
|
|
|
glong uniStrLen;
|
|
uniStr = g_utf8_to_utf16(preedit_string + start, end - start,
|
|
NULL, &uniStrLen, NULL);
|
|
if (!uniStr) {
|
|
range.mEndOffset = range.mStartOffset;
|
|
} else {
|
|
range.mEndOffset = range.mStartOffset + uniStrLen;
|
|
g_free(uniStr);
|
|
uniStr = nsnull;
|
|
}
|
|
|
|
aTextRangeList.AppendElement(range);
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" mStartOffset=%u, mEndOffset=%u, mRangeType=%s",
|
|
range.mStartOffset, range.mEndOffset,
|
|
GetRangeTypeName(range.mRangeType)));
|
|
} while (pango_attr_iterator_next(iter));
|
|
|
|
nsTextRange range;
|
|
if (cursor_pos < 0) {
|
|
range.mStartOffset = 0;
|
|
} else if (PRUint32(cursor_pos) > mDispatchedCompositionString.Length()) {
|
|
range.mStartOffset = mDispatchedCompositionString.Length();
|
|
} else {
|
|
range.mStartOffset = PRUint32(cursor_pos);
|
|
}
|
|
range.mEndOffset = range.mStartOffset;
|
|
range.mRangeType = NS_TEXTRANGE_CARETPOSITION;
|
|
aTextRangeList.AppendElement(range);
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" mStartOffset=%u, mEndOffset=%u, mRangeType=%s",
|
|
range.mStartOffset, range.mEndOffset,
|
|
GetRangeTypeName(range.mRangeType)));
|
|
|
|
pango_attr_iterator_destroy(iter);
|
|
pango_attr_list_unref(feedback_list);
|
|
g_free(preedit_string);
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::SetCursorPosition(PRUint32 aTargetOffset)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): SetCursorPosition, aTargetOffset=%u",
|
|
this, aTargetOffset));
|
|
|
|
if (aTargetOffset == PR_UINT32_MAX) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, aTargetOffset is wrong offset"));
|
|
return;
|
|
}
|
|
|
|
if (!mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no focused window"));
|
|
return;
|
|
}
|
|
|
|
GtkIMContext *im = GetContext();
|
|
if (!im) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no context"));
|
|
return;
|
|
}
|
|
|
|
nsQueryContentEvent charRect(true, NS_QUERY_TEXT_RECT,
|
|
mLastFocusedWindow);
|
|
charRect.InitForQueryTextRect(aTargetOffset, 1);
|
|
InitEvent(charRect);
|
|
nsEventStatus status;
|
|
mLastFocusedWindow->DispatchEvent(&charRect, status);
|
|
if (!charRect.mSucceeded) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, NS_QUERY_TEXT_RECT was failed"));
|
|
return;
|
|
}
|
|
nsWindow* rootWindow =
|
|
static_cast<nsWindow*>(mLastFocusedWindow->GetTopLevelWidget());
|
|
|
|
// Get the position of the rootWindow in screen.
|
|
gint rootX, rootY;
|
|
gdk_window_get_origin(rootWindow->GetGdkWindow(), &rootX, &rootY);
|
|
|
|
// Get the position of IM context owner window in screen.
|
|
gint ownerX, ownerY;
|
|
gdk_window_get_origin(mOwnerWindow->GetGdkWindow(), &ownerX, &ownerY);
|
|
|
|
// Compute the caret position in the IM owner window.
|
|
GdkRectangle area;
|
|
area.x = charRect.mReply.mRect.x + rootX - ownerX;
|
|
area.y = charRect.mReply.mRect.y + rootY - ownerY;
|
|
area.width = 0;
|
|
area.height = charRect.mReply.mRect.height;
|
|
|
|
gtk_im_context_set_cursor_location(im, &area);
|
|
}
|
|
|
|
nsresult
|
|
nsGtkIMModule::GetCurrentParagraph(nsAString& aText, PRUint32& aCursorPos)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): GetCurrentParagraph", this));
|
|
|
|
if (!mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no focused window in this module"));
|
|
return NS_ERROR_NULL_POINTER;
|
|
}
|
|
|
|
nsEventStatus status;
|
|
|
|
// Query cursor position & selection
|
|
nsQueryContentEvent querySelectedTextEvent(true,
|
|
NS_QUERY_SELECTED_TEXT,
|
|
mLastFocusedWindow);
|
|
mLastFocusedWindow->DispatchEvent(&querySelectedTextEvent, status);
|
|
NS_ENSURE_TRUE(querySelectedTextEvent.mSucceeded, NS_ERROR_FAILURE);
|
|
|
|
PRUint32 selOffset = querySelectedTextEvent.mReply.mOffset;
|
|
PRUint32 selLength = querySelectedTextEvent.mReply.mString.Length();
|
|
|
|
// XXX nsString::Find and nsString::RFind take PRInt32 for offset, so,
|
|
// we cannot support this request when the current offset is larger
|
|
// than PR_INT32_MAX.
|
|
if (selOffset > PR_INT32_MAX || selLength > PR_INT32_MAX ||
|
|
selOffset + selLength > PR_INT32_MAX) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, The selection is out of range"));
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" selOffset=%u, selLength=%u",
|
|
selOffset, selLength));
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
// Get all text contents of the focused editor
|
|
nsQueryContentEvent queryTextContentEvent(true,
|
|
NS_QUERY_TEXT_CONTENT,
|
|
mLastFocusedWindow);
|
|
queryTextContentEvent.InitForQueryTextContent(0, PR_UINT32_MAX);
|
|
mLastFocusedWindow->DispatchEvent(&queryTextContentEvent, status);
|
|
NS_ENSURE_TRUE(queryTextContentEvent.mSucceeded, NS_ERROR_FAILURE);
|
|
|
|
nsAutoString textContent(queryTextContentEvent.mReply.mString);
|
|
if (selOffset + selLength > textContent.Length()) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, The selection is invalid"));
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" selOffset=%u, selLength=%u, textContent.Length()=%u",
|
|
selOffset, selLength, textContent.Length()));
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
|
|
// Get only the focused paragraph, by looking for newlines
|
|
PRInt32 parStart = (selOffset == 0) ? 0 :
|
|
textContent.RFind("\n", false, selOffset - 1, -1) + 1;
|
|
PRInt32 parEnd = textContent.Find("\n", false, selOffset + selLength, -1);
|
|
if (parEnd < 0) {
|
|
parEnd = textContent.Length();
|
|
}
|
|
aText = nsDependentSubstring(textContent, parStart, parEnd - parStart);
|
|
aCursorPos = selOffset - PRUint32(parStart);
|
|
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" aText.Length()=%u, aCursorPos=%u", aText.Length(), aCursorPos));
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult
|
|
nsGtkIMModule::DeleteText(const PRInt32 aOffset, const PRUint32 aNChars)
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): DeleteText, aOffset=%d, aNChars=%d",
|
|
this, aOffset, aNChars));
|
|
|
|
if (!mLastFocusedWindow) {
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
(" FAILED, there are no focused window in this module"));
|
|
return NS_ERROR_NULL_POINTER;
|
|
}
|
|
|
|
nsEventStatus status;
|
|
|
|
// Query cursor position & selection
|
|
nsQueryContentEvent querySelectedTextEvent(true,
|
|
NS_QUERY_SELECTED_TEXT,
|
|
mLastFocusedWindow);
|
|
mLastFocusedWindow->DispatchEvent(&querySelectedTextEvent, status);
|
|
NS_ENSURE_TRUE(querySelectedTextEvent.mSucceeded, NS_ERROR_FAILURE);
|
|
|
|
// Set selection to delete
|
|
nsSelectionEvent selectionEvent(true, NS_SELECTION_SET,
|
|
mLastFocusedWindow);
|
|
selectionEvent.mOffset = querySelectedTextEvent.mReply.mOffset + aOffset;
|
|
selectionEvent.mLength = aNChars;
|
|
selectionEvent.mReversed = false;
|
|
selectionEvent.mExpandToClusterBoundary = false;
|
|
mLastFocusedWindow->DispatchEvent(&selectionEvent, status);
|
|
NS_ENSURE_TRUE(selectionEvent.mSucceeded, NS_ERROR_FAILURE);
|
|
|
|
// Delete the selection
|
|
nsContentCommandEvent contentCommandEvent(true,
|
|
NS_CONTENT_COMMAND_DELETE,
|
|
mLastFocusedWindow);
|
|
mLastFocusedWindow->DispatchEvent(&contentCommandEvent, status);
|
|
NS_ENSURE_TRUE(contentCommandEvent.mSucceeded, NS_ERROR_FAILURE);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
void
|
|
nsGtkIMModule::InitEvent(nsGUIEvent &aEvent)
|
|
{
|
|
aEvent.time = PR_Now() / 1000;
|
|
}
|
|
|
|
bool
|
|
nsGtkIMModule::ShouldIgnoreNativeCompositionEvent()
|
|
{
|
|
PR_LOG(gGtkIMLog, PR_LOG_ALWAYS,
|
|
("GtkIMModule(%p): ShouldIgnoreNativeCompositionEvent, mLastFocusedWindow=%p, mIgnoreNativeCompositionEvent=%s",
|
|
this, mLastFocusedWindow,
|
|
mIgnoreNativeCompositionEvent ? "YES" : "NO"));
|
|
|
|
if (!mLastFocusedWindow) {
|
|
return true; // cannot continue
|
|
}
|
|
|
|
return mIgnoreNativeCompositionEvent;
|
|
}
|