Преглед изворни кода

FIX: COCOA: cursor in MainControl(Grid) may be always in waiting state (fixes #699)

rich2014 пре 2 година
родитељ
комит
404518d428
2 измењених фајлова са 30 додато и 2 уклоњено
  1. 11 1
      src/fileviews/ufileviewwithmainctrl.pas
  2. 19 1
      src/platform/unix/darwin/umydarwin.pas

+ 11 - 1
src/fileviews/ufileviewwithmainctrl.pas

@@ -36,7 +36,11 @@ uses
   uFileView,
   uDragDropEx,
   uFileViewNotebook,
-  uDebug;
+  uDebug
+{$IFDEF LCLCOCOA}
+  ,uMyDarwin
+{$ENDIF}
+  ;
 
 type
 
@@ -1630,6 +1634,9 @@ procedure TFileViewWithMainCtrl.WorkerFinished(const Worker: TFileViewWorker);
 begin
   inherited WorkerFinished(Worker);
   MainControl.Cursor := crDefault;
+  {$IFDEF LCLCOCOA}
+  cocoaInvalidControlCursor( MainControl );
+  {$ENDIF}
   // Update status line only
   if not (csDestroying in ComponentState) then UpdateInfoPanel;
 end;
@@ -1798,6 +1805,9 @@ procedure TFileViewWithMainCtrl.WorkerStarting(const Worker: TFileViewWorker);
 begin
   inherited WorkerStarting(Worker);
   MainControl.Cursor := crHourGlass;
+  {$IFDEF LCLCOCOA}
+  cocoaInvalidControlCursor( MainControl );
+  {$ENDIF}
   UpdateInfoPanel; // Update status line only
 end;
 

+ 19 - 1
src/platform/unix/darwin/umydarwin.pas

@@ -28,7 +28,10 @@ unit uMyDarwin;
 interface
 
 uses
-  Classes, SysUtils, UnixType, MacOSAll, CocoaAll, CocoaUtils, CocoaInt, Cocoa_Extra, InterfaceBase, Menus, CocoaWSMenus;
+  Classes, SysUtils, UnixType,
+  InterfaceBase, Controls, Menus,
+  MacOSAll, CocoaAll, CocoaPrivate, CocoaInt,
+  Cocoa_Extra, CocoaWSMenus, CocoaUtils;
 
 // Darwin Util Function
 function StringToNSString(const S: String): NSString;
@@ -36,6 +39,8 @@ function StringToCFStringRef(const S: String): CFStringRef;
 function NSArrayToList(const theArray:NSArray): TStringList;
 function ListToNSArray(const list:TStrings): NSArray;
 
+procedure cocoaInvalidControlCursor( const control:TWinControl );
+
 function NSGetTempPath: String;
 
 function NSGetFolderPath(Folder: NSSearchPathDirectory): String;
@@ -326,6 +331,19 @@ begin
   CFRelease(FileNameRef);
 end;
 
+
+procedure cocoaInvalidControlCursor( const control:TWinControl );
+var
+  view: NSView;
+begin
+  if control.HandleAllocated then
+  begin
+    view:= NSObject(control.Handle).lclContentView;
+    view.window.invalidateCursorRectsForView( view );
+  end;
+end;
+
+
 var
   NetFS: TLibHandle = NilHandle;
   CoreServices: TLibHandle = NilHandle;