diff options
Diffstat (limited to 'fbxkb.c')
-rw-r--r-- | fbxkb.c | 24 |
1 files changed, 18 insertions, 6 deletions
@@ -257,7 +257,7 @@ docklet_create() static gboolean my_str_equal (gchar *a, gchar *b) { - return (a[0] == b[0] && a[1] == b[1]); + return strcmp(a,b) == 0; } @@ -273,10 +273,12 @@ sym2flag(char *sym) if (flag) RET(flag); - if (!s) - s = g_string_new(IMGPREFIX "tt.png"); - s->str[s->len-6] = sym[0]; - s->str[s->len-5] = sym[1]; + if (!s) + s = g_string_new(IMGPREFIX); + else + s = g_string_assign(s,IMGPREFIX); + s = g_string_append(s, sym); + s = g_string_append(s, ".png"); flag = gdk_pixbuf_new_from_file_at_size(s->str, 24, 24, NULL); if (!flag) RET(zzflag); @@ -341,7 +343,7 @@ read_kbd_description() // parse kbd info if (sym_name_atom != None) { - char *sym_name, *tmp, *tok; + char *sym_name, *tmp, *tok, *tmp2; int no; sym_name = XGetAtomName(dpy, sym_name_atom); @@ -364,6 +366,12 @@ read_kbd_description() } else { no = 0; } + if((tmp2 = strchr(tok, '('))) { + // these next two statements could be done cleverly in one statement but the compiler warns if you try it. + // strip left paren, and then right paren + tmp2++; + tmp2[strlen(tmp2)-1] = '\0'; + } for (tmp = tok; isalpha(*tmp); tmp++); *tmp = 0; @@ -376,8 +384,12 @@ read_kbd_description() ERR("xkb group #%d is already defined\n", no); } group2info[no].sym = g_strdup(tok); + strcat(tok,","); + // add variant to end of string for the png lookup + strcat(tok,tmp2); group2info[no].flag = sym2flag(tok); group2info[no].name = XGetAtomName(dpy, kbd_desc_ptr->names->groups[no]); + *tmp2 = 0; } XFree(sym_name); } |