/[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 965 by astrand, Wed Aug 3 11:47:20 2005 UTC revision 1035 by astrand, Fri Dec 30 20:32:06 2005 UTC
# Line 40  Line 40 
40    
41  extern Display *g_display;  extern Display *g_display;
42  extern Window g_wnd;  extern Window g_wnd;
43  extern char keymapname[16];  extern char g_keymapname[16];
44  extern int g_keylayout;  extern unsigned int g_keylayout;
45  extern int g_keyboard_type;  extern int g_keyboard_type;
46  extern int g_keyboard_subtype;  extern int g_keyboard_subtype;
47  extern int g_keyboard_functionkeys;  extern int g_keyboard_functionkeys;
# Line 159  add_sequence(char *rest, char *mapname) Line 159  add_sequence(char *rest, char *mapname)
159          DEBUG_KBD(("\n"));          DEBUG_KBD(("\n"));
160  }  }
161    
162  void  BOOL
163  xkeymap_from_locale(const char *locale)  xkeymap_from_locale(const char *locale)
164  {  {
165          char *str, *ptr;          char *str, *ptr;
166          FILE *fp;          FILE *fp;
167    
168          /* Create a working copy */          /* Create a working copy */
169          str = strdup(locale);          str = xstrdup(locale);
         if (str == NULL)  
         {  
                 perror("strdup");  
                 exit(1);  
         }  
170    
171          /* Truncate at dot and at */          /* Truncate at dot and at */
172          ptr = strrchr(str, '.');          ptr = strrchr(str, '.');
# Line 210  xkeymap_from_locale(const char *locale) Line 205  xkeymap_from_locale(const char *locale)
205          if (fp)          if (fp)
206          {          {
207                  fclose(fp);                  fclose(fp);
208                  STRNCPY(keymapname, str, sizeof(keymapname));                  STRNCPY(g_keymapname, str, sizeof(g_keymapname));
209                  fprintf(stderr, "Autoselected keyboard map %s.\n", keymapname);                  return True;
210          }          }
211    
212            return False;
213  }  }
214    
215    
# Line 314  xkeymap_read(char *mapname) Line 311  xkeymap_read(char *mapname)
311                  }                  }
312    
313                  /* Include */                  /* Include */
314                  if (strncmp(line, "include ", sizeof("include ") - 1) == 0)                  if (str_startswith(line, "include "))
315                  {                  {
316                          if (!xkeymap_read(line + sizeof("include ") - 1))                          if (!xkeymap_read(line + sizeof("include ") - 1))
317                                  return False;                                  return False;
# Line 322  xkeymap_read(char *mapname) Line 319  xkeymap_read(char *mapname)
319                  }                  }
320    
321                  /* map */                  /* map */
322                  if (strncmp(line, "map ", sizeof("map ") - 1) == 0)                  if (str_startswith(line, "map "))
323                  {                  {
324                          g_keylayout = strtol(line + sizeof("map ") - 1, NULL, 16);                          g_keylayout = strtoul(line + sizeof("map ") - 1, NULL, 16);
325                          DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout));                          DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout));
326                          continue;                          continue;
327                  }                  }
328    
329                  /* compose */                  /* compose */
330                  if (strncmp(line, "enable_compose", sizeof("enable_compose") - 1) == 0)                  if (str_startswith(line, "enable_compose"))
331                  {                  {
332                          DEBUG_KBD(("Enabling compose handling\n"));                          DEBUG_KBD(("Enabling compose handling\n"));
333                          g_enable_compose = True;                          g_enable_compose = True;
# Line 338  xkeymap_read(char *mapname) Line 335  xkeymap_read(char *mapname)
335                  }                  }
336    
337                  /* sequence */                  /* sequence */
338                  if (strncmp(line, "sequence", sizeof("sequence") - 1) == 0)                  if (str_startswith(line, "sequence"))
339                  {                  {
340                          add_sequence(line + sizeof("sequence") - 1, mapname);                          add_sequence(line + sizeof("sequence") - 1, mapname);
341                          continue;                          continue;
342                  }                  }
343    
344                  /* keyboard_type */                  /* keyboard_type */
345                  if (strncmp(line, "keyboard_type ", sizeof("keyboard_type ") - 1) == 0)                  if (str_startswith(line, "keyboard_type "))
346                  {                  {
347                          g_keyboard_type = strtol(line + sizeof("keyboard_type ") - 1, NULL, 16);                          g_keyboard_type = strtol(line + sizeof("keyboard_type ") - 1, NULL, 16);
348                          DEBUG_KBD(("keyboard_type 0x%x\n", g_keyboard_type));                          DEBUG_KBD(("keyboard_type 0x%x\n", g_keyboard_type));
# Line 353  xkeymap_read(char *mapname) Line 350  xkeymap_read(char *mapname)
350                  }                  }
351    
352                  /* keyboard_subtype */                  /* keyboard_subtype */
353                  if (strncmp(line, "keyboard_subtype ", sizeof("keyboard_subtype ") - 1) == 0)                  if (str_startswith(line, "keyboard_subtype "))
354                  {                  {
355                          g_keyboard_subtype =                          g_keyboard_subtype =
356                                  strtol(line + sizeof("keyboard_subtype ") - 1, NULL, 16);                                  strtol(line + sizeof("keyboard_subtype ") - 1, NULL, 16);
# Line 362  xkeymap_read(char *mapname) Line 359  xkeymap_read(char *mapname)
359                  }                  }
360    
361                  /* keyboard_functionkeys */                  /* keyboard_functionkeys */
362                  if (strncmp(line, "keyboard_functionkeys ", sizeof("keyboard_functionkeys ") - 1) ==                  if (str_startswith(line, "keyboard_functionkeys "))
                     0)  
