From da078c4b755267129c83aad9624744b435b0cf3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Sat, 13 Jul 2024 12:40:00 +0200 Subject: [PATCH] highgui: Make GThread mandatory with GTK The GThread API is available since more than 11 years with GLib, it is now safe to assume that it is always available. --- CMakeLists.txt | 8 +------- modules/highgui/CMakeLists.txt | 12 ------------ modules/highgui/cmake/detect_gtk.cmake | 8 +------- .../misc/plugins/plugin_gtk/CMakeLists.txt | 6 ------ modules/highgui/src/window_gtk.cpp | 17 ----------------- 5 files changed, 2 insertions(+), 49 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f00ac637d5..0587f94e9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1465,16 +1465,10 @@ if(WITH_GTK OR HAVE_GTK) status(" GTK+:" "YES (ver ${GTK3_VERSION})") elseif(HAVE_GTK) status(" GTK+:" "YES (ver ${GTK2_VERSION})") + status(" GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${GTKGLEXT_VERSION})" ELSE NO) else() status(" GTK+:" "NO") endif() - - if(HAVE_GTK) - status( " GThread :" HAVE_GTHREAD THEN "YES (ver ${GTHREAD_VERSION})" ELSE NO) - if(NOT HAVE_GTK3) - status( " GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${GTKGLEXT_VERSION})" ELSE NO) - endif() - endif() endif() if(WITH_FRAMEBUFFER OR HAVE_FRAMEBUFFER) diff --git a/modules/highgui/CMakeLists.txt b/modules/highgui/CMakeLists.txt index c1d42444c5..ab5e5391ec 100644 --- a/modules/highgui/CMakeLists.txt +++ b/modules/highgui/CMakeLists.txt @@ -228,9 +228,6 @@ if(TARGET ocv.3rdparty.gtk3 OR TARGET ocv.3rdparty.gtk2) endif() list(APPEND highgui_srcs ${CMAKE_CURRENT_LIST_DIR}/src/window_gtk.cpp) list(APPEND tgts ${__gtk_dependency}) - if(TARGET ocv.3rdparty.gthread) - list(APPEND tgts ocv.3rdparty.gthread) - endif() if(TARGET ocv.3rdparty.gtkglext AND __gtk_dependency STREQUAL "ocv.3rdparty.gtk2" AND NOT OPENCV_GTK_DISABLE_GTKGLEXT @@ -245,27 +242,18 @@ if(TARGET ocv.3rdparty.gtk3 OR TARGET ocv.3rdparty.gtk2) endif() elseif("gtk" IN_LIST HIGHGUI_PLUGIN_LIST) ocv_create_builtin_highgui_plugin(opencv_highgui_gtk ${__gtk_dependency} "window_gtk.cpp") - if(TARGET ocv.3rdparty.gthread) - ocv_target_link_libraries(opencv_highgui_gtk ocv.3rdparty.gthread) - endif() if(TARGET ocv.3rdparty.gtkglext) ocv_target_link_libraries(opencv_highgui_gtk ocv.3rdparty.gtkglext) endif() else() if(TARGET ocv.3rdparty.gtk3 AND ("gtk3" IN_LIST HIGHGUI_PLUGIN_LIST OR HIGHGUI_PLUGIN_LIST STREQUAL "all")) ocv_create_builtin_highgui_plugin(opencv_highgui_gtk3 ocv.3rdparty.gtk3 "window_gtk.cpp") - if(TARGET ocv.3rdparty.gthread) - ocv_target_link_libraries(opencv_highgui_gtk3 ocv.3rdparty.gthread) - endif() if(TARGET ocv.3rdparty.gtkglext) ocv_target_link_libraries(opencv_highgui_gtk3 ocv.3rdparty.gtkglext) endif() endif() if(TARGET ocv.3rdparty.gtk2 AND ("gtk2" IN_LIST HIGHGUI_PLUGIN_LIST OR HIGHGUI_PLUGIN_LIST STREQUAL "all")) ocv_create_builtin_highgui_plugin(opencv_highgui_gtk2 ocv.3rdparty.gtk2 "window_gtk.cpp") - if(TARGET ocv.3rdparty.gthread) - ocv_target_link_libraries(opencv_highgui_gtk2 ocv.3rdparty.gthread) - endif() if(TARGET ocv.3rdparty.gtkglext) ocv_target_link_libraries(opencv_highgui_gtk2 ocv.3rdparty.gtkglext) endif() diff --git a/modules/highgui/cmake/detect_gtk.cmake b/modules/highgui/cmake/detect_gtk.cmake index fdca580aa9..e41da1c68e 100644 --- a/modules/highgui/cmake/detect_gtk.cmake +++ b/modules/highgui/cmake/detect_gtk.cmake @@ -1,5 +1,5 @@ # --- GTK --- -ocv_clear_vars(HAVE_GTK HAVE_GTK2 HAVE_GTK3 HAVE_GTHREAD HAVE_GTKGLEXT) +ocv_clear_vars(HAVE_GTK HAVE_GTK2 HAVE_GTK3 HAVE_GTKGLEXT) if(WITH_GTK) if(NOT WITH_GTK_2_X) ocv_check_modules(GTK3 gtk+-3.0) @@ -20,12 +20,6 @@ if(WITH_GTK) endif() endif() endif() - ocv_check_modules(GTHREAD gthread-2.0>=2.32) - if(HAVE_GTK AND NOT HAVE_GTHREAD) - message(FATAL_ERROR "gthread not found. This library is required when building with GTK support") - else() - ocv_add_external_target(gthread "${GTHREAD_INCLUDE_DIRS}" "${GTHREAD_LIBRARIES}" "HAVE_GTHREAD") - endif() if((WITH_OPENGL OR HAVE_OPENGL) AND (HAVE_GTK2 OR HAVE_GTK3)) if(HAVE_GTK2) ocv_check_modules(GTKGLEXT gtkglext-1.0) diff --git a/modules/highgui/misc/plugins/plugin_gtk/CMakeLists.txt b/modules/highgui/misc/plugins/plugin_gtk/CMakeLists.txt index 6a2da0c9c3..c9cd0b6f1b 100644 --- a/modules/highgui/misc/plugins/plugin_gtk/CMakeLists.txt +++ b/modules/highgui/misc/plugins/plugin_gtk/CMakeLists.txt @@ -50,9 +50,3 @@ elseif(DEFINED GTK_VERSION) else() message(STATUS "GTK+: YES") endif() - -if(HAVE_GTHREAD) - message(STATUS "GThread : YES (ver ${GTHREAD_VERSION})") -else() - message(STATUS "GThread : NO") -endif() diff --git a/modules/highgui/src/window_gtk.cpp b/modules/highgui/src/window_gtk.cpp index aa4c8ea634..178d1b7475 100644 --- a/modules/highgui/src/window_gtk.cpp +++ b/modules/highgui/src/window_gtk.cpp @@ -608,13 +608,11 @@ static gboolean icvOnKeyPress( GtkWidget* widget, GdkEventKey* event, gpointer u static void icvOnTrackbar( GtkWidget* widget, gpointer user_data ); static gboolean icvOnMouse( GtkWidget *widget, GdkEvent *event, gpointer user_data ); -#ifdef HAVE_GTHREAD int thread_started=0; static gpointer icvWindowThreadLoop(gpointer data); GMutex* last_key_mutex = NULL; GCond* cond_have_key = NULL; GThread* window_thread = NULL; -#endif static int last_key = -1; @@ -660,7 +658,6 @@ CV_IMPL int cvInitSystem( int argc, char** argv ) } CV_IMPL int cvStartWindowThread(){ -#ifdef HAVE_GTHREAD cvInitSystem(0,NULL); if (!thread_started) { @@ -676,12 +673,8 @@ CV_IMPL int cvStartWindowThread(){ } thread_started = window_thread!=NULL; return thread_started; -#else - return 0; -#endif } -#ifdef HAVE_GTHREAD gpointer icvWindowThreadLoop(gpointer /*data*/) { while(1){ @@ -698,8 +691,6 @@ gpointer icvWindowThreadLoop(gpointer /*data*/) return NULL; } -#endif - #define CV_LOCK_MUTEX() cv::AutoLock lock(getWindowMutex()) static @@ -1282,7 +1273,6 @@ static void checkLastWindow() // if last window... if (getGTKWindows().empty()) { -#ifdef HAVE_GTHREAD if( thread_started ) { // send key press signal to jump out of any waiting cvWaitKey's @@ -1290,7 +1280,6 @@ static void checkLastWindow() } else { -#endif // Some GTK+ modules (like the Unity module) use GDBusConnection, // which has a habit of postponing cleanup by performing it via // idle sources added to the main loop. Since this was the last window, @@ -1301,9 +1290,7 @@ static void checkLastWindow() // thread will process events continuously. while( gtk_events_pending() ) gtk_main_iteration(); -#ifdef HAVE_GTHREAD } -#endif } } @@ -1852,7 +1839,6 @@ static gboolean icvOnKeyPress(GtkWidget* widget, GdkEventKey* event, gpointer us code |= event->state << 16; -#ifdef HAVE_GTHREAD if(thread_started) { g_mutex_lock(last_key_mutex); @@ -1862,7 +1848,6 @@ static gboolean icvOnKeyPress(GtkWidget* widget, GdkEventKey* event, gpointer us g_mutex_unlock(last_key_mutex); } else -#endif { last_key = code; } @@ -2053,7 +2038,6 @@ static gboolean icvAlarm( gpointer user_data ) CV_IMPL int cvWaitKey( int delay ) { -#ifdef HAVE_GTHREAD if (thread_started && g_thread_self() != window_thread) { gboolean expired = true; @@ -2087,7 +2071,6 @@ CV_IMPL int cvWaitKey( int delay ) return my_last_key; } else -#endif { int expired = 0; guint timer = 0;