summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2004-12-08 01:37:04 +0000
committerSergey Udaltsov <svu@gnome.org>2004-12-08 01:37:04 +0000
commitae44233612221d40761036bfae6f37cc2dbb96d3 (patch)
tree77b6f4640e6656a90a8b83180f159335a1d53fcf
parentf10f157db51328b6e5d0b63825f54c4d8319ab6a (diff)
downloadlibxklavier-ae44233612221d40761036bfae6f37cc2dbb96d3.tar.gz
another new call in API - apps cannot rely on XkbNumKbdGroups
-rw-r--r--ChangeLog5
-rw-r--r--libxklavier/xklavier.c7
-rw-r--r--libxklavier/xklavier.h9
-rw-r--r--libxklavier/xklavier_private.h22
-rw-r--r--libxklavier/xklavier_private_xkb.h2
-rw-r--r--libxklavier/xklavier_private_xmm.h2
-rw-r--r--libxklavier/xklavier_xkb.c7
-rwxr-xr-xlibxklavier/xklavier_xmm.c6
-rw-r--r--tests/test_config.c1
9 files changed, 61 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 288f3c5..58898d1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-07 01:30 svu
+
+ * libxklavier, tests: introducing XklGetMaxNumGroups.
+ Another new call in API.
+
2004-12-07 00:20 svu
* configure.in: using ac_x_includes to make configure
diff --git a/libxklavier/xklavier.c b/libxklavier/xklavier.c
index 94a7255..2109eaa 100644
--- a/libxklavier/xklavier.c
+++ b/libxklavier/xklavier.c
@@ -796,3 +796,10 @@ void _XklFreeAllInfo( void )
_XklEnsureVTableInited();
(*xklVTable->xklFreeAllInfoHandler)();
}
+
+unsigned XklGetMaxNumGroups( void )
+{
+ _XklEnsureVTableInited();
+ return (*xklVTable->xklGetMaxNumGroupsHandler)();
+}
+
diff --git a/libxklavier/xklavier.h b/libxklavier/xklavier.h
index b9c5348..6d0565f 100644
--- a/libxklavier/xklavier.h
+++ b/libxklavier/xklavier.h
@@ -31,6 +31,7 @@ extern "C"
* Backend allows to toggls indicators on/off
*/
#define XKLF_CAN_TOGGLE_INDICATORS 0x01
+
/**
* Backend allows to write ascii representation of the configuration
*/
@@ -97,6 +98,14 @@ extern "C"
* @return ORed XKLF_* constants
*/
extern int XklGetBackendFeatures( void );
+
+/**
+ * Provides the information on maximum number of simultaneously supported
+ * groups (layouts)
+ * @return maximum number of the groups in configuration,
+ * 0 if no restrictions.
+ */
+ extern unsigned XklGetMaxNumGroups( void );
/** @} */
/**
diff --git a/libxklavier/xklavier_private.h b/libxklavier/xklavier_private.h
index c470721..6547926 100644
--- a/libxklavier/xklavier_private.h
+++ b/libxklavier/xklavier_private.h
@@ -21,6 +21,8 @@ typedef void ( *XklFreeAllInfoHandler )( void );
typedef const char **( *XklGetGroupNamesHandler )( void );
+typedef unsigned ( *XklGetMaxNumGroupsHandler )( void );
+
typedef unsigned ( *XklGetNumGroupsHandler )( void );
typedef void ( *XklGetRealStateHandler)( XklState * curState_return );
@@ -39,22 +41,26 @@ typedef struct
* Backend name
*/
const char *id;
+
/**
* Functions supported by the backend, combination of XKLF_* constants
*/
int features;
+
/**
* Activates the configuration.
* xkb: create proper the XkbDescRec and send it to the server
* xmodmap: save the property, init layout #1
*/
XklConfigActivateHandler xklConfigActivateHandler;
+
/**
* Background-specific initialization.
* xkb: XkbInitAtoms - init internal xkb atoms table
* xmodmap: void.
*/
XklConfigInitHandler xklConfigInitHandler; /* private */
+
/**
* Loads the registry tree into DOM (using whatever path(s))
* The XklConfigFreeRegistry is static - no virtualization necessary.
@@ -62,6 +68,7 @@ typedef struct
* xmodmap: loads xml from XMODMAP_BASE+"/"+ruleset+".xml"
*/
XklConfigLoadRegistryHandler xklConfigLoadRegistryHandler;
+
/**
* Write the configuration into the file (binary/textual)
* xkb: write xkb or xkm file
@@ -69,24 +76,35 @@ typedef struct
* file - not really useful. If binary - fail (not supported)
*/
XklConfigWriteFileHandler xklConfigWriteFileHandler;
+
/**
* Handles X events.
* xkb: XkbEvent handling
* xmodmap: keep track on the root window properties. What else can we do?
*/
XklEventHandler xklEventHandler;
+
/**
* Flushes the cached server config info.
* xkb: frees XkbDesc
* xmodmap: frees internal XklConfigRec
*/
XklFreeAllInfoHandler xklFreeAllInfoHandler; /* private */
+
/**
* Get the list of the group names
* xkb: return cached list of the group names
* xmodmap: return the list of layouts from the internal XklConfigRec
*/
XklGetGroupNamesHandler xklGetGroupNamesHandler;
+
+ /**
+ * Get the maximum number of loaded groups
+ * xkb: returns 1 or XkbNumKbdGroups
+ * xmodmap: return 0
+ */
+ XklGetMaxNumGroupsHandler xklGetMaxNumGroupsHandler;
+
/**
* Get the number of loaded groups
* xkb: return from the cached XkbDesc
@@ -107,6 +125,7 @@ typedef struct
* xmodmap: loads internal XklConfigRec from server
*/
XklLoadAllInfoHandler xklLoadAllInfoHandler; /* private */
+
/**
* Switches the keyboard to the group N
* xkb: simple one-liner to call the XKB function
@@ -114,18 +133,21 @@ typedef struct
* (listener invokes xmodmap with appropriate config file).
*/
XklLockGroupHandler xklLockGroupHandler;
+
/**
* Stop tracking the keyboard-related events
* xkb: XkbSelectEvents(..., 0)
* xmodmap: Ungrab the switching shortcut.
*/
XklPauseResumeListenHandler xklPauseListenHandler;
+
/**
* Start tracking the keyboard-related events
* xkb: XkbSelectEvents + XkbSelectEventDetails
* xmodmap: Grab the switching shortcut.
*/
XklPauseResumeListenHandler xklResumeListenHandler;
+
/**
* Set the indicators state from the XklState
* xkb: _XklSetIndicator for all indicators
diff --git a/libxklavier/xklavier_private_xkb.h b/libxklavier/xklavier_private_xkb.h
index 2c6ced5..8e458a2 100644
--- a/libxklavier/xklavier_private_xkb.h
+++ b/libxklavier/xklavier_private_xkb.h
@@ -40,6 +40,8 @@ extern void _XklXkbFreeAllInfo( void );
extern const char **_XklXkbGetGroupNames( void );
+extern unsigned _XklXkbGetMaxNumGroups( void );
+
extern unsigned _XklXkbGetNumGroups( void );
extern void _XklXkbGetRealState( XklState * curState_return );
diff --git a/libxklavier/xklavier_private_xmm.h b/libxklavier/xklavier_private_xmm.h
index 996a035..9ac4e19 100644
--- a/libxklavier/xklavier_private_xmm.h
+++ b/libxklavier/xklavier_private_xmm.h
@@ -57,6 +57,8 @@ extern void _XklXmmFreeAllInfo( void );
extern const char **_XklXmmGetGroupNames( void );
+extern unsigned _XklXmmGetMaxNumGroups( void );
+
extern unsigned _XklXmmGetNumGroups( void );
extern void _XklXmmGetRealState( XklState * curState_return );
diff --git a/libxklavier/xklavier_xkb.c b/libxklavier/xklavier_xkb.c
index 9399dd7..26a6c7d 100644
--- a/libxklavier/xklavier_xkb.c
+++ b/libxklavier/xklavier_xkb.c
@@ -70,6 +70,12 @@ int _XklXkbResumeListen( )
return 0;
}
+unsigned _XklXkbGetMaxNumGroups( void )
+{
+ return xklVTable->features & XKLF_MULTIPLE_LAYOUTS_SUPPORTED ?
+ XkbNumKbdGroups : 1;
+}
+
unsigned _XklXkbGetNumGroups( void )
{
return _xklXkb->ctrls->num_groups;
@@ -373,6 +379,7 @@ int _XklXkbInit( void )
_XklXkbEventHandler,
_XklXkbFreeAllInfo,
_XklXkbGetGroupNames,
+ _XklXkbGetMaxNumGroups,
_XklXkbGetNumGroups,
_XklXkbGetRealState,
_XklXkbLoadAllInfo,
diff --git a/libxklavier/xklavier_xmm.c b/libxklavier/xklavier_xmm.c
index 4644041..ba30b19 100755
--- a/libxklavier/xklavier_xmm.c
+++ b/libxklavier/xklavier_xmm.c
@@ -130,6 +130,11 @@ int _XklXmmPauseListen( )
return 0;
}
+unsigned _XklXmmGetMaxNumGroups( void )
+{
+ return 0;
+}
+
unsigned _XklXmmGetNumGroups( void )
{
return currentXmmConfig.numLayouts;
@@ -239,6 +244,7 @@ int _XklXmmInit( void )
_XklXmmEventHandler,
_XklXmmFreeAllInfo,
_XklXmmGetGroupNames,
+ _XklXmmGetMaxNumGroups,
_XklXmmGetNumGroups,
_XklXmmGetRealState,
_XklXmmLoadAllInfo,
diff --git a/tests/test_config.c b/tests/test_config.c
index cf01482..e5dcd58 100644
--- a/tests/test_config.c
+++ b/tests/test_config.c
@@ -105,6 +105,7 @@ int main( int argc, char * const argv[] )
XklDebug( 0, "Xklavier registry loaded\n" );
XklDebug( 0, "Bakend: [%s]\n", XklGetBackendName() );
XklDebug( 0, "Supported features: 0x0%X\n", XklGetBackendFeatures() );
+ XklDebug( 0, "Max number of groups: %d\n", XklGetMaxNumGroups() );
XklConfigRecInit( &currentConfig );
XklConfigGetFromServer( &currentConfig );