Commit Graph

83 Commits (b38525421f5b6f28b7f441ff8b2c3a97b047aae2)

Author SHA1 Message Date
Daniel Stone b38525421f Interp: More lazy keysym resolution
Resolve the keysyms when we create an InterpDef, rather than directly
in the parser.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:57:16 +01:00
Daniel Stone 15b0db5492 Copy in XkbCompatMapRec and XkbSymInterpretRec
These contain actions, so transition them ahead to XkbcAction and move
them into XKBcommon.h.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:57:16 +01:00
Daniel Stone 60e7eeeba1 Use CARD32 instead of Atom, drag in XkbClientMapRec
On 64-bit architectures, XID varies in size between the server (always
32 bits), and non-server (always unsigned long) for some inexplicable
reason.  Use CARD32 instead to avoid this horrible trap.

This involves dragging in XkbClientMapRec so we don't get stuck in the
KeySym trap.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:57:12 +01:00
Daniel Stone d2d787df65 Regroup actions into current vs. deprecated, resize vmod
Use Xkbc* for all our actions that we intend to keep around, and Xkb*
for deprecated ones we can hopefully get rid of, at least internally.

While we're at it, make vmods be a uint32_t.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone e564235b43 xkbcomp: Don't malloc() and free() most scanned tokens
Use a constant buffer instead.  Sigh.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone f246db20f4 Fix compilation with DEBUG
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone acc467de9f xkbcomp: Use fread() instead of getc()
So, it turns out that if you're parsing a fairly large amount of data,
using getc() to get all the input rather than, say, read(), is some kind
of remarkably daft and unperformant idea.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone 240a0c3409 xkbcomp: Lazy keysym parsing (avoid XStringToKeysym)
Instead of calling XStringToKeysym on every keysym we parse, store it as
a string until we need to store it in an actual keymap.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone 4346e0065b xkbcomp: keycodes: Silence gcc warnings
It was right to warn us: some of these were actually bogus.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone 5df3dff741 xkbcomp: geometry: Plug numerous atom text & expr leaks
This code is absolute misery.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone 18039a6c0b xkbcomp: Atom text and expr leak fixes part #973
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone a22386d402 xkbcomp: Don't leak atom text and string exprs, again
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:56 +01:00
Daniel Stone 8904c6eea7 xkbcomp: expr: Use XkbcAtomText instead of GetString
This returns us a temporary string, rather than leaking the atom.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:55 +01:00
Daniel Stone ad0a3d7c52 xkbcomp: Don't leak atom text and string exprs
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:55 +01:00
Daniel Stone d20bdd3b9a xkbcomp: vmod: Don't get and immediately intern atoms
XkbcInternAtom(XkbcAtomGetString(atom)) has to be the most spectacularly
broken antipattern I've yet seen.  Just compare the atoms directly.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:55 +01:00
Daniel Stone 50a037cacf xkbcomp: Replace open-coded strdup
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2010-06-22 15:56:55 +01:00
Dan Nicholson 4e854a21aa listing: Drop unused deviceSpec argument
The server might care about this, but ListComponents is just reading xkb
files.
2009-04-21 23:22:25 -07:00
Dan Nicholson 481deea178 xkbcomp: Another fairly major rewrite of the listing mode
The listing code in xkbcomp had been setup to allocate a set of buffers
with file paths and then later parse through them to find which maps were
needed.

All the allocation (with the additional allocation for the components
list) was making it really slow, so this patch makes everything simpler
by just generating the components list as we walk the directory tree.
2009-04-21 06:16:15 -07:00
Dan Nicholson 18b43f8dfe Rewrite listing code to generate XkbComponentListPtr
In xkbcomp, the listing code printed out the xkb files to stdout and the
caller would parse the output. Here, we can just generate a
XkbComponentListPtr and pass it back.

This should be a series of smaller commits, but there was no clean way to
do it since it's basically a complete rewrite except for the core map
matching logic.

A lot of code used for special printing modes in xkbcomp has been
shedded. Callers can massage the output as they please.
2009-04-19 16:34:12 -07:00
Dan Nicholson 559305a5cb xkbcomp: Kill unused listing code and make functions static
Much of this was only called from xkbcomp and not used to generate
listings for the server.
2009-04-16 21:47:28 -07:00
Dan Nicholson 5983a4e69d Scale back global variables
Some of the global variables were either not used anymore or only used
in the listing code.
2009-04-16 20:01:13 -07:00
Dan Nicholson 9520ea0eb3 Add XkbNameMatchesPattern implementation from xkbfile
The xkbcomp listing code matches a glob type pattern against installed
xkb files. This adds a Xkbc implementation of the pattern matching code.
2009-04-13 06:24:36 -07:00
Dan Nicholson fa183ce354 xkbcomp: Fix use of removed macros 2009-04-13 06:24:36 -07:00
Dan Nicholson 3d4c4d06d5 Revert "xkbcomp: Remove listing sources"
This reverts commit c4c9e36fbf. It turns
out that the listing code is used to support the X_kbListComponents
request (via XkbListComponents).

This will have to be refactored into some reasonable interface instead
of the current usage where the server reads xkbcomp stdout. Gross.
2009-04-13 06:24:36 -07:00
Dan Nicholson 53ead9b575 Use xkbpath API for locating rules
Instead of hardcoding the XKB base directory when searching for rules in
the xkbcomp code, we can extend the xkbpath API to cover rules and reuse
it. That will make it more convenient if it's ever exposed so people can
set their XKB search paths in a reasonable way.
2009-04-11 10:39:55 -07:00
Dan Nicholson abbd141935 Add interface to compile keyboard description from keymap files
We need to support generating a keyboard description from a keymap file
because there are just some cases where RMLVO or ktcsg is not enough.

