xkb: Factor out a function to copy a keymap's controls onto another
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
		
							parent
							
								
									795066477e
								
							
						
					
					
						commit
						361f405d3c
					
				| 
						 | 
					@ -841,6 +841,9 @@ extern void XkbFakeDeviceButton(DeviceIntPtr /* dev */ ,
 | 
				
			||||||
                                int /* press */ ,
 | 
					                                int /* press */ ,
 | 
				
			||||||
                                int /* button */ );
 | 
					                                int /* button */ );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern _X_EXPORT void XkbCopyControls(XkbDescPtr /* dst */ ,
 | 
				
			||||||
 | 
					                                      XkbDescPtr /* src */ );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "xkbfile.h"
 | 
					#include "xkbfile.h"
 | 
				
			||||||
#include "xkbrules.h"
 | 
					#include "xkbrules.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								xkb/xkb.c
								
								
								
								
							
							
						
						
									
										14
									
								
								xkb/xkb.c
								
								
								
								
							| 
						 | 
					@ -5950,25 +5950,13 @@ ProcXkbGetKbdByName(ClientPtr client)
 | 
				
			||||||
    if (rep.loaded) {
 | 
					    if (rep.loaded) {
 | 
				
			||||||
        XkbDescPtr old_xkb;
 | 
					        XkbDescPtr old_xkb;
 | 
				
			||||||
        xkbNewKeyboardNotify nkn;
 | 
					        xkbNewKeyboardNotify nkn;
 | 
				
			||||||
        int i, nG, nTG;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        old_xkb = xkb;
 | 
					        old_xkb = xkb;
 | 
				
			||||||
        xkb = new;
 | 
					        xkb = new;
 | 
				
			||||||
        dev->key->xkbInfo->desc = xkb;
 | 
					        dev->key->xkbInfo->desc = xkb;
 | 
				
			||||||
        new = old_xkb;          /* so it'll get freed automatically */
 | 
					        new = old_xkb;          /* so it'll get freed automatically */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        *xkb->ctrls = *old_xkb->ctrls;
 | 
					        XkbCopyControls(xkb, old_xkb);
 | 
				
			||||||
        for (nG = nTG = 0, i = xkb->min_key_code; i <= xkb->max_key_code; i++) {
 | 
					 | 
				
			||||||
            nG = XkbKeyNumGroups(xkb, i);
 | 
					 | 
				
			||||||
            if (nG >= XkbNumKbdGroups) {
 | 
					 | 
				
			||||||
                nTG = XkbNumKbdGroups;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (nG > nTG) {
 | 
					 | 
				
			||||||
                nTG = nG;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        xkb->ctrls->num_groups = nTG;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        nkn.deviceID = nkn.oldDeviceID = dev->id;
 | 
					        nkn.deviceID = nkn.oldDeviceID = dev->id;
 | 
				
			||||||
        nkn.minKeyCode = new->min_key_code;
 | 
					        nkn.minKeyCode = new->min_key_code;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2090,3 +2090,26 @@ XkbMergeLockedPtrBtns(DeviceIntPtr master)
 | 
				
			||||||
        xkbi->lockedPtrButtons |= d->key->xkbInfo->lockedPtrButtons;
 | 
					        xkbi->lockedPtrButtons |= d->key->xkbInfo->lockedPtrButtons;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					XkbCopyControls(XkbDescPtr dst, XkbDescPtr src)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int i, nG, nTG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!dst || !src)
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *dst->ctrls = *src->ctrls;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (nG = nTG = 0, i = dst->min_key_code; i <= dst->max_key_code; i++) {
 | 
				
			||||||
 | 
					        nG = XkbKeyNumGroups(dst, i);
 | 
				
			||||||
 | 
					        if (nG >= XkbNumKbdGroups) {
 | 
				
			||||||
 | 
					            nTG = XkbNumKbdGroups;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (nG > nTG) {
 | 
				
			||||||
 | 
					            nTG = nG;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    dst->ctrls->num_groups = nTG;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue