Skip to content

Commit 8760688

Browse files
committed
8260616: Removing remaining JNF dependencies in the java.desktop module
Reviewed-by: gziemski, ihse, serb
1 parent e2516e4 commit 8760688

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+481
-337
lines changed

make/modules/java.desktop/Lib.gmk

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ ifeq ($(call isTargetOs, macosx), true)
101101
-framework Cocoa \
102102
-framework Security \
103103
-framework ExceptionHandling \
104-
-framework JavaNativeFoundation \
105104
-framework JavaRuntimeSupport \
106105
-framework OpenGL \
107106
-framework IOSurface \
@@ -127,7 +126,6 @@ ifeq ($(call isTargetOs, macosx), true)
127126
-losxapp \
128127
-framework Cocoa \
129128
-framework ApplicationServices \
130-
-framework JavaNativeFoundation \
131129
-framework JavaRuntimeSupport \
132130
-framework SystemConfiguration \
133131
$(JDKLIB_LIBS), \

make/modules/java.desktop/lib/Awt2dLibraries.gmk

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \
160160
LIBS_macosx := -lmlib_image \
161161
-framework Cocoa \
162162
-framework OpenGL \
163-
-framework JavaNativeFoundation \
164163
-framework JavaRuntimeSupport \
165164
-framework ApplicationServices \
166165
-framework AudioToolbox, \
@@ -767,8 +766,7 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
767766
-framework ApplicationServices \
768767
-framework Foundation \
769768
-framework Security \
770-
-framework Cocoa \
771-
-framework JavaNativeFoundation
769+
-framework Cocoa
772770
else ifeq ($(call isTargetOs, windows), true)
773771
LIBSPLASHSCREEN_LIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib
774772
else
@@ -866,7 +864,6 @@ ifeq ($(call isTargetOs, macosx), true)
866864
-framework Cocoa \
867865
-framework Security \
868866
-framework ExceptionHandling \
869-
-framework JavaNativeFoundation \
870867
-framework JavaRuntimeSupport \
871868
-framework OpenGL \
872869
-framework QuartzCore -ljava, \
@@ -904,7 +901,6 @@ ifeq ($(call isTargetOs, macosx), true)
904901
-framework Cocoa \
905902
-framework Carbon \
906903
-framework ApplicationServices \
907-
-framework JavaNativeFoundation \
908904
-framework JavaRuntimeSupport \
909905
-ljava -ljvm, \
910906
))

make/test/JtregNativeJdk.gmk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ endif
7878
ifeq ($(call isTargetOs, macosx), true)
7979
BUILD_JDK_JTREG_EXCLUDE += exelauncher.c
8080
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := \
81-
-framework Cocoa -framework JavaNativeFoundation
81+
-framework Cocoa
8282
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJniInvocationTest := -ljli
8383
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestDynamicStore := \
8484
-framework Cocoa -framework SystemConfiguration

src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
#import "JNIUtilities.h"
3131

32-
#import <JavaNativeFoundation/JavaNativeFoundation.h>
3332
#import <sys/time.h>
3433
#import <Carbon/Carbon.h>
3534

src/java.desktop/macosx/native/libawt_lwawt/awt/AWTSurfaceLayers.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#import "LWCToolkit.h"
2929
#import "JNIUtilities.h"
3030

31-
#import <JavaNativeFoundation/JavaNativeFoundation.h>
3231
#import <QuartzCore/CATransaction.h>
3332

3433
@implementation AWTSurfaceLayers

src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
#import "JNIUtilities.h"
3636

3737
#import <Carbon/Carbon.h>
38-
#import <JavaNativeFoundation/JavaNativeFoundation.h>
3938

