diff --git a/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp b/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp index b2b5b560819..7da8db209f4 100644 --- a/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp +++ b/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp @@ -60,6 +60,7 @@ #include "nsIChannel.h" #include "nsIWidget.h" #include "nsIWebBrowserPrint.h" +#include "nsIMacTextInputEventSink.h" // Local #include "ApplIDs.h" @@ -1490,3 +1491,86 @@ CBrowserShell::DoDragReceive( DragReference inDragRef ) sDragHelper->Drop ( inDragRef, mEventSink, &dragAccepted ); } } + +#pragma mark - + +OSStatus CBrowserShell::HandleUpdateActiveInputArea( + const nsAString& text, + PRInt16 script, + PRInt16 language, + PRInt32 fixLen, + const TextRangeArray * hiliteRng +) +{ + nsCOMPtr tieSink; + tieSink = do_QueryInterface(mEventSink); + if (!tieSink) + return eventNotHandledErr; + + OSStatus err = noErr; + nsresult res = tieSink->HandleUpdateActiveInputArea( text, + script, language, + fixLen, (void*)hiliteRng, + &err); + if (noErr != err) + return err; + return NS_FAILED(res) ? eventNotHandledErr : noErr; +} + +OSStatus CBrowserShell::HandleUnicodeForKeyEvent( + const nsAString& text, + PRInt16 script, + PRInt16 language, + const EventRecord * keyboardEvent) +{ + nsCOMPtr tieSink; + tieSink = do_QueryInterface(mEventSink); + if (!tieSink) + return eventNotHandledErr; + + OSStatus err = noErr; + nsresult res = tieSink->HandleUnicodeForKeyEvent( text, + script, language, + (void*)keyboardEvent, + &err); + if (noErr != err) + return err; + return NS_FAILED(res) ? eventNotHandledErr : noErr; +} + +OSStatus CBrowserShell::HandleOffsetToPos( + PRInt32 offset, + PRInt16 *pointX, + PRInt16 *pointY) +{ + nsCOMPtr tieSink; + tieSink = do_QueryInterface(mEventSink); + if (!tieSink) + return eventNotHandledErr; + + OSStatus err = noErr; + nsresult res = tieSink->HandleOffsetToPos( offset, pointX, pointY, &err); + if (noErr != err) + return err; + return NS_FAILED(res) ? eventNotHandledErr : noErr; +} + +OSStatus CBrowserShell::HandlePosToOffset( + PRInt16 currentPointX, + PRInt16 currentPointY, + PRInt32 *offset, + PRInt16 *regionClass +) +{ + nsCOMPtr tieSink; + tieSink = do_QueryInterface(mEventSink); + if (!tieSink) + return eventNotHandledErr; + + OSStatus err = noErr; + nsresult res = tieSink->HandlePosToOffset( currentPointX, currentPointY, + offset, regionClass, &err); + if (noErr != err) + return err; + return NS_FAILED(res) ? eventNotHandledErr : noErr; +} diff --git a/mozilla/embedding/browser/powerplant/source/CBrowserShell.h b/mozilla/embedding/browser/powerplant/source/CBrowserShell.h index 761cddbd9eb..309922984dc 100644 --- a/mozilla/embedding/browser/powerplant/source/CBrowserShell.h +++ b/mozilla/embedding/browser/powerplant/source/CBrowserShell.h @@ -107,6 +107,19 @@ public: // LPeriodical virtual void SpendTime(const EventRecord& inMacEvent); + // Handle Text Input Event + // hiliteRng should be a + virtual OSStatus HandleUpdateActiveInputArea(const nsAString& text, + PRInt16 script, PRInt16 language, + PRInt32 fixLen, const TextRangeArray * hiliteRng); + virtual OSStatus HandleUnicodeForKeyEvent(const nsAString& text, + PRInt16 script, PRInt16 language, + const EventRecord* keyboardEvent); + virtual OSStatus HandleOffsetToPos(PRInt32 offset, PRInt16 *pointX, PRInt16 *pointY); + virtual OSStatus HandlePosToOffset(PRInt16 currentPointX, PRInt16 currentPointY, + PRInt32 *offset, PRInt16 *regionClass); + + // CBrowserShell diff --git a/mozilla/embedding/browser/powerplant/source/EmbedEventHandling.cpp b/mozilla/embedding/browser/powerplant/source/EmbedEventHandling.cpp index 7789cd8cb3c..6e9edbdd531 100644 --- a/mozilla/embedding/browser/powerplant/source/EmbedEventHandling.cpp +++ b/mozilla/embedding/browser/powerplant/source/EmbedEventHandling.cpp @@ -21,6 +21,7 @@ */ #include "EmbedEventHandling.h" +#include "CTextInputEventHandler.h" #include "nsRepeater.h" #include "prthread.h" @@ -271,5 +272,6 @@ void InitializeEmbedEventHandling(LApplication* theApplication) CEmbedRepeater *embedRepeater = new CEmbedRepeater; ThrowIfNil_(embedRepeater); embedRepeater->StartRepeating(); + InitializeTextInputEventHandling(); } \ No newline at end of file