@@ -692,10 +692,8 @@ void main_l_cleanup(void) {
692692 if (g_app) {
693693 g_object_unref (g_app);
694694 g_app = NULL ;
695- g_tabs[pd->tab_idx ].wrapped_lines .clear ();
696695 }
697696 if (g_drawing_area) gtk_widget_queue_draw (g_drawing_area);
698- delete pd;
699697}
700698
701699void main_l_print_info (const char * msg) {
@@ -742,7 +740,31 @@ void main_l_set_tab_cwd(int tab_idx, const char* cwd) {
742740 }
743741}
744742
745- static void add_tab_idle (gpointer data) {
743+ static gboolean print_info_idle (gpointer data) {
744+ PrintData* pd = static_cast <PrintData*>(data);
745+ std::lock_guard<std::mutex> lk (g_mutex);
746+ if (pd->tab_idx >= 0 && pd->tab_idx < (int )g_tabs.size ()) {
747+ g_tabs[pd->tab_idx ].raw_lines .push_back ({pd->msg , pd->color , pd->is_continuation });
748+ g_tabs[pd->tab_idx ].wrapped_lines .clear ();
749+ if (g_drawing_area) gtk_widget_queue_draw (g_drawing_area);
750+ }
751+ delete pd;
752+ return G_SOURCE_REMOVE ;
753+ }
754+
755+ static gboolean print_info_idle (gpointer data) {
756+ PrintData* pd = static_cast <PrintData*>(data);
757+ std::lock_guard<std::mutex> lk (g_mutex);
758+ if (pd->tab_idx >= 0 && pd->tab_idx < (int )g_tabs.size ()) {
759+ g_tabs[pd->tab_idx ].raw_lines .push_back ({pd->msg , pd->color , pd->is_continuation });
760+ g_tabs[pd->tab_idx ].wrapped_lines .clear ();
761+ if (g_drawing_area) gtk_widget_queue_draw (g_drawing_area);
762+ }
763+ delete pd;
764+ return G_SOURCE_REMOVE ;
765+ }
766+
767+ static gboolean add_tab_idle (gpointer data) {
746768 const char * owner = static_cast <const char *>(data);
747769 std::lock_guard<std::mutex> lk (g_mutex);
748770 TabState new_tab;
@@ -755,6 +777,7 @@ static void add_tab_idle(gpointer data) {
755777 g_active_tab = g_tabs.size () - 1 ;
756778 if (g_drawing_area) gtk_widget_queue_draw (g_drawing_area);
757779 free (const_cast <char *>(owner)); // free the strdup'd string
780+ return G_SOURCE_REMOVE ;
758781}
759782
760783void main_l_add_tab (const char * owner) {
@@ -777,7 +800,7 @@ int main_l_get_tab_owner(int tab_idx, char* buf, int max_len) {
777800 std::string msg;
778801};
779802
780- static void replace_last_line_idle (gpointer data) {
803+ static gboolean replace_last_line_idle (gpointer data) {
781804 ReplaceLastLineData* d = static_cast <ReplaceLastLineData*>(data);
782805 std::lock_guard<std::mutex> lk (g_mutex);
783806 if (d->tab_idx >= 0 && d->tab_idx < (int )g_tabs.size () && !g_tabs[d->tab_idx ].raw_lines .empty ()) {
@@ -786,6 +809,7 @@ static void replace_last_line_idle(gpointer data) {
786809 if (g_drawing_area) gtk_widget_queue_draw (g_drawing_area);
787810 }
788811 delete d;
812+ return G_SOURCE_REMOVE ;
789813}
790814
791815void main_l_replace_last_line (const char * msg) {
0 commit comments