4039
// keyboard layout
4140
static NSString *kbdLayout;
@@ -135,7 +134,7 @@ - (void) viewDidMoveToWindow {
135134

136135
[AWTToolkit eventCountPlusPlus];
137136

138-
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^() {
137+
[ThreadUtilities performOnMainThreadWaiting:NO block:^() {
139138
[[self window] makeFirstResponder: self];
140139
}];
141140
if ([self window] != NULL) {
@@ -461,8 +460,8 @@ -(void) deliverJavaKeyEventHelper: (NSEvent *) event {
461460
jstring characters = NULL;
462461
jstring charactersIgnoringModifiers = NULL;
463462
if ([event type] != NSFlagsChanged) {
464-
characters = JNFNSToJavaString(env, [event characters]);
465-
charactersIgnoringModifiers = JNFNSToJavaString(env, [event charactersIgnoringModifiers]);
463+
characters = NSStringToJavaString(env, [event characters]);
464+
charactersIgnoringModifiers = NSStringToJavaString(env, [event charactersIgnoringModifiers]);
466465
}
467466

468467
DECLARE_CLASS(jc_NSEvent, "sun/lwawt/macosx/NSEvent");
@@ -575,10 +574,7 @@ - (jobject)awtComponent:(JNIEnv*)env
575574
DECLARE_FIELD_RETURN(jf_Peer, jc_CPlatformView, "peer", "Lsun/lwawt/LWWindowPeer;", NULL);
576575
if ((env == NULL) || (m_cPlatformView == NULL)) {
577576
NSLog(@"Apple AWT : Error AWTView:awtComponent given bad parameters.");
578-
if (env != NULL)
579-
{
580-
JNFDumpJavaStack(env);
581-
}
577+
NSLog(@"%@",[NSThread callStackSymbols]);
582578
return NULL;
583579
}
584580

@@ -592,7 +588,7 @@ - (jobject)awtComponent:(JNIEnv*)env
592588
DECLARE_FIELD_RETURN(jf_Target, jc_LWWindowPeer, "target", "Ljava/awt/Component;", NULL);
593589
if (peer == NULL) {
594590
NSLog(@"Apple AWT : Error AWTView:awtComponent got null peer from CPlatformView");
595-
JNFDumpJavaStack(env);
591+
NSLog(@"%@",[NSThread callStackSymbols]);
596592
return NULL;
597593
}
598594
jobject comp = (*env)->GetObjectField(env, peer, jf_Target);
@@ -989,8 +985,8 @@ - (void) insertText:(id)aString replacementRange:(NSRange)replacementRange
989985
}
990986

991987
DECLARE_METHOD(jm_insertText, jc_CInputMethod, "insertText", "(Ljava/lang/String;)V");
992-
jstring insertedText = JNFNSToJavaString(env, useString);
993-
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_insertText, insertedText); // AWT_THREADING Safe (AWTRunLoopMode)
988+
jstring insertedText = NSStringToJavaString(env, useString);
989+
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_insertText, insertedText);
994990
CHECK_EXCEPTION();
995991
(*env)->DeleteLocalRef(env, insertedText);
996992

@@ -1055,8 +1051,8 @@ - (void) setMarkedText:(id)aString selectedRange:(NSRange)selectionRange replace
10551051
// NSInputContext already did the analysis of the TSM event and created attributes indicating
10561052
// the underlining and color that should be done to the string. We need to look at the underline
10571053
// style and color to determine what kind of Java hilighting needs to be done.
1058-
jstring inProcessText = JNFNSToJavaString(env, incomingString);
1059-
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_startIMUpdate, inProcessText); // AWT_THREADING Safe (AWTRunLoopMode)
1054+
jstring inProcessText = NSStringToJavaString(env, incomingString);
1055+
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_startIMUpdate, inProcessText);
10601056
CHECK_EXCEPTION();
10611057
(*env)->DeleteLocalRef(env, inProcessText);
10621058

@@ -1081,7 +1077,7 @@ - (void) setMarkedText:(id)aString selectedRange:(NSRange)selectionRange replace
10811077
isGray = !([underlineColorObj isEqual:[NSColor blackColor]]);
10821078

10831079
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_addAttribute, isThickUnderline,
1084-
isGray, effectiveRange.location, effectiveRange.length); // AWT_THREADING Safe (AWTRunLoopMode)
1080+
isGray, effectiveRange.location, effectiveRange.length);
10851081
CHECK_EXCEPTION();
10861082
}
10871083
}
@@ -1096,7 +1092,7 @@ - (void) setMarkedText:(id)aString selectedRange:(NSRange)selectionRange replace
10961092
}
10971093

10981094
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_dispatchText,
1099-
selectionRange.location, selectionRange.length, JNI_FALSE); // AWT_THREADING Safe (AWTRunLoopMode)
1095+
selectionRange.location, selectionRange.length, JNI_FALSE);
11001096
CHECK_EXCEPTION();
11011097
// If the marked text is being cleared (zero-length string) don't handle the key event.
11021098
if ([incomingString length] == 0) {
@@ -1118,7 +1114,7 @@ - (void) unmarkText
11181114
JNIEnv *env = [ThreadUtilities getJNIEnv];
11191115
GET_CIM_CLASS();
11201116
DECLARE_METHOD(jm_unmarkText, jc_CInputMethod, "unmarkText", "()V");
1121-
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_unmarkText); // AWT_THREADING Safe (AWTRunLoopMode)
1117+
(*env)->CallVoidMethod(env, fInputMethodLOCKABLE, jm_unmarkText);
11221118
CHECK_EXCEPTION();
11231119
}
11241120

