*/}}
Browse Source

input mapping processing

YimingWu 1 month ago
parent
commit
2fd5128847
2 changed files with 28 additions and 5 deletions
  1. 8 5
      la_interface.h
  2. 20 0
      la_kernel.c

+ 8 - 5
la_interface.h

@@ -102,6 +102,9 @@
 #define LA_KEY_ALT       (1<<22)
 #define LA_KEY_DELETE    (1<<23)
 #define LA_KEY_TAB       (1<<24)
+
+#define LA_SIGNAL_EVENT  (1<<31)
+
 #ifdef _WIN32
 #define XK_F1  1
 #define XK_F2  2
@@ -1465,11 +1468,11 @@ STRUCTURE(laInputMappingBundle){
     laInputMapping* CurrentInputMapping;
 };
 
-#define LA_SIGNAL_NEW 1
-#define LA_SIGNAL_DELETE 2
-#define LA_SIGNAL_CONFIRM 3
-#define LA_SIGNAL_UNDO 4
-#define LA_SIGNAL_REDO 5
+#define LA_SIGNAL_NEW 10000
+#define LA_SIGNAL_DELETE 10001
+#define LA_SIGNAL_CONFIRM 10002
+#define LA_SIGNAL_UNDO 10003
+#define LA_SIGNAL_REDO 10004
 
 STRUCTURE(laCustomSignal){
     laListItem Item;

+ 20 - 0
la_kernel.c

@@ -1469,6 +1469,18 @@ void laRemoveCustomSignal(laCustomSignal* cs){
     strSafeDestroy(&cs->Name); lstRemoveItem(&MAIN.CustomSignals,cs); memFree(cs);
 }
 
+void la_SendSignalsFromEvent(laEvent* e){
+    laInputMapping* im = MAIN.InputMapping->CurrentInputMapping;
+    if(!im){return;}
+    for(laInputMappingEntry* ime = im->Entries.pFirst;ime;ime=ime->Item.pNext){
+        if(e->type==LA_KEY_DOWN && ime->DeviceType == LA_INPUT_DEVICE_KEYBOARD){
+            if(e->key == ime->KeyValue && e->SpecialKeyBit == ime->SpecialKeyBits){
+                la_SendSignalEvent(e->window->win,ime->SignalValue);
+            }
+        }
+    }
+}
+
 //MSG====================================================
 
 int la_IsThisSysWindow(laWindow *wnd, SYSWINDOW hwnd){
@@ -1719,6 +1731,12 @@ void la_SendTimerEvent(SYSWINDOW hwnd, int type){
     e->type = type;
     la_SaveEvent(hwnd, e, 1);
 };
+void la_SendSignalEvent(SYSWINDOW* hwnd, int signal){
+    laEvent *e = memAcquireSimple(sizeof(laEvent));
+    e->type = LA_SIGNAL_EVENT;
+    e->key = signal;
+    la_SaveEvent(hwnd, e, 1);
+};
 void laRetriggerOperators(){
     MAIN.ReTriggerOperators = 1;
 }
@@ -7385,6 +7403,8 @@ int la_HandleSingleEvent(laEvent *e, laListHandle *Operators){
     int Result = 0;
     laConfirmData *ConfirmData = 0, *NextConfirmData = 0;
 
+    la_SendSignalsFromEvent(e);
+
     if(MAIN.InputProcess){ MAIN.CurrentInputEvent=e; MAIN.InputProcess(e); MAIN.CurrentInputEvent=0; }
 
     a = Operators->pFirst;