pull/28/head
parent 4eca521d7d
commit 9b39b7d0e7

@ -3,7 +3,6 @@
<gresource prefix="/com/ublinux/ui"> <gresource prefix="/com/ublinux/ui">
<file>ubl-settings-services.glade</file> <file>ubl-settings-services.glade</file>
<file>ubl-settings-services-terminal.glade</file> <file>ubl-settings-services-terminal.glade</file>
<file>ubl-settings-services-log.glade</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/css"> <gresource prefix="/com/ublinux/css">
<file>ubl-settings-services.css</file> <file>ubl-settings-services.css</file>

@ -32,7 +32,6 @@ add_custom_target(GLADE ubl-settings-services.glade)
set(DEPENDFILES set(DEPENDFILES
../ubl-settings-services.glade ../ubl-settings-services.glade
../ubl-settings-services-terminal.glade ../ubl-settings-services-terminal.glade
../ubl-settings-services-log.glade
../gresource.xml ../gresource.xml
../ubl-settings-services-banner.png ../ubl-settings-services-banner.png
../ubl-settings-services.css ../ubl-settings-services.css

@ -126,15 +126,20 @@ log_window *yon_log_window_new(){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log);
window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow"); window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow");
window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal"); window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal");
window->TerminalScroll = yon_gtk_builder_get_widget(builder,"TerminalScroll");
window->TextEditor = yon_gtk_builder_get_widget(builder,"TextEditor"); window->TextEditor = yon_gtk_builder_get_widget(builder,"TextEditor");
window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel");
window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton"); window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton");
window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton");
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
window->target=NULL; window->target=NULL;
window->adjustment = GTK_ADJUSTMENT(gtk_builder_get_object(builder,"adjustment1"));
yon_gtk_widget_set_scroll_window_for_scroll(window->Window,GTK_SCROLLBAR(window->TerminalScroll));
GdkRGBA rgba; GdkRGBA rgba;
vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba); vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba);
vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba); vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba);
yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window"); yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window");
g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),window);
return window; return window;
} }
@ -153,6 +158,21 @@ void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){
} }
} }
void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){
if (self){};
if (widgets){
if (getuid()!=0&&gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
if (system(reexec_systemd_root_command)){
yon_ubl_status_box_render("TEXT_ERROR",BACKGROUND_IMAGE_FAIL_TYPE);
}
} else {
if (system(reexec_systemd_user_command)){
yon_ubl_status_box_render("TEXT_ERROR",BACKGROUND_IMAGE_FAIL_TYPE);
}
}
}
}
typedef void (*data_function)(void*,void*); typedef void (*data_function)(void*,void*);
void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){
@ -163,15 +183,18 @@ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){
data->data = widgets; data->data = widgets;
data->function = (data_function)yon_system_systemd_restart; data->function = (data_function)yon_system_systemd_restart;
yon_confirmation_dialog_call(self,data); yon_confirmation_dialog_call(self,data);
} }
} }
void on_system_update_clicked(GtkWidget *self, main_window *widgets){ void on_system_update_clicked(GtkWidget *self, main_window *widgets){
if (self){} if (self){}
if (widgets){ if (widgets){
// log_window *window = yon_log_window_new(); dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
data->action_text = "Are you sure?";
// gtk_widget_show(window->Window); data->data = widgets;
data->function = (data_function)yon_system_systemd_reexec;
yon_confirmation_dialog_call(self,data);
} }
} }
@ -179,9 +202,16 @@ void on_system_update_clicked(GtkWidget *self, main_window *widgets){
void on_system_info_clicked(GtkWidget *self, main_window *widgets){ void on_system_info_clicked(GtkWidget *self, main_window *widgets){
if (self){} if (self){}
if (widgets){ if (widgets){
log_window *window = yon_log_window_new(); GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
gtk_widget_show(window->Window); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){
char *name;
gtk_tree_model_get(model,&iter,5,&name,-1);
log_window *window = yon_log_window_new();
window->target = service_info_command(name);
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
} }
} }
@ -189,19 +219,63 @@ void on_system_info_clicked(GtkWidget *self, main_window *widgets){
void on_system_log_clicked(GtkWidget *self, main_window *widgets){ void on_system_log_clicked(GtkWidget *self, main_window *widgets){
if (self){} if (self){}
if (widgets){ if (widgets){
log_window *window = yon_log_window_new(); GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
gtk_widget_show(window->Window); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){
char *name;
gtk_tree_model_get(model,&iter,5,&name,-1);
log_window *window = yon_log_window_new();
window->target = get_log_command(name);
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
} }
} }
void *on_terminal_relaunch(log_window *window){
gtk_widget_set_sensitive(window->SystemTerminal,0);
sleep(1);
gtk_widget_set_sensitive(window->SystemTerminal,1);
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
return NULL;
}
void on_save_clicked(GtkWidget *self, log_window *window){
if (self){};
vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"\30",-1);
vte_terminal_feed_child(VTE_TERMINAL(window->SystemTerminal),"Y\r",-1);
gtk_widget_grab_focus(window->SystemTerminal);
// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),SAVING_LABEL,1,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new(NULL,(GThreadFunc)on_terminal_relaunch,window);
}
void on_update_clicked(GtkWidget *self, log_window *window){
if (self){};
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
}
void on_system_edit_clicked(GtkWidget *self, main_window *widgets){ void on_system_edit_clicked(GtkWidget *self, main_window *widgets){
if (self){} if (self){}
if (widgets){ if (widgets){
log_window *window = yon_log_window_new(); GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
gtk_widget_show(window->Window); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){
char *name;
gtk_tree_model_get(model,&iter,5,&name,-1);
log_window *window = yon_log_window_new();
gtk_widget_show(window->SaveButton);
window->target=show_source_command(name);
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
GdkRGBA rgba;
rgba.blue=1;
rgba.green=1;
rgba.red=1;
vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba);
gtk_widget_set_sensitive(window->SystemTerminal,1);
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_save_clicked),window);
gtk_widget_show(window->Window);
}
} }
} }
@ -209,9 +283,17 @@ void on_system_edit_clicked(GtkWidget *self, main_window *widgets){
void on_system_status_clicked(GtkWidget *self, main_window *widgets){ void on_system_status_clicked(GtkWidget *self, main_window *widgets){
if (self){} if (self){}
if (widgets){ if (widgets){
log_window *window = yon_log_window_new(); GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){
char *name;
gtk_tree_model_get(model,&iter,5,&name,-1);
log_window *window = yon_log_window_new();
window->target = properties_command(name);
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
gtk_widget_show(window->Window);
} }
} }
@ -360,6 +442,18 @@ void on_config_edit_clicked(GtkWidget *self, main_window *widgets){
if (self){} if (self){}
if (widgets){ if (widgets){
log_window *window = yon_log_window_new(); log_window *window = yon_log_window_new();
gtk_widget_hide(gtk_widget_get_parent(window->SystemTerminal));
gtk_widget_show(gtk_widget_get_parent(window->TextEditor));
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->ConfigList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ConfigMainTree)),&model,&iter)){
char *name;
gtk_tree_model_get(model,&iter,0,&name,-1);
int size;
config_str parsed = yon_config_load(config_get_command(name),&size);
char *text = yon_char_parsed_to_string(parsed,size,"");
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor)),text,-1);
}
gtk_widget_show(window->Window); gtk_widget_show(window->Window);
} }
@ -397,9 +491,134 @@ void on_session_lock_clicked(GtkWidget *self, main_window *widgets){
} }
void on_system_services_status(GtkWidget *self, main_window *widgets){
if (self){}
if (widgets){
log_window *window = yon_log_window_new();
window->target = system_services_status_command;
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
}
void on_user_services_status(GtkWidget *self, main_window *widgets){
if (self){}
if (widgets){
log_window *window = yon_log_window_new();
window->target = user_services_status_command;
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
}
void on_units_status(GtkWidget *self, main_window *widgets){
if (self){}
if (widgets){
log_window *window = yon_log_window_new();
window->target = installed_units_states_command;
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
}
void on_units_list_status(GtkWidget *self, main_window *widgets){
if (self){}
if (widgets){
log_window *window = yon_log_window_new();
window->target = list_of_units_states_command;
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
}
void on_sockets_list_status(GtkWidget *self, main_window *widgets){
if (self){}
if (widgets){
log_window *window = yon_log_window_new();
window->target = list_of_sockets_states_command;
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
}
void on_timers_list_status(GtkWidget *self, main_window *widgets){
if (self){}
if (widgets){
log_window *window = yon_log_window_new();
window->target = list_of_timers_states_command;
yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
gtk_widget_show(window->Window);
}
}
gboolean yon_interface_update(main_window *widgets){ gboolean yon_interface_update(main_window *widgets){
if (widgets){ if (widgets){
int system_size;
config_str system_services = yon_config_load(load_services_command,&system_size);
int user_size;
config_str user_services = yon_config_load(load_user_services_command,&user_size);
int config_size;
config_str config_files = yon_config_load(get_config_files_command,&config_size);
int sessions_size;
config_str sessions = yon_config_load(list_of_session_command,&sessions_size);
// int timers_size;
// config_str timers = yon_config_load(list_of_timers_command,&timers_size);
for (int i=0; i<system_size;i++){
GtkTreeIter iter;
if (system_services[i][strlen(system_services[i])-1]=='\n') system_services[i][strlen(system_services[i])-1] = '\0';
int size;
config_str parsed = yon_char_parse(system_services[i],&size,";");
if (parsed&&strstr(parsed[0],".service")){
gtk_list_store_append(widgets->SystemList,&iter);
gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1);
}
}
for (int i=0; i<user_size;i++){
GtkTreeIter iter;
if (user_services[i][strlen(user_services[i])-1]=='\n') user_services[i][strlen(user_services[i])-1] = '\0';
int size;
config_str parsed = yon_char_parse(user_services[i],&size,";");
if (strstr(parsed[0],".service")){
gtk_list_store_append(widgets->UserList,&iter);
gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1);
}
}
for (int i=0; i<config_size;i++){
int size;
if (config_files[i][strlen(config_files[i])-1]=='\n') config_files[i][strlen(config_files[i])-1] = '\0';
config_str parsed = yon_char_parse(config_files[i],&size,";");
if (parsed&&size>2){
GtkTreeIter iter;
char *description = "";
gtk_list_store_append(widgets->ConfigList,&iter);
gtk_list_store_set(widgets->ConfigList,&iter,0,parsed[2],1,parsed[1],2,description,-1);
}
}
for (int i=0;i<sessions_size;i++){
if (sessions[i][strlen(sessions[i])-1]=='\n') sessions[i][strlen(sessions[i])-1] = '\0';
GtkTreeIter iter;
int size;
config_str parsed = yon_char_parse(sessions[i],&size," ");
if (parsed&&size>4){
gtk_list_store_append(widgets->SessionsList,&iter);
gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,atoi(parsed[1]),2,parsed[2],3,parsed[3],4,parsed[4],-1);
}
}
} }
return 0; return 0;
} }
@ -476,6 +695,13 @@ void yon_main_window_complete(main_window *widgets){
widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree"); widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree");
widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook");
widgets->SystemServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"SystemServicesStatusMenuItem");
widgets->UserServicesStatusMenuItem=yon_gtk_builder_get_widget(builder,"UserServicesStatusMenuItem");
widgets->InstalledUnitsStatusMenuItem=yon_gtk_builder_get_widget(builder,"InstalledUnitsStatusMenuItem");
widgets->UnitsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"UnitsStatusListMenuItem");
widgets->SocketsStatusListMenuItem=yon_gtk_builder_get_widget(builder,"SocketsStatusListMenuItem");
widgets->TimersStatusListMenuItem=yon_gtk_builder_get_widget(builder,"TimersStatusListMenuItem");
widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry"); widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry");
widgets->SystemFiltersCombo=yon_gtk_builder_get_widget(builder,"SystemFiltersCombo"); widgets->SystemFiltersCombo=yon_gtk_builder_get_widget(builder,"SystemFiltersCombo");
widgets->SystemInactiveShowCheck=yon_gtk_builder_get_widget(builder,"SystemInactiveShowCheck"); widgets->SystemInactiveShowCheck=yon_gtk_builder_get_widget(builder,"SystemInactiveShowCheck");
@ -581,6 +807,12 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_stop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_stop_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_lock_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_lock_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->SystemServicesStatusMenuItem),"activate",G_CALLBACK(on_system_services_status),widgets);
g_signal_connect(G_OBJECT(widgets->UserServicesStatusMenuItem),"activate",G_CALLBACK(on_user_services_status),widgets);
g_signal_connect(G_OBJECT(widgets->InstalledUnitsStatusMenuItem),"activate",G_CALLBACK(on_units_status),widgets);
g_signal_connect(G_OBJECT(widgets->UnitsStatusListMenuItem),"activate",G_CALLBACK(on_units_list_status),widgets);
g_signal_connect(G_OBJECT(widgets->SocketsStatusListMenuItem),"activate",G_CALLBACK(on_sockets_list_status),widgets);
g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets);
// g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets);
g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets);