@@ -1171,10 +1167,10 @@ - (NSAttributedString *) attributedSubstringForProposedRange:(NSRange)theRange a
11711167

11721168
JNIEnv *env = [ThreadUtilities getJNIEnv];
11731169
DECLARE_METHOD_RETURN(jm_substringFromRange, jc_CInputMethod, "attributedSubstringFromRange", "(II)Ljava/lang/String;", nil);
1174-
jobject theString = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_substringFromRange, theRange.location, theRange.length); // AWT_THREADING Safe (AWTRunLoopMode)
1170+
jobject theString = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_substringFromRange, theRange.location, theRange.length);
11751171
CHECK_EXCEPTION_NULL_RETURN(theString, nil);
11761172

1177-
id result = [[[NSAttributedString alloc] initWithString:JNFJavaToNSString(env, theString)] autorelease];
1173+
id result = [[[NSAttributedString alloc] initWithString:JavaStringToNSString(env, theString)] autorelease];
11781174
#ifdef IM_DEBUG
11791175
NSLog(@"attributedSubstringFromRange returning \"%@\"", result);
11801176
#endif // IM_DEBUG
@@ -1205,7 +1201,7 @@ - (NSRange) markedRange
12051201
GET_CIM_CLASS_RETURN(range);
12061202
DECLARE_METHOD_RETURN(jm_markedRange, jc_CInputMethod, "markedRange", "()[I", range);
12071203

1208-
array = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_markedRange); // AWT_THREADING Safe (AWTRunLoopMode)
1204+
array = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_markedRange);
12091205
CHECK_EXCEPTION();
12101206

12111207
if (array) {
@@ -1246,7 +1242,7 @@ - (NSRange) selectedRange
12461242
fprintf(stderr, "AWTView InputMethod Selector Called : [selectedRange]\n");
12471243
#endif // IM_DEBUG
12481244

1249-
array = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_selectedRange); // AWT_THREADING Safe (AWTRunLoopMode)
1245+
array = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_selectedRange);
12501246
CHECK_EXCEPTION();
12511247
if (array) {
12521248
_array = (*env)->GetIntArrayElements(env, array, &isCopy);
@@ -1285,7 +1281,7 @@ - (NSRect) firstRectForCharacterRange:(NSRange)theRange actualRange:(NSRangePoin
12851281
#endif // IM_DEBUG
12861282

12871283
array = (*env)->CallObjectMethod(env, fInputMethodLOCKABLE, jm_firstRectForCharacterRange,
1288-
theRange.location); // AWT_THREADING Safe (AWTRunLoopMode)
1284+
theRange.location);
12891285
CHECK_EXCEPTION();
12901286

12911287
_array = (*env)->GetIntArrayElements(env, array, &isCopy);
@@ -1326,7 +1322,7 @@ - (NSUInteger)characterIndexForPoint:(NSPoint)thePoint
13261322
#endif // IM_DEBUG
13271323

13281324
jint index = (*env)->CallIntMethod(env, fInputMethodLOCKABLE, jm_characterIndexForPoint,
1329-
(jint)flippedLocation.x, (jint)flippedLocation.y); // AWT_THREADING Safe (AWTRunLoopMode)
1325+
(jint)flippedLocation.x, (jint)flippedLocation.y);
13301326
CHECK_EXCEPTION();
13311327

13321328
#ifdef IM_DEBUG

src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
*/
2525

2626
#import <Cocoa/Cocoa.h>
27-
#import <JavaNativeFoundation/JavaNativeFoundation.h>
2827

