From 2656b1f405dcf3b67d644bf47b02a64886ef2ca4 Mon Sep 17 00:00:00 2001 From: Geenz Date: Mon, 1 Apr 2013 08:15:12 -0400 Subject: [PATCH] First pass at adding a viable replacement for TSM's old UseInputWindow method (which is now deprecated with seemingly no Cocoa replacement). --- indra/llwindow/llappdelegate-objc.h | 6 +- indra/llwindow/llopenglview-objc.h | 12 +- indra/llwindow/llopenglview-objc.mm | 22 +- indra/llwindow/llwindowmacosx-objc.h | 2 + indra/llwindow/llwindowmacosx-objc.mm | 10 + indra/llwindow/llwindowmacosx.cpp | 14 +- indra/newview/SecondLife.nib | Bin 7403 -> 12997 bytes indra/newview/SecondLife.xib | 381 +++++++++++++++++++++++++- indra/newview/llappdelegate-objc.mm | 15 + 9 files changed, 444 insertions(+), 18 deletions(-) diff --git a/indra/llwindow/llappdelegate-objc.h b/indra/llwindow/llappdelegate-objc.h index 6a4794f3c3..e7f6ecd5fc 100644 --- a/indra/llwindow/llappdelegate-objc.h +++ b/indra/llwindow/llappdelegate-objc.h @@ -11,11 +11,15 @@ @interface LLAppDelegate : NSObject { LLNSWindow *window; + NSWindow *inputWindow; + LLNonInlineTextView *inputView; NSTimer *frameTimer; } @property (assign) IBOutlet LLNSWindow *window; +@property (assign) IBOutlet NSWindow *inputWindow; +@property (assign) IBOutlet LLNonInlineTextView *inputView; - (void) mainLoop; - +- (void) showInputWindow:(bool)show; @end diff --git a/indra/llwindow/llopenglview-objc.h b/indra/llwindow/llopenglview-objc.h index 5f972b1a98..6b21148bb6 100644 --- a/indra/llwindow/llopenglview-objc.h +++ b/indra/llwindow/llopenglview-objc.h @@ -12,9 +12,6 @@ #import #include -// Some nasty shovelling of LLOpenGLView from LLNativeBindings to prevent any C++ <-> Obj-C interop oddities. -// Redraw callback handling removed (for now) due to being unneeded in the patch that preceeds this addition. - @interface LLOpenGLView : NSOpenGLView { std::string mLastDraggedUrl; @@ -44,6 +41,15 @@ @end +@interface LLNonInlineTextView : NSTextView +{ + LLOpenGLView *glview; +} + +- (void) setGLView:(LLOpenGLView*)view; + +@end + @interface LLNSWindow : NSWindow - (NSPoint)convertToScreenFromLocalPoint:(NSPoint)point relativeToView:(NSView *)view; diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index 376d238c90..a6ef35a8eb 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -501,9 +501,25 @@ attributedStringInfo getSegments(NSAttributedString *str) @end -// We use a custom NSWindow for our event handling. -// Why not an NSWindowController you may ask? -// Answer: this is easier. +@implementation LLNonInlineTextView + +- (void) setGLView:(LLOpenGLView *)view +{ + glview = view; +} + +- (void) insertText:(id)insertString +{ + [self insertText:insertString replacementRange:NSMakeRange(0, 0)]; +} + +- (void) insertText:(id)aString replacementRange:(NSRange)replacementRange +{ + [glview insertText:aString replacementRange:replacementRange]; + [_window orderOut:_window]; +} + +@end @implementation LLNSWindow diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h index 1d05db14b2..14a0c22d66 100644 --- a/indra/llwindow/llwindowmacosx-objc.h +++ b/indra/llwindow/llwindowmacosx-objc.h @@ -90,6 +90,8 @@ void setWindowPos(NSWindowRef window, float* pos); void closeWindow(NSWindowRef window); void removeGLView(GLViewRef view); void makeFirstResponder(NSWindowRef window, GLViewRef view); +void setupInputWindow(NSWindowRef window, GLViewRef view); +void showInputWindow(bool show); // These are all implemented in llwindowmacosx.cpp. // This is largely for easier interop between Obj-C and C++ (at least in the viewer's case due to the BOOL vs. BOOL conflict) diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm index 43f853bfd1..0eef8c9f83 100644 --- a/indra/llwindow/llwindowmacosx-objc.mm +++ b/indra/llwindow/llwindowmacosx-objc.mm @@ -362,6 +362,16 @@ void removeGLView(GLViewRef view) [(LLOpenGLView*)view release]; } +void setupInputWindow(NSWindowRef window, GLViewRef glview) +{ + [[(LLAppDelegate*)[NSApp delegate] inputView] setGLView:(LLOpenGLView*)glview]; +} + +void showInputWindow(bool show) +{ + [(LLAppDelegate*)[NSApp delegate] showInputWindow:show]; +} + NSWindowRef getMainAppWindow() { LLNSWindow *winRef = [(LLAppDelegate*)[[NSApplication sharedApplication] delegate] window]; diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 6f66da66a4..2d0f981b3e 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -191,6 +191,8 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks, //start with arrow cursor initCursors(); setCursor( UI_CURSOR_ARROW ); + + allowLanguageTextInput(NULL, FALSE); } mCallbacks = callbacks; @@ -513,18 +515,22 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits // Get the view instead. mGLView = createOpenGLView(mWindow, mFSAASamples, !disable_vsync); mContext = getCGLContextObj(mGLView); + // Since we just created the context, it needs to be set up. glNeedsInit = TRUE; gGLManager.mVRAM = getVramSize(mGLView); } - + + // This sets up our view to recieve text from our non-inline text input window. + setupInputWindow(mWindow, mGLView); + // Hook up the context to a drawable if(mContext != NULL) { - LL_INFOS("Window") << "Setting CGL Context..." << LL_ENDL; - LL_DEBUGS("Window") << "createContext: setting current context" << LL_ENDL; + + U32 err = CGLSetCurrentContext(mContext); if (err != kCGLNoError) { @@ -1888,6 +1894,8 @@ void LLWindowMacOSX::allowLanguageTextInput(LLPreeditor *preeditor, BOOL b) return; } + showInputWindow(!b); + // Take care of old and new preeditors. if (preeditor != mPreeditor || !b) { diff --git a/indra/newview/SecondLife.nib b/indra/newview/SecondLife.nib index f55ddaabcdf3d7f4d49aab33fa00da024e521c81..0b0ff5308b71f9db0b88f9d506ffc7a443a97d7d 100644 GIT binary patch literal 12997 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℘oD3oNlLyFHQch-(7_QS7KsHwSJpNbSgI|wp zU>*|eEFMDIxDXj82RUE~kMMdvpEvMD{4y-d8#u@OD&SY~rI;?0F*N@8y6WO9+AV10 zNwSSRg=|;LgM9gvLVqBXWG)X00M9_>IH!v_6AgLhC}EN z(<|%ATJ(}cdXkOsDeBj}0~UTKUnOK-6pyYZBD!i4QU@GHV-@hjOt38ii7dtsCp@P#JN8Igtn?(Y8J&2}-S z4xH-37+;E08sm|rLcCwbwZF=2F%uFJamSq(m8jg(L^V+f`u)GK{1-v_J^V^E#UyCM zw4(!G{4>X}KC)>t`l2pHzYw8b`A#@P;R;5&e;8 z1nZ{aWRpMI(g-h%0k>A7b<(v3sejmS|Kft%}t^7g$ z5Pz6I!XM?2@yGcS{7JrzKgFNs+xav6S^gY_M45B(sNQ_K3_LmDyu5dt7Eu$m~g(ZIjtkGJ9HP+hz8Q%$}9mb258gW-rKW zhs<7-*-J9pDYKVlwo7KO$m~^_y(Y8WGJ9QSf0x-FneCO?8#3D`vo~e7UuFkn_Lj`v zmf1m>y(6=CW%i!T4$17W%-)yT5t)4;vk&7b#xh&pQDAGpa>!$Mo2iFv%f_%g+!N+! zCEjP{_+$PiHYUC?i|av`uqD$n-ZIq^wp?$y!Lr$@K?y+pL+-KQk*>5>wIc2q3Wor*>A8TK0e`~Te#X8VB%zCl) z5^Jt?lC{!WW396;vU2NE>q_f=);-pP)-SCmtUuapHjhoUb+?VQW!kcBqiths`L=Pk zLfd#-v8}{5$u`+G#WvM8%~oae+ak6`+cmZoww1QO*>1J1vNhS(**4f7v2C~Qv>mp6 zWc$``vD@qpyUQ-vReO@Xx7}y&W6!pawU^sx+H39g_ABgH+5cj{&c4ikqkV;arG1@! ztNn5NllG_V+wITV_uCKHkJ`Vne{28F{=NN-Lw0m^T;ND^jC5o=vK^xx)9aL-s*Ep|pE_2@KYBe!bG7|C=<$sN@2QCEz}7SAtp2kw+gF-)xw>^8ey%_EZie(61EE4g=dB5 zg&o32!Y9IK!WY6Z;ka-@I4%4jobd=A(Ia^j&qba=p241>o{K$~ct(20dI~&~JvE+L zo;jYmp6fizJU4l6_T1vR&2ziw4$oH4L!O@OyZDPpRa zCZ>xS;t+9|I9wbdjuNxP95GkS6UT}LVv#sOoG6xxWn#HlAy$gh#TnvEu|}*H7l@0* zMsbO_R9r5u5?70NifhERVzanQ+$X*#9u|*?ABz7FKNdd~KNr6gfATVKS8sQ3Pj8a9 zx7X+G*`Mczj5V((>M?p^C`_OADC^xo^;?7iQ+ z)4R+2mG^7!H{Nf(r@W`V-+O=b{wyU)y(OR2N9rr}my)FvDODOOC#7$t@1)bx57JMvT~3x$ zUsa+N$~tP)n{ zD^aChX;2m_i#B9v zdTL2pZ_TIm(fVrrwPYC)#J)7uqrHxOPH2sh!eJYd>f|X}@T{ z>7Y~HqT6(b?$QNa)FoZfHNBJGS?{WM*L&(odT-sQ_tE?6{q_4-1+QNK+8vwoGnRKHeVrZ3l5 z>bK~t^gHx5dXv6hzenG!KcGLTKcYXbZ_~Hy&*?k#o%$>KZheowPd}i)uOHDr)W6Wb i)W6bCcd~YJb?V;f+)ful{DYg8_=goHep~-{8u)*aD#q*p diff --git a/indra/newview/SecondLife.xib b/indra/newview/SecondLife.xib index 7d20b7fd7c..fdfea49c42 100644 --- a/indra/newview/SecondLife.xib +++ b/indra/newview/SecondLife.xib @@ -11,9 +11,13 @@ 3084 + IBNSLayoutConstraint NSCustomObject NSMenu NSMenuItem + NSScrollView + NSScroller + NSTextView NSView NSWindowTemplate @@ -340,6 +344,202 @@ 128 YES + + 31 + 2 + {{272, 176}, {938, 42}} + -1535638528 + Window + NSPanel + + + + + 256 + + + + 256 + + + + 2304 + + + + 2322 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + NeXT font pasteboard type + NeXT ruler pasteboard type + WebURLsWithTitlesPboardType + public.url + + {938, 42} + + + + _NS:13 + + + + + + + + + + + + 166 + + + + 938 + 1 + + + 67121127 + 0 + + + 3 + MQA + + + + 6 + System + selectedTextBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + selectedTextColor + + 3 + MAA + + + + + + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + 1 + + 6 + {939, 10000000} + + + + {{1, 1}, {938, 42}} + + + + _NS:11 + + + + {4, 5} + + 79691776 + + + + + + file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{923, 1}, {16, 42}} + + + + _NS:83 + NO + + _doScroller: + 0.96666666666666667 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + + _NS:33 + NO + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{-1, -1}, {940, 44}} + + + + _NS:9 + 133138 + + + + 0.25 + 4 + 1 + + + {938, 42} + + + + _NS:21 + + {{0, 0}, {2560, 1440}} + {10000000000000, 10000000000000} + YES + @@ -471,6 +671,22 @@ 850 + + + inputWindow + + + + 953 + + + + inputView + + + + 954 + @@ -726,6 +942,131 @@ + + 941 + + + + + + + + 942 + + + + + + 4 + 0 + + 4 + 1 + + -1 + + 1000 + + 8 + 29 + 3 + + + + 6 + 0 + + 6 + 1 + + -1 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + -1 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + -1 + + 1000 + + 8 + 29 + 3 + + + + + + 943 + + + + + + + + + + 944 + + + + + 945 + + + + + 946 + + + + + 949 + + + + + 950 + + + + + 951 + + + + + 952 + + + @@ -770,12 +1111,31 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + LLNonInlineTextView + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - 940 + 954 @@ -783,13 +1143,18 @@ LLAppDelegate NSObject - LLOpenGLView + LLNonInlineTextView + NSWindow LLNSWindow - - glview - LLOpenGLView + + inputView + LLNonInlineTextView + + + inputWindow + NSWindow window @@ -810,11 +1175,11 @@ - LLOpenGLView - NSOpenGLView + LLNonInlineTextView + NSTextView IBProjectSource - ./Classes/LLOpenGLView.h + ./Classes/LLNonInlineTextView.h diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm index 5fb5087cd8..8da44fcf33 100644 --- a/indra/newview/llappdelegate-objc.mm +++ b/indra/newview/llappdelegate-objc.mm @@ -12,6 +12,8 @@ @implementation LLAppDelegate @synthesize window; +@synthesize inputWindow; +@synthesize inputView; - (void)dealloc { @@ -63,4 +65,17 @@ } } +- (void) showInputWindow:(bool)show +{ + if (show) + { + NSLog(@"Showing input window."); + [inputWindow makeKeyAndOrderFront:inputWindow]; + } else { + NSLog(@"Hiding input window."); + [inputWindow orderOut:inputWindow]; + [window makeKeyAndOrderFront:window]; + } +} + @end