highgui: don't terminate if we can't initialize GTK backend
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sat, 15 Aug 2020 22:17:33 +0000 (22:17 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sun, 16 Aug 2020 09:30:09 +0000 (09:30 +0000)
- allow Users to handle such case
- exception will be thrown instead

modules/highgui/src/window_gtk.cpp

index 76a3760f6a2440954235f3b5edeb4518aa7a8ffd..ad50db30a812c9f3f424fe30bfac8c1db11c3c84 100644 (file)
@@ -612,19 +612,33 @@ static std::vector< Ptr<CvWindow> > g_windows;
 CV_IMPL int cvInitSystem( int argc, char** argv )
 {
     static int wasInitialized = 0;
+    static bool hasError = false;
 
     // check initialization status
     if( !wasInitialized )
     {
-        gtk_init( &argc, &argv );
+        if (!gtk_init_check(&argc, &argv))
+        {
+            hasError = true;
+            wasInitialized = true;
+            CV_Error(Error::StsError, "Can't initialize GTK backend");
+        }
+
         setlocale(LC_NUMERIC,"C");
 
         #ifdef HAVE_OPENGL
-            gtk_gl_init(&argc, &argv);
+            if (!gtk_gl_init_check(&argc, &argv))
+            {
+                hasError = true;
+                wasInitialized = true;
+                CV_Error(Error::StsError, "Can't initialize GTK-OpenGL backend");
+            }
         #endif
 
         wasInitialized = 1;
     }
+    if (hasError)
+       CV_Error(Error::StsError, "GTK backend is not available");
 
     return 0;
 }