forked from AuroraMiddleware/gtk
composetable: Support non-FHS paths for Compose tables
On platforms like NixOS, the libX11 installation prefix may differ from /usr/share, breaking the hardcoded placeholders. Let’s re-use the X11 path definition from imcontextsimple.
This commit is contained in:
parent
4bb79decf3
commit
94a096ec4c
@ -284,6 +284,20 @@ fail:
|
|||||||
static void parser_parse_file (GtkComposeParser *parser,
|
static void parser_parse_file (GtkComposeParser *parser,
|
||||||
const char *path);
|
const char *path);
|
||||||
|
|
||||||
|
char *
|
||||||
|
gtk_compose_table_get_x11_compose_file_dir (void)
|
||||||
|
{
|
||||||
|
char * compose_file_dir;
|
||||||
|
|
||||||
|
#if defined (X11_DATA_PREFIX)
|
||||||
|
compose_file_dir = g_strdup (X11_DATA_PREFIX "/share/X11/locale");
|
||||||
|
#else
|
||||||
|
compose_file_dir = g_build_filename (_gtk_get_datadir (), "X11", "locale", NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return compose_file_dir;
|
||||||
|
}
|
||||||
|
|
||||||
/* Substitute %H, %L and %S */
|
/* Substitute %H, %L and %S */
|
||||||
static char *
|
static char *
|
||||||
handle_substitutions (const char *start,
|
handle_substitutions (const char *start,
|
||||||
@ -305,6 +319,9 @@ handle_substitutions (const char *start,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char *x11_compose_file_dir;
|
||||||
|
char *path;
|
||||||
|
|
||||||
switch (p[1])
|
switch (p[1])
|
||||||
{
|
{
|
||||||
case 'H':
|
case 'H':
|
||||||
@ -313,11 +330,17 @@ handle_substitutions (const char *start,
|
|||||||
break;
|
break;
|
||||||
case 'L':
|
case 'L':
|
||||||
p++;
|
p++;
|
||||||
g_string_append_printf (s, "/usr/share/X11/locale/%s/Compose", locale_name);
|
x11_compose_file_dir = gtk_compose_table_get_x11_compose_file_dir ();
|
||||||
|
path = g_build_filename (x11_compose_file_dir, locale_name, "Compose", NULL);
|
||||||
|
g_string_append (s, path);
|
||||||
|
g_free (path);
|
||||||
|
g_free (x11_compose_file_dir);
|
||||||
break;
|
break;
|
||||||
case 'S':
|
case 'S':
|
||||||
p++;
|
p++;
|
||||||
g_string_append (s, "/usr/share/X11/locale");
|
x11_compose_file_dir = gtk_compose_table_get_x11_compose_file_dir ();
|
||||||
|
g_string_append (s, x11_compose_file_dir);
|
||||||
|
g_free (x11_compose_file_dir);
|
||||||
break;
|
break;
|
||||||
default: ;
|
default: ;
|
||||||
/* do nothing, next iteration handles p[1] */
|
/* do nothing, next iteration handles p[1] */
|
||||||
|
@ -93,6 +93,8 @@ guint32 gtk_compose_table_data_hash (const guint16 *data,
|
|||||||
int max_seq_len,
|
int max_seq_len,
|
||||||
int n_seqs);
|
int n_seqs);
|
||||||
|
|
||||||
|
char * gtk_compose_table_get_x11_compose_file_dir (void);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GTK_COMPOSETABLE_H__ */
|
#endif /* __GTK_COMPOSETABLE_H__ */
|
||||||
|
@ -180,20 +180,6 @@ gtk_im_context_simple_class_init (GtkIMContextSimpleClass *class)
|
|||||||
init_compose_table_async (NULL, NULL, NULL);
|
init_compose_table_async (NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
|
||||||
get_x11_compose_file_dir (void)
|
|
||||||
{
|
|
||||||
char * compose_file_dir;
|
|
||||||
|
|
||||||
#if defined (X11_DATA_PREFIX)
|
|
||||||
compose_file_dir = g_strdup (X11_DATA_PREFIX "/share/X11/locale");
|
|
||||||
#else
|
|
||||||
compose_file_dir = g_build_filename (_gtk_get_datadir (), "X11", "locale", NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return compose_file_dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
gtk_compose_table_find (gconstpointer data1,
|
gtk_compose_table_find (gconstpointer data1,
|
||||||
gconstpointer data2)
|
gconstpointer data2)
|
||||||
@ -321,7 +307,7 @@ gtk_im_context_simple_init_compose_table (void)
|
|||||||
{
|
{
|
||||||
if (g_ascii_strncasecmp (*lang, *sys_lang, strlen (*sys_lang)) == 0)
|
if (g_ascii_strncasecmp (*lang, *sys_lang, strlen (*sys_lang)) == 0)
|
||||||
{
|
{
|
||||||
char *x11_compose_file_dir = get_x11_compose_file_dir ();
|
char *x11_compose_file_dir = gtk_compose_table_get_x11_compose_file_dir ();
|
||||||
path = g_build_filename (x11_compose_file_dir, *lang, "Compose", NULL);
|
path = g_build_filename (x11_compose_file_dir, *lang, "Compose", NULL);
|
||||||
g_free (x11_compose_file_dir);
|
g_free (x11_compose_file_dir);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user