diff --git a/data/meson.build b/data/meson.build index 2aa9afa6..4def2b8c 100644 --- a/data/meson.build +++ b/data/meson.build @@ -1,9 +1,4 @@ -install_data( - 'themes/default.css', - install_dir: pkgdatadir + '/themes', -) - install_data( 'keyboards/keyboards.xml', install_dir: pkgdatadir + '/keyboards/', diff --git a/eek/eek-theme.c b/eek/eek-theme.c index a80d0433..ad9fd134 100644 --- a/eek/eek-theme.c +++ b/eek/eek-theme.c @@ -43,6 +43,7 @@ * Copyright (C) 2003-2004 Dodji Seketeli. All Rights Reserved. */ +#define G_LOG_DOMAIN "eek-theme" #include #include @@ -256,13 +257,59 @@ parse_stylesheet (const char *filename, { enum CRStatus status; CRStyleSheet *stylesheet; + g_autoptr (GFileInputStream) stream = NULL; + g_autoptr (GFileInfo) info = NULL; + g_autoptr (GFile) file = NULL; + g_autofree guchar* contents = NULL; + goffset size; + gsize out = 0; + GError *err = NULL; if (filename == NULL) return NULL; - status = cr_om_parser_simply_parse_file ((const guchar *) filename, - CR_UTF_8, - &stylesheet); + g_debug ("Parsing %s", filename); + if (g_strcmp0 (filename, "resource://") > 0) { + file = g_file_new_for_uri (filename); + stream = g_file_read (file, NULL, &err); + if (!stream) { + g_warning ("Failed to open %s: %s", filename, err->message); + g_clear_error (&err); + return NULL; + } + + info = g_file_input_stream_query_info (stream, + G_FILE_ATTRIBUTE_STANDARD_SIZE, + NULL, + &err); + + if (!info) { + g_warning ("Failed to stat %s: %s", filename, err->message); + g_clear_error (&err); + return NULL; + } + + size = g_file_info_get_size (info); + contents = g_malloc0 (size); + if (!g_input_stream_read_all (G_INPUT_STREAM (stream), + contents, + size, + &out, + NULL, + &err)) { + g_warning ("Failed to read %s: %s", filename, err->message); + g_clear_error (&err); + return NULL; + } + status = cr_om_parser_simply_parse_buf (contents, + size, + CR_UTF_8, + &stylesheet); + } else { + status = cr_om_parser_simply_parse_file ((const guchar *) filename, + CR_UTF_8, + &stylesheet); + } if (status != CR_OK) { diff --git a/src/meson.build b/src/meson.build index 5f849ec8..1b304308 100644 --- a/src/meson.build +++ b/src/meson.build @@ -4,6 +4,13 @@ dbus_src = gnome.gdbus_codegen( join_paths(dbusdir, 'sm.puri.OSK0.xml') ) +squeekboard_resources = gnome.compile_resources( + 'squeekboard-resources', + 'squeekboard.gresources.xml', + + c_name: 'squeekboard', +) + sources = [ 'imservice.c', 'server-context-service.c', @@ -40,7 +47,8 @@ sources = [ '../eekboard/eekboard-context-service.c', '../eekboard/eekboard-context.c', '../eekboard/eekboard-service.c', -# '../eekboard/eekboard-xklutil.c', + # '../eekboard/eekboard-xklutil.c', + squeekboard_resources, wl_proto_sources, ] diff --git a/src/server-context-service.c b/src/server-context-service.c index 32e3b078..90371257 100644 --- a/src/server-context-service.c +++ b/src/server-context-service.c @@ -338,9 +338,9 @@ update_widget (ServerContextService *context) context->widget = NULL; } - theme_path = g_build_filename (THEMESDIR, "default.css", NULL); - - theme = eek_theme_new (theme_path, NULL, NULL); + theme = eek_theme_new ("resource:///sm/puri/squeekboard/style.css", + NULL, + NULL); g_free (theme_path); keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context)); diff --git a/src/squeekboard.gresources.xml b/src/squeekboard.gresources.xml new file mode 100644 index 00000000..3f17a884 --- /dev/null +++ b/src/squeekboard.gresources.xml @@ -0,0 +1,6 @@ + + + + style.css + + diff --git a/data/themes/default.css b/src/style.css similarity index 100% rename from data/themes/default.css rename to src/style.css