Don't crash on a missing fonts. Exit cleanly.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7213 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton 2002-09-14 23:27:39 +00:00
parent 37c6ba9e35
commit 86dd93bfe8
5 changed files with 61 additions and 47 deletions

View File

@ -386,7 +386,8 @@ gnc_gui_init (SCM command_line)
NULL, "Register", NULL, "Register",
"Register hint font"); "Register hint font");
gnucash_style_init(); if (!gnucash_style_init())
gnc_shutdown(1);
gnucash_color_init(); gnucash_color_init();
gnc_html_register_url_handler (URL_TYPE_REGISTER, gnc_html_register_url_handler (URL_TYPE_REGISTER,

View File

@ -106,7 +106,7 @@ gnc_main_window_get_mdi_child (void)
* gnc_shutdown * gnc_shutdown
* close down gnucash from the C side... * close down gnucash from the C side...
********************************************************************/ ********************************************************************/
static void void
gnc_shutdown (int exit_status) gnc_shutdown (int exit_status)
{ {
/*SCM scm_shutdown = gnc_scm_lookup("gnucash bootstrap", "gnc:shutdown");*/ /*SCM scm_shutdown = gnc_scm_lookup("gnucash bootstrap", "gnc:shutdown");*/

View File

@ -27,6 +27,7 @@
#include "gnc-mdi-utils.h" #include "gnc-mdi-utils.h"
GNCMDIInfo * gnc_main_window_new (void); GNCMDIInfo * gnc_main_window_new (void);
void gnc_shutdown(int);
/* /*
* Functions used as callbacks from multiple dialogs. * Functions used as callbacks from multiple dialogs.

View File

@ -31,7 +31,11 @@
#include "gnucash-item-edit.h" #include "gnucash-item-edit.h"
#include "gnucash-style.h" #include "gnucash-style.h"
#include "messages.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 #define DEFAULT_STYLE_WIDTH 680
@ -811,64 +815,69 @@ gnucash_style_get_default_register_hint_font_name (void)
void void
gnucash_style_set_register_font_name (const char *name) gnucash_style_set_register_font_name (const char *name)
{ {
g_free (register_font_name); GdkFont *new_font = NULL;
register_font_name = g_strdup (name);
if (gnucash_register_font != NULL) if (name != NULL) {
{ new_font = gnucash_font_load (name);
gdk_font_unref (gnucash_register_font); if (new_font == NULL) {
gnucash_register_font = NULL; PWARN("Cannot load font: %s\n", name);
} }
}
if (register_font_name != NULL) if (new_font == NULL)
gnucash_register_font = gnucash_font_load (register_font_name); {
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) if (gnucash_register_font != NULL)
{ gdk_font_unref (gnucash_register_font);
const char *name = if (register_font_name != NULL)
gnucash_style_get_default_register_font_name (); g_free (register_font_name);
g_free (register_font_name); gnucash_register_font = new_font;
register_font_name = NULL; 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);
}
g_assert (gnucash_register_font != NULL);
gdk_font_ref (gnucash_register_font);
} }
void void
gnucash_style_set_register_hint_font_name (const char *name) gnucash_style_set_register_hint_font_name (const char *name)
{ {
g_free (register_hint_font_name); GdkFont *new_font = NULL;
register_hint_font_name = g_strdup (name);
if (gnucash_register_hint_font != NULL) if (name != NULL) {
{ new_font = gnucash_font_load (name);
gdk_font_unref (gnucash_register_hint_font); if (new_font == NULL) {
gnucash_register_hint_font = NULL; PWARN("Cannot load font: %s\n", name);
} }
}
if (register_hint_font_name != NULL) if (new_font == NULL)
gnucash_register_hint_font = {
gnucash_font_load (register_hint_font_name); 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) if (gnucash_register_hint_font != NULL)
{ gdk_font_unref (gnucash_register_hint_font);
const char *name = if (register_hint_font_name != NULL)
gnucash_style_get_default_register_hint_font_name (); g_free (register_hint_font_name);
g_free (register_hint_font_name); gnucash_register_hint_font = new_font;
register_hint_font_name = NULL; 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);
}
g_assert (gnucash_register_hint_font != NULL);
gdk_font_ref (gnucash_register_hint_font);
} }
typedef struct typedef struct
@ -1013,7 +1022,7 @@ gnucash_sheet_set_header_widths (GnucashSheet *sheet,
} }
} }
void gboolean
gnucash_style_init (void) gnucash_style_init (void)
{ {
if (gnucash_register_font == NULL) if (gnucash_register_font == NULL)
@ -1021,6 +1030,9 @@ gnucash_style_init (void)
if (gnucash_register_hint_font == NULL) if (gnucash_register_hint_font == NULL)
gnucash_style_set_register_hint_font_name(NULL); gnucash_style_set_register_hint_font_name(NULL);
return ((gnucash_register_font != NULL) &&
(gnucash_register_hint_font != NULL));
} }

View File

@ -64,7 +64,7 @@ struct _SheetBlockStyle
}; };
void gnucash_style_init (void); gboolean gnucash_style_init (void);
void gnucash_sheet_style_init(void); void gnucash_sheet_style_init(void);