|  | @@ -1435,13 +1435,118 @@ void laSetPreferenceTemplates(laUiDefineFunc PreferencePageDisplay, laUiDefineFu
 | 
											
												
													
														|  |      MAIN.PreferencePageResource=PreferencePageResource; MAIN.PreferencePageTheme=PreferencePageTheme;
 |  |      MAIN.PreferencePageResource=PreferencePageResource; MAIN.PreferencePageTheme=PreferencePageTheme;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +void la_InputMappingGetKeyName(int key, int special, char* name){
 | 
											
												
													
														|  | 
 |  | +    char *_next=name; name[0]=0;
 | 
											
												
													
														|  | 
 |  | +    if(special&LA_KEY_CTRL){ strcat(name,"Ctrl+"); }
 | 
											
												
													
														|  | 
 |  | +    if(special&LA_KEY_SHIFT){ strcat(name,"Shift+"); }
 | 
											
												
													
														|  | 
 |  | +    if(special&LA_KEY_ALT){ strcat(name,"Shift+"); }
 | 
											
												
													
														|  | 
 |  | +    switch(key){
 | 
											
												
													
														|  | 
 |  | +    case ' ': strcat(name,"Space"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_BACKSPACE: strcat(name,"Backspace"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_ESCAPE: strcat(name,"Escape"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_ENTER: strcat(name,"Enter"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_ARRLEFT: strcat(name,"Left"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_ARRRIGHT: strcat(name,"Right"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_ARRUP: strcat(name,"Up"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_ARRDOWN: strcat(name,"Down"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_SHIFT: case LA_KEY_CTRL: case LA_KEY_ALT: break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_DELETE: strcat(name,"Delete"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_TAB: strcat(name,"Tab"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM1: strcat(name,"Num1"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM2: strcat(name,"Num2"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM3: strcat(name,"Num3"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM4: strcat(name,"Num4"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM5: strcat(name,"Num5"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM6: strcat(name,"Num6"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM7: strcat(name,"Num7"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM8: strcat(name,"Num8"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM9: strcat(name,"Num9"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUM0: strcat(name,"Num0"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUMPLUS: strcat(name,"NumPlus"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUMMINUS: strcat(name,"NumMinus"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUMMULT: strcat(name,"NumMult"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUMDIVIDE: strcat(name,"NumDivide"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUMDOT: strcat(name,"NumDot"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_NUMENTER: strcat(name,"NumEnter"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F1: strcat(name,"F1"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F2: strcat(name,"F2"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F3: strcat(name,"F3"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F4: strcat(name,"F4"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F5: strcat(name,"F5"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F6: strcat(name,"F6"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F7: strcat(name,"F7"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F8: strcat(name,"F8"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F9: strcat(name,"F9"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F10: strcat(name,"F10"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F11: strcat(name,"F11"); break;
 | 
											
												
													
														|  | 
 |  | +    case LA_KEY_F12: strcat(name,"F12"); break;
 | 
											
												
													
														|  | 
 |  | +    default:
 | 
											
												
													
														|  | 
 |  | +        name = name+strlen(name); _next=name;
 | 
											
												
													
														|  | 
 |  | +        laToUTF8(key,name,&_next); *_next=0; break;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +int la_InputMappingGetKeyFromName(char* name, int* special){
 | 
											
												
													
														|  | 
 |  | +    if(!name ||name[0]==0){ *special=0; return 0; }
 | 
											
												
													
														|  | 
 |  | +    *special=0;
 | 
											
												
													
														|  | 
 |  | +    if(strstr(name,"Ctrl")) *special|=LA_KEY_CTRL;
 | 
											
												
													
														|  | 
 |  | +    if(strstr(name,"Shift")) *special|=LA_KEY_SHIFT;
 | 
											
												
													
														|  | 
 |  | +    if(strstr(name,"Alt")) *special|=LA_KEY_ALT;
 | 
											
												
													
														|  | 
 |  | +    char* p=name+strlen(name)-1;
 | 
											
												
													
														|  | 
 |  | +    while(*p!='+'){ p--; if(p<=name){p=name; break;} }
 | 
											
												
													
														|  | 
 |  | +    while(*p=='+' || *p==' '){ p++; }
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Space")) return ' ';
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Backspace")) return LA_KEY_BACKSPACE;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Escape")) return LA_KEY_ESCAPE;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Enter")) return LA_KEY_ENTER;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Left")) return LA_KEY_ARRLEFT;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Right")) return LA_KEY_ARRRIGHT;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Up")) return LA_KEY_ARRUP;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Down")) return LA_KEY_ARRDOWN;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Delete")) return LA_KEY_DELETE;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Tab")) return LA_KEY_TAB;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num1")) return LA_KEY_NUM1;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num2")) return LA_KEY_NUM2;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num3")) return LA_KEY_NUM3;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num4")) return LA_KEY_NUM4;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num5")) return LA_KEY_NUM5;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num6")) return LA_KEY_NUM6;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num7")) return LA_KEY_NUM7;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num8")) return LA_KEY_NUM8;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num9")) return LA_KEY_NUM9;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"Num0")) return LA_KEY_NUM0;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"NumPlus")) return LA_KEY_NUMPLUS;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"NumMinus")) return LA_KEY_NUMMINUS;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"NumMult")) return LA_KEY_NUMMULT;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"NumDivide")) return LA_KEY_NUMDIVIDE;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"NumDot")) return LA_KEY_NUMDOT;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"NumEnter")) return LA_KEY_NUMENTER;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F1")) return LA_KEY_F1;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F2")) return LA_KEY_F2;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F3")) return LA_KEY_F3;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F4")) return LA_KEY_F4;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F5")) return LA_KEY_F5;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F6")) return LA_KEY_F6;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F7")) return LA_KEY_F7;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F8")) return LA_KEY_F8;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F9")) return LA_KEY_F9;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F10")) return LA_KEY_F10;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F11")) return LA_KEY_F11;
 | 
											
												
													
														|  | 
 |  | +    if(strSame(p,"F12")) return LA_KEY_F12;
 | 
											
												
													
														|  | 
 |  | +    int adv;
 | 
											
												
													
														|  | 
 |  | +    return laToUnicode(p,&adv);
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  laCustomSignal* laFindSignal(char* Name){
 |  |  laCustomSignal* laFindSignal(char* Name){
 | 
											
												
													
														|  |      for(laCustomSignal* cs=MAIN.CustomSignals.pFirst;cs;cs=cs->Item.pNext){ if(strSame(SSTR(cs->Name),Name)) return cs; }
 |  |      for(laCustomSignal* cs=MAIN.CustomSignals.pFirst;cs;cs=cs->Item.pNext){ if(strSame(SSTR(cs->Name),Name)) return cs; }
 | 
											
												
													
														|  |      return 0;
 |  |      return 0;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +laCustomSignal* laFindSignalByID(int ID){
 | 
											
												
													
														|  | 
 |  | +    for(laCustomSignal* cs=MAIN.CustomSignals.pFirst;cs;cs=cs->Item.pNext){ if(ID==cs->Signal) return cs; }
 | 
											
												
													
														|  | 
 |  | +    return 0;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  void laInputMappingUpdateSignal(laInputMappingEntry* ime){
 |  |  void laInputMappingUpdateSignal(laInputMappingEntry* ime){
 | 
											
												
													
														|  | -    if(ime->DeviceType == LA_INPUT_DEVICE_KEYBOARD){ char* str=SSTR(ime->Key); if(str&&str[0]){ int adv; ime->KeyValue=laToUnicode(str,&adv); }else{ ime->KeyValue=0; } }
 |  | 
 | 
											
												
													
														|  | -    if(ime->DeviceType == LA_INPUT_DEVICE_JOYSTICK){ int key=0; sscanf(SSTR(ime->Key),"%d",&key); ime->KeyValue=key; }
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if(ime->DeviceType == LA_INPUT_DEVICE_KEYBOARD){ char* str=SSTR(ime->Key);
 | 
											
												
													
														|  | 
 |  | +        if(str&&str[0]){ int adv; ime->KeyValue=la_InputMappingGetKeyFromName(str,&ime->SpecialKeyBits); }else{ ime->KeyValue=0; }
 | 
											
												
													
														|  | 
 |  | +    }elif(ime->DeviceType == LA_INPUT_DEVICE_JOYSTICK){ int key=0; sscanf(SSTR(ime->Key),"%d",&key); ime->KeyValue=key; }
 | 
											
												
													
														|  |      char* signal = SSTR(ime->Signal);
 |  |      char* signal = SSTR(ime->Signal);
 | 
											
												
													
														|  |      laCustomSignal *cs=laFindSignal(signal); if(cs){ ime->SignalValue=cs->Signal; }else{ ime->SignalValue=0;}
 |  |      laCustomSignal *cs=laFindSignal(signal); if(cs){ ime->SignalValue=cs->Signal; }else{ ime->SignalValue=0;}
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
										
											
												
													
														|  | @@ -1457,6 +1562,13 @@ laInputMappingEntry* laNewInputMappingEntry(laInputMapping* im, int DeviceType,
 | 
											
												
													
														|  |      memAssignRef(e,&e->Parent,im);
 |  |      memAssignRef(e,&e->Parent,im);
 | 
											
												
													
														|  |      if(Signal){ strSafeSet(&e->Signal,Signal); } if(Key){ strSafeSet(&e->Key,Key); }
 |  |      if(Signal){ strSafeSet(&e->Signal,Signal); } if(Key){ strSafeSet(&e->Key,Key); }
 | 
											
												
													
														|  |      laInputMappingUpdateSignal(e);
 |  |      laInputMappingUpdateSignal(e);
 | 
											
												
													
														|  | 
 |  | +    e->SpecialKeyBits=SpecialKeyBit;
 | 
											
												
													
														|  | 
 |  | +    char buf[64],*_next=buf;
 | 
											
												
													
														|  | 
 |  | +    la_InputMappingGetKeyName(e->KeyValue,e->SpecialKeyBits,buf); strSafeSet(&e->Key,buf);
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +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));
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  void laRemoveInputMappingEntry(laInputMapping* im, laInputMappingEntry* e){
 |  |  void laRemoveInputMappingEntry(laInputMapping* im, laInputMappingEntry* e){
 | 
											
												
													
														|  |      memAssignRef(e,&e->Parent,0); lstRemoveItem(&im->Entries,e); strSafeDestroy(&e->Signal); strSafeDestroy(&e->Key); memFree(e);
 |  |      memAssignRef(e,&e->Parent,0); lstRemoveItem(&im->Entries,e); strSafeDestroy(&e->Signal); strSafeDestroy(&e->Key); memFree(e);
 | 
											
										
											
												
													
														|  | @@ -1697,6 +1809,22 @@ int la_TranslateSpecialKey(int keysym){
 | 
											
												
													
														|  |      case XK_Shift_R:   return LA_KEY_SHIFT;
 |  |      case XK_Shift_R:   return LA_KEY_SHIFT;
 | 
											
												
													
														|  |      case XK_Alt_L:     return LA_KEY_ALT;
 |  |      case XK_Alt_L:     return LA_KEY_ALT;
 | 
											
												
													
														|  |      case XK_Alt_R:     return LA_KEY_ALT;
 |  |      case XK_Alt_R:     return LA_KEY_ALT;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_1:      return LA_KEY_NUM1;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_2:      return LA_KEY_NUM2;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_3:      return LA_KEY_NUM3;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_4:      return LA_KEY_NUM4;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_5:      return LA_KEY_NUM5;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_6:      return LA_KEY_NUM6;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_7:      return LA_KEY_NUM7;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_8:      return LA_KEY_NUM8;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_9:      return LA_KEY_NUM9;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_0:      return LA_KEY_NUM0;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_Add: return LA_KEY_NUMPLUS;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_Subtract: return LA_KEY_NUMMINUS;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_Divide: return LA_KEY_NUMDIVIDE;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_Multiply: return LA_KEY_NUMMULT;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_Decimal: return LA_KEY_NUMDOT;
 | 
											
												
													
														|  | 
 |  | +    case XK_KP_Enter:  return LA_KEY_NUMENTER;
 | 
											
												
													
														|  |      default:           return keysym;
 |  |      default:           return keysym;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  #endif
 |  |  #endif
 | 
											
										
											
												
													
														|  | @@ -2145,7 +2273,7 @@ void la_PanelDrawToWindow(laPanel *p, laWindow *w){
 | 
											
												
													
														|  |          tnsUniformColorComposing(T->immShader,0,0,0);
 |  |          tnsUniformColorComposing(T->immShader,0,0,0);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    if (p->Mode && (!p->AnimationMode || (p->AnimationMode && p->AnimationRatio > 0.99))){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if (p->Mode && (!p->AnimationMode || (p->AnimationMode && p->AnimationRatio > 0.99) || p->AnimationMode==LA_PANEL_ANIMATION_FLASH)){
 | 
											
												
													
														|  |          tnsUseNoTexture();
 |  |          tnsUseNoTexture();
 | 
											
												
													
														|  |          if (!p->IsMenuPanel){
 |  |          if (!p->IsMenuPanel){
 | 
											
												
													
														|  |              la_PanelDrawDescendBorder(p, (*p->BT), MAIN.SolidShadowLength, MAIN.FloatingAlpha);
 |  |              la_PanelDrawDescendBorder(p, (*p->BT), MAIN.SolidShadowLength, MAIN.FloatingAlpha);
 | 
											
										
											
												
													
														|  | @@ -2153,8 +2281,16 @@ void la_PanelDrawToWindow(laPanel *p, laWindow *w){
 | 
											
												
													
														|  |          tnsFlush();
 |  |          tnsFlush();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    if(p->ParentOperator){
 | 
											
												
													
														|  | 
 |  | +        tnsUseNoTexture();
 | 
											
												
													
														|  | 
 |  | +        tnsColor4d(LA_COLOR3(MAIN.CurrentTheme->Color),0.7*(p->AnimationMode==LA_PANEL_ANIMATION_FLASH?1.0f:p->AnimationRatio));
 | 
											
												
													
														|  | 
 |  | +        tnsVertex2d(0,0); tnsVertex2d(w->CW,0); tnsVertex2d(w->CW,w->CH); tnsVertex2d(0,w->CH);
 | 
											
												
													
														|  | 
 |  | +        tnsPackAs(GL_TRIANGLE_FAN); tnsFlush();
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      switch (p->AnimationMode){
 |  |      switch (p->AnimationMode){
 | 
											
												
													
														|  | -    case 0:
 |  | 
 | 
											
												
													
														|  | 
 |  | +    case 0: /* and */
 | 
											
												
													
														|  | 
 |  | +    case LA_PANEL_ANIMATION_FLASH:
 | 
											
												
													
														|  |          tnsDraw2DTextureDirectly(p->OffScr->pColor[0], p->X, p->Y, p->W, p->H);
 |  |          tnsDraw2DTextureDirectly(p->OffScr->pColor[0], p->X, p->Y, p->W, p->H);
 | 
											
												
													
														|  |          if(!(p->SR || p->SB || p->Parent || p->Block || p->IsMenuPanel)){
 |  |          if(!(p->SR || p->SB || p->Parent || p->Block || p->IsMenuPanel)){
 | 
											
												
													
														|  |              real* color=laThemeColor(_LA_THEME_PANEL,LA_BT_TEXT); tnsColor4d(LA_COLOR3(color),color[3]*(p->ShowCorner?1:0.8));
 |  |              real* color=laThemeColor(_LA_THEME_PANEL,LA_BT_TEXT); tnsColor4d(LA_COLOR3(color),color[3]*(p->ShowCorner?1:0.8));
 | 
											
										
											
												
													
														|  | @@ -2164,6 +2300,16 @@ void la_PanelDrawToWindow(laPanel *p, laWindow *w){
 | 
											
												
													
														|  |              tnsColor4dv(laThemeColor(_LA_THEME_PANEL,LA_BT_NORMAL)); tnsVertex2d(px-len,py); tnsVertex2d(px,py-len);
 |  |              tnsColor4dv(laThemeColor(_LA_THEME_PANEL,LA_BT_NORMAL)); tnsVertex2d(px-len,py); tnsVertex2d(px,py-len);
 | 
											
												
													
														|  |              tnsLineWidth(2); tnsPackAs(GL_LINES); tnsLineWidth(1);
 |  |              tnsLineWidth(2); tnsPackAs(GL_LINES); tnsLineWidth(1);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | 
 |  | +        if(p->AnimationMode==LA_PANEL_ANIMATION_FLASH){
 | 
											
												
													
														|  | 
 |  | +            p->AnimationRatio += MAIN.PanelAnimationSpeed * 0.1 * MAIN.LastFrameTime * 60;
 | 
											
												
													
														|  | 
 |  | +            if((int)(p->AnimationRatio*6)%2){
 | 
											
												
													
														|  | 
 |  | +                tnsUseNoTexture();
 | 
											
												
													
														|  | 
 |  | +                tnsColor4dv(laAccentColor(LA_BT_SELECTED));
 | 
											
												
													
														|  | 
 |  | +                tnsVertex2d(p->X,p->Y); tnsVertex2d(p->X+p->W,p->Y); tnsVertex2d(p->X+p->W,p->Y+p->H); tnsVertex2d(p->X,p->Y+p->H); 
 | 
											
												
													
														|  | 
 |  | +                tnsPackAs(GL_TRIANGLE_FAN); tnsFlush();
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +            if (p->AnimationRatio > 0.99) p->AnimationMode = 0; laRefreshWindow();
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  |          break;
 |  |          break;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      case LA_PANEL_ANIMATION_DROP_DOWN:
 |  |      case LA_PANEL_ANIMATION_DROP_DOWN:
 | 
											
										
											
												
													
														|  | @@ -6622,7 +6768,7 @@ int laKeyMapExecuteEvent(laOperator *from, laKeyMapper *km, laEvent *e){
 | 
											
												
													
														|  |      char *instructions;
 |  |      char *instructions;
 | 
											
												
													
														|  |      if(e->type==LA_MOUSEMOVE) return 0;
 |  |      if(e->type==LA_MOUSEMOVE) return 0;
 | 
											
												
													
														|  |      for (kmi = km->Items.pFirst; kmi; kmi = kmi->Item.pNext){
 |  |      for (kmi = km->Items.pFirst; kmi; kmi = kmi->Item.pNext){
 | 
											
												
													
														|  | -        if (kmi->SpecialKeyBits == e->SpecialKeyBit &&
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if ((kmi->SpecialKeyBits == e->SpecialKeyBit||kmi->EventType==LA_SIGNAL_EVENT) &&
 | 
											
												
													
														|  |              kmi->EventType == e->type && ((kmi->Key == e->Input) || (kmi->Key == e->key))){
 |  |              kmi->EventType == e->type && ((kmi->Key == e->Input) || (kmi->Key == e->key))){
 | 
											
												
													
														|  |              instructions = kmi->Instructions ? kmi->Instructions->Ptr : 0;
 |  |              instructions = kmi->Instructions ? kmi->Instructions->Ptr : 0;
 | 
											
												
													
														|  |              if (kmi->Operation)
 |  |              if (kmi->Operation)
 | 
											
										
											
												
													
														|  | @@ -6640,7 +6786,7 @@ int laKeyMapExecuteEventEx(laOperator *from, laPropPack *UiExtra, laKeyMapper *k
 | 
											
												
													
														|  |      int inv = 0; int lx = -1, ly = -1;
 |  |      int inv = 0; int lx = -1, ly = -1;
 | 
											
												
													
														|  |      if(e->type==LA_MOUSEMOVE) return 0;
 |  |      if(e->type==LA_MOUSEMOVE) return 0;
 | 
											
												
													
														|  |      for (kmi = km->Items.pFirst; kmi; kmi = kmi->Item.pNext){
 |  |      for (kmi = km->Items.pFirst; kmi; kmi = kmi->Item.pNext){
 | 
											
												
													
														|  | -        if (kmi->SpecialKeyBits == e->SpecialKeyBit &&
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if ((kmi->SpecialKeyBits == e->SpecialKeyBit||kmi->EventType==LA_SIGNAL_EVENT) &&
 | 
											
												
													
														|  |              kmi->EventType == e->type && ((kmi->Key == e->Input) || (kmi->Key == e->key))){
 |  |              kmi->EventType == e->type && ((kmi->Key == e->Input) || (kmi->Key == e->key))){
 | 
											
												
													
														|  |              if (e->Localized){
 |  |              if (e->Localized){
 | 
											
												
													
														|  |                  lx = e->x;
 |  |                  lx = e->x;
 | 
											
										
											
												
													
														|  | @@ -7623,10 +7769,15 @@ int la_ProcessSysMessage(){
 | 
											
												
													
														|  |                  if (InputStatus == XLookupKeySym || InputStatus == XLookupBoth) { /*printf("status: %d\n", InputStatus);*/ }
 |  |                  if (InputStatus == XLookupKeySym || InputStatus == XLookupBoth) { /*printf("status: %d\n", InputStatus);*/ }
 | 
											
												
													
														|  |              if (InputCount){ MAIN.InputBuf[InputCount]=0; } strToUnicode(MAIN.InputBufU,MAIN.InputBuf); int UCount=strlenU(MAIN.InputBufU);
 |  |              if (InputCount){ MAIN.InputBuf[InputCount]=0; } strToUnicode(MAIN.InputBufU,MAIN.InputBuf); int UCount=strlenU(MAIN.InputBufU);
 | 
											
												
													
														|  |              for(int i=0;i<UCount;i++){ if(la_AllowInput(MAIN.InputBufU[i])) la_SendInputEvent(e.xkey.window, MAIN.InputBufU[i]); }
 |  |              for(int i=0;i<UCount;i++){ if(la_AllowInput(MAIN.InputBufU[i])) la_SendInputEvent(e.xkey.window, MAIN.InputBufU[i]); }
 | 
											
												
													
														|  | 
 |  | +            XKeyboardState x; XGetKeyboardControl(MAIN.dpy, &x);
 | 
											
												
													
														|  | 
 |  | +            int numlock=0; if(x.led_mask & 2){ numlock=1; }
 | 
											
												
													
														|  |              if(InputKeysym=XkbKeycodeToKeysym(e.xkey.display, e.xkey.keycode, 0, 0)){
 |  |              if(InputKeysym=XkbKeycodeToKeysym(e.xkey.display, e.xkey.keycode, 0, 0)){
 | 
											
												
													
														|  |  #ifdef DEBUG
 |  |  #ifdef DEBUG
 | 
											
												
													
														|  |                  printf("pressed KEY: %d\n", (int)InputKeysym);
 |  |                  printf("pressed KEY: %d\n", (int)InputKeysym);
 | 
											
												
													
														|  |  #endif
 |  |  #endif
 | 
											
												
													
														|  | 
 |  | +                if(/*numlock && */InputKeysym>=XK_KP_Space && InputKeysym<=XK_KP_9){
 | 
											
												
													
														|  | 
 |  | +                    InputKeysym=XkbKeycodeToKeysym(e.xkey.display, e.xkey.keycode, 0, 1);
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  |                  la_SendKeyboardEvent(e.xkey.window, LA_KEY_DOWN, la_TranslateSpecialKey(InputKeysym));
 |  |                  la_SendKeyboardEvent(e.xkey.window, LA_KEY_DOWN, la_TranslateSpecialKey(InputKeysym));
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              break;
 |  |              break;
 |