2928
#import "sun_lwawt_macosx_CPlatformWindow.h"
3029
#import "com_apple_eawt_event_GestureHandler.h"
@@ -1444,7 +1443,7 @@ + (AWTWindow *) lastKeyWindow {
14441443

14451444
NSWindow *nsWindow = OBJC(windowPtr);
14461445
[nsWindow performSelectorOnMainThread:@selector(setTitle:)
1447-
withObject:JNFJavaToNSString(env, jtitle)
1446+
withObject:JavaStringToNSString(env, jtitle)
14481447
waitUntilDone:NO];
14491448

14501449
JNI_COCOA_EXIT(env);
@@ -1520,7 +1519,7 @@ + (AWTWindow *) lastKeyWindow {
15201519
JNI_COCOA_ENTER(env);
15211520

15221521
NSWindow *nsWindow = OBJC(windowPtr);
1523-
NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:JNFNormalizedNSStringForPath(env, filename)];
1522+
NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:NormalizedPathNSStringFromJavaString(env, filename)];
15241523
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
15251524
[nsWindow setRepresentedURL:url];
15261525
}];

src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232
#import "com_apple_eawt__AppMenuBarHandler.h"
3333
#import "com_apple_eawt__AppMiscHandlers.h"
3434

35-
#import <JavaNativeFoundation/JavaNativeFoundation.h>
36-
3735
#import "CPopupMenu.h"
3836
#import "CMenuBar.h"
3937
#import "ThreadUtilities.h"
@@ -290,10 +288,10 @@ - (void)_handleOpenURLEvent:(NSAppleEventDescriptor *)openURLEvent withReplyEven
290288

291289
//fprintf(stderr,"jm_handleOpenURL\n");
292290
JNIEnv *env = [ThreadUtilities getJNIEnv];
293-
jstring jURL = JNFNSToJavaString(env, url);
291+
jstring jURL = NSStringToJavaString(env, url);
294292
GET_APPEVENTHANDLER_CLASS();
295293
DECLARE_STATIC_METHOD(jm_handleOpenURI, sjc_AppEventHandler, "handleOpenURI", "(Ljava/lang/String;)V");
296-
(*env)->CallStaticVoidMethod(env, sjc_AppEventHandler, jm_handleOpenURI, jURL); // AWT_THREADING Safe (event)
294+
(*env)->CallStaticVoidMethod(env, sjc_AppEventHandler, jm_handleOpenURI, jURL);
297295
CHECK_EXCEPTION();
298296
(*env)->DeleteLocalRef(env, jURL);
299297

