|
Packit |
7e555f |
/*
|
|
Packit |
7e555f |
* Copyright (C) 2002-2006 Sergey V. Udaltsov <svu@gnome.org>
|
|
Packit |
7e555f |
*
|
|
Packit |
7e555f |
* This library is free software; you can redistribute it and/or
|
|
Packit |
7e555f |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
7e555f |
* License as published by the Free Software Foundation; either
|
|
Packit |
7e555f |
* version 2 of the License, or (at your option) any later version.
|
|
Packit |
7e555f |
*
|
|
Packit |
7e555f |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
7e555f |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
7e555f |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
7e555f |
* Lesser General Public License for more details.
|
|
Packit |
7e555f |
*
|
|
Packit |
7e555f |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
7e555f |
* License along with this library; if not, write to the
|
|
Packit |
7e555f |
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Packit |
7e555f |
* Boston, MA 02111-1307, USA.
|
|
Packit |
7e555f |
*/
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
#include <string.h>
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
#include "xklavier_private.h"
|
|
Packit |
7e555f |
#include "xklavier_private_xkb.h"
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
#ifdef LIBXKBFILE_PRESENT
|
|
Packit |
7e555f |
#if 0
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
_XkbModsRecDump(FILE * fs, XkbModsRec * mods)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
fprintf(fs, "flags: 0x%X\n", mods->mask);
|
|
Packit |
7e555f |
fprintf(fs, "real_mods: 0x%X\n", mods->real_mods);
|
|
Packit |
7e555f |
fprintf(fs, "vmods: 0x%X\n", mods->vmods);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
_XkbControlsDump(FILE * fs, XkbControlsPtr ctrls)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
gint i;
|
|
Packit |
7e555f |
gchar buf[1024];
|
|
Packit |
7e555f |
fprintf(fs, "mk_dflt_btn: %d\n", ctrls->mk_dflt_btn);
|
|
Packit |
7e555f |
fprintf(fs, "num_groups: %d\n", ctrls->num_groups);
|
|
Packit |
7e555f |
fprintf(fs, "groups_wrap: %d\n", ctrls->groups_wrap);
|
|
Packit |
7e555f |
fprintf(fs, "internal: \n");
|
|
Packit |
7e555f |
_XkbModsRecDump(fs, &ctrls->internal);
|
|
Packit |
7e555f |
fprintf(fs, "ignore_lock: \n");
|
|
Packit |
7e555f |
_XkbModsRecDump(fs, &ctrls->ignore_lock);
|
|
Packit |
7e555f |
fprintf(fs, "enabled_ctrls: 0x%X\n", ctrls->enabled_ctrls);
|
|
Packit |
7e555f |
fprintf(fs, "repeat_delay: %d\n", ctrls->repeat_delay);
|
|
Packit |
7e555f |
fprintf(fs, "repeat_interval: %d\n", ctrls->repeat_interval);
|
|
Packit |
7e555f |
fprintf(fs, "slow_keys_delay: %d\n", ctrls->slow_keys_delay);
|
|
Packit |
7e555f |
fprintf(fs, "debounce_delay: %d\n", ctrls->debounce_delay);
|
|
Packit |
7e555f |
fprintf(fs, "mk_delay: %d\n", ctrls->mk_delay);
|
|
Packit |
7e555f |
fprintf(fs, "mk_interval: %d\n", ctrls->mk_interval);
|
|
Packit |
7e555f |
fprintf(fs, "mk_time_to_max: %d\n", ctrls->mk_time_to_max);
|
|
Packit |
7e555f |
fprintf(fs, "mk_max_speed: %d\n", ctrls->mk_max_speed);
|
|
Packit |
7e555f |
fprintf(fs, "mk_curve: %d\n", ctrls->mk_curve);
|
|
Packit |
7e555f |
fprintf(fs, "ax_options: %d\n", ctrls->ax_options);
|
|
Packit |
7e555f |
fprintf(fs, "ax_timeout: %d\n", ctrls->ax_timeout);
|
|
Packit |
7e555f |
fprintf(fs, "axt_opts_mask: 0x%X\n", ctrls->axt_opts_mask);
|
|
Packit |
7e555f |
fprintf(fs, "axt_opts_values: 0x%X\n", ctrls->axt_opts_values);
|
|
Packit |
7e555f |
fprintf(fs, "axt_ctrls_mask: 0x%X\n", ctrls->axt_ctrls_mask);
|
|
Packit |
7e555f |
fprintf(fs, "axt_ctrls_values: 0x%X\n", ctrls->axt_ctrls_values);
|
|
Packit |
7e555f |
fprintf(fs, "axt_ctrls_values: 0x%X\n", ctrls->axt_ctrls_values);
|
|
Packit |
7e555f |
fprintf(fs, "per_key_repeat:\n");
|
|
Packit |
7e555f |
buf[0] = 0;
|
|
Packit |
7e555f |
for (i = 0; i < XkbPerKeyBitArraySize; i++) {
|
|
Packit |
7e555f |
gchar b[5];
|
|
Packit |
7e555f |
snprintf(b, sizeof(b), "%d ", ctrls->per_key_repeat[i]);
|
|
Packit |
7e555f |
strcat(buf, b);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
fprintf(fs, " %s\n", buf);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
#endif
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static const gchar *action_type_names[] = {
|
|
Packit |
7e555f |
"XkbSA_NoAction",
|
|
Packit |
7e555f |
"XkbSA_SetMods",
|
|
Packit |
7e555f |
"XkbSA_LatchMods",
|
|
Packit |
7e555f |
"XkbSA_LockMods",
|
|
Packit |
7e555f |
"XkbSA_SetGroup",
|
|
Packit |
7e555f |
"XkbSA_LatchGroup",
|
|
Packit |
7e555f |
"XkbSA_LockGroup",
|
|
Packit |
7e555f |
"XkbSA_MovePtr",
|
|
Packit |
7e555f |
"XkbSA_PtrBtn",
|
|
Packit |
7e555f |
"XkbSA_LockPtrBtn",
|
|
Packit |
7e555f |
"XkbSA_SetPtrDflt",
|
|
Packit |
7e555f |
"XkbSA_ISOLock",
|
|
Packit |
7e555f |
"XkbSA_Terminate",
|
|
Packit |
7e555f |
"XkbSA_SwitchScreen",
|
|
Packit |
7e555f |
"XkbSA_SetControls",
|
|
Packit |
7e555f |
"XkbSA_LockControls",
|
|
Packit |
7e555f |
"XkbSA_ActionMessage",
|
|
Packit |
7e555f |
"XkbSA_RedirectKey",
|
|
Packit |
7e555f |
"XkbSA_DeviceBtn",
|
|
Packit |
7e555f |
"XkbSA_LockDeviceBtn",
|
|
Packit |
7e555f |
"XkbSA_DeviceValuator"
|
|
Packit |
7e555f |
};
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
xkb_action_dump(FILE * fs, gint level, XkbAction * act)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
XkbGroupAction *ga;
|
|
Packit |
7e555f |
fprintf(fs, "%*stype: %d(%s)\n", level, "", act->type,
|
|
Packit |
7e555f |
action_type_names[act->type]);
|
|
Packit |
7e555f |
switch (act->type) {
|
|
Packit |
7e555f |
case XkbSA_SetGroup:
|
|
Packit |
7e555f |
case XkbSA_LatchGroup:
|
|
Packit |
7e555f |
case XkbSA_LockGroup:
|
|
Packit |
7e555f |
ga = (XkbGroupAction *) act;
|
|
Packit |
7e555f |
fprintf(fs, "%*sXkbGroupAction: \n", level, "");
|
|
Packit |
7e555f |
fprintf(fs, "%*sflags: %d\n", level, "", ga->flags);
|
|
Packit |
7e555f |
fprintf(fs, "%*sgroup_XXX: %d\n", level, "",
|
|
Packit |
7e555f |
ga->group_XXX);
|
|
Packit |
7e555f |
break;
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
xkb_behavior_dump(FILE * fs, gint level, XkbBehavior * b)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
fprintf(fs, "%*stype: %d\n", level, "", b->type);
|
|
Packit |
7e555f |
fprintf(fs, "%*sdata: %d\n", level, "", b->data);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
xkb_server_map_dump(FILE * fs, gint level, XkbServerMapPtr server,
|
|
Packit |
7e555f |
XkbDescPtr kbd)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
gint i;
|
|
Packit |
7e555f |
XkbAction *pa = server->acts;
|
|
Packit |
7e555f |
XkbBehavior *pb = server->behaviors;
|
|
Packit |
7e555f |
fprintf(fs, "%*snum_acts: %d\n", level, "", server->num_acts);
|
|
Packit |
7e555f |
fprintf(fs, "%*ssize_acts: %d\n", level, "", server->size_acts);
|
|
Packit |
7e555f |
if (server->acts != NULL) {
|
|
Packit |
7e555f |
for (i = 0; i < server->num_acts; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%*sacts[%d]:\n", level, "", i);
|
|
Packit |
7e555f |
xkb_action_dump(fs, level + 2, pa++);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO acts\n", level, "");
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
if (server->key_acts != NULL) {
|
|
Packit |
7e555f |
for (i = 0; i <= kbd->max_key_code; i++) {
|
|
Packit |
7e555f |
fprintf(fs,
|
|
Packit |
7e555f |
"%*skey_acts[%d]: offset %d, total %d\n",
|
|
Packit |
7e555f |
level, "", i, server->key_acts[i],
|
|
Packit |
7e555f |
XkbKeyNumSyms(kbd, i));
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO key_acts\n", level, "");
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
for (i = 0; i < XkbNumVirtualMods; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%*svmod[%d]: %X\n", level, "", i,
|
|
Packit |
7e555f |
server->vmods[i]);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
if (server->behaviors != NULL) {
|
|
Packit |
7e555f |
for (i = 0; i <= kbd->max_key_code; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%*sbehaviors[%d]:\n", level, "", i);
|
|
Packit |
7e555f |
xkb_behavior_dump(fs, level + 2, pb++);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO behaviors\n", level, "");
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
if (server->explicit != NULL) {
|
|
Packit |
7e555f |
for (i = 0; i <= kbd->max_key_code; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%*sexplicit[%d]: %d\n", level, "", i,
|
|
Packit |
7e555f |
server->explicit[i]);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO explicit\n", level, "");
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
if (server->vmodmap != NULL) {
|
|
Packit |
7e555f |
for (i = 0; i <= kbd->max_key_code; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%*svmodmap[%d]: %d\n", level, "", i,
|
|
Packit |
7e555f |
server->vmodmap[i]);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO vmodmap\n", level, "");
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
xkb_key_type_dump(FILE * fs, gint level, XkbKeyTypePtr type,
|
|
Packit |
7e555f |
XklEngine * engine)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
gchar *z =
|
|
Packit |
7e555f |
type->name ==
|
|
Packit |
7e555f |
None ? NULL : XGetAtomName(xkl_engine_get_display(engine),
|
|
Packit |
7e555f |
type->name);
|
|
Packit |
7e555f |
fprintf(fs, "%*sname: 0x%X(%s)\n", level, "", (gint) type->name,
|
|
Packit |
7e555f |
z);
|
|
Packit |
7e555f |
if (z != NULL)
|
|
Packit |
7e555f |
XFree(z);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
xkb_sym_map_dump(FILE * fs, gint level, XkbSymMapPtr ksm)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
gint i;
|
|
Packit |
7e555f |
fprintf(fs, "%*skt_index: ", level, "");
|
|
Packit |
7e555f |
for (i = 0; i < XkbNumKbdGroups; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%d ", ksm->kt_index[i]);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
fprintf(fs, "\n%*sgroup_info: %d\n", level, "", ksm->group_info);
|
|
Packit |
7e555f |
fprintf(fs, "%*swidth: %d\n", level, "", ksm->width);
|
|
Packit |
7e555f |
fprintf(fs, "%*soffset: %d\n", level, "", ksm->offset);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
xkb_client_map_dump(FILE * fs, gint level, XkbClientMapPtr map,
|
|
Packit |
7e555f |
XkbDescPtr kbd, XklEngine * engine)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
gint i;
|
|
Packit |
7e555f |
fprintf(fs, "%*ssize_types: %d\n", level, "", map->size_types);
|
|
Packit |
7e555f |
fprintf(fs, "%*snum_types: %d\n", level, "", map->num_types);
|
|
Packit |
7e555f |
if (map->types != NULL) {
|
|
Packit |
7e555f |
XkbKeyTypePtr type = map->types;
|
|
Packit |
7e555f |
for (i = 0; i < map->num_types; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%*stypes[%d]:\n", level, "", i);
|
|
Packit |
7e555f |
xkb_key_type_dump(fs, level + 2, type++, engine);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO types\n", level, "");
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
fprintf(fs, "%*ssize_syms: %d\n", level, "", map->size_syms);
|
|
Packit |
7e555f |
fprintf(fs, "%*snum_syms: %d\n", level, "", map->num_syms);
|
|
Packit |
7e555f |
if (map->syms != NULL) {
|
|
Packit |
7e555f |
for (i = 0; i < map->num_syms; i++)
|
|
Packit |
7e555f |
fprintf(fs, "%*ssyms[%d]:0x%lX(%s)\n", level, "",
|
|
Packit |
7e555f |
i, map->syms[i],
|
|
Packit |
7e555f |
XKeysymToString(map->syms[i]));
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO syms\n", level, "");
|
|
Packit |
7e555f |
if (map->key_sym_map != NULL) {
|
|
Packit |
7e555f |
XkbSymMapPtr ksm = map->key_sym_map;
|
|
Packit |
7e555f |
for (i = 0; i <= kbd->max_key_code; i++) {
|
|
Packit |
7e555f |
fprintf(fs, "%*skey_sym_map[%d]:\n", level, "", i);
|
|
Packit |
7e555f |
xkb_sym_map_dump(fs, level + 2, ksm++);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO key_sym_map\n", level, "");
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
static void
|
|
Packit |
7e555f |
xkb_desc_dump(FILE * fs, gint level, XkbDescPtr kbd, XklEngine * engine)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
fprintf(fs, "%*sflags: 0x%X\n", level, "", kbd->flags);
|
|
Packit |
7e555f |
fprintf(fs, "%*sdevice_spec: %d\n", level, "", kbd->device_spec);
|
|
Packit |
7e555f |
fprintf(fs, "%*smin_key_code: %d\n", level, "", kbd->min_key_code);
|
|
Packit |
7e555f |
fprintf(fs, "%*smax_key_code: %d\n", level, "", kbd->max_key_code);
|
|
Packit |
7e555f |
#if 0
|
|
Packit |
7e555f |
if (kbd->ctrls != NULL) {
|
|
Packit |
7e555f |
fprintf(fs, "ctrls:\n");
|
|
Packit |
7e555f |
_XkbControlsDump(fs, kbd->ctrls);
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "NO server\n");
|
|
Packit |
7e555f |
#endif
|
|
Packit |
7e555f |
if (kbd->server != NULL) {
|
|
Packit |
7e555f |
fprintf(fs, "%*sserver:\n", level, "");
|
|
Packit |
7e555f |
xkb_server_map_dump(fs, level + 2, kbd->server, kbd);
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO server\n", level, "");
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
if (kbd->map != NULL) {
|
|
Packit |
7e555f |
fprintf(fs, "%*smap:\n", level, "");
|
|
Packit |
7e555f |
xkb_client_map_dump(fs, level + 2, kbd->map, kbd, engine);
|
|
Packit |
7e555f |
} else
|
|
Packit |
7e555f |
fprintf(fs, "%*sNO map\n", level, "");
|
|
Packit |
7e555f |
fprintf(fs, "XKB libraries not present\n");
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
void
|
|
Packit |
7e555f |
xkl_engine_dump_xkb_desc(XklEngine * engine, const gchar * file_name,
|
|
Packit |
7e555f |
XkbDescPtr kbd)
|
|
Packit |
7e555f |
{
|
|
Packit |
7e555f |
FILE *fs = fopen(file_name, "w+");
|
|
Packit |
7e555f |
if (fs != NULL) {
|
|
Packit |
7e555f |
xkb_desc_dump(fs, 0,
|
|
Packit |
7e555f |
kbd == NULL ? xkl_engine_backend(engine,
|
|
Packit |
7e555f |
XklXkb,
|
|
Packit |
7e555f |
cached_desc)
|
|
Packit |
7e555f |
: kbd, engine);
|
|
Packit |
7e555f |
fclose(fs);
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
|
|
Packit |
7e555f |
}
|
|
Packit |
7e555f |
#endif
|