The map choosing logic has been refactored into its own function and now
supports choosing a named or default keymap.
2009-04-10 12:25:51 -07:00
Dan Nicholson f5d37e279a Constify public API
There's no reason the arguments can't be const.
2009-04-08 17:59:15 -07:00
Dan Nicholson babae38935 Change CompileKeymapFromRules to take XkbRMLVOSet
Let's use a nice interface now that it's available from XKBrulescommon.h.
2009-04-08 17:54:55 -07:00
Dan Nicholson 6a84a34d86 Remove all non-public API from XKBcommon.h header
The noble intention was to expose all the new API and new generic types
in the split out kbproto headers through XKBcommon.h. It turns out that
would be a massive amount of work in the server. Someday, but first just
wedging in XkbCompileKeymap* would be good.

Most of the API is in new internal xkb*.h headers. In order to allow the
XKBcommon.h header to be used from the server, we can't pull in other
headers from kbproto since the server has its own copies. However, types
that are different (XkbDescRec, XkbAction) still have Xkbc equivalents
here, and I think they should be used in the server.
2009-04-08 07:46:25 -07:00
Dan Nicholson b4a3c39b7e Remove KS macros available in XKBfilecommon.h now
A couple of the XkbcKS* macros become redundant with XKBfilecommon.h
split out in kbproto.
2009-04-07 19:56:41 -07:00
Dan Nicholson 5889cef809 Require strdup and remove utils wrapper
This kills a couple warnings from using the uStringDup wrapper. If you
don't have strdup on your platform, you have bigger issues.
2009-04-05 20:27:35 -07:00
Dan Nicholson 8b100fc0a9 Add action datatypes as defined in the server
Some of the XkbAction types are defined differently in the server, so we
add those to XKBcommon.h and use them here like XkbcDescPtr. We'll have
to deal with the impedance mismatch on the client side later.
2009-04-05 15:15:20 -07:00
Dan Nicholson a2e597675b xkbcomp: Don't say we're exiting when we're not 2009-04-04 12:50:27 -07:00
Dan Nicholson 85039a0d76 xkbcomp: Give keymap file empty name if none supplied
Ensure that the keymap file topName is not NULL since it gets blindly
dereferenced later.
2009-04-04 12:31:55 -07:00
Dan Nicholson 125ce76f5b xkbcomp: Ensure at least keycodes supplied in components
It seems that at least a non-empty keycodes component is required to
compile a XkbcDescPtr.
2009-04-04 12:21:05 -07:00
Dan Nicholson fdd8a9ec1b xkbcomp: Don't dereference NULL VarDefsPtr 2009-04-04 12:17:50 -07:00
Dan Nicholson 99d2f4a5eb xkbcomp: Refactor keymap file generator 2009-04-04 12:16:04 -07:00
Dan Nicholson 8269cbce81 xkbcomp: Generating components requires rules _and_ layout
This came from trial and error, but it seems that you can generate a
valid keymap with only rules and layout.
2009-04-04 10:02:39 -07:00
Dan Nicholson fa96602d0f xkbcomp: Fail when converting rules to components returns an error
XkbcRF_GetComponents was returning an error but leaving the generated
components alone. This ensures that the broken XkbComponentNamesPtr is
freed and the error is passed up to the caller.
2009-04-04 09:51:33 -07:00
Dan Nicholson e72fc29f33 xkbcomp: Cleanup error messages 2009-04-04 09:48:59 -07:00
Dan Nicholson 83367a8d2d xkbcomp: Ensure user has supplied a rules name 2009-04-04 09:46:20 -07:00
Dan Nicholson 5d95a43ad0 Refactor xkbpath so that it implicitly initializes
Instead of requiring the user to call XkbInitIncludePath() and
XkbAddDefaultDirectoriesToPath(), all the path entry points now implicitly
initialize the path. When initializing, the default directories are added
so it's useful.

This provides normal operation without exposing the xkbpath API. That
might happen later to allow apps to edit the XKB search path.
2009-04-04 09:29:43 -07:00
Dan Nicholson 5c91062334 Remove trailing spaces in source files 2009-04-04 09:19:51 -07:00
Dan Nicholson c38cdc5ded xkbcomp: Ignore generated parser 2009-04-03 21:18:58 -07:00
Dan Nicholson 3a709e399e xkbcomp: Don't segfault if the debug files aren't set
Another interface that needs to be cleaned up.
2009-04-03 21:17:52 -07:00
Dan Nicholson ec86ce1f1a xkbcomp: Declare global debugging vars
These will need to be sanitized at some point, but for now let's just get
the code running.
2009-04-03 20:34:41 -07:00
Dan Nicholson c14c60bb37 xkbcomp: Back out strdup warning cleanup
There are some spots in the code that use strdup without checking the
argument, so we need this to not segfault. Cleanup later...
2009-04-03 20:34:19 -07:00
Dan Nicholson db03c9b7e9 xkbcomp: Clean up utils prototypes
Includes using a macro for the gcc format attributes instead of repeated
ifdef's.
2009-03-31 19:32:49 -07:00
Dan Nicholson a27e56b6fb xkbcomp: Remove duplicated macros 2009-03-31 07:21:20 -07:00
Dan Nicholson 05daf09f18 xkbcomp: Kill warnings about address always evaluating as true 2009-03-31 07:09:47 -07:00