diff options
author | Sergey Udaltsov <svu@gnome.org> | 2006-03-03 22:56:02 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2006-03-03 22:56:02 +0000 |
commit | 515067b164da9b988e1cf27459ee9fc5e8738be8 (patch) | |
tree | 7b4d09b69f76d8fd89895926ef1451fd1a2e02a6 | |
parent | d1ff6b1e951341516af8cc79091cc39ae7104365 (diff) | |
download | libxklavier-515067b164da9b988e1cf27459ee9fc5e8738be8.tar.gz |
put xmm private data into the structure
-rw-r--r-- | libxklavier/xklavier_config_xmm.c | 4 | ||||
-rw-r--r-- | libxklavier/xklavier_evt_xmm.c | 9 | ||||
-rw-r--r-- | libxklavier/xklavier_private_xmm.h | 13 | ||||
-rwxr-xr-x | libxklavier/xklavier_xmm.c | 70 |
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(¤t_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(¤t_xmm_rules, - ¤t_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; } |