aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-11-01 10:53:03 +0100
committerPřemysl Eric Janouch <p@janouch.name>2021-11-01 12:20:16 +0100
commit3465557a5b3b09b563fc45d2c3b13f09c4935a34 (patch)
tree134fd1cde7caea0c03b24edac9591a3d664c0755
parent082f1aa41c9d08fcb72e0af14ce5f3475c93482b (diff)
downloadlogdiag-3465557a5b3b09b563fc45d2c3b13f09c4935a34.tar.gz
logdiag-3465557a5b3b09b563fc45d2c3b13f09c4935a34.tar.xz
logdiag-3465557a5b3b09b563fc45d2c3b13f09c4935a34.zip
Use GResources for the UI file and the LICENSE
- The About dialog now displays the licence. - The main UI file is now integrated into the binary. The project needed some of its ugly CMake code back.
-rw-r--r--CMakeLists.txt45
-rw-r--r--share/logdiag.gresource.xml7
-rw-r--r--share/logdiag.ui (renamed from share/gui/window-main.ui)0
-rw-r--r--src/ld-window-main.c10
4 files changed, 59 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1557bb4..50e64d0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -143,6 +143,7 @@ set (logdiag_TESTS
diagram)
set (logdiag_SOURCES
+ ${PROJECT_BINARY_DIR}/gresource.c
src/ld-window-main.c
src/logdiag.c)
set (logdiag_HEADERS
@@ -175,6 +176,48 @@ endfunction ()
glib_genmarshal (${PROJECT_SOURCE_DIR}/liblogdiag/ld-marshal.list ld_marshal)
+# Generate resources
+function (glib_compile_resources xml target)
+ find_program (GLIB_COMPILE_RESOURCES_EXECUTABLE glib-compile-resources)
+ if (NOT GLIB_COMPILE_RESOURCES_EXECUTABLE)
+ message (FATAL_ERROR "glib-compile-resources not found")
+ endif ()
+
+ # glib-compile-resources reads paths relative to its working directory
+ get_filename_component (_xml_path "${xml}" PATH)
+
+ # On Windows, the final Makefile may contain:
+ # cd e:\abc && ...
+ # That won't actually change the directory. We have to do:
+ # cd e:\abc && e: && ...
+ set (_prefix)
+ if (WIN32 AND "${_xml_path}" MATCHES "^.:[/\\\\]")
+ string (SUBSTRING "${_xml_path}" 0 2 _xml_drive)
+ set (_prefix ${_xml_drive} &&)
+ endif ()
+
+ # VERBATIM would cause problems, so it is not used here
+ add_custom_command (OUTPUT ${target}
+ COMMAND ${_prefix} ${GLIB_COMPILE_RESOURCES_EXECUTABLE}
+ --generate-source --target ${target} "${xml}" DEPENDS "${xml}"
+ WORKING_DIRECTORY "${_xml_path}" COMMENT "Compiling resources")
+
+ # This refuses to accept drive changes, but it also needn't succeed
+ execute_process (COMMAND ${GLIB_COMPILE_RESOURCES_EXECUTABLE}
+ --generate-dependencies "${xml}"
+ WORKING_DIRECTORY "${_xml_path}" OUTPUT_VARIABLE _deps)
+ string (REPLACE "\n" ";" _deps "${_deps}")
+ foreach (_dep ${_deps})
+ set_property (SOURCE "${target}"
+ APPEND PROPERTY OBJECT_DEPENDS "${_xml_path}/${_dep}")
+ endforeach ()
+
+ configure_file ("${xml}" glib-compile-resources.stamp COPYONLY)
+endfunction ()
+
+glib_compile_resources (${PROJECT_SOURCE_DIR}/share/logdiag.gresource.xml
+ ${PROJECT_BINARY_DIR}/gresource.c)
+
# Generate a configure file
add_definitions (-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_36)
add_definitions (-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_36)
@@ -349,7 +392,7 @@ else ()
endif ()
install (DIRECTORY docs/user-guide DESTINATION share/doc/${PROJECT_NAME})
-install (DIRECTORY share/gui share/library DESTINATION share/${PROJECT_NAME})
+install (DIRECTORY share/library DESTINATION share/${PROJECT_NAME})
install (FILES ${GSETTINGS_SCHEMAS} DESTINATION share/glib-2.0/schemas)
install (CODE " # DESTDIR is not in use on Windows (WIN32 is only native here!)
if (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")
diff --git a/share/logdiag.gresource.xml b/share/logdiag.gresource.xml
new file mode 100644
index 0000000..eae7e24
--- /dev/null
+++ b/share/logdiag.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/logdiag">
+ <file>logdiag.ui</file>
+ <file alias="LICENSE">../LICENSE</file>
+ </gresource>
+</gresources>
diff --git a/share/gui/window-main.ui b/share/logdiag.ui
index f826698..f826698 100644
--- a/share/gui/window-main.ui
+++ b/share/logdiag.ui
diff --git a/src/ld-window-main.c b/src/ld-window-main.c
index 6e97996..cbf9fd9 100644
--- a/src/ld-window-main.c
+++ b/src/ld-window-main.c
@@ -274,8 +274,8 @@ ld_window_main_init (LdWindowMain *self)
priv->action_group, 0);
error = NULL;
- gtk_ui_manager_add_ui_from_file
- (priv->ui_manager, PROJECT_SHARE_DIR "gui/window-main.ui", &error);
+ gtk_ui_manager_add_ui_from_resource
+ (priv->ui_manager, "/logdiag/logdiag.ui", &error);
if (error)
{
g_message ("building UI failed: %s", error->message);
@@ -1153,6 +1153,10 @@ static void
on_action_about (GtkAction *action, LdWindowMain *self)
{
GtkWidget *about_dialog;
+ GBytes *license;
+
+ license = g_resources_lookup_data ("/logdiag/LICENSE",
+ G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
about_dialog = g_object_new (GTK_TYPE_ABOUT_DIALOG,
"program-name", PROJECT_NAME,
@@ -1160,9 +1164,11 @@ on_action_about (GtkAction *action, LdWindowMain *self)
"version", PROJECT_VERSION,
"translator-credits", _("translator-credits"),
"copyright", "Copyright 2010 - 2021 Přemysl Eric Janouch",
+ "license", g_bytes_get_data (license, NULL),
"website", PROJECT_URL,
NULL);
+ g_bytes_unref (license);
g_signal_connect (about_dialog, "activate-link",
G_CALLBACK (on_action_about_activate_link), self);