diff --git a/src/gnome/top-level.c b/src/gnome/top-level.c index cb29fc957c..ce846c8607 100644 --- a/src/gnome/top-level.c +++ b/src/gnome/top-level.c @@ -386,7 +386,8 @@ gnc_gui_init (SCM command_line) NULL, "Register", "Register hint font"); - gnucash_style_init(); + if (!gnucash_style_init()) + gnc_shutdown(1); gnucash_color_init(); gnc_html_register_url_handler (URL_TYPE_REGISTER, diff --git a/src/gnome/window-main.c b/src/gnome/window-main.c index f456c04dbd..8ba5ad39c5 100644 --- a/src/gnome/window-main.c +++ b/src/gnome/window-main.c @@ -106,7 +106,7 @@ gnc_main_window_get_mdi_child (void) * gnc_shutdown * close down gnucash from the C side... ********************************************************************/ -static void +void gnc_shutdown (int exit_status) { /*SCM scm_shutdown = gnc_scm_lookup("gnucash bootstrap", "gnc:shutdown");*/ diff --git a/src/gnome/window-main.h b/src/gnome/window-main.h index 9d722561c6..366ac675ac 100644 --- a/src/gnome/window-main.h +++ b/src/gnome/window-main.h @@ -27,6 +27,7 @@ #include "gnc-mdi-utils.h" GNCMDIInfo * gnc_main_window_new (void); +void gnc_shutdown(int); /* * Functions used as callbacks from multiple dialogs. diff --git a/src/register/register-gnome/gnucash-style.c b/src/register/register-gnome/gnucash-style.c index 8b39f8adbf..d3d1310d00 100644 --- a/src/register/register-gnome/gnucash-style.c +++ b/src/register/register-gnome/gnucash-style.c @@ -31,7 +31,11 @@ #include "gnucash-item-edit.h" #include "gnucash-style.h" #include "messages.h" +#include "gnc-engine-util.h" +/** GLOBALS *********************************************************/ +/* This static indicates the debugging module that this .o belongs to. */ +static short module = MOD_GUI; #define DEFAULT_STYLE_WIDTH 680 @@ -811,64 +815,69 @@ gnucash_style_get_default_register_hint_font_name (void) void gnucash_style_set_register_font_name (const char *name) { - g_free (register_font_name); - register_font_name = g_strdup (name); + GdkFont *new_font = NULL; - if (gnucash_register_font != NULL) - { - gdk_font_unref (gnucash_register_font); - gnucash_register_font = NULL; - } + if (name != NULL) { + new_font = gnucash_font_load (name); + if (new_font == NULL) { + PWARN("Cannot load font: %s\n", name); + } + } - if (register_font_name != NULL) - gnucash_register_font = gnucash_font_load (register_font_name); + if (new_font == NULL) + { + name = gnucash_style_get_default_register_font_name (); + new_font = gnucash_font_load (name); + if (new_font == NULL) { + FATAL("Cannot load fallback font: %s\n", name); + return; + } + } - if (gnucash_register_font == NULL) - { - const char *name = - gnucash_style_get_default_register_font_name (); + if (gnucash_register_font != NULL) + gdk_font_unref (gnucash_register_font); + if (register_font_name != NULL) + g_free (register_font_name); - g_free (register_font_name); - register_font_name = NULL; + gnucash_register_font = new_font; + gdk_font_ref (gnucash_register_font); + register_font_name = g_strdup (name); - gnucash_register_font = gnucash_font_load (name); - } - - g_assert (gnucash_register_font != NULL); - - gdk_font_ref (gnucash_register_font); + g_assert (gnucash_register_font != NULL); } void gnucash_style_set_register_hint_font_name (const char *name) { - g_free (register_hint_font_name); - register_hint_font_name = g_strdup (name); + GdkFont *new_font = NULL; - if (gnucash_register_hint_font != NULL) - { - gdk_font_unref (gnucash_register_hint_font); - gnucash_register_hint_font = NULL; - } + if (name != NULL) { + new_font = gnucash_font_load (name); + if (new_font == NULL) { + PWARN("Cannot load font: %s\n", name); + } + } - if (register_hint_font_name != NULL) - gnucash_register_hint_font = - gnucash_font_load (register_hint_font_name); + if (new_font == NULL) + { + name = gnucash_style_get_default_register_hint_font_name (); + new_font = gnucash_font_load (name); + if (new_font == NULL) { + FATAL("Cannot load fallback font: %s\n", name); + return; + } + } - if (gnucash_register_hint_font == NULL) - { - const char *name = - gnucash_style_get_default_register_hint_font_name (); + if (gnucash_register_hint_font != NULL) + gdk_font_unref (gnucash_register_hint_font); + if (register_hint_font_name != NULL) + g_free (register_hint_font_name); - g_free (register_hint_font_name); - register_hint_font_name = NULL; + gnucash_register_hint_font = new_font; + gdk_font_ref (gnucash_register_hint_font); + register_hint_font_name = g_strdup (name); - gnucash_register_hint_font = gnucash_font_load (name); - } - - g_assert (gnucash_register_hint_font != NULL); - - gdk_font_ref (gnucash_register_hint_font); + g_assert (gnucash_register_hint_font != NULL); } typedef struct @@ -1013,7 +1022,7 @@ gnucash_sheet_set_header_widths (GnucashSheet *sheet, } } -void +gboolean gnucash_style_init (void) { if (gnucash_register_font == NULL) @@ -1021,6 +1030,9 @@ gnucash_style_init (void) if (gnucash_register_hint_font == NULL) gnucash_style_set_register_hint_font_name(NULL); + + return ((gnucash_register_font != NULL) && + (gnucash_register_hint_font != NULL)); } diff --git a/src/register/register-gnome/gnucash-style.h b/src/register/register-gnome/gnucash-style.h index eedee62e42..66ec5855c8 100644 --- a/src/register/register-gnome/gnucash-style.h +++ b/src/register/register-gnome/gnucash-style.h @@ -64,7 +64,7 @@ struct _SheetBlockStyle }; -void gnucash_style_init (void); +gboolean gnucash_style_init (void); void gnucash_sheet_style_init(void);