*/}}
YimingWu 3 weeks ago
parent
commit
c2e431f2dc
5 changed files with 48 additions and 6 deletions
  1. 1 1
      la_interface.h
  2. 34 3
      la_kernel.c
  3. 2 1
      la_tns_kernel.c
  4. 10 1
      resources/la_operators.c
  5. 1 0
      resources/la_widgets.c

+ 1 - 1
la_interface.h

@@ -2173,7 +2173,7 @@ STRUCTURE(laFileItem){
     int IsFolder;
     char Name[1024];
     int Size;
-    int Timestamp;
+    uint64_t Timestamp;
     laTimeInfo TimeModified;
     int Type;
 };

+ 34 - 3
la_kernel.c

@@ -1568,7 +1568,7 @@ laInputMappingEntry* laNewInputMappingEntry(laInputMapping* im, int DeviceType,
 }
 laInputMappingEntry* laNewInputMappingEntryP(laInputMapping* im, int DeviceType, int JoystickDevice, char* Key, int SpecialKeyBit, int Signal){
     laCustomSignal* cs; if(!(cs=laFindSignalByID(Signal))) return 0;
-    laNewInputMappingEntry(im,DeviceAdded,JoystickDevice,Key,SpecialKeyBit,SSTR(cs->Name));
+    laNewInputMappingEntry(im,DeviceType,JoystickDevice,Key,SpecialKeyBit,SSTR(cs->Name));
 }
 void laRemoveInputMappingEntry(laInputMapping* im, laInputMappingEntry* e){
     memAssignRef(e,&e->Parent,0); lstRemoveItem(&im->Entries,e); strSafeDestroy(&e->Signal); strSafeDestroy(&e->Key); memFree(e);
@@ -1840,13 +1840,44 @@ int la_TranslateSpecialKey(int keysym){
     case VK_CONTROL:   return LA_KEY_CTRL;
     case VK_SHIFT:     return LA_KEY_SHIFT;
     case VK_MENU:      return LA_KEY_ALT;
+    case VK_F1:        return LA_KEY_F1;
+    case VK_F2:        return LA_KEY_F2;
+    case VK_F3:        return LA_KEY_F3;
+    case VK_F4:        return LA_KEY_F4;
+    case VK_F5:        return LA_KEY_F5;
+    case VK_F6:        return LA_KEY_F6;
+    case VK_F7:        return LA_KEY_F7;
+    case VK_F8:        return LA_KEY_F8;
+    case VK_F9:        return LA_KEY_F9;
+    case VK_F10:       return LA_KEY_F10;
+    case VK_F11:       return LA_KEY_F11;
+    case VK_F12:       return LA_KEY_F12;
+    case VK_NUMPAD0:   return LA_KEY_NUM0;
+    case VK_NUMPAD1:   return LA_KEY_NUM1;
+    case VK_NUMPAD2:   return LA_KEY_NUM2;
+    case VK_NUMPAD3:   return LA_KEY_NUM3;
+    case VK_NUMPAD4:   return LA_KEY_NUM4;
+    case VK_NUMPAD5:   return LA_KEY_NUM5;
+    case VK_NUMPAD6:   return LA_KEY_NUM6;
+    case VK_NUMPAD7:   return LA_KEY_NUM7;
+    case VK_NUMPAD8:   return LA_KEY_NUM8;
+    case VK_NUMPAD9:   return LA_KEY_NUM9;
+    case VK_MULTIPLY:   return LA_KEY_NUMMULT;
+    case VK_DIVIDE:   return LA_KEY_NUMDIVIDE;
+    case VK_ADD:   return LA_KEY_NUMPLUS;
+    case VK_SUBTRACT:   return LA_KEY_NUMMINUS;
+    case VK_DECIMAL:   return LA_KEY_NUMDOT;
     case VK_OEM_1:     return ';';
     case VK_OEM_2:     return '/';
     case VK_OEM_3:     return '`';
     case VK_OEM_4:     return '[';
     case VK_OEM_5:     return '\\';
     case VK_OEM_6:     return ']';
-    case VK_OEM_7:      return '\'';
+    case VK_OEM_7:     return '\'';
+    case VK_OEM_COMMA: return ',';
+    case VK_OEM_PERIOD: return '.';
+    case VK_OEM_PLUS:  return '+';
+    case VK_OEM_MINUS: return '-';
     default:           return keysym;
     }
 #endif
@@ -4397,7 +4428,7 @@ laUiItem *laShowItemFull(laUiList *uil, laColumn *c, laPropPack *Base, const cha
     return ui;
 }
 laUiItem *laShowImage(laUiList *uil, laColumn *c, tnsImage* Image, int Height){
-    laUiItem *ui = memAcquireSimple(sizeof(laUiItem));
+    laUiItem *ui = memAcquire(sizeof(laUiItem));
     ui->C = c; memAssignRef(ui,&ui->Extra,Image);
     ui->Type=_LA_UI_IMAGE; ui->Type->Init(ui);
     ui->SymbolID=Height;

+ 2 - 1
la_tns_kernel.c

@@ -2065,7 +2065,8 @@ void tnsStopUsingImage(tnsImage* im){
 }
 void tnsRemoveImage(tnsImage* im){
     while(im->UserCount) tnsStopUsingImage(im);
-    free(im->MemPNG); lstRemoveItem(&T->Images,im); memFree(im);
+    if(im->MemPNG) free(im->MemPNG);
+    lstRemoveItem(&T->Images,im); memFree(im);
 }
 
 #endif //png

+ 10 - 1
resources/la_operators.c

@@ -195,12 +195,18 @@ int la_AcceptFileFormat(laFileBrowser* fb, char* format){
 }
 
 typedef int (*FileSortCompF)(laFileItem* f1,laFileItem* f2);
+#ifdef _WIN32
+#define strverscmp strcmp
+#endif
 int la_filecompname(laFileItem* f1,laFileItem* f2){ return strverscmp(f2->Name, f1->Name); }
 int la_filecompnamerev(laFileItem* f1,laFileItem* f2){ return strverscmp(f1->Name, f2->Name); }
 int la_filecomptime(laFileItem* f1,laFileItem* f2){ return f1->Timestamp - f2->Timestamp; }
 int la_filecomptimerev(laFileItem* f1,laFileItem* f2){ return f2->Timestamp - f1->Timestamp; }
 int la_filecompsize(laFileItem* f1,laFileItem* f2){ return f1->Size - f2->Size; }
 int la_filecompsizerev(laFileItem* f1,laFileItem* f2){ return f2->Size - f1->Size; }
+#ifdef _WIN32
+#undef strverscmp
+#endif
 void la_SortFiles(laFileBrowser* fb, laListHandle* files){
     laListHandle tmp={0}; laFileItem* fi;
     FileSortCompF comp = 0;
@@ -309,6 +315,7 @@ void la_FileBrowserRebuildList(laFileBrowser *fb){
             FileTimeToSystemTime(&(FindFileData.ftLastWriteTime), &stUTC);
             SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
 
+            fi->Timestamp = (uint64_t)FindFileData.ftLastWriteTime.dwHighDateTime|((uint64_t)(FindFileData.ftLastWriteTime.dwLowDateTime)<<32);
             fi->TimeModified.Year = stLocal.wYear;
             fi->TimeModified.Month = stLocal.wMonth;
             fi->TimeModified.Day = stLocal.wDay;
@@ -381,7 +388,7 @@ laFileBrowser *la_FileBrowserInit(laOperator *a){
     la_FileBrowserRebuildList(fb);
     fb->FileName[0] = 0;
 
-    fb->Thumbnail = tnsNewImage(0);
+    memAssignRef(fb, &fb->Thumbnail, tnsNewImage(0));
     fb->ShowThumbnail = 1;
 
     return fb;
@@ -395,6 +402,7 @@ void la_FileBrowserGetFullPath(laFileBrowser *fb,char* buf){
     strcat(buf, fb->FileName);
 }
 void la_FileBrowserRefreshThumbnail(laFileBrowser* fb){
+#ifdef __linux__
     char buf[2048]="file://"; char md5[128];
     la_FileBrowserGetFullPath(fb,buf+strlen(buf));
     md5String(buf,md5); toHexString(md5,fb->MD5);
@@ -407,6 +415,7 @@ void la_FileBrowserRefreshThumbnail(laFileBrowser* fb){
     }else{
         tnsRefreshImage(fb->Thumbnail,0);
     }
+#endif
 }
 void laset_FileBrowserSelectFile(laFileBrowser *fb, laFileItem *fi, int State){
     int len;

+ 1 - 0
resources/la_widgets.c

@@ -1994,6 +1994,7 @@ void la_ImageUiDestroy(laUiItem *ui){
 #ifdef LA_WITH_PNG
     tnsStopUsingImage(im);
 #endif
+    //memAssignRef(ui, &ui->Extra, 0);
 }
 void la_MeterUiInit(laUiItem *ui){
     la_GeneralUiInit(ui); ui->SymbolID = 20; ui->TemplateContext = 1000;