fix misinterpretation of empty window name
authorBjörn Wöldecke <webmaster@trooper.de>
Wed, 6 Aug 2014 17:02:48 +0000 (19:02 +0200)
committerBjörn Wöldecke <webmaster@trooper.de>
Wed, 6 Aug 2014 17:02:48 +0000 (19:02 +0200)
The documentation states, that a NULL or an empty window name can be used
to refer to the control panel. But the string parameters of the C++ frontend
methods cannot be NULL and converting an empty string to a const char* by
c_str() doesn't produce a NULL pointer, but an empty string. Unfortunately,
the const char* pointer is just passed on to the standard C functions in
the QT backend, which doesn't check for the empty string case.

There are two places where the empty string check could have been introduced:
inside the frontend or inside the backend. As long as the documentation only
mentions this as a special case for the QT backend, the best place seems to
be there.

modules/highgui/src/window_QT.cpp

index 1433f74..d4dfc98 100644 (file)
@@ -401,7 +401,7 @@ static CvTrackbar* icvFindTrackBarByName(const char* name_trackbar, const char*
 {
     QString nameQt(name_trackbar);
 
-    if (!name_window && global_control_panel) //window name is null and we have a control panel
+    if ((!name_window || !name_window[0]) && global_control_panel) //window name is null and we have a control panel
         layout = global_control_panel->myLayout;
 
     if (!layout)