363                  {                  {
364                          g_keyboard_functionkeys =                          g_keyboard_functionkeys =
365                                  strtol(line + sizeof("keyboard_functionkeys ") - 1, NULL, 16);                                  strtol(line + sizeof("keyboard_functionkeys ") - 1, NULL, 16);
# Line 447  xkeymap_init(void) Line 443  xkeymap_init(void)
443  {  {
444          unsigned int max_keycode;          unsigned int max_keycode;
445    
446          if (strcmp(keymapname, "none"))          if (strcmp(g_keymapname, "none"))
447          {          {
448                  if (xkeymap_read(keymapname))                  if (xkeymap_read(g_keymapname))
449                          keymap_loaded = True;                          keymap_loaded = True;
450          }          }
451    
# Line 673  xkeymap_translate_key(uint32 keysym, uns Line 669  xkeymap_translate_key(uint32 keysym, uns
669    
670  void  void
671  xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,  xkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,
672                    BOOL pressed)                    BOOL pressed, uint8 nesting)
673  {  {
674          key_translation tr, *ptr;          key_translation tr, *ptr;
675          tr = xkeymap_translate_key(keysym, keycode, state);          tr = xkeymap_translate_key(keysym, keycode, state);
# Line 706  xkeymap_send_keys(uint32 keysym, unsigne Line 702  xkeymap_send_keys(uint32 keysym, unsigne
702                  {                  {
703                          DEBUG_KBD(("Handling sequence element, keysym=0x%x\n",                          DEBUG_KBD(("Handling sequence element, keysym=0x%x\n",
704                                     (unsigned int) ptr->seq_keysym));                                     (unsigned int) ptr->seq_keysym));
705                          xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, True);  
706                          xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, False);                          if (nesting++ > 32)
707                            {
708                                    error("Sequence nesting too deep\n");
709                                    return;
710                            }
711    
712                            xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, True, nesting);
713                            xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, False, nesting);
714                          ptr = ptr->next;                          ptr = ptr->next;
715                  }                  }
716                  while (ptr);                  while (ptr);

Legend:
Removed from v.965  
changed lines
  Added in v.1035

  ViewVC Help
Powered by ViewVC 1.1.26