@ -23,8 +23,7 @@
#define _(String) gettext(String) #define _(String) gettext(String)
#define glade_path "/com/ublinux/ui/ubl-settings-services.glade" #define glade_path "/com/ublinux/ui/ubl-settings-services.glade"
#define glade_path_terminal "/com/ublinux/ui/ubl-settings-services-terminal.glade" #define glade_path_log "/com/ublinux/ui/ubl-settings-services-terminal.glade"
#define glade_path_log "/com/ublinux/ui/ubl-settings-services-log.glade"
#define banner_path "/com/ublinux/images/ubl-settings-services-banner.png" #define banner_path "/com/ublinux/images/ubl-settings-services-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-services.css" #define CssPath "/com/ublinux/css/ubl-settings-services.css"
@ -33,8 +32,8 @@
#define LocalePath "/usr/share/locale" #define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-services" #define LocaleName "ubl-settings-services"
#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' -e 's/running /running;/g' -e 's/inactive /inactive;/g'" #define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'"
#define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g'",NULL) #define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --type=service --type=socket --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'",NULL)
#define load_system_services_command "systemctl --system list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'" #define load_system_services_command "systemctl --system list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'"
#define load_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:" #define load_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:"
#define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" #define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:"
@ -42,13 +41,30 @@
#define service_stop_command(target) yon_char_append("systemctl stop --no-pager ",target) #define service_stop_command(target) yon_char_append("systemctl stop --no-pager ",target)
#define service_enable_command(target) yon_char_append("systemctl enable --no-pager ",target) #define service_enable_command(target) yon_char_append("systemctl enable --no-pager ",target)
#define service_disable_command(target) yon_char_append("systemctl disable --no-pager ",target) #define service_disable_command(target) yon_char_append("systemctl disable --no-pager ",target)
#define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target)
#define service_kill_command(target) yon_char_append("systemctl kill ",target) #define service_kill_command(target) yon_char_append("systemctl kill ",target)
#define service_check_active_command(target) yon_char_append("systemctl is-active ",target) #define service_check_active_command(target) yon_char_append("systemctl is-active ",target)
#define start_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target) #define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target)
#define get_log_command(target) yon_char_append("journalctl --all --no-pager --unit ",target)
#define show_source_command(target) yon_char_append("systemctl edit --full ",target)
#define properties_command(target) yon_char_append("systemctl show --no-pager ",target)
#define get_config_files_command "find /etc/systemd -iname *.conf -exec du -sh --time {} \\;|sed -e 's/\t/;/g'"
#define system_services_status_command "systemctl status --no-pager"
#define user_services_status_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get()," status --no-pager",NULL)
#define installed_units_states_command "systemctl list-unit-files --no-pager"
#define list_of_units_states_command "systemctl list-units --all --no-pager"
#define list_of_sockets_states_command "systemctl list-sockets --all --no-pager"
#define list_of_timers_states_command "systemctl list-timers --all --no-pager"
#define get_config_files_command "find /etc/systemd -iname *.conf -exec du -sh --time {} \\;" #define installed_units_command "systemctl list-unit-files --no-pager| sed -e 's/ */;/g'"
#define list_of_units_command "systemctl list-units --all --no-pager| sed -e 's/ */;/g'"
#define list_of_sockets_command "systemctl list-sockets --all --no-pager| sed -e 's/ */;/g'"
#define list_of_timers_command "systemctl list-timers --all --no-pager| sed -e 's/ */;/g'"
#define list_of_session_command "while IFS=\" \" read -r GET_SESSION GET_UID GET_USER GET_SEAT GET_TTY; do echo -e \"${GET_SESSION} $(loginctl session-status ${GET_SESSION} --no-page | sed -Enr \"s/^\\s*State: (.*)$/\1/p\") ${GET_UID} ${GET_USER} ${GET_SEAT} ${GET_TTY}\"; done < <(loginctl list-sessions --no-legend)"
#define config_get_command(target) yon_char_append("cat ",target)
#define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" #define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK"
#define config_get_global_command "ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" #define config_get_global_command "ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK"
@ -152,6 +168,13 @@ typedef struct {
GtkWidget *TimersMainTree; GtkWidget *TimersMainTree;
GtkWidget *MainNotebook; GtkWidget *MainNotebook;
GtkWidget *SystemServicesStatusMenuItem;
GtkWidget *UserServicesStatusMenuItem;
GtkWidget *InstalledUnitsStatusMenuItem;
GtkWidget *UnitsStatusListMenuItem;
GtkWidget *SocketsStatusListMenuItem;
GtkWidget *TimersStatusListMenuItem;
} main_window; } main_window;
@ -186,10 +209,13 @@ typedef struct{
typedef struct { typedef struct {
GtkWidget *Window; GtkWidget *Window;
GtkWidget *SystemTerminal; GtkWidget *SystemTerminal;
GtkWidget *TerminalScroll;
GtkWidget *TextEditor; GtkWidget *TextEditor;
GtkWidget *webHeaderNameLabel; GtkWidget *webHeaderNameLabel;
GtkWidget *UpdateButton; GtkWidget *UpdateButton;
GtkWidget *SaveButton; GtkWidget *SaveButton;
GtkWidget *StatusBox;
GtkAdjustment *adjustment;
char *target; char *target;
} log_window; } log_window;
@ -207,6 +233,18 @@ void on_service_constant_update();
log_window *yon_log_window_new(); log_window *yon_log_window_new();
void on_system_services_status(GtkWidget *self, main_window *widgets);
void on_user_services_status(GtkWidget *self, main_window *widgets);
void on_units_status(GtkWidget *self, main_window *widgets);
void on_units_list_status(GtkWidget *self, main_window *widgets);
void on_sockets_list_status(GtkWidget *self, main_window *widgets);
void on_timers_list_status(GtkWidget *self, main_window *widgets);
gboolean yon_interface_update(main_window *widgets); gboolean yon_interface_update(main_window *widgets);
GtkWidget *yon_menu_button_create(char *icon_name, char *text); GtkWidget *yon_menu_button_create(char *icon_name, char *text);
@ -248,12 +286,17 @@ void yon_user_systemd_restart(GtkWidget *self, main_window *widgets);
void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets); void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets);
void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets);
void on_system_update_clicked(GtkWidget *self, main_window *widgets); void on_system_update_clicked(GtkWidget *self, main_window *widgets);
void on_system_info_clicked(GtkWidget *self, main_window *widgets); void on_system_info_clicked(GtkWidget *self, main_window *widgets);
void on_system_log_clicked(GtkWidget *self, main_window *widgets); void on_system_log_clicked(GtkWidget *self, main_window *widgets);
void *on_terminal_relaunch(log_window *window);
void on_save_clicked(GtkWidget *self, log_window *window);
void on_update_clicked(GtkWidget *self, log_window *window);
void on_system_edit_clicked(GtkWidget *self, main_window *widgets); void on_system_edit_clicked(GtkWidget *self, main_window *widgets);
void on_system_status_clicked(GtkWidget *self, main_window *widgets); void on_system_status_clicked(GtkWidget *self, main_window *widgets);

