--- np2/macosx/toolwin.cpp	2003/11/11 16:33:50	1.9
+++ np2/macosx/toolwin.cpp	2003/11/21 16:01:41	1.12
@@ -11,6 +11,10 @@
 #include	"dialog.h"
 #include	"soundmng.h"
 #include	"fdefine.h"
+#include	"mackbd.h"
+#include	"mousemng.h"
+#include	"pccore.h"
+#include	"iocore.h"
 
 
 enum {
@@ -107,24 +111,27 @@ static const OSType subcommand[11] ={	'-
                                         'exit',
                                     };
 
+#define	BASENUMBER	4
 static const ControlID popup[2] = { {'pop1', 1}, {'pop2', 2} };
 
 static DragReceiveHandlerUPP	dr;
 static bool	isPUMA;
 
 static void openpopup(HIPoint location);
-static void skinchange(void);
+static void skinchange(bool remake);
 
 // ----
 
 static void checkOSVersion(void) {
-    long	res;
-    Gestalt(gestaltSystemVersion, &res);
-    if (res<0x1020) {
-        isPUMA = true;
-    }
-    else {
-        isPUMA = false;
+    static	long	res = 0;
+    if (!res) {
+        Gestalt(gestaltSystemVersion, &res);
+        if (res<0x1020) {
+            isPUMA = true;
+        }
+        else {
+            isPUMA = false;
+        }
     }
 }
 
@@ -165,7 +172,7 @@ static PicHandle skinload(const char *pa
 			return(ret);
 		}
 	}
-	return(getBMPfromResource("np2tool", bounds, CFSTR("bmp")));
+	return(getBMPfromResource("np2tool.bmp", bounds));
 }
 
 // ----
@@ -522,10 +529,12 @@ static pascal OSStatus cfWinproc(EventHa
                         Draw1Control(sub);
                     }
                 }
+                err=noErr;
                 break;
                 
             case kEventWindowFocusAcquired:
-                SelectWindow(hWndMain);
+                BringToFront(hWndMain);
+                err = noErr;
                 break;
                 
                 
@@ -533,13 +542,51 @@ static pascal OSStatus cfWinproc(EventHa
                 break;
         }
     }
-    else if (GetEventClass(event)==kEventClassKeyboard && GetEventKind(event)==kEventRawKeyDown) {
+    else if (GetEventClass(event)==kEventClassKeyboard) {
+        static	UInt32	backup = 0;
+        UInt32	whatHappened = GetEventKind(event);
+        UInt32 key;
+        GetEventParameter (event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &key);
         UInt32 modif;
         GetEventParameter (event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modif);
-        if (modif & cmdKey) {
-            EventRecord	eve;
-            ConvertEventRefToEventRecord( event,&eve );
-            recieveCommand(MenuEvent(&eve));
+        switch (whatHappened)
+        {
+            case kEventRawKeyUp:
+                mackbd_keyup(key);
+                err = noErr;
+                break;
+            case kEventRawKeyRepeat:
+                mackbd_keydown(key);
+                err = noErr;
+                break;
+            case kEventRawKeyDown:
+                if (modif & cmdKey) {
+                    EventRecord	eve;
+                    ConvertEventRefToEventRecord( event,&eve );
+                    mousemng_disable(MOUSEPROC_MACUI);
+                    recieveCommand(MenuEvent(&eve));
+                    mousemng_enable(MOUSEPROC_MACUI);
+                }
+                else {
+                    mackbd_keydown(key);
+                }
+                err = noErr;
+                break;
+            case kEventRawKeyModifiersChanged:
+                if (modif & shiftKey) keystat_senddata(0x70);
+                else keystat_senddata(0x70 | 0x80);
+                if (modif & optionKey) keystat_senddata(0x73);
+                else keystat_senddata(0x73 | 0x80);
+                if (modif & controlKey) keystat_senddata(0x74);
+                else keystat_senddata(0x74 | 0x80);
+                if ((modif & alphaLock) != (backup & alphaLock)) {
+                    keystat_senddata(0x71);
+                    backup = modif;
+                }
+                err = noErr;
+                break;
+            default: 
+                break;             
         }
     }
 
@@ -565,7 +612,7 @@ OSErr setDropFile(FSSpec spec, int drv) 
             
         case FTYPE_TEXT:
             strcpy(np2tool.skin, fname);
-            skinchange();
+            skinchange(true);
             break;
         
         case FTYPE_THD:
@@ -672,9 +719,6 @@ static void createskinmenu(MenuRef ret) 
 const char	*base;
 	char	*p;
 	UINT	i;
-	UINT	j;
-	UINT	id[SKINMRU_MAX];
-const char	*file[SKINMRU_MAX];
     char	longname[256];
 
 	AppendMenuItemTextWithCFString(ret, CFCopyLocalizedString(CFSTR("Select Skin..."),"Slect Skin"), kMenuItemAttrIconDisabled, NULL,NULL);
@@ -683,50 +727,40 @@ const char	*file[SKINMRU_MAX];
 	base = np2tool.skin;
 	AppendMenuItemTextWithCFString(ret, CFCopyLocalizedString(CFSTR(""),"Base Skin"), kMenuItemAttrIconDisabled, NULL,NULL);
 	if (base[0] == '\0') {
-        DisableMenuItem(ret, 3);
+        CheckMenuItem(ret, BASENUMBER-1, true);
     }
 	for (cnt=0; cnti; j--) {
-			id[j] = id[j-1];
-		}
-		id[i] = cnt;
-		file[cnt] = p;
+        UInt32	attr = kMenuItemAttrIconDisabled;
+        if (file_attr(p) != FILEATTR_ARCHIVE) {
+            attr |= kMenuItemAttrDisabled;
+        }
+        ZeroMemory(longname, sizeof(longname));
+		if (!getLongFileName(longname, p)) {
+            strcpy(longname, file_getname(p));
+        }
+        AppendMenuItemTextWithCFString(ret, CFStringCreateWithCString(NULL, longname, kCFStringEncodingUTF8), attr, NULL, NULL);
 	}
 	for (i=0; i