Log autoscroll fix

pull/238/head
parent 6e6663e749
commit 891ddb76b9

@ -11,8 +11,17 @@ void on_log_closed(GtkWidget *, log_window *window){
window->Window=NULL; window->Window=NULL;
} }
gboolean on_log_window_exit(GtkWidget *,GdkEvent*, log_window *window){
if (window->timer_id){
g_source_remove(window->timer_id);
window->timer_id=0;
}
return 0;
}
log_window *yon_log_window_new(){ log_window *yon_log_window_new(){
log_window *window = malloc(sizeof(log_window)); log_window *window = malloc(sizeof(log_window));
memset(window,0,sizeof(log_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log_view); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log_view);
window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); window->Window = yon_gtk_builder_get_widget(builder,"MainWindow");
window->ScrollWindow = yon_gtk_builder_get_widget(builder,"ScrollWindow"); window->ScrollWindow = yon_gtk_builder_get_widget(builder,"ScrollWindow");
@ -21,10 +30,22 @@ log_window *yon_log_window_new(){
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
window->ScrollToEndCheck = yon_gtk_builder_get_widget(builder,"ScrollToEndCheck"); window->ScrollToEndCheck = yon_gtk_builder_get_widget(builder,"ScrollToEndCheck");
window->monitor = NULL; window->monitor = NULL;
g_signal_connect(G_OBJECT(window->ScrollWindow),"scroll-child",G_CALLBACK(yon_log_scroll),window);
g_signal_connect(G_OBJECT(window->Window),"delete-event",G_CALLBACK(on_log_window_exit),window);
gtk_widget_show(window->Window); gtk_widget_show(window->Window);
return window; return window;
} }
gboolean yon_log_scroll(log_window *window){
GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(window->ScrollWindow));
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ScrollToEndCheck))){
gtk_adjustment_set_value(adj,
gtk_adjustment_get_upper(adj));
}
return G_SOURCE_CONTINUE;
}
void yon_read_log(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,log_window *window){ void yon_read_log(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,log_window *window){
if (window->Window){ if (window->Window){
int size; int size;
@ -35,7 +56,13 @@ void yon_read_log(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,log_window *
char *final = yon_char_parsed_to_string(parsed,size,""); char *final = yon_char_parsed_to_string(parsed,size,"");
gtk_label_set_text(GTK_LABEL(window->LogLabel),final); gtk_label_set_text(GTK_LABEL(window->LogLabel),final);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ScrollToEndCheck))){ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ScrollToEndCheck))){
if (!window->timer_id){
window->timer_id = g_idle_add((GSourceFunc)yon_log_scroll,window);
}
gtk_adjustment_set_value(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(window->ScrollWindow)),gtk_adjustment_get_upper(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(window->ScrollWindow)))); gtk_adjustment_set_value(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(window->ScrollWindow)),gtk_adjustment_get_upper(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(window->ScrollWindow))));
} else if (window->timer_id){
g_source_remove(window->timer_id);
window->timer_id=0;
} }
free(final); free(final);
yon_char_parsed_free(parsed,size); yon_char_parsed_free(parsed,size);
@ -48,6 +75,10 @@ void yon_read_log(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,log_window *
g_mutex_unlock(&main_config.install_mutex); g_mutex_unlock(&main_config.install_mutex);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ScrollToEndCheck),0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ScrollToEndCheck),0);
gtk_widget_set_sensitive(window->ScrollToEndCheck,0); gtk_widget_set_sensitive(window->ScrollToEndCheck,0);
if (window->timer_id){
g_source_remove(window->timer_id);
window->timer_id=0;
}
} }
} }
return ; return ;

@ -885,6 +885,8 @@ typedef struct
GtkWidget *ScrollToEndCheck; GtkWidget *ScrollToEndCheck;
GFileMonitor *monitor; GFileMonitor *monitor;
guint timer_id;
char *command; char *command;
} log_window; } log_window;
@ -1521,4 +1523,5 @@ int yon_installation_check_packages_size(main_window *widgets);
config_str yon_os_components_get_modules(int *size); config_str yon_os_components_get_modules(int *size);
int yon_os_components_check_packages_size(GtkWidget *, main_window *widgets); int yon_os_components_check_packages_size(GtkWidget *, main_window *widgets);
void on_pacman_search_enter(GtkEntry *self, main_window *widgets); void on_pacman_search_enter(GtkEntry *self, main_window *widgets);
void yon_log_scroll(GtkScrolledWindow* self, GtkScrollType* scroll, gboolean horizontal,log_window *window); gboolean yon_log_scroll(log_window *window);
gboolean on_log_window_exit(GtkWidget *,GdkEvent*, log_window *window);
Loading…
Cancel
Save