@ -52,5 +52,9 @@
#define END_SESSION_LABEL _("End session") #define END_SESSION_LABEL _("End session")
#define BLOCK_SESSION_LABEL _("Block session") #define BLOCK_SESSION_LABEL _("Block session")
#define SOURCE_UNFOUND_LABEL _("Service source were not loaded")
#define SAVING_LABEL _("Saving...")
#define SWITCH_OFF_ERROR_LABEL _("Service were not stopped") #define SWITCH_OFF_ERROR_LABEL _("Service were not stopped")
#define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL) #define STOP_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to stop "),target,"?\n",_("The stop will be forced.\nThe system may become unstable."),NULL)

@ -1,172 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-services">
<requires lib="gtk+" version="3.24"/>
<requires lib="vte-2.91" version="0.68"/>
<!-- interface-css-provider-path ubl-settings-services.css -->
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkWindow" id="MonitorWindow">
<property name="width-request">800</property>
<property name="height-request">600</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="UpdateButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SaveButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hscrollbar-policy">always</property>
<property name="vscrollbar-policy">always</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTextView" id="TextEditor">
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="VteTerminal" id="SystemTerminal">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="hscroll-policy">natural</property>
<property name="vadjustment">adjustment1</property>
<property name="vscroll-policy">natural</property>
<property name="encoding">UTF-8</property>
<property name="pointer-autohide">True</property>
<property name="scrollback-lines">0</property>
<property name="scroll-on-keystroke">True</property>
<property name="scroll-on-output">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="webHeaderNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Services and processes - service information</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-services.sync-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-save-symbolic</property>
</object>
<object class="GtkTextBuffer" id="textbuffer1"/>
</interface>

