fix(resources): compile resources and fix error management

This commit is contained in:
Jeremy Attali 2019-12-28 17:02:50 -05:00
parent 08787f3136
commit 05d87c929f
6 changed files with 35 additions and 34 deletions

View File

@ -102,7 +102,6 @@ struct swappy_state_ui {
}; };
struct swappy_state { struct swappy_state {
GResource *resource;
GtkApplication *app; GtkApplication *app;
struct swappy_state_ui *ui; struct swappy_state_ui *ui;

View File

@ -41,6 +41,7 @@ subdir('protocol')
executable( executable(
'swappy', 'swappy',
swappy_resources,
files([ files([
'src/main.c', 'src/main.c',
'src/notification.c', 'src/notification.c',

View File

@ -1,12 +1,8 @@
pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name())
# Import the gnome module and use a GNOME function to ensure that application # Import the gnome module and use a GNOME function to ensure that application
# resources will be compiled. # resources will be compiled.
gnome = import('gnome') gnome = import('gnome')
gnome.compile_resources('swappy', swappy_resources = gnome.compile_resources('swappy',
'swappy.gresource.xml', 'swappy.gresource.xml',
gresource_bundle: true, cname: 'swappy_resources'
install: true,
install_dir: pkgdatadir,
) )

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<gresources> <gresources>
<gresource prefix="/swappy"> <gresource prefix="/me/jtheoof/swappy">
<file>style/swappy.css</file> <file>style/swappy.css</file>
<file>swappy.ui</file> <file>swappy.ui</file>
</gresource> </gresource>
</gresources> </gresources>

View File

@ -164,7 +164,6 @@ void application_finish(struct swappy_state *state) {
g_free(state->storage_path); g_free(state->storage_path);
g_free(state->geometry_str); g_free(state->geometry_str);
g_free(state->geometry); g_free(state->geometry);
g_resources_unregister(state->resource);
g_free(state->ui); g_free(state->ui);
g_object_unref(state->app); g_object_unref(state->app);
} }
@ -447,11 +446,13 @@ static void apply_css(GtkWidget *widget, GtkStyleProvider *provider) {
} }
} }
static void load_css(struct swappy_state *state) { static bool load_css(struct swappy_state *state) {
GtkCssProvider *provider = gtk_css_provider_new(); GtkCssProvider *provider = gtk_css_provider_new();
gtk_css_provider_load_from_resource(provider, "/swappy/style/swappy.css"); gtk_css_provider_load_from_resource(provider,
"/me/jtheoof/swappy/style/swappy.css");
apply_css(GTK_WIDGET(state->ui->window), GTK_STYLE_PROVIDER(provider)); apply_css(GTK_WIDGET(state->ui->window), GTK_STYLE_PROVIDER(provider));
g_object_unref(provider); g_object_unref(provider);
return true;
} }
static bool load_layout(struct swappy_state *state) { static bool load_layout(struct swappy_state *state) {
@ -460,8 +461,8 @@ static bool load_layout(struct swappy_state *state) {
/* Construct a GtkBuilder instance and load our UI description */ /* Construct a GtkBuilder instance and load our UI description */
GtkBuilder *builder = gtk_builder_new(); GtkBuilder *builder = gtk_builder_new();
if (gtk_builder_add_from_resource(builder, "/swappy/swappy.ui", &error) == if (gtk_builder_add_from_resource(builder, "/me/jtheoof/swappy/swappy.ui",
0) { &error) == 0) {
g_printerr("Error loading file: %s", error->message); g_printerr("Error loading file: %s", error->message);
g_clear_error(&error); g_clear_error(&error);
return false; return false;
@ -521,14 +522,21 @@ static bool load_layout(struct swappy_state *state) {
return true; return true;
} }
static void init_gtk_window(struct swappy_state *state) { static bool init_gtk_window(struct swappy_state *state) {
g_info("activating application ----------"); g_info("activating application ----------");
load_layout(state); if (!load_layout(state)) {
load_css(state); return false;
}
if (!load_css(state)) {
return false;
}
update_ui_stroke_size_widget(state); update_ui_stroke_size_widget(state);
update_ui_undo_redo(state); update_ui_undo_redo(state);
return true;
} }
static gboolean is_geometry_valid(struct swappy_state *state) { static gboolean is_geometry_valid(struct swappy_state *state) {
@ -539,7 +547,7 @@ static gint command_line_handler(GtkApplication *app,
GApplicationCommandLine *cmdline, GApplicationCommandLine *cmdline,
struct swappy_state *state) { struct swappy_state *state) {
if (!is_geometry_valid(state)) { if (!is_geometry_valid(state)) {
g_warning("geometry parameter is missing"); g_printerr("geometry parameter is missing\n");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -550,17 +558,18 @@ static gint command_line_handler(GtkApplication *app,
} }
if (!screencopy_init(state)) { if (!screencopy_init(state)) {
g_warning("unable to initialize zwlr_screencopy_v1"); g_printerr("unable to initialize zwlr_screencopy_v1\n");
return false; return false;
} }
init_gtk_window(state); if (!init_gtk_window(state)) {
return EXIT_FAILURE;
}
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
bool application_init(struct swappy_state *state) { bool application_init(struct swappy_state *state) {
GError *error = NULL;
const GOptionEntry cli_options[] = { const GOptionEntry cli_options[] = {
{ {
.long_name = "geometry", .long_name = "geometry",
@ -582,17 +591,8 @@ bool application_init(struct swappy_state *state) {
g_application_add_main_option_entries(G_APPLICATION(state->app), cli_options); g_application_add_main_option_entries(G_APPLICATION(state->app), cli_options);
state->resource = g_resource_load("build/meson-out/swappy.gresource", &error);
if (error != NULL) {
g_critical("unable to load swappy resource file: %s", error->message);
g_error_free(error);
}
state->ui = g_new(struct swappy_state_ui, 1); state->ui = g_new(struct swappy_state_ui, 1);
g_resources_register(state->resource);
g_signal_connect(state->app, "command-line", G_CALLBACK(command_line_handler), g_signal_connect(state->app, "command-line", G_CALLBACK(command_line_handler),
state); state);

View File

@ -16,6 +16,7 @@
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
struct swappy_state state = {0}; struct swappy_state state = {0};
int status;
state.argc = argc; state.argc = argc;
state.argv = argv; state.argv = argv;
@ -36,10 +37,14 @@ int main(int argc, char *argv[]) {
exit(1); exit(1);
} }
application_run(&state); status = application_run(&state);
gtk_main(); if (status == 0) {
gtk_main();
}
application_finish(&state); application_finish(&state);
wayland_finish(&state); wayland_finish(&state);
return status;
} }