Don't call xwidget functions until GTK has been initialized

Follow up fix to Bug#33294.

* src/gtkutil.c: Define xg_gtk_initialized.
(xg_initialize): Set it when GTK has finished initializing.

* src/gtkutil.h: Declare xg_gtk_initialized.

* src/xwidget.c (Fmake_xwidget): Error out if GTK has not been
initialized.
(xwidget_init_view): Likewise.
This commit is contained in:
Robert Pluim 2018-11-27 09:39:30 +01:00
parent f0531b8e64
commit a291f62428
3 changed files with 11 additions and 0 deletions

View file

@ -147,6 +147,8 @@ struct xg_frame_tb_info
GtkTextDirection dir; GtkTextDirection dir;
}; };
bool xg_gtk_initialized; /* Used to make sure xwidget calls are possible */
static GtkWidget * xg_get_widget_from_map (ptrdiff_t idx); static GtkWidget * xg_get_widget_from_map (ptrdiff_t idx);
@ -5306,6 +5308,8 @@ xg_initialize (void)
#ifdef HAVE_FREETYPE #ifdef HAVE_FREETYPE
x_last_font_name = NULL; x_last_font_name = NULL;
#endif #endif
xg_gtk_initialized = true;
} }
#endif /* USE_GTK */ #endif /* USE_GTK */

View file

@ -202,5 +202,6 @@ extern void xg_initialize (void);
to indicate that the callback should do nothing. */ to indicate that the callback should do nothing. */
extern bool xg_ignore_gtk_scrollbar; extern bool xg_ignore_gtk_scrollbar;
extern bool xg_gtk_initialized;
#endif /* USE_GTK */ #endif /* USE_GTK */
#endif /* GTKUTIL_H */ #endif /* GTKUTIL_H */

View file

@ -78,6 +78,8 @@ Returns the newly constructed xwidget, or nil if construction fails. */)
Lisp_Object title, Lisp_Object width, Lisp_Object height, Lisp_Object title, Lisp_Object width, Lisp_Object height,
Lisp_Object arguments, Lisp_Object buffer) Lisp_Object arguments, Lisp_Object buffer)
{ {
if (!xg_gtk_initialized)
error ("make-xwidget: GTK has not been initialized");
CHECK_SYMBOL (type); CHECK_SYMBOL (type);
CHECK_NATNUM (width); CHECK_NATNUM (width);
CHECK_NATNUM (height); CHECK_NATNUM (height);
@ -508,6 +510,10 @@ xwidget_init_view (struct xwidget *xww,
struct glyph_string *s, struct glyph_string *s,
int x, int y) int x, int y)
{ {
if (!xg_gtk_initialized)
error ("xwidget_init_view: GTK has not been initialized");
struct xwidget_view *xv = allocate_xwidget_view (); struct xwidget_view *xv = allocate_xwidget_view ();
Lisp_Object val; Lisp_Object val;