@ -14,6 +14,12 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-services.sync-symbolic</property> <property name="icon-name">com.ublinux.ubl-settings-services.sync-symbolic</property>
</object> </object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-save-symbolic</property>
</object>
<object class="GtkTextBuffer" id="textbuffer1"/>
<object class="GtkWindow" id="MonitorWindow"> <object class="GtkWindow" id="MonitorWindow">
<property name="width-request">800</property> <property name="width-request">800</property>
<property name="height-request">600</property> <property name="height-request">600</property>
@ -23,50 +29,14 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-start">5</property> <property name="orientation">vertical</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox" id="StatusBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkButton" id="UpdateButton"> <placeholder/>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SaveButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
@ -79,35 +49,126 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="VteTerminal" id="SystemTerminal"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property> <property name="can-focus">False</property>
<property name="can-focus">True</property> <property name="orientation">vertical</property>
<property name="hscroll-policy">natural</property> <property name="spacing">5</property>
<property name="vadjustment">adjustment1</property> <child>
<property name="vscroll-policy">natural</property> <object class="GtkButton" id="UpdateButton">
<property name="encoding">UTF-8</property> <property name="visible">True</property>
<property name="scrollback-lines">0</property> <property name="can-focus">True</property>
<property name="scroll-on-keystroke">True</property> <property name="receives-default">True</property>
<property name="scroll-on-output">False</property> <property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SaveButton">
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkScrollbar"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="orientation">vertical</property> <property name="spacing">5</property>
<property name="adjustment">adjustment1</property> <child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="VteTerminal" id="SystemTerminal">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="hscroll-policy">natural</property>
<property name="vadjustment">adjustment1</property>
<property name="vscroll-policy">natural</property>
<property name="encoding">UTF-8</property>
<property name="scrollback-lines">0</property>
<property name="scroll-on-keystroke">True</property>
<property name="scroll-on-output">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrollbar" id="TerminalScroll">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="adjustment">adjustment1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTextView" id="TextEditor">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="buffer">textbuffer1</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
@ -139,9 +200,4 @@
</object> </object>
</child> </child>
</object> </object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-save-symbolic</property>
</object>
</interface> </interface>

