mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
Gracefully exit when no fonts are installed
...rather than emitting ugly errors like: labwc: ../src/buffer.c:85: buffer_adopt_cairo_surface: Assertion `cairo_image_surface_get_format(surface) == CAIRO_FORMAT_ARGB32' failed.
This commit is contained in:
parent
ab8b25c9b1
commit
ca287de584
1 changed files with 27 additions and 0 deletions
27
src/main.c
27
src/main.c
|
|
@ -1,5 +1,6 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
#define _POSIX_C_SOURCE 200809L
|
#define _POSIX_C_SOURCE 200809L
|
||||||
|
#include <pango/pangocairo.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
@ -64,6 +65,31 @@ die_on_detecting_suid(void)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
die_on_no_fonts(void)
|
||||||
|
{
|
||||||
|
PangoContext *context = pango_font_map_create_context(
|
||||||
|
pango_cairo_font_map_get_default());
|
||||||
|
PangoLayout *layout = pango_layout_new(context);
|
||||||
|
pango_layout_set_text(layout, "abcdefg", -1);
|
||||||
|
int nr_unknown_glyphs = pango_layout_get_unknown_glyphs_count(layout);
|
||||||
|
g_object_unref(layout);
|
||||||
|
g_object_unref(context);
|
||||||
|
|
||||||
|
if (nr_unknown_glyphs > 0) {
|
||||||
|
wlr_log(WLR_ERROR, "no fonts are available");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make pango's dedicated thread exit. This prevents CI failures due to
|
||||||
|
* SIGTERM delivered to the pango's thread. This kind of workaround is
|
||||||
|
* not needed after we register our SIGTERM handler in
|
||||||
|
* server_init() > wl_event_loop_add_signal(), which masks SIGTERM.
|
||||||
|
*/
|
||||||
|
pango_cairo_font_map_set_default(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
send_signal_to_labwc_pid(int signal)
|
send_signal_to_labwc_pid(int signal)
|
||||||
{
|
{
|
||||||
|
|
@ -166,6 +192,7 @@ main(int argc, char *argv[])
|
||||||
wlr_log_init(verbosity, NULL);
|
wlr_log_init(verbosity, NULL);
|
||||||
|
|
||||||
die_on_detecting_suid();
|
die_on_detecting_suid();
|
||||||
|
die_on_no_fonts();
|
||||||
|
|
||||||
session_environment_init();
|
session_environment_init();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue