/[rdesktop]/sourceforge.net/trunk/rdesktop/xkeymap.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/xkeymap.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 170 by astrand, Tue Sep 17 08:18:41 2002 UTC revision 193 by matthewc, Tue Sep 24 11:14:46 2002 UTC
# Line 19  Line 19 
19  */  */
20    
21  #include <X11/Xlib.h>  #include <X11/Xlib.h>
22  #include <X11/keysym.h>  #define XK_MISCELLANY
23  #include <stdio.h>  #include <X11/keysymdef.h>
 #include <stdlib.h>  
 #include <string.h>  
24  #include <ctype.h>  #include <ctype.h>
25  #include <limits.h>  #include <limits.h>
26    #include <time.h>
27  #include "rdesktop.h"  #include "rdesktop.h"
28  #include "scancodes.h"  #include "scancodes.h"
29    
# Line 205  void Line 204  void
204  xkeymap_init(void)  xkeymap_init(void)
205  {  {
206          unsigned int max_keycode;          unsigned int max_keycode;
         int i;  
207    
208          if (strcmp(keymapname, "none"))          if (strcmp(keymapname, "none"))
209                  xkeymap_read(keymapname);                  xkeymap_read(keymapname);
# Line 216  xkeymap_init(void) Line 214  xkeymap_init(void)
214  /* Handles, for example, multi-scancode keypresses (which is not  /* Handles, for example, multi-scancode keypresses (which is not
215     possible via keymap-files) */     possible via keymap-files) */
216  BOOL  BOOL
217  handle_special_keys(KeySym keysym, uint32 ev_time, BOOL pressed)  handle_special_keys(uint32 keysym, uint32 ev_time, BOOL pressed)
218  {  {
219          switch (keysym)          switch (keysym)
220          {          {
221                  case XK_Break:  /* toggle full screen */                  case XK_Break:  /* toggle full screen */
222                          if (pressed && (get_key_state(XK_Alt_L) || get_key_state(XK_Alt_R)))                          if (get_key_state(XK_Alt_L) || get_key_state(XK_Alt_R))
223                          {                          {
224                                  xwin_toggle_fullscreen();                                  if (pressed)
225                                            xwin_toggle_fullscreen();
226                                  return True;                                  return True;
227                          }                          }
228                          break;                          break;
# Line 252  handle_special_keys(KeySym keysym, uint3 Line 251  handle_special_keys(KeySym keysym, uint3
251    
252    
253  key_translation  key_translation
254  xkeymap_translate_key(KeySym keysym, unsigned int keycode, unsigned int state)  xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state)
255  {  {
256          key_translation tr = { 0, 0 };          key_translation tr = { 0, 0 };
257    
# Line 277  xkeymap_translate_key(KeySym keysym, uns Line 276  xkeymap_translate_key(KeySym keysym, uns
276    
277          if (tr.scancode != 0)          if (tr.scancode != 0)
278          {          {
279                  DEBUG_KBD                  DEBUG_KBD(("Found key translation, scancode=0x%x, modifiers=0x%x\n",
                         (("Found key translation, scancode=0x%x, modifiers=0x%x\n",  
280                            tr.scancode, tr.modifiers));                            tr.scancode, tr.modifiers));
281                  return tr;                  return tr;
282          }          }
283    
284          fprintf(stderr, "No translation for (keysym 0x%lx, %s)\n", keysym, get_ksname(keysym));          DEBUG_KBD(("No translation for (keysym 0x%lx, %s)\n", keysym, get_ksname(keysym)));
285    
286          /* not in keymap, try to interpret the raw scancode */          /* not in keymap, try to interpret the raw scancode */
287          if ((keycode >= min_keycode) && (keycode <= 0x60))          if ((keycode >= min_keycode) && (keycode <= 0x60))
# Line 298  xkeymap_translate_key(KeySym keysym, uns Line 296  xkeymap_translate_key(KeySym keysym, uns
296                          tr.modifiers = MapLeftShiftMask;                          tr.modifiers = MapLeftShiftMask;
297                  }                  }
298    
299                  fprintf(stderr, "Sending guessed scancode 0x%x\n", tr.scancode);                  DEBUG_KBD(("Sending guessed scancode 0x%x\n", tr.scancode));
300          }          }
301          else          else
302          {          {
303                  fprintf(stderr, "No good guess for keycode 0x%x found\n", keycode);                  DEBUG_KBD(("No good guess for keycode 0x%x found\n", keycode));
304          }          }
305    
306          return tr;          return tr;
# Line 329  xkeymap_translate_button(unsigned int bu Line 327  xkeymap_translate_button(unsigned int bu
327  }  }
328    
329  char *  char *
330  get_ksname(KeySym keysym)  get_ksname(uint32 keysym)
331  {  {
332          char *ksname = NULL;          char *ksname = NULL;
333    
# Line 362  ensure_remote_modifiers(uint32 ev_time, Line 360  ensure_remote_modifiers(uint32 ev_time,
360                          break;                          break;
361          }          }
362    
363          /* Shift */          /* Shift. Left shift and right shift are treated as equal; either is fine. */
364          if (MASK_HAS_BITS(tr.modifiers, MapShiftMask)          if (MASK_HAS_BITS(tr.modifiers, MapShiftMask)
365              != MASK_HAS_BITS(remote_modifier_state, MapShiftMask))              != MASK_HAS_BITS(remote_modifier_state, MapShiftMask))
366          {          {
367                  /* The remote modifier state is not correct */                  /* The remote modifier state is not correct */
368                  if (MASK_HAS_BITS(tr.modifiers, MapShiftMask))                  if (MASK_HAS_BITS(tr.modifiers, MapLeftShiftMask))
369                  {                  {
370                          /* Needs this modifier. Send down. */                          /* Needs left shift. Send down. */
371                          rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_LSHIFT);                          rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_LSHIFT);
372                  }                  }
373                    else if (MASK_HAS_BITS(tr.modifiers, MapRightShiftMask))
374                    {
375                            /* Needs right shift. Send down. */
376                            rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_RSHIFT);
377                    }
378                  else                  else
379                  {                  {
380                          /* Should not use this modifier. Send up. */                          /* Should not use this modifier. Send up for shift currently pressed. */
381                          rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT);                          if (MASK_HAS_BITS(remote_modifier_state, MapLeftShiftMask))
382                          rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RSHIFT);                                  /* Left shift is down */
383                                    rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT);
384                            else
385                                    /* Right shift is down */
386                                    rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RSHIFT);
387                  }                  }
388          }          }
389    
# Line 421  ensure_remote_modifiers(uint32 ev_time, Line 428  ensure_remote_modifiers(uint32 ev_time,
428    
429    
430  void  void
431  reset_modifier_keys()  reset_modifier_keys(void)
432  {  {
433          /* reset keys */          /* reset keys */
434          uint32 ev_time;          uint32 ev_time;

Legend:
Removed from v.170  
changed lines
  Added in v.193

  ViewVC Help
Powered by ViewVC 1.1.26