|
Packit Service |
93d855 |
/*
|
|
Packit Service |
93d855 |
* Copyright (C) 2002-2006 Sergey V. Udaltsov <svu@gnome.org>
|
|
Packit Service |
93d855 |
*
|
|
Packit Service |
93d855 |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
93d855 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
93d855 |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
93d855 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit Service |
93d855 |
*
|
|
Packit Service |
93d855 |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
93d855 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
93d855 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
93d855 |
* Lesser General Public License for more details.
|
|
Packit Service |
93d855 |
*
|
|
Packit Service |
93d855 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
93d855 |
* License along with this library; if not, write to the
|
|
Packit Service |
93d855 |
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Packit Service |
93d855 |
* Boston, MA 02111-1307, USA.
|
|
Packit Service |
93d855 |
*/
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
#include <config.h>
|
|
Packit Service |
93d855 |
#include <stdio.h>
|
|
Packit Service |
93d855 |
#include <unistd.h>
|
|
Packit Service |
93d855 |
#include <getopt.h>
|
|
Packit Service |
93d855 |
#include <stdlib.h>
|
|
Packit Service |
93d855 |
#include <string.h>
|
|
Packit Service |
93d855 |
#include <X11/Xlib.h>
|
|
Packit Service |
93d855 |
#include <libxklavier/xklavier.h>
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
#ifdef HAVE_SETLOCALE
|
|
Packit Service |
93d855 |
# include <locale.h>
|
|
Packit Service |
93d855 |
#endif
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
extern void xkl_config_rec_dump(FILE * file, XklConfigRec * data);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
enum { ACTION_NONE, ACTION_LIST, ACTION_GET, ACTION_SET,
|
|
Packit Service |
93d855 |
ACTION_WRITE, ACTION_SEARCH
|
|
Packit Service |
93d855 |
};
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_usage(void)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
printf
|
|
Packit Service |
93d855 |
("Usage: test_config (-g)|(-s -m <model> -l <layouts> -o <options>)|(-h)|(-ws)|(-wb)(-d <debugLevel>)|(-p pattern)\n");
|
|
Packit Service |
93d855 |
printf("Options:\n");
|
|
Packit Service |
93d855 |
printf(" -al - list all available layouts and variants\n");
|
|
Packit Service |
93d855 |
printf(" -am - list all available models\n");
|
|
Packit Service |
93d855 |
printf
|
|
Packit Service |
93d855 |
(" -ao - list all available options groups and options\n");
|
|
Packit Service |
93d855 |
printf(" -ac - list all available ISO country codes\n");
|
|
Packit Service |
93d855 |
printf(" -ag - list all available ISO language codes\n");
|
|
Packit Service |
93d855 |
printf
|
|
Packit Service |
93d855 |
(" -g - Dump the current config, load original system settings and revert back\n");
|
|
Packit Service |
93d855 |
printf
|
|
Packit Service |
93d855 |
(" -s - Set the configuration given my -m -l -o options. Similar to setxkbmap\n");
|
|
Packit Service |
93d855 |
printf(" -ws - Write the binary XKB config file (" PACKAGE
|
|
Packit Service |
93d855 |
".xkm)\n");
|
|
Packit Service |
93d855 |
printf(" -wb - Write the source XKB config file (" PACKAGE
|
|
Packit Service |
93d855 |
".xkb)\n");
|
|
Packit Service |
93d855 |
printf(" -d - Set the debug level (by default, 0)\n");
|
|
Packit Service |
93d855 |
printf(" -p - Search by pattern\n");
|
|
Packit Service |
93d855 |
printf(" -h - Show this help\n");
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_option(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
printf(" [%s][%s][%s]\n", item->name,
|
|
Packit Service |
93d855 |
item->description, item->short_description);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_option_group(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
printf("[%s][%s][%s] %s multiple selection\n", item->name,
|
|
Packit Service |
93d855 |
item->description, item->short_description,
|
|
Packit Service |
93d855 |
GPOINTER_TO_INT(g_object_get_data
|
|
Packit Service |
93d855 |
(G_OBJECT(item),
|
|
Packit Service |
93d855 |
XCI_PROP_ALLOW_MULTIPLE_SELECTION)) ?
|
|
Packit Service |
93d855 |
"Allows" : "Does not allow");
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_option(config, item->name,
|
|
Packit Service |
93d855 |
print_option, data);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_model(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
gchar *vendor =
|
|
Packit Service |
93d855 |
(gchar *) g_object_get_data(G_OBJECT(item), XCI_PROP_VENDOR);
|
|
Packit Service |
93d855 |
printf("[%s][%s][%s] by %s\n", item->name, item->description,
|
|
Packit Service |
93d855 |
item->short_description,
|
|
Packit Service |
93d855 |
vendor == NULL ? "unknown" : vendor);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_xci(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gint indent)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
gboolean is_extra = (gboolean)
|
|
Packit Service |
93d855 |
GPOINTER_TO_INT(g_object_get_data
|
|
Packit Service |
93d855 |
(G_OBJECT(item), XCI_PROP_EXTRA_ITEM));
|
|
Packit Service |
93d855 |
gchar **countries = (gchar **) g_object_get_data(G_OBJECT(item),
|
|
Packit Service |
93d855 |
XCI_PROP_COUNTRY_LIST);
|
|
Packit Service |
93d855 |
gchar **languages = (gchar **) g_object_get_data(G_OBJECT(item),
|
|
Packit Service |
93d855 |
XCI_PROP_LANGUAGE_LIST);
|
|
Packit Service |
93d855 |
gint i;
|
|
Packit Service |
93d855 |
printf("%*s[%s][%s][%s]%s\n", indent, "", item->name,
|
|
Packit Service |
93d855 |
item->description, item->short_description,
|
|
Packit Service |
93d855 |
is_extra ? ":extra" : "");
|
|
Packit Service |
93d855 |
if (countries != NULL)
|
|
Packit Service |
93d855 |
for (i = 0; i < g_strv_length(countries); i++)
|
|
Packit Service |
93d855 |
printf("%*s country: [%s]\n", indent, "",
|
|
Packit Service |
93d855 |
countries[i]);
|
|
Packit Service |
93d855 |
if (languages != NULL)
|
|
Packit Service |
93d855 |
for (i = 0; i < g_strv_length(languages); i++)
|
|
Packit Service |
93d855 |
printf("%*s language: [%s]\n", indent, "",
|
|
Packit Service |
93d855 |
languages[i]);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_variant(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
print_xci(config, item, 2);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_layout(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
print_xci(config, item, 0);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_layout_variant(config, item->name,
|
|
Packit Service |
93d855 |
print_variant, data);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_iso_variant(XklConfigRegistry * config,
|
|
Packit Service |
93d855 |
const XklConfigItem * item,
|
|
Packit Service |
93d855 |
const XklConfigItem * subitem, gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
print_xci(config, item, 2);
|
|
Packit Service |
93d855 |
if (subitem)
|
|
Packit Service |
93d855 |
print_xci(config, subitem, 4);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_country(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
printf("country: ");
|
|
Packit Service |
93d855 |
print_xci(config, item, 0);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_country_variant(config, item->name,
|
|
Packit Service |
93d855 |
print_iso_variant,
|
|
Packit Service |
93d855 |
data);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_language(XklConfigRegistry * config, const XklConfigItem * item,
|
|
Packit Service |
93d855 |
gpointer data)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
printf("language: ");
|
|
Packit Service |
93d855 |
print_xci(config, item, 0);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_language_variant(config, item->name,
|
|
Packit Service |
93d855 |
print_iso_variant,
|
|
Packit Service |
93d855 |
data);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
static void
|
|
Packit Service |
93d855 |
print_found_variants(XklConfigRegistry * config,
|
|
Packit Service |
93d855 |
const XklConfigItem * parent_item,
|
|
Packit Service |
93d855 |
const XklConfigItem * child_item)
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
if (child_item == NULL)
|
|
Packit Service |
93d855 |
printf("found layout: [%s]\n", parent_item->name);
|
|
Packit Service |
93d855 |
else
|
|
Packit Service |
93d855 |
printf("found variant: [%s][%s]\n", parent_item->name,
|
|
Packit Service |
93d855 |
child_item->name);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
int
|
|
Packit Service |
93d855 |
main(int argc, char *const argv[])
|
|
Packit Service |
93d855 |
{
|
|
Packit Service |
93d855 |
int c;
|
|
Packit Service |
93d855 |
gchar which_list = 0;
|
|
Packit Service |
93d855 |
int action = ACTION_NONE;
|
|
Packit Service |
93d855 |
const gchar *model = NULL;
|
|
Packit Service |
93d855 |
const gchar *layouts = NULL;
|
|
Packit Service |
93d855 |
const gchar *options = NULL;
|
|
Packit Service |
93d855 |
const gchar *pattern = NULL;
|
|
Packit Service |
93d855 |
int debug_level = -1;
|
|
Packit Service |
93d855 |
int binary = 0;
|
|
Packit Service |
93d855 |
Display *dpy;
|
|
Packit Service |
93d855 |
XklEngine *engine;
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
g_type_init_with_debug_flags(G_TYPE_DEBUG_OBJECTS |
|
|
Packit Service |
93d855 |
G_TYPE_DEBUG_SIGNALS);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
while (1) {
|
|
Packit Service |
93d855 |
c = getopt(argc, argv, "ha:sgm:l:o:d:w:c:p:");
|
|
Packit Service |
93d855 |
if (c == -1)
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
switch (c) {
|
|
Packit Service |
93d855 |
case 'a':
|
|
Packit Service |
93d855 |
which_list = optarg[0];
|
|
Packit Service |
93d855 |
printf("List the registry\n");
|
|
Packit Service |
93d855 |
action = ACTION_LIST;
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 's':
|
|
Packit Service |
93d855 |
printf("Set the config\n");
|
|
Packit Service |
93d855 |
action = ACTION_SET;
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'g':
|
|
Packit Service |
93d855 |
printf("Get the config\n");
|
|
Packit Service |
93d855 |
action = ACTION_GET;
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'm':
|
|
Packit Service |
93d855 |
printf("Model: [%s]\n", model = optarg);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'l':
|
|
Packit Service |
93d855 |
printf("Layouts: [%s]\n", layouts = optarg);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'o':
|
|
Packit Service |
93d855 |
printf("Options: [%s]\n", options = optarg);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'p':
|
|
Packit Service |
93d855 |
action = ACTION_SEARCH;
|
|
Packit Service |
93d855 |
printf("Pattern: [%s]\n", pattern = optarg);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'h':
|
|
Packit Service |
93d855 |
print_usage();
|
|
Packit Service |
93d855 |
exit(0);
|
|
Packit Service |
93d855 |
case 'd':
|
|
Packit Service |
93d855 |
debug_level = atoi(optarg);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'w':
|
|
Packit Service |
93d855 |
action = ACTION_WRITE;
|
|
Packit Service |
93d855 |
binary = ('b' == optarg[0]);
|
|
Packit Service |
93d855 |
default:
|
|
Packit Service |
93d855 |
fprintf(stderr,
|
|
Packit Service |
93d855 |
"?? getopt returned character code 0%o ??\n",
|
|
Packit Service |
93d855 |
c);
|
|
Packit Service |
93d855 |
print_usage();
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
if (action == ACTION_NONE) {
|
|
Packit Service |
93d855 |
print_usage();
|
|
Packit Service |
93d855 |
exit(0);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
#ifdef HAVE_SETLOCALE
|
|
Packit Service |
93d855 |
setlocale(LC_ALL, "");
|
|
Packit Service |
93d855 |
#endif
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
dpy = XOpenDisplay(NULL);
|
|
Packit Service |
93d855 |
if (dpy == NULL) {
|
|
Packit Service |
93d855 |
fprintf(stderr, "Could not open display\n");
|
|
Packit Service |
93d855 |
exit(1);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
if (debug_level != -1)
|
|
Packit Service |
93d855 |
xkl_set_debug_level(debug_level);
|
|
Packit Service |
93d855 |
engine = xkl_engine_get_instance(dpy);
|
|
Packit Service |
93d855 |
if (engine != NULL) {
|
|
Packit Service |
93d855 |
XklConfigRec *current_config, *r2;
|
|
Packit Service |
93d855 |
XklConfigRegistry *config;
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
xkl_debug(0, "Xklavier initialized\n");
|
|
Packit Service |
93d855 |
config = xkl_config_registry_get_instance(engine);
|
|
Packit Service |
93d855 |
xkl_config_registry_load(config, TRUE);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
xkl_debug(0, "Xklavier registry loaded\n");
|
|
Packit Service |
93d855 |
xkl_debug(0, "Backend: [%s]\n",
|
|
Packit Service |
93d855 |
xkl_engine_get_backend_name(engine));
|
|
Packit Service |
93d855 |
xkl_debug(0, "Supported features: 0x0%X\n",
|
|
Packit Service |
93d855 |
xkl_engine_get_features(engine));
|
|
Packit Service |
93d855 |
xkl_debug(0, "Max number of groups: %d\n",
|
|
Packit Service |
93d855 |
xkl_engine_get_max_num_groups(engine));
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
current_config = xkl_config_rec_new();
|
|
Packit Service |
93d855 |
xkl_config_rec_get_from_server(current_config, engine);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
switch (action) {
|
|
Packit Service |
93d855 |
case ACTION_LIST:
|
|
Packit Service |
93d855 |
switch (which_list) {
|
|
Packit Service |
93d855 |
case 'l':
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_layout(config,
|
|
Packit Service |
93d855 |
print_layout,
|
|
Packit Service |
93d855 |
NULL);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'm':
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_model(config,
|
|
Packit Service |
93d855 |
print_model,
|
|
Packit Service |
93d855 |
NULL);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'o':
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_option_group
|
|
Packit Service |
93d855 |
(config, print_option_group, NULL);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'c':
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_country
|
|
Packit Service |
93d855 |
(config, print_country, NULL);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case 'g':
|
|
Packit Service |
93d855 |
xkl_config_registry_foreach_language
|
|
Packit Service |
93d855 |
(config, print_language, NULL);
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
default:
|
|
Packit Service |
93d855 |
printf("Unknown list: %c\n", which_list);
|
|
Packit Service |
93d855 |
print_usage();
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case ACTION_GET:
|
|
Packit Service |
93d855 |
xkl_debug(0, "Got config from the server\n");
|
|
Packit Service |
93d855 |
xkl_config_rec_dump(stdout, current_config);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
r2 = xkl_config_rec_new();
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
if (xkl_config_rec_get_from_backup(r2, engine)) {
|
|
Packit Service |
93d855 |
xkl_debug(0,
|
|
Packit Service |
93d855 |
"Got config from the backup\n");
|
|
Packit Service |
93d855 |
xkl_config_rec_dump(stdout, r2);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
if (xkl_config_rec_activate(r2, engine)) {
|
|
Packit Service |
93d855 |
xkl_debug(0,
|
|
Packit Service |
93d855 |
"The backup configuration restored\n");
|
|
Packit Service |
93d855 |
if (xkl_config_rec_activate
|
|
Packit Service |
93d855 |
(current_config, engine)) {
|
|
Packit Service |
93d855 |
xkl_debug(0,
|
|
Packit Service |
93d855 |
"Reverting the configuration change\n");
|
|
Packit Service |
93d855 |
} else {
|
|
Packit Service |
93d855 |
xkl_debug(0,
|
|
Packit Service |
93d855 |
"The configuration could not be reverted: %s\n",
|
|
Packit Service |
93d855 |
xkl_get_last_error());
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
} else {
|
|
Packit Service |
93d855 |
xkl_debug(0,
|
|
Packit Service |
93d855 |
"The backup configuration could not be restored: %s\n",
|
|
Packit Service |
93d855 |
xkl_get_last_error());
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
g_object_unref(G_OBJECT(r2));
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case ACTION_SET:
|
|
Packit Service |
93d855 |
if (model != NULL) {
|
|
Packit Service |
93d855 |
if (current_config->model != NULL)
|
|
Packit Service |
93d855 |
g_free(current_config->model);
|
|
Packit Service |
93d855 |
current_config->model = g_strdup(model);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
if (layouts != NULL) {
|
|
Packit Service |
93d855 |
if (current_config->layouts != NULL)
|
|
Packit Service |
93d855 |
g_strfreev
|
|
Packit Service |
93d855 |
(current_config->layouts);
|
|
Packit Service |
93d855 |
if (current_config->variants != NULL)
|
|
Packit Service |
93d855 |
g_strfreev
|
|
Packit Service |
93d855 |
(current_config->variants);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
current_config->layouts =
|
|
Packit Service |
93d855 |
g_new0(char *, 2);
|
|
Packit Service |
93d855 |
current_config->layouts[0] =
|
|
Packit Service |
93d855 |
g_strdup(layouts);
|
|
Packit Service |
93d855 |
current_config->variants =
|
|
Packit Service |
93d855 |
g_new0(char *, 2);
|
|
Packit Service |
93d855 |
current_config->variants[0] = g_strdup("");
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
if (options != NULL) {
|
|
Packit Service |
93d855 |
if (current_config->options != NULL)
|
|
Packit Service |
93d855 |
g_strfreev
|
|
Packit Service |
93d855 |
(current_config->options);
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
current_config->options =
|
|
Packit Service |
93d855 |
g_new0(char *, 2);
|
|
Packit Service |
93d855 |
current_config->options[0] =
|
|
Packit Service |
93d855 |
g_strdup(options);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
xkl_debug(0, "New config:\n");
|
|
Packit Service |
93d855 |
xkl_config_rec_dump(stdout, current_config);
|
|
Packit Service |
93d855 |
if (xkl_config_rec_activate
|
|
Packit Service |
93d855 |
(current_config, engine))
|
|
Packit Service |
93d855 |
xkl_debug(0, "Set the config\n");
|
|
Packit Service |
93d855 |
else
|
|
Packit Service |
93d855 |
xkl_debug(0,
|
|
Packit Service |
93d855 |
"Could not set the config: %s\n",
|
|
Packit Service |
93d855 |
xkl_get_last_error());
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case ACTION_WRITE:
|
|
Packit Service |
93d855 |
xkl_config_rec_write_to_file(engine,
|
|
Packit Service |
93d855 |
binary ? (PACKAGE
|
|
Packit Service |
93d855 |
".xkm")
|
|
Packit Service |
93d855 |
: (PACKAGE ".xkb"),
|
|
Packit Service |
93d855 |
current_config,
|
|
Packit Service |
93d855 |
binary);
|
|
Packit Service |
93d855 |
xkl_debug(0, "The file " PACKAGE "%s is written\n",
|
|
Packit Service |
93d855 |
binary ? ".xkm" : ".xkb");
|
|
Packit Service |
93d855 |
break;
|
|
Packit Service |
93d855 |
case ACTION_SEARCH:
|
|
Packit Service |
93d855 |
xkl_config_registry_search_by_pattern(config,
|
|
Packit Service |
93d855 |
pattern,
|
|
Packit Service |
93d855 |
(TwoConfigItemsProcessFunc)
|
|
Packit Service |
93d855 |
print_found_variants,
|
|
Packit Service |
93d855 |
NULL);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
g_object_unref(G_OBJECT(current_config));
|
|
Packit Service |
93d855 |
|
|
Packit Service |
93d855 |
g_object_unref(G_OBJECT(config));
|
|
Packit Service |
93d855 |
xkl_debug(0, "Xklavier registry freed\n");
|
|
Packit Service |
93d855 |
xkl_debug(0, "Xklavier terminating\n");
|
|
Packit Service |
93d855 |
g_object_unref(G_OBJECT(engine));
|
|
Packit Service |
93d855 |
} else {
|
|
Packit Service |
93d855 |
fprintf(stderr, "Could not init _xklavier\n");
|
|
Packit Service |
93d855 |
exit(2);
|
|
Packit Service |
93d855 |
}
|
|
Packit Service |
93d855 |
printf("closing display: %p\n", dpy);
|
|
Packit Service |
93d855 |
XCloseDisplay(dpy);
|
|
Packit Service |
93d855 |
return 0;
|
|
Packit Service |
93d855 |
}
|