From 763dddaf033b93befbd38bbdabb3c373be4f5450 Mon Sep 17 00:00:00 2001 From: j-b-m Date: Tue, 1 Sep 2009 19:22:45 +0200 Subject: [PATCH] Don't crash when running kdenlivetitle module from a console, instead print error message and exit modified: src/modules/qimage/kdenlivetitle_wrapper.cpp --- src/modules/qimage/kdenlivetitle_wrapper.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/modules/qimage/kdenlivetitle_wrapper.cpp b/src/modules/qimage/kdenlivetitle_wrapper.cpp index 60869a35..719524e0 100644 --- a/src/modules/qimage/kdenlivetitle_wrapper.cpp +++ b/src/modules/qimage/kdenlivetitle_wrapper.cpp @@ -37,6 +37,7 @@ #include #include #include +#include static QApplication *app = NULL; @@ -113,7 +114,7 @@ QTransform stringToTransform( const QString& s ) static void qscene_delete( void *data ) { QGraphicsScene *scene = ( QGraphicsScene * )data; - delete scene; + if (scene) delete scene; scene = NULL; } @@ -299,17 +300,30 @@ void drawKdenliveTitle( producer_ktitle self, mlt_frame frame, int width, int he scene = NULL; mlt_properties_set_data( producer_props, "qscene", NULL, 0, NULL, NULL ); } - + if ( scene == NULL ) { int argc = 1; char* argv[1]; argv[0] = (char*) "xxx"; + + // Warning: all Qt graphic objects (QRect, ...) must be initialized AFTER + // the QApplication is created, otherwise their will be NULL + if (qApp) { app = qApp; } else { - app=new QApplication( argc,argv ); //, QApplication::Tty ); +#ifdef linux + if ( getenv("DISPLAY") == 0 ) + { + mlt_log_panic( MLT_PRODUCER_SERVICE( producer ), "Error, cannot render titles without an X11 environment.\nPlease either run melt from an X session or use a fake X server like xvfb:\nxvfb-run -a melt (...)\n" ); + pthread_mutex_unlock( &self->mutex ); + exit(1); + return; + } +#endif + app = new QApplication( argc, argv ); } scene = new QGraphicsScene(); loadFromXml( producer, scene, mlt_properties_get( producer_props, "xmldata" ), mlt_properties_get( producer_props, "templatetext" ) ); -- 2.39.5