@@ -312,11 +310,11 @@ - (jobject)_createFilePathArrayFrom:(NSArray *)filenames withEnv:(JNIEnv *)env {
312310
DECLARE_METHOD_RETURN(jm_ArrayList_ctor, sjc_ArrayList, "<init>", "(I)V", NULL);
313311
DECLARE_METHOD_RETURN(jm_ArrayList_add, sjc_ArrayList, "add", "(Ljava/lang/Object;)Z", NULL);
314312

315-
jobject jFileNamesArray = (*env)->NewObject(env, sjc_ArrayList, jm_ArrayList_ctor, (jint)[filenames count]); // AWT_THREADING Safe (known object)
313+
jobject jFileNamesArray = (*env)->NewObject(env, sjc_ArrayList, jm_ArrayList_ctor, (jint)[filenames count]);
316314
CHECK_EXCEPTION_NULL_RETURN(jFileNamesArray, NULL);
317315

318316
for (NSString *filename in filenames) {
319-
jstring jFileName = JNFNormalizedJavaStringForPath(env, filename);
317+
jstring jFileName = NormalizedPathJavaStringFromNSString(env, filename);
320318
(*env)->CallVoidMethod(env, jFileNamesArray, jm_ArrayList_add, jFileName);
321319
CHECK_EXCEPTION();
322320
}
@@ -338,7 +336,7 @@ - (void)application:(NSApplication *)theApplication openFiles:(NSArray *)fileNam
338336
// if these files were opened from a Spotlight query, try to get the search text from the current AppleEvent
339337
NSAppleEventDescriptor *currentEvent = [[NSAppleEventManager sharedAppleEventManager] currentAppleEvent];
340338
NSString *searchString = [[currentEvent paramDescriptorForKeyword:keyAESearchText] stringValue];
341-
jstring jSearchString = JNFNSToJavaString(env, searchString);
339+
jstring jSearchString = NSStringToJavaString(env, searchString);
342340

343341
// convert the file names array
344342
jobject jFileNamesArray = [self _createFilePathArrayFrom:fileNames withEnv:env];
@@ -365,7 +363,7 @@ - (NSApplicationPrintReply)application:(NSApplication *)application printFiles:(
365363
GET_APPEVENTHANDLER_CLASS_RETURN(NSPrintingCancelled);
366364
DECLARE_STATIC_METHOD_RETURN(jm_handlePrintFile, sjc_AppEventHandler,
367365
"handlePrintFiles", "(Ljava/util/List;)V", NSPrintingCancelled);
368-
(*env)->CallStaticVoidMethod(env, sjc_AppEventHandler, jm_handlePrintFile, jFileNamesArray); // AWT_THREADING Safe (event)
366+
(*env)->CallStaticVoidMethod(env, sjc_AppEventHandler, jm_handlePrintFile, jFileNamesArray);
369367
CHECK_EXCEPTION();
370368
(*env)->DeleteLocalRef(env, jFileNamesArray);
371369

@@ -380,7 +378,7 @@ + (void)_notifyJava:(jint)notificationType {
380378
JNIEnv *env = [ThreadUtilities getJNIEnv];
381379
GET_APPEVENTHANDLER_CLASS();
382380
DECLARE_STATIC_METHOD(jm_handleNativeNotification, sjc_AppEventHandler, "handleNativeNotification", "(I)V");
383-
(*env)->CallStaticVoidMethod(env, sjc_AppEventHandler, jm_handleNativeNotification, notificationType); // AWT_THREADING Safe (event)
381+
(*env)->CallStaticVoidMethod(env, sjc_AppEventHandler, jm_handleNativeNotification, notificationType);
384382
CHECK_EXCEPTION();
385383
}
386384

@@ -624,7 +622,7 @@ + (NSImage *)_dockIconImage {
624622
[ThreadUtilities performOnMainThread:@selector(_registerForNotification:)
625623
on:[ApplicationDelegate class]
626624
withObject:[NSNumber numberWithInt:notificationType]
627-
waitUntilDone:NO]; // AWT_THREADING Safe (non-blocking)
625+
waitUntilDone:NO];
628626
JNI_COCOA_EXIT(env);
629627
}
630628

@@ -714,7 +712,7 @@ + (NSImage *)_dockIconImage {
714712
{
715713
JNI_COCOA_ENTER(env);
716714

717-
NSString *badgeString = JNFJavaToNSString(env, badge);
715+
NSString *badgeString = JavaStringToNSString(env, badge);
718716
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
719717
NSDockTile *dockTile = [NSApp dockTile];
720718
[dockTile setBadgeLabel:badgeString];

src/java.desktop/macosx/native/libawt_lwawt/awt/CClipboard.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#import "ThreadUtilities.h"
2828
#import "JNIUtilities.h"
2929
#import <Cocoa/Cocoa.h>
30-
#import <JavaNativeFoundation/JavaNativeFoundation.h>
3130

3231
@interface CClipboard : NSObject { }
3332
@property NSInteger changeCount;
@@ -99,7 +98,7 @@ - (void)checkPasteboard:(id)sender {
9998
DECLARE_METHOD(jm_lostOwnership, jc_CClipboard, "notifyLostOwnership", "()V");
10099
@synchronized(self) {
101100
if (self.clipboardOwner) {
102-
(*env)->CallVoidMethod(env, self.clipboardOwner, jm_lostOwnership); // AWT_THREADING Safe (event)
101+
(*env)->CallVoidMethod(env, self.clipboardOwner, jm_lostOwnership);
103102
CHECK_EXCEPTION();
104103
(*env)->DeleteGlobalRef(env, self.clipboardOwner);
105104
self.clipboardOwner = NULL;

src/java.desktop/macosx/native/libawt_lwawt/awt/CCursorManager.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#include "sun_lwawt_macosx_CCursorManager.h"
2727

2828
#include <Cocoa/Cocoa.h>
29-
#include <JavaNativeFoundation/JavaNativeFoundation.h>
3029

3130
#include "GeomUtilities.h"
3231
#include "ThreadUtilities.h"
@@ -75,7 +74,7 @@ static void setCursorOnAppKitThread(NSCursor *cursor) {
7574
{
7675
JNI_COCOA_ENTER(env);
7776

78-
NSString *cursorName = JNFJavaToNSString(env, name);
77+
NSString *cursorName = JavaStringToNSString(env, name);
7978
SEL cursorSelector = (type == sun_lwawt_macosx_CCursorManager_NAMED_CURSOR) ? lookupCursorSelectorForName(cursorName) : lookupCursorSelectorForType(type);
8079
if (cursorSelector == nil) {
8180
NSString *reason = [NSString stringWithFormat:@"unimplemented built-in cursor type: %d / %@", type, cursorName];

0 commit comments

Comments
 (0)