@ -167,7 +167,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="SystemServicesStatusMenuItem">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">System services status</property> <property name="label" translatable="yes">System services status</property>
@ -175,7 +175,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="UserServicesStatusMenuItem">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">User services status</property> <property name="label" translatable="yes">User services status</property>
@ -183,7 +183,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="InstalledUnitsStatusMenuItem">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Installed unit files</property> <property name="label" translatable="yes">Installed unit files</property>
@ -191,7 +191,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="UnitsStatusListMenuItem">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Units and status list</property> <property name="label" translatable="yes">Units and status list</property>
@ -199,7 +199,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="SocketsStatusListMenuItem">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Sockets and status list</property> <property name="label" translatable="yes">Sockets and status list</property>
@ -207,7 +207,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuItem"> <object class="GtkMenuItem" id="TimersStatusListMenuItem">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Timers and status list</property> <property name="label" translatable="yes">Timers and status list</property>
@ -1316,51 +1316,57 @@
<property name="label-xalign">0</property> <property name="label-xalign">0</property>
<property name="shadow-type">in</property> <property name="shadow-type">in</property>
<child> <child>
<object class="GtkTreeView" id="ConfigMainTree"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">ConfigList</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeView" id="ConfigMainTree">
<property name="resizable">True</property> <property name="visible">True</property>
<property name="sizing">fixed</property> <property name="can-focus">True</property>
<property name="min-width">10</property> <property name="model">ConfigList</property>
<property name="title" translatable="yes">File</property> <child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">0</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">File</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">Change date</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">1</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Change date</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="min-width">10</property>
<property name="title" translatable="yes">Description</property>
<property name="expand">True</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="min-width">10</property>
<attribute name="text">2</attribute> <property name="title" translatable="yes">Description</property>
</attributes> <property name="expand">True</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child> </child>
</object> </object>
</child> </child>
@ -1469,79 +1475,85 @@
<property name="label-xalign">0</property> <property name="label-xalign">0</property>
<property name="shadow-type">in</property> <property name="shadow-type">in</property>
<child> <child>
<object class="GtkTreeView" id="SessionMainTree"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">SessionsList</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeView" id="SessionMainTree">
<property name="resizable">True</property> <property name="visible">True</property>
<property name="sizing">fixed</property> <property name="can-focus">True</property>
<property name="min-width">10</property> <property name="model">SessionsList</property>
<property name="title" translatable="yes">Session ID</property> <child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">0</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Session ID</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">Status</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">1</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Status</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">User ID</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">2</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">User ID</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">User name</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">3</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">User name</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="min-width">10</property>
<property name="title" translatable="yes">Seat ID</property>
<property name="expand">True</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="min-width">10</property>
<attribute name="text">4</attribute> <property name="title" translatable="yes">Seat ID</property>
</attributes> <property name="expand">True</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child> </child>
</object> </object>
</child> </child>
@ -1589,93 +1601,99 @@
<property name="label-xalign">0.019999999552965164</property> <property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property> <property name="shadow-type">in</property>
<child> <child>
<object class="GtkTreeView" id="TimersMainTree"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">TimersList</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeView" id="TimersMainTree">
<property name="resizable">True</property> <property name="visible">True</property>
<property name="sizing">fixed</property> <property name="can-focus">True</property>
<property name="min-width">10</property> <property name="model">TimersList</property>
<property name="title" translatable="yes">Timer</property> <child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">0</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Timer</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">Next</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">1</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Next</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">Previous</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">2</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Previous</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">Last</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">3</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Last</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min-width">10</property>
<property name="title" translatable="yes">Passed</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="resizable">True</property>
<attribute name="text">4</attribute> <property name="sizing">fixed</property>
</attributes> <property name="min-width">10</property>
<property name="title" translatable="yes">Passed</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="min-width">10</property>
<property name="title" translatable="yes">Activates</property>
<property name="expand">True</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="min-width">10</property>
<attribute name="text">5</attribute> <property name="title" translatable="yes">Activates</property>
</attributes> <property name="expand">True</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child> </child>
</object> </object>
</child> </child>

Loading…
Cancel
Save