summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2006-03-03 22:56:02 +0000
committerSergey Udaltsov <svu@gnome.org>2006-03-03 22:56:02 +0000
commit515067b164da9b988e1cf27459ee9fc5e8738be8 (patch)
tree7b4d09b69f76d8fd89895926ef1451fd1a2e02a6
parentd1ff6b1e951341516af8cc79091cc39ae7104365 (diff)
downloadlibxklavier-515067b164da9b988e1cf27459ee9fc5e8738be8.tar.gz
put xmm private data into the structure
-rw-r--r--libxklavier/xklavier_config_xmm.c4
-rw-r--r--libxklavier/xklavier_evt_xmm.c9
-rw-r--r--libxklavier/xklavier_private_xmm.h13
-rwxr-xr-xlibxklavier/xklavier_xmm.c70
4 files changed, 60 insertions, 36 deletions
diff --git a/libxklavier/xklavier_config_xmm.c b/libxklavier/xklavier_config_xmm.c
index 3106ae2..3c28fd2 100644
--- a/libxklavier/xklavier_config_xmm.c
+++ b/libxklavier/xklavier_config_xmm.c
@@ -54,7 +54,9 @@ xkl_xmm_activate_config_rec(XklEngine * engine, const XklConfigRec * data)
xkl_engine_priv
(engine,
base_config_atom),
- current_xmm_rules,
+ xkl_engine_backend
+ (engine, XklXmm,
+ current_rules),
engine);
if (rv)
xkl_xmm_lock_group(engine, 0);
diff --git a/libxklavier/xklavier_evt_xmm.c b/libxklavier/xklavier_evt_xmm.c
index 06dc912..eba326d 100644
--- a/libxklavier/xklavier_evt_xmm.c
+++ b/libxklavier/xklavier_evt_xmm.c
@@ -28,7 +28,9 @@ xkl_xmm_process_keypress_event(XklEngine * engine, XKeyPressedEvent * kpe)
(state.group +
sop->
shortcut_steps[current_shortcut]) %
- g_strv_length(current_xmm_config.
+ g_strv_length(xkl_engine_backend
+ (engine, XklXmm,
+ current_config).
layouts);
xkl_debug(150,
"Setting new xmm group %d\n",
@@ -44,12 +46,13 @@ xkl_xmm_process_keypress_event(XklEngine * engine, XKeyPressedEvent * kpe)
static gint
xkl_xmm_process_property_event(XklEngine * engine, XPropertyEvent * kpe)
{
+ Atom state_atom = xkl_engine_backend(engine, XklXmm, state_atom);
xkl_debug(200, "Processing the PropertyNotify event: %d/%d\n",
- kpe->atom, xmm_state_atom);
+ kpe->atom, state_atom);
/**
* Group is changed!
*/
- if (kpe->atom == xmm_state_atom) {
+ if (kpe->atom == state_atom) {
XklState state;
xkl_xmm_get_server_state(engine, &state);
diff --git a/libxklavier/xklavier_private_xmm.h b/libxklavier/xklavier_private_xmm.h
index 2e0e199..1e2e1ce 100644
--- a/libxklavier/xklavier_private_xmm.h
+++ b/libxklavier/xklavier_private_xmm.h
@@ -13,11 +13,13 @@ typedef struct _XmmSwitchOption {
gint shortcut_steps[MAX_SHORTCUTS_PER_OPTION + 1];
} XmmSwitchOption;
-extern gchar *current_xmm_rules;
+typedef struct _XklXmm {
+ gchar *current_rules;
-extern XklConfigRec current_xmm_config;
+ XklConfigRec current_config;
-extern Atom xmm_state_atom;
+ Atom state_atom;
+} XklXmm;
/* in the ideal world this should be a hashmap */
extern XmmSwitchOption all_switch_options[];
@@ -34,9 +36,10 @@ extern void xkl_xmm_shortcuts_grab(XklEngine * engine);
extern void xkl_xmm_shortcuts_ungrab(XklEngine * engine);
-extern const gchar *xkl_xmm_shortcut_get_current_option_name(void);
+extern const gchar *xkl_xmm_shortcut_get_current_option_name(XklEngine *
+ engine);
-XmmSwitchOption *xkl_xmm_shortcut_get_current(void);
+XmmSwitchOption *xkl_xmm_shortcut_get_current(XklEngine * engine);
extern void xkl_xmm_actualize_group(XklEngine * engine, gint group);
diff --git a/libxklavier/xklavier_xmm.c b/libxklavier/xklavier_xmm.c
index 44ba490..758811d 100755
--- a/libxklavier/xklavier_xmm.c
+++ b/libxklavier/xklavier_xmm.c
@@ -15,23 +15,19 @@
#define SHORTCUT_OPTION_PREFIX "grp:"
-gchar *current_xmm_rules = NULL;
-
-XklConfigRec current_xmm_config;
-
-Atom xmm_state_atom;
-
const gchar **
xkl_xmm_get_groups_names(XklEngine * engine)
{
- return (const gchar **) current_xmm_config.layouts;
+ return (const gchar **) xkl_engine_backend(engine, XklXmm,
+ current_config).layouts;
}
void
xkl_xmm_shortcuts_grab(XklEngine * engine)
{
const XmmShortcut *shortcut;
- const XmmSwitchOption *option = xkl_xmm_shortcut_get_current();
+ const XmmSwitchOption *option =
+ xkl_xmm_shortcut_get_current(engine);
xkl_debug(150, "Found shortcut option: %p\n", option);
if (option == NULL)
@@ -52,7 +48,8 @@ void
xkl_xmm_shortcuts_ungrab(XklEngine * engine)
{
const XmmShortcut *shortcut;
- const XmmSwitchOption *option = xkl_xmm_shortcut_get_current();
+ const XmmSwitchOption *option =
+ xkl_xmm_shortcut_get_current(engine);
if (option == NULL)
return;
@@ -69,10 +66,10 @@ xkl_xmm_shortcuts_ungrab(XklEngine * engine)
}
XmmSwitchOption *
-xkl_xmm_shortcut_get_current(void)
+xkl_xmm_shortcut_get_current(XklEngine * engine)
{
const gchar *option_name =
- xkl_xmm_shortcut_get_current_option_name();
+ xkl_xmm_shortcut_get_current_option_name(engine);
XmmSwitchOption *switch_option = all_switch_options;
xkl_debug(150, "Configured switch option: [%s]\n", option_name);
if (option_name == NULL)
@@ -87,9 +84,10 @@ xkl_xmm_shortcut_get_current(void)
}
const gchar *
-xkl_xmm_shortcut_get_current_option_name(void)
+xkl_xmm_shortcut_get_current_option_name(XklEngine * engine)
{
- gchar **option = current_xmm_config.options;
+ gchar **option =
+ xkl_engine_backend(engine, XklXmm, current_config).options;
if (option == NULL)
return NULL;
@@ -107,7 +105,7 @@ const XmmSwitchOption *
xkl_xmm_find_switch_option(XklEngine * engine, gint keycode,
guint state, gint * current_shortcut_rv)
{
- const XmmSwitchOption *rv = xkl_xmm_shortcut_get_current();
+ const XmmSwitchOption *rv = xkl_xmm_shortcut_get_current(engine);
if (rv != NULL) {
XmmShortcut *sc = rv->shortcuts;
@@ -150,7 +148,8 @@ guint
xkl_xmm_get_num_groups(XklEngine * engine)
{
gint rv = 0;
- gchar **p = current_xmm_config.layouts;
+ gchar **p =
+ xkl_engine_backend(engine, XklXmm, current_config).layouts;
if (p != NULL)
while (*p++ != NULL)
rv++;
@@ -160,11 +159,15 @@ xkl_xmm_get_num_groups(XklEngine * engine)
void
xkl_xmm_free_all_info(XklEngine * engine)
{
- if (current_xmm_rules != NULL) {
- g_free(current_xmm_rules);
- current_xmm_rules = NULL;
+ gchar *current_rules =
+ xkl_engine_backend(engine, XklXmm, current_rules);
+ if (current_rules != NULL) {
+ g_free(current_rules);
+ current_rules = NULL;
+ xkl_engine_backend(engine, XklXmm, current_rules) = NULL;
}
- xkl_config_rec_reset(&current_xmm_config);
+ xkl_config_rec_reset(&xkl_engine_backend
+ (engine, XklXmm, current_config));
}
gboolean
@@ -176,9 +179,14 @@ xkl_xmm_if_cached_info_equals_actual(XklEngine * engine)
gboolean
xkl_xmm_load_all_info(XklEngine * engine)
{
- return xkl_config_rec_get_full_from_server(&current_xmm_rules,
- &current_xmm_config,
- engine);
+ return
+ xkl_config_rec_get_full_from_server(&xkl_engine_backend
+ (engine, XklXmm,
+ current_rules),
+ &xkl_engine_backend(engine,
+ XklXmm,
+ current_config),
+ engine);
}
void
@@ -196,8 +204,10 @@ xkl_xmm_get_server_state(XklEngine * engine, XklState * state)
result =
XGetWindowProperty(xkl_engine_get_display(engine),
xkl_engine_priv(engine, root_window),
- xmm_state_atom, 0L, 1L, False, XA_INTEGER,
- &actual_type, &actual_format, &actual_items,
+ xkl_engine_backend(engine, XklXmm,
+ state_atom), 0L, 1L,
+ False, XA_INTEGER, &actual_type,
+ &actual_format, &actual_items,
&bytes_remaining, &propval);
if (Success == result) {
@@ -225,7 +235,9 @@ xkl_xmm_actualize_group(XklEngine * engine, gint group)
if (xkl_xmm_get_num_groups(engine) < group)
return;
- layout_name = current_xmm_config.layouts[group];
+ layout_name =
+ xkl_engine_backend(engine, XklXmm,
+ current_config).layouts[group];
snprintf(cmd, sizeof cmd,
"xmodmap %s/xmodmap.%s", XMODMAP_BASE, layout_name);
@@ -251,7 +263,8 @@ xkl_xmm_lock_group(XklEngine * engine, gint group)
propval = group;
Display *display = xkl_engine_get_display(engine);
XChangeProperty(display, xkl_engine_priv(engine, root_window),
- xmm_state_atom, XA_INTEGER, 32, PropModeReplace,
+ xkl_engine_backend(engine, XklXmm, state_atom),
+ XA_INTEGER, 32, PropModeReplace,
(unsigned char *) &propval, 1);
XSync(display, False);
}
@@ -298,10 +311,13 @@ xkl_xmm_init(XklEngine * engine)
xkl_engine_priv(engine, backup_config_atom) =
XInternAtom(display, "_XMM_NAMES_BACKUP", False);
- xmm_state_atom = XInternAtom(display, "_XMM_STATE", False);
+ xkl_engine_backend(engine, XklXmm, state_atom) =
+ XInternAtom(display, "_XMM_STATE", False);
xkl_engine_priv(engine, default_model) = "generic";
xkl_engine_priv(engine, default_layout) = "us";
+ xkl_engine_priv(engine, backend) = g_new0(XklXmm, 1);
+
return 0;
}