From d870c9a499753ce4210e854c775d4f53e42ac201 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 7 Mar 2025 10:55:20 +0600 Subject: [PATCH] Fixed freeze --- source/libublsettings-gtk3-status.c | 32 +++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/source/libublsettings-gtk3-status.c b/source/libublsettings-gtk3-status.c index 62c25e3..520eb53 100644 --- a/source/libublsettings-gtk3-status.c +++ b/source/libublsettings-gtk3-status.c @@ -87,18 +87,27 @@ void yon_ubl_status_box_render_thread(char *text, BACKGROUND_IMAGE_TYPE type){ g_idle_add((GSourceFunc)_yon_ubl_status_box_render_thread,data); } -gboolean _yon_ubl_status_highlight_incorrect(GtkWidget *widget){ +gboolean _yon_ubl_status_highlight_incorrect_start(GtkWidget *widget){ gtk_style_context_add_class(gtk_widget_get_style_context(widget),"errorBox"); - sleep(5); + return G_SOURCE_REMOVE; +} + +gboolean _yon_ubl_status_highlight_incorrect_stop(GtkWidget *widget){ gtk_style_context_remove_class(gtk_widget_get_style_context(widget),"errorBox"); return G_SOURCE_REMOVE; } +gboolean _yon_ubl_status_highlight_incorrect(GtkWidget *widget){ + g_idle_add((GSourceFunc)_yon_ubl_status_highlight_incorrect_start,widget); + sleep(5); + g_idle_add((GSourceFunc)_yon_ubl_status_highlight_incorrect_stop,widget); +} + void yon_ubl_status_highlight_incorrect(GtkWidget *widget){ - g_idle_add((GSourceFunc)_yon_ubl_status_highlight_incorrect,widget); + g_thread_new("error_highlight",(GThreadFunc)_yon_ubl_status_highlight_incorrect,widget); } -gboolean _yon_ubl_status_list_store_highlight_incorrect(GtkWidget **widget_pack){ +gboolean _yon_ubl_status_list_store_highlight_incorrect_start(GtkWidget **widget_pack){ GtkListStore *list = (GtkListStore*)widget_pack[0]; GtkTreeIter *iter = (GtkTreeIter*)widget_pack[1]; GdkRGBA rgba,rgba2; @@ -111,16 +120,27 @@ gboolean _yon_ubl_status_list_store_highlight_incorrect(GtkWidget **widget_pack) rgba2.green=0; rgba2.red=0; gtk_list_store_set(list,iter,1,gdk_rgba_to_string(&rgba2),2,gdk_rgba_to_string(&rgba),-1); - sleep(5); + return G_SOURCE_REMOVE; +} + +gboolean _yon_ubl_status_list_store_highlight_incorrect_stop(GtkWidget **widget_pack){ + GtkListStore *list = (GtkListStore*)widget_pack[0]; + GtkTreeIter *iter = (GtkTreeIter*)widget_pack[1]; gtk_list_store_set(list,iter,1,NULL,2,NULL,-1); return G_SOURCE_REMOVE; } +void _yon_ubl_status_list_store_highlight_incorrect(GtkWidget **widget_pack){ + g_idle_add((GSourceFunc)_yon_ubl_status_highlight_incorrect_stop,widget_pack); + sleep(5); + g_idle_add((GSourceFunc)_yon_ubl_status_highlight_incorrect_stop,widget_pack); +} + void yon_ubl_status_list_store_highlight_incorrect(GtkListStore *list, GtkTreeIter *iter){ GtkWidget **pack = malloc(sizeof(GtkWidget *)*2); pack[0]=(GtkWidget*)list; pack[1]=(GtkWidget*)iter; - g_idle_add((GSourceFunc)_yon_ubl_status_list_store_highlight_incorrect,pack); + g_thread_new("error_highlight",(GThreadFunc)_yon_ubl_status_list_store_highlight_incorrect,pack); } struct temp_statusbox {