diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 06810d7..d70246b 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -166,20 +166,24 @@ void on_activate(GtkTreeView *self, main_window *widgets){ void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); @@ -224,20 +228,24 @@ void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); @@ -283,20 +291,24 @@ void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widg void on_config_block_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); @@ -346,28 +358,33 @@ void on_system_autostart_confirmed(GtkWidget *,char *service_command){ void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){ GtkTreeIter filter_iter; - GtkTreeIter iter; + GtkTreeIter iter,itor; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1); - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text=(!status)==0 ?SERVICE_DISABLE_WARNING_LABEL(service_name):SERVICE_ENABLE_WARNING_LABEL(service_name); data->data=(!status)==1 ? service_enable_command(service_name) : \ service_disable_command(service_name); data->function=(void*)(void*)on_system_autostart_confirmed; + data->title = status?SERVICE_AUTOSTOP_TITLE_LABEL:SERVICE_AUTOSTART_TITLE_LABEL; int responce = yon_confirmation_dialog_call(widgets->Window,data); if (responce == GTK_RESPONSE_ACCEPT){ gtk_list_store_set(GTK_LIST_STORE(model),&iter,3,!status,-1); @@ -376,10 +393,42 @@ void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid } +gboolean sort_bool(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col){ + int val_a,val_b; + char *name_a="", *name_b=""; + gtk_tree_model_get(model,a,GPOINTER_TO_INT(col),&val_a,6,&name_a,-1); + gtk_tree_model_get(model,b,GPOINTER_TO_INT(col),&val_b,6,&name_b,-1); + if (val_a==val_b){ + gchar *key_a = g_utf8_collate_key(name_a, -1); + gchar *key_b = g_utf8_collate_key(name_b, -1); + gint result = strcmp(key_a, key_b); + g_free(key_a); + g_free(key_b); + + return result; + } + return val_a ? -1 : 1; +} + +gboolean sort_string(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col){ + char *name_a="", *name_b=""; + gtk_tree_model_get(model,a,GPOINTER_TO_INT(col),&name_a,-1); + gtk_tree_model_get(model,b,GPOINTER_TO_INT(col),&name_b,-1); + if (!name_a) name_a=""; + if (!name_b) name_b=""; + gchar *key_a = g_utf8_collate_key(name_a, -1); + gchar *key_b = g_utf8_collate_key(name_b, -1); + gint result = strcmp(key_a, key_b); + g_free(key_a); + g_free(key_b); + + return result; +} + gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ gboolean autostart,autostop,masked,type,loaded,active; char *name; - gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&active,-1); + gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&active,9,&loaded,-1); GtkWidget *combo=NULL; GtkWidget *loaded_check=NULL; GtkWidget *active_check=NULL; @@ -439,11 +488,11 @@ void on_filter_changed(GtkWidget *, main_window *widgets){ if (page == 0){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL); gtk_tree_model_filter_refilter(widgets->SystemFilter); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemSort)); } else if (page == 1){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL); gtk_tree_model_filter_refilter(widgets->UserFilter); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserSort)); } } @@ -452,28 +501,32 @@ void on_system_kill_confirmed(GtkWidget *,char *service_name){ } void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){ - GtkTreeIter iter, filter_iter; + GtkTreeIter iter, itor, filter_iter; GtkTreeModel *model; GtkTreeModel *filter; + GtkTreeModel *sort; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); filter = GTK_TREE_MODEL(widgets->SystemFilter); + sort = GTK_TREE_MODEL(widgets->SystemSort); } else { model = GTK_TREE_MODEL(widgets->UserList); filter = GTK_TREE_MODEL(widgets->UserFilter); + sort = GTK_TREE_MODEL(widgets->UserSort); } GtkTreePath *path_converted = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(filter,&filter_iter,path_converted); + gtk_tree_model_get_iter(sort,&filter_iter,path_converted); { - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); + gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1); if (status){ - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text=SERVICE_STOP_WARNING_LABEL(service_name); data->data=service_stop_command(service_name); - data->function=NULL; + data->title = SERVICE_STOP_TITLE_LABEL; int size; config_str result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); @@ -496,10 +549,11 @@ void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){ } yon_char_parsed_free(result,size); } else { - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text=SERVICE_START_WARNING_LABEL(service_name); data->data=service_start_command(service_name); data->function=(void*)(void*)on_system_kill_confirmed; + data->title = SERVICE_START_TITLE_LABEL; int size; config_str result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); @@ -507,7 +561,7 @@ void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){ int responce = yon_confirmation_dialog_call(widgets->Window,data); if (responce == GTK_RESPONSE_ACCEPT){ gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1); - yon_ubl_status_box_render(SERVICE_RELOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_ubl_status_box_render(SERVICE_START_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } } } @@ -535,10 +589,11 @@ void on_system_restart_clicked(GtkWidget *, main_window *widgets){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(target_tree)),&model,&iter)){ char *target; gtk_tree_model_get(model,&iter,5,&target,-1); - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text=REEXEC_SERVICE_WARMING_LABEL(target); data->data=target; data->function=(void*)(void*)on_service_restart_confirmed; + data->title = RELAUNCH_SERVICE_LABEL; int responce = yon_confirmation_dialog_call(widgets->Window,data); if (responce == GTK_RESPONSE_ACCEPT){ yon_ubl_status_box_render(SERVICE_RELOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); @@ -553,14 +608,16 @@ void on_sessions_selection_changed(GtkWidget *, main_window *widgets){ gtk_widget_set_sensitive(widgets->SessionStopButton,1); gtk_widget_set_sensitive(widgets->SessionBlockButton,1); gtk_widget_set_sensitive(widgets->SessionStartButton,1); + gtk_widget_set_sensitive(widgets->SessionSwitchButton,1); } else { gtk_widget_set_sensitive(widgets->SessionStopButton,0); gtk_widget_set_sensitive(widgets->SessionBlockButton,0); gtk_widget_set_sensitive(widgets->SessionStartButton,0); + gtk_widget_set_sensitive(widgets->SessionSwitchButton,0); } } -void yon_sessions_update(main_window *widgets){ +gboolean yon_sessions_update(main_window *widgets){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),NULL); gtk_list_store_clear(widgets->SessionsList); int sessions_size; @@ -574,48 +631,93 @@ void yon_sessions_update(main_window *widgets){ else parsed[1]=INACTIVE_LABEL; if (parsed&&size>4){ gtk_list_store_append(widgets->SessionsList,&iter); - gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,parsed[1],2,atoi(parsed[2]),3,parsed[3],4,parsed[4],-1); + gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,parsed[1],2,atoi(parsed[2]),3,parsed[3],4,parsed[4],5,parsed[4],6,parsed[5],-1); } } gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); + return G_SOURCE_REMOVE; } -void on_session_activate(GtkWidget *, main_window *widgets){ +void on_session_activate(GtkWidget *self, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ + int id; gtk_tree_model_get(model,&iter,0,&id,-1); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); char *convert = yon_char_from_int(id); - yon_launch(session_activate_session(convert)); - free(convert); - yon_sessions_update(widgets); + data->action_text = SESSION_ACTIVATE_TOOLTIP_LABEL(convert); + data->title = SESSION_SWITCH_TITLE_LABEL(convert); + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + yon_launch(session_activate_session(convert)); + free(convert); + yon_sessions_update(widgets); + } } } -void on_session_end(GtkWidget *, main_window *widgets){ +void on_session_end(GtkWidget *self, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ int id; gtk_tree_model_get(model,&iter,0,&id,-1); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); char *convert = yon_char_from_int(id); - yon_launch(session_terminate_session(convert)); - free(convert); - yon_sessions_update(widgets); + data->action_text = SESSION_END_TOOLTIP_LABEL(convert); + data->title = SESSION_TERMINATE_TITLE_LABEL(convert); + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + if (!system(session_terminate_session(convert))){ + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model, &iter)){ + gtk_list_store_remove(widgets->SessionsList,&iter); + + } + } + free(convert); + } + } +} + +void on_session_unlock(GtkWidget *self, main_window *widgets){ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ + int id; + gtk_tree_model_get(model,&iter,0,&id,-1); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); + char *convert = yon_char_from_int(id); + data->action_text = SESSION_UNLOCK_TOOLTIP_LABEL(convert); + data->data = NULL; + data->function = NULL; + data->title = SESSION_UNLOCK_TITLE_LABEL(convert); + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + yon_launch(session_unlock_session(convert)); + free(convert); + yon_sessions_update(widgets); + } } } -void on_session_block(GtkWidget *, main_window *widgets){ +void on_session_block(GtkWidget *self, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){ int id; gtk_tree_model_get(model,&iter,0,&id,-1); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); char *convert = yon_char_from_int(id); - yon_launch(session_lock_session(convert)); - free(convert); - yon_sessions_update(widgets); + data->action_text = SESSION_BLOCK_TOOLTIP_LABEL(convert); + data->data = NULL; + data->function = NULL; + data->title = SESSION_LOCK_TITLE_LABEL(convert); + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + yon_launch(session_lock_session(convert)); + free(convert); + yon_sessions_update(widgets); + } } } @@ -686,10 +788,15 @@ typedef void (*data_function)(void*,void*); void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ if (widgets){ - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd"); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + data->action_text = RELOAD_SYSTEM_SETTINGS_WARNING_LABEL; + }else if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==1){ + data->action_text = RELOAD_USER_SETTINGS_WARNING_LABEL; + } data->data = widgets; data->function = (data_function)yon_system_systemd_restart; + data->title = RELAUNCH_SYSTEMCTL_LABEL; yon_confirmation_dialog_call(self,data); } @@ -697,7 +804,7 @@ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){ void on_system_update_clicked(GtkWidget *self, main_window *widgets){ if (widgets){ - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd"); data->data = widgets; data->function = (data_function)yon_system_systemd_reexec; @@ -808,10 +915,11 @@ void on_system_status_clicked(GtkWidget *, main_window *widgets){ void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ if (widgets){ - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd"); data->data = widgets; data->function = (data_function)yon_system_systemd_restart; + data->title = REEXEC_SYSTEMCTL_LABEL; yon_confirmation_dialog_call(self,data); } @@ -820,7 +928,7 @@ void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ void on_user_update_clicked(GtkWidget *self, main_window *widgets){ if (widgets){ - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd"); data->data = widgets; data->function = (data_function)yon_system_systemd_reexec; @@ -1049,9 +1157,17 @@ gboolean yon_interface_list_models_disconnect(main_window *widgets){ return G_SOURCE_REMOVE; } +void on_sort_activate(GtkTreeViewColumn *self, main_window *widgets){ + if (self == gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),2)){ + gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUnitsTree),6)); + } else { + gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UserUnitsTree),6)); + } +} + gboolean yon_interface_list_models_connect(main_window *widgets){ - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemSort)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserSort)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); @@ -1065,21 +1181,21 @@ gboolean yon_interface_list_models_connect(main_window *widgets){ gboolean yon_system_set(struct system_services_data *data){ GtkTreeIter iter; gtk_list_store_append(data->widgets->SystemList,&iter); - gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1); + gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,_(data->State),13,data->State,-1); return G_SOURCE_REMOVE; } gboolean yon_user_set(struct system_user_data *data){ GtkTreeIter iter; gtk_list_store_append(data->widgets->UserList,&iter); - gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1); + gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,_(data->State),13,data->State,-1); return G_SOURCE_REMOVE; } gboolean yon_system_config_set(struct system_config_data *data){ GtkTreeIter iter; gtk_list_store_append(data->widgets->ConfigList,&iter); - gtk_list_store_set(data->widgets->ConfigList,&iter,0,data->Name,1,data->Date,2,data->Descr,-1); + gtk_list_store_set(data->widgets->ConfigList,&iter,0,data->Name,1,data->Descr,2,data->Date,-1); return G_SOURCE_REMOVE; } @@ -1220,22 +1336,29 @@ gboolean yon_interface_update_finish(main_window *widgets){ } } main_config.update_thread_active=0; + char *final = yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ",main_config.load_mode==0?yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),NULL); + yon_ubl_status_box_render(final,BACKGROUND_IMAGE_SUCCESS_TYPE); + free(final); return G_SOURCE_REMOVE; } void* yon_interface_update(main_window *widgets){ - dictionary *dict = yon_systemd_get_list(); - if (dict){} + // dictionary *dict = yon_systemd_get_list(); + // if (dict){} if (widgets){ g_idle_add((GSourceFunc)yon_interface_list_models_disconnect,widgets); - // int system_size; - // config_str system_services = yon_config_load(load_services_command,&system_size); + int system_size; + config_str system_services = yon_config_load(load_services_command,&system_size); + int system_units_size; + config_str system_units = yon_config_load(load_system_units_command,&system_units_size); int user_size; config_str user_services = yon_config_load(load_user_services_command,&user_size); + int user_units_size; + config_str user_units = yon_config_load(load_user_units_command,&user_units_size); int config_size; config_str config_files = yon_config_load(get_config_files_command,&config_size); int timers_size; - config_str timers = yon_config_load(get_timers_command,&timers_size); + config_str timers = yon_config_load(get_timers_command,&timers_size); struct json_object *jsobject = json_tokener_parse(timers[0]); int launched_size; config_str launched = yon_config_load(load_launched_command,&launched_size); @@ -1243,47 +1366,101 @@ void* yon_interface_update(main_window *widgets){ yon_char_remove_last_symbol(launched[i],'\n'); } - dictionary *dact = NULL; - for_dictionaries(dact,dict){ - enum YON_UNIT_TYPE type = yon_get_unit_type(((systemd_struct*)dact->data)->name); - struct system_services_data *data = malloc(sizeof(struct system_services_data)); - { - data->widgets=widgets; - data->SystemAutostart=((systemd_struct*)dact->data)->enable; - data->SystemLaunched=((systemd_struct*)dact->data)->active; - data->Name=((systemd_struct*)dact->data)->name; - data->Descr=((systemd_struct*)dact->data)->description; - data->Type = type; - data->Loaded=((systemd_struct*)dact->data)->load; - data->Active=((systemd_struct*)dact->data)->active; - data->State=((systemd_struct*)dact->data)->state; - } - g_idle_add((GSourceFunc)yon_system_set,data); + // dictionary *dact = NULL; + // for_dictionaries(dact,dict){ + // enum YON_UNIT_TYPE type = yon_get_unit_type(((systemd_struct*)dact->data)->name); + // struct system_services_data *data = malloc(sizeof(struct system_services_data)); + // { + // data->widgets=widgets; + // data->SystemAutostart=((systemd_struct*)dact->data)->enable; + // data->SystemLaunched=((systemd_struct*)dact->data)->active; + // data->Name=((systemd_struct*)dact->data)->name; + // data->Descr=((systemd_struct*)dact->data)->description; + // data->Type = type; + // data->Loaded=((systemd_struct*)dact->data)->load; + // data->Active=((systemd_struct*)dact->data)->active; + // data->State=((systemd_struct*)dact->data)->state; + // } + // g_idle_add((GSourceFunc)yon_system_set,data); + // } + + for (int i=0; iSystemList,&iter); + gtk_list_store_set(widgets->SystemList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1); + } + + } + for (int i=0;iSystemList,&iter); + enum YON_UNIT_TYPE type = yon_get_unit_type(system_units[i]); + gtk_list_store_set(widgets->SystemList,&iter,0,0,1,0,2,0,3,0,4,0,5,system_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1); + + } } + // for (int i=0; iwidgets=widgets; + // data->SystemAutostart=0;//loaded; + // data->SystemLaunched=0;//active; + // data->Name=yon_char_new(parsed[0]); + // data->Descr=yon_char_new(parsed[4]); + // data->Type = type; + // data->Loaded=strcmp(parsed[1],"loaded")?0:1; + // data->Active=strcmp(parsed[2],"active")?0:1; + // data->State=yon_char_new(_(parsed[3])); + // } + // g_idle_add((GSourceFunc)yon_user_set,data); + // } + // yon_char_parsed_free(parsed,size); + // } + for (int i=0; iwidgets=widgets; - data->SystemAutostart=0;//loaded; - data->SystemLaunched=0;//active; - data->Name=yon_char_new(parsed[0]); - data->Descr=yon_char_new(parsed[4]); - data->Type = type; - data->Loaded=strcmp(parsed[1],"loaded")?0:1; - data->Active=strcmp(parsed[2],"active")?0:1; - data->State=yon_char_new(_(parsed[3])); - } - g_idle_add((GSourceFunc)yon_user_set,data); + int loaded = !strcmp(parsed[1],"loaded"); + int active = !strcmp(parsed[2],"active"); + enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); + gtk_list_store_append(widgets->UserList,&iter); + gtk_list_store_set(widgets->UserList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1); + } + + } + for (int i=0;iUserList,&iter); + enum YON_UNIT_TYPE type = yon_get_unit_type(user_units[i]); + gtk_list_store_set(widgets->UserList,&iter,0,0,1,0,2,0,3,0,4,0,5,user_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1); + } - yon_char_parsed_free(parsed,size); } int descr_size; @@ -1326,7 +1503,7 @@ void* yon_interface_update(main_window *widgets){ g_idle_add((GSourceFunc)yon_system_config_set,data); } } - yon_sessions_update(widgets); + g_idle_add((GSourceFunc)yon_sessions_update,widgets); for (size_t i=0;i=2){ char *temp = date_parsed[0]; date_parsed[0]=date_parsed[2]; @@ -1680,7 +1857,9 @@ void yon_main_window_complete(main_window *widgets){ widgets->SystemEditButton=yon_gtk_builder_get_widget(builder,"SystemEditButton"); widgets->SystemPropertiesButton=yon_gtk_builder_get_widget(builder,"SystemPropertiesButton"); widgets->SystemFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"SystemFilter")); + widgets->SystemSort = GTK_TREE_MODEL_SORT(gtk_builder_get_object(builder,"SystemSort")); widgets->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter")); + widgets->UserSort = GTK_TREE_MODEL_SORT(gtk_builder_get_object(builder,"UserSort")); widgets->SystemStatusButton=yon_gtk_builder_get_widget(builder,"SystemStatusButton"); widgets->ConfigAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostartCell")); widgets->ConfigAutostopCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostopCell")); @@ -1727,19 +1906,24 @@ void yon_main_window_complete(main_window *widgets){ PROPERTIES_LABEL,properties_icon_path,on_user_status_clicked,widgets, NULL); + widgets->ConfigUpdateButton=yon_gtk_builder_get_widget(builder,"ConfigUpdateButton"); widgets->ConfigEditButton=yon_gtk_builder_get_widget(builder,"ConfigEditButton"); widgets->ConfigMainTree=yon_gtk_builder_get_widget(builder,"ConfigMainTree"); widgets->SessionRestartButton=yon_gtk_builder_get_widget(builder,"SessionRestartButton"); widgets->SessionMainTree=yon_gtk_builder_get_widget(builder,"SessionMainTree"); + widgets->SessionSwitchButton=yon_gtk_builder_get_widget(builder,"SessionSwitchButton"); widgets->SessionStartButton=yon_gtk_builder_get_widget(builder,"SessionStartButton"); widgets->SessionStopButton=yon_gtk_builder_get_widget(builder,"SessionStopButton"); widgets->SessionBlockButton=yon_gtk_builder_get_widget(builder,"SessionBlockButton"); widgets->SessionMenu = yon_rmb_menu_setup(widgets->SessionMainTree,NULL,NULL, - ACTIVATE_SESSION_LABEL,play_icon_path,G_CALLBACK(on_session_activate),widgets, - END_SESSION_LABEL,stop_icon_path,G_CALLBACK(on_session_end),widgets, + UPDATE_LABEL,update_icon_path,G_CALLBACK(on_interface_update),widgets, + ACTIVATE_SESSION_LABEL,switch_icon_path,G_CALLBACK(on_session_activate),widgets, BLOCK_SESSION_LABEL,block_icon_path,G_CALLBACK(on_session_block),widgets, + UNLOCK_SESSION_LABEL,unlock_icon_path,G_CALLBACK(on_session_unlock),widgets, + END_SESSION_LABEL,end_icon_path,G_CALLBACK(on_session_end),widgets, NULL); + gtk_style_context_add_class(gtk_widget_get_style_context(((GtkWidget*)widgets->SessionMenu->buttons->first->data)),"separatorBottom"); { GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->SystemMenu->menu)); gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorTop"); @@ -1756,6 +1940,7 @@ void yon_main_window_complete(main_window *widgets){ widgets->SystemDescriptionLabel=yon_gtk_builder_get_widget(builder,"SystemDescriptionLabel"); } widgets->TimersMainTree=yon_gtk_builder_get_widget(builder,"TimersMainTree"); + widgets->TimersUpdateButton=yon_gtk_builder_get_widget(builder,"TimersUpdateButton"); GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree)); @@ -1789,9 +1974,11 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->ConfigUpdateButton),"clicked",G_CALLBACK(on_interface_update),widgets); g_signal_connect(G_OBJECT(widgets->SessionRestartButton),"clicked",G_CALLBACK(on_interface_update),widgets); - g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_activate),widgets); + g_signal_connect(G_OBJECT(widgets->SessionSwitchButton),"clicked",G_CALLBACK(on_session_activate),widgets); + g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_unlock),widgets); g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_end),widgets); g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_block),widgets); g_signal_connect(G_OBJECT(widgets->SessionMainTree),"cursor-changed",G_CALLBACK(on_sessions_selection_changed),widgets); @@ -1815,7 +2002,12 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UserConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); + + g_signal_connect(G_OBJECT(widgets->TimersUpdateButton),"clicked",G_CALLBACK(on_interface_update),widgets); + g_signal_connect(G_OBJECT(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),2)),"clicked",G_CALLBACK(on_sort_activate),widgets); + g_signal_connect(G_OBJECT(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),2)),"clicked",G_CALLBACK(on_sort_activate),widgets); + if (getuid()==0){ gtk_widget_set_sensitive(widgets->UserServiceUpdateButton,0); gtk_widget_set_sensitive(widgets->UserPrevButton,0); @@ -1883,6 +2075,11 @@ void yon_main_window_complete(main_window *widgets){ yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); gtk_tree_model_filter_set_visible_func(widgets->UserFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); + for (int i=0;i<5;i++){ + gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),i,(GtkTreeIterCompareFunc)sort_bool,GINT_TO_POINTER(i),NULL); + } + gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),5,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(13),NULL); + gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),6,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(6),NULL); gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->UserUnitsTree),5); yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 20638f6..2eecd13 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -39,6 +39,8 @@ #define systemd_config_path "resource:///com/ublinux/csv/systemd_conf.csv" #define load_services_command "systemctl list-units --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'" +#define load_system_units_command "systemctl list-unit-files --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)(.*)/\\1/'" +#define load_user_units_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-unit-files --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)(.*)/\\1;\\2;\\3;/'",NULL) #define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --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 --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 --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:" @@ -83,7 +85,7 @@ #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 get_activate_deactivate_times(target) yon_char_append("systemctl show --timestamp=utc -p Names -p ActiveEnterTimestamp -p InactiveEnterTimestampMonotonic ",target) +#define get_activate_deactivate_times(target) yon_char_append("systemctl show --timestamp=utc -p Names -p ActiveEnterTimestamp -p InactiveEnterTimestamp ",target) #define config_get_command(target) yon_char_append("cat ",target) @@ -102,7 +104,10 @@ #define play_icon_path "com.ublinux.ubl-settings-services.play-symbolic" #define stop_icon_path "com.ublinux.ubl-settings-services.stop-symbolic" -#define block_icon_path "com.ublinux.ubl-settings-services.cancel-symbolic" +#define block_icon_path "com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic" +#define unlock_icon_path "com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic" +#define end_icon_path "com.ublinux.libublsettingsui-gtk3.move-away-symbolic" +#define switch_icon_path "com.ublinux.libublsettingsui-gtk3.move-in-symbolic" #define start_icon_path "com.ublinux.ubl-settings-services.launch-symbolic" #define update_icon_path "com.ublinux.ubl-settings-services.sync-symbolic" #define launch_icon_path "com.ublinux.ubl-settings-services.check-symbolic" @@ -222,16 +227,19 @@ typedef struct { GtkWidget *UserDescriptionLabel; GtkWidget *ConfigEditButton; + GtkWidget *ConfigUpdateButton; GtkWidget *ConfigMainTree; GtkWidget *SessionRestartButton; GtkWidget *SessionMainTree; + GtkWidget *SessionSwitchButton; GtkWidget *SessionStartButton; GtkWidget *SessionStopButton; GtkWidget *SessionBlockButton; rmb_menu_window *SessionMenu; GtkWidget *TimersMainTree; + GtkWidget *TimersUpdateButton; GtkWidget *MainNotebook; GtkWidget *SystemServicesStatusMenuItem; @@ -255,7 +263,9 @@ typedef struct { GtkWidget *DeactivateLabel; GtkTreeModelFilter *SystemFilter; + GtkTreeModelSort *SystemSort; GtkTreeModelFilter *UserFilter; + GtkTreeModelSort *UserSort; GtkCellRenderer *ConfigAutostartCell; GtkCellRenderer *ConfigAutostopCell; @@ -386,7 +396,9 @@ void on_service_restart_confirmed(GtkWidget *self,char *service_name); void on_system_system_restart_clicked(GtkWidget *self, main_window *widgets); -void yon_sessions_update(main_window *widgets); +gboolean yon_sessions_update(main_window *widgets); + +void on_session_unlock(GtkWidget *self, main_window *widgets); void on_session_activate(); @@ -531,4 +543,7 @@ gboolean yon_user_set(struct system_user_data *data); gboolean yon_system_set(struct system_services_data *data); gboolean yon_interface_list_models_connect(main_window *widgets); gboolean yon_interface_list_models_disconnect(main_window *widgets); +void on_sort_activate(GtkTreeViewColumn *self, main_window *widgets); +gboolean sort_bool(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col); +gboolean sort_string(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 479e0b4..ad2058b 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -50,9 +50,10 @@ #define SHOW_LOG_LABEL _("Show log") #define SHOW_SOURCE_LABEL _("Show source") #define PROPERTIES_LABEL _("Properties") -#define ACTIVATE_SESSION_LABEL _("Activate session") +#define ACTIVATE_SESSION_LABEL _("Switch to session") #define END_SESSION_LABEL _("Terminate session") -#define BLOCK_SESSION_LABEL _("Block session") +#define BLOCK_SESSION_LABEL _("Lock session") +#define UNLOCK_SESSION_LABEL _("Unlock session") #define SOURCE_UNFOUND_LABEL _("Service source were not loaded") #define SERVICE_START_FAILED_LABEL _("Failed to launch service") @@ -69,6 +70,23 @@ #define RELOAD_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to reload "),target,"?\n",_("The system may become unstable."),NULL) #define SERVICE_ENABLE_WARNING_LABEL(target) yon_char_unite(_("Are you sure want to enable "),target,"?\n",_("The system may become unstable."),NULL) #define SERVICE_DISABLE_WARNING_LABEL(target) yon_char_unite(_("Are you sure want to disable "),target,"?\n",_("The system may become unstable."),NULL) +#define RELOAD_SYSTEM_SETTINGS_WARNING_LABEL yon_char_unite(_("Are you sure want to reload system units settings?"),"\n",_("The system may become unstable."),NULL) +#define RELOAD_USER_SETTINGS_WARNING_LABEL yon_char_unite(_("Are you sure want to reload user units settings?"),"\n",_("The system may become unstable."),NULL) +#define SESSION_ACTIVATE_TOOLTIP_LABEL(target) yon_char_unite(_("Are you sure you want to switch on session")," ID-",target,"?",NULL) +#define SESSION_END_TOOLTIP_LABEL(target) yon_char_unite("",_("Attention!")," ",_("You are about to")," ",_("end your session")," ID-",target,". ",_("If this is your active session, you will be taken to the login screen. Make sure to save all files before performing this operation."),NULL) +#define SESSION_BLOCK_TOOLTIP_LABEL(target) yon_char_unite(_("Are you sure you want to block session")," ID-",target,"?",NULL) +#define SESSION_UNLOCK_TOOLTIP_LABEL(target) yon_char_unite(_("Are you sure you want to unlock session")," ID-",target,"?",NULL) + +#define SERVICE_START_TITLE_LABEL _("Service start") +#define SERVICE_STOP_TITLE_LABEL _("Service stop") +#define SERVICE_AUTOSTART_TITLE_LABEL _("Service enabling") +#define SERVICE_AUTOSTOP_TITLE_LABEL _("Service disabling") + +#define SESSION_SWITCH_TITLE_LABEL(target) yon_char_unite(_("Switching to session")," ID-",target,NULL) +#define SESSION_LOCK_TITLE_LABEL(target) yon_char_unite(_("Lock session")," ID-",target,NULL) +#define SESSION_UNLOCK_TITLE_LABEL(target) yon_char_unite(_("Unlock session")," ID-",target,NULL) +#define SESSION_TERMINATE_TITLE_LABEL(target) yon_char_unite(_("Terminate session")," ID-",target,NULL) + #define DAYS_LABEL _("Days") #define HOURS_LABEL _("Hours") #define MINUTES_LABEL _("Minutes") @@ -94,12 +112,12 @@ #define RELAUNCH_SYSTEMCTL_LABEL _("Reload settings") #define REEXEC_SYSTEMCTL_LABEL _("Reexec systemd") -#define SHOW_SERVICE_INFO_LABEL _("Show service information") +#define SHOW_SERVICE_INFO_LABEL _("Service information") #define RELAUNCH_SERVICE_LABEL _("Relaunch with new configuration") -#define SHOW_SERVICE_LOG_LABEL _("Show service log") -#define SHOW_SERVICE_SOURCE_LABEL _("Show service source file") -#define SHOW_SERVICE_PROPERTIES_LABEL _("Show service properties") -#define SHOW_LABEL _("Show...") +#define SHOW_SERVICE_LOG_LABEL _("Service log") +#define SHOW_SERVICE_SOURCE_LABEL _("Service source file") +#define SHOW_SERVICE_PROPERTIES_LABEL _("Service properties") +#define SHOW_LABEL _("Additional information") #define EDIT_CONFIG_LABEL _("Edit configuration file") @@ -127,6 +145,7 @@ #define PASSED_LABEL _("Passed") #define ACTIVATES_LABEL _("Activates") +#define STATE_DISABLED_LABEL _("disabled") #define STATE_ACTIVE_LABEL _("active") #define STATE_DEAD_LABEL _("dead") #define STATE_WAITING_LABEL _("waiting") @@ -148,6 +167,7 @@ #define SYSTEMD_RELAUNCH_SUCCESS_LABEL _("Systemd has been relaunched") #define SERVICE_RELOAD_SUCCESS_LABEL _("Service has been successfully restarted") +#define SERVICE_START_SUCCESS_LABEL _("Service has been successfully launched") #define SAVE_LABEL _("Save") #define NULL_LABEL _("Null") diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index 3a2b971..c124c37 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -19,7 +19,7 @@ - + @@ -59,11 +59,16 @@ + + SystemList + + SystemFilter + @@ -356,11 +361,16 @@ + + UserList + + UserFilter + True False @@ -369,12 +379,12 @@ True False - com.ublinux.ubl-settings-services.stop-symbolic + com.ublinux.libublsettingsui-gtk3.move-away-symbolic True False - com.ublinux.ubl-settings-services.play-symbolic + com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic True @@ -411,6 +421,11 @@ False com.ublinux.ubl-settings-services.properties-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.sync-symbolic + True False @@ -429,7 +444,17 @@ True False - com.ublinux.ubl-settings-services.sync-symbolic + com.ublinux.libublsettingsui-gtk3.sync-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.sync-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.move-in-symbolic True @@ -464,7 +489,7 @@ True False - com.ublinux.ubl-settings-services.lock-symbolic + com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic @@ -760,7 +785,7 @@ False True True - Show service information + Unit information image3 + + + False + True + 0 + + True @@ -1796,7 +1868,7 @@ False True - 0 + 1 @@ -1943,13 +2015,13 @@ - + True False True True - Activate session - image11 + Switch to session + image24 @@ -1961,13 +2033,13 @@ - + True False True True - Terminate session - image10 + Lock session + image9 @@ -1979,13 +2051,13 @@ - + True False True True - Lock session - image9 + Unlock session + image11 @@ -1996,6 +2068,24 @@ 4 + + + True + False + True + True + Terminate session + image10 + + + + False + True + 5 + + False @@ -2085,8 +2175,7 @@ 20 - Seat ID | TTY - True + Seat ID 4 @@ -2096,6 +2185,19 @@ + + + 20 + TTY + True + + + + 6 + + + + @@ -2134,7 +2236,37 @@ 5 5 5 - vertical + 5 + + + True + False + vertical + 5 + + + True + True + True + Update + image19 + + + + False + True + 0 + + + + + False + True + 0 + + True @@ -2254,7 +2386,7 @@ True True - 0 + 1 diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 8b3735c..9e49756 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -77,7 +77,7 @@ msgstr "" msgid "User services only" msgstr "" -#: source/ubl-strings.h:19 source/ubl-strings.h:61 +#: source/ubl-strings.h:19 source/ubl-strings.h:62 msgid "Saving..." msgstr "" @@ -137,7 +137,7 @@ msgstr "" msgid "Service:" msgstr "" -#: source/ubl-strings.h:37 source/ubl-strings.h:159 +#: source/ubl-strings.h:37 source/ubl-strings.h:179 msgid "Description:" msgstr "" @@ -170,351 +170,428 @@ msgid "Properties" msgstr "" #: source/ubl-strings.h:53 -msgid "Activate session" +msgid "Switch to session" msgstr "" #: source/ubl-strings.h:54 msgid "Terminate session" msgstr "" -#: source/ubl-strings.h:55 -msgid "Block session" +#: source/ubl-strings.h:55 source/ubl-strings.h:139 +msgid "Lock session" msgstr "" -#: source/ubl-strings.h:57 -msgid "Service source were not loaded" +#: source/ubl-strings.h:56 +msgid "Unlock session" msgstr "" #: source/ubl-strings.h:58 -msgid "Failed to launch service" +msgid "Service source were not loaded" msgstr "" #: source/ubl-strings.h:59 +msgid "Failed to launch service" +msgstr "" + +#: source/ubl-strings.h:60 msgid "Failed to stop service" msgstr "" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:63 msgid "Saved" msgstr "" -#: source/ubl-strings.h:63 +#: source/ubl-strings.h:64 msgid "Error has occured" msgstr "" -#: source/ubl-strings.h:65 +#: source/ubl-strings.h:66 msgid "Service were not stopped" msgstr "" -#: source/ubl-strings.h:66 +#: source/ubl-strings.h:67 msgid "Are you sure want to stop " msgstr "" -#: source/ubl-strings.h:66 source/ubl-strings.h:67 source/ubl-strings.h:68 -#: source/ubl-strings.h:69 source/ubl-strings.h:70 source/ubl-strings.h:71 +#: source/ubl-strings.h:67 source/ubl-strings.h:68 source/ubl-strings.h:69 +#: source/ubl-strings.h:70 source/ubl-strings.h:71 source/ubl-strings.h:72 +#: source/ubl-strings.h:73 source/ubl-strings.h:74 msgid "The system may become unstable." msgstr "" -#: source/ubl-strings.h:67 +#: source/ubl-strings.h:68 msgid "Are you sure want to start " msgstr "" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:69 msgid "Are you sure want to restart " msgstr "" -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:70 msgid "Are you sure want to reload " msgstr "" -#: source/ubl-strings.h:70 +#: source/ubl-strings.h:71 msgid "Are you sure want to enable " msgstr "" -#: source/ubl-strings.h:71 +#: source/ubl-strings.h:72 msgid "Are you sure want to disable " msgstr "" -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:73 +msgid "Are you sure want to reload system units settings?" +msgstr "" + +#: source/ubl-strings.h:74 +msgid "Are you sure want to reload user units settings?" +msgstr "" + +#: source/ubl-strings.h:75 +msgid "Are you sure you want to switch on session" +msgstr "" + +#: source/ubl-strings.h:76 +msgid "Attention!" +msgstr "" + +#: source/ubl-strings.h:76 +msgid "You are about to" +msgstr "" +msgstr "" + +#: source/ubl-strings.h:76 +msgid "end your session" +msgstr "" + +#: source/ubl-strings.h:76 +msgid "" +"If this is your active session, you will be taken to the login screen. Make " +"sure to save all files before performing this operation." +msgstr "" + +#: source/ubl-strings.h:77 +msgid "Are you sure you want to block session" +msgstr "" + +#: source/ubl-strings.h:78 +msgid "Are you sure you want to unlock session" +msgstr "" + +#: source/ubl-strings.h:80 +msgid "Service start" +msgstr "" + +#: source/ubl-strings.h:81 +msgid "Service stop" +msgstr "" + +#: source/ubl-strings.h:82 +msgid "Service enabling" +msgstr "" + +#: source/ubl-strings.h:83 +msgid "Service disabling" +msgstr "" + +#: source/ubl-strings.h:85 +msgid "Switching to session" +msgstr "" + +#: source/ubl-strings.h:86 +msgid "Session locking" +msgstr "" + +#: source/ubl-strings.h:87 +msgid "Session unlocking" +msgstr "" + +#: source/ubl-strings.h:88 +msgid "Session termination" +msgstr "" + +#: source/ubl-strings.h:90 msgid "Days" msgstr "" -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:91 msgid "Hours" msgstr "" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:92 msgid "Minutes" msgstr "" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:93 msgid "Seconds" msgstr "" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:95 msgid "Active" msgstr "" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:96 msgid "Inactive" msgstr "" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:98 msgid "System units" msgstr "" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:99 msgid "User units" msgstr "" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:100 msgid "Config files" msgstr "" -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:101 msgid "Sessions" msgstr "" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:102 msgid "Timers" msgstr "" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:104 msgid "System services status" msgstr "" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:105 msgid "User services status" msgstr "" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:106 msgid "Installed unit files" msgstr "" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:107 msgid "Units and status list" msgstr "" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:108 msgid "Sockets and status list" msgstr "" -#: source/ubl-strings.h:91 +#: source/ubl-strings.h:109 msgid "Timers and status list" msgstr "" -#: source/ubl-strings.h:93 +#: source/ubl-strings.h:111 msgid "Unit" msgstr "" -#: source/ubl-strings.h:95 +#: source/ubl-strings.h:113 msgid "Reload settings" msgstr "" -#: source/ubl-strings.h:96 +#: source/ubl-strings.h:114 msgid "Reexec systemd" msgstr "" -#: source/ubl-strings.h:97 -msgid "Show service information" +#: source/ubl-strings.h:115 +msgid "Service information" msgstr "" -#: source/ubl-strings.h:98 +#: source/ubl-strings.h:116 msgid "Relaunch with new configuration" msgstr "" -#: source/ubl-strings.h:99 -msgid "Show service log" +#: source/ubl-strings.h:117 +msgid "Service log" msgstr "" -#: source/ubl-strings.h:100 -msgid "Show service source file" +#: source/ubl-strings.h:118 +msgid "Service source file" msgstr "" -#: source/ubl-strings.h:101 -msgid "Show service properties" +#: source/ubl-strings.h:119 +msgid "Service properties" msgstr "" -#: source/ubl-strings.h:102 -msgid "Show..." +#: source/ubl-strings.h:120 +msgid "Additional information" msgstr "" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:122 msgid "Edit configuration file" msgstr "" -#: source/ubl-strings.h:106 +#: source/ubl-strings.h:124 msgid "Show inactive" msgstr "" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:125 msgid "Show unloaded" msgstr "" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:127 msgid "File" msgstr "" -#: source/ubl-strings.h:110 +#: source/ubl-strings.h:128 msgid "Change date" msgstr "" -#: source/ubl-strings.h:111 +#: source/ubl-strings.h:129 msgid "Description" msgstr "" -#: source/ubl-strings.h:112 +#: source/ubl-strings.h:130 msgid "Edit" msgstr "" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:132 msgid "Session ID" msgstr "" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:133 msgid "User ID" msgstr "" -#: source/ubl-strings.h:116 +#: source/ubl-strings.h:134 msgid "User name" msgstr "" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:135 msgid "Seat ID" msgstr "" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:137 msgid "Start session" msgstr "" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:138 msgid "Stop session" msgstr "" -#: source/ubl-strings.h:121 -msgid "Lock session" -msgstr "" - -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:141 msgid "Timer" msgstr "" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:142 msgid "Next" msgstr "" -#: source/ubl-strings.h:125 +#: source/ubl-strings.h:143 msgid "Left" msgstr "" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:144 msgid "Last" msgstr "" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:145 msgid "Passed" msgstr "" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:146 msgid "Activates" msgstr "" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:148 source/ubl-settings-services.c:1377 +#: source/ubl-settings-services.c:1427 +msgid "disabled" +msgstr "" + +#: source/ubl-strings.h:149 msgid "active" msgstr "" -#: source/ubl-strings.h:131 +#: source/ubl-strings.h:150 msgid "dead" msgstr "" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:151 msgid "waiting" msgstr "" -#: source/ubl-strings.h:133 +#: source/ubl-strings.h:152 msgid "running" msgstr "" -#: source/ubl-strings.h:134 +#: source/ubl-strings.h:153 msgid "listening" msgstr "" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:154 msgid "exited" msgstr "" -#: source/ubl-strings.h:136 +#: source/ubl-strings.h:155 msgid "mounted" msgstr "" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:156 msgid "plugged" msgstr "" -#: source/ubl-strings.h:138 +#: source/ubl-strings.h:157 msgid "abandoned" msgstr "" -#: source/ubl-strings.h:140 +#: source/ubl-strings.h:159 msgid "State of " msgstr "" -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:160 msgid "View log" msgstr "" -#: source/ubl-strings.h:141 -msgid "log" -msgstr "" - -#: source/ubl-strings.h:142 +#: source/ubl-strings.h:161 msgid "Edit unit file" msgstr "" -#: source/ubl-strings.h:144 +#: source/ubl-strings.h:163 msgid "Failed to re-execute systemd" msgstr "" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:164 msgid "failed to relaunch systemd" msgstr "" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:166 msgid "Systemd has been re-executed" msgstr "" -#: source/ubl-strings.h:148 +#: source/ubl-strings.h:167 msgid "Systemd has been relaunched" msgstr "" -#: source/ubl-strings.h:150 +#: source/ubl-strings.h:169 msgid "Service has been successfully restarted" msgstr "" -#: source/ubl-strings.h:152 +#: source/ubl-strings.h:170 +msgid "Service has been successfully launched" +msgstr "" + +#: source/ubl-strings.h:172 msgid "Save" msgstr "" -#: source/ubl-strings.h:153 +#: source/ubl-strings.h:173 msgid "Null" msgstr "" -#: source/ubl-strings.h:154 source/ubl-strings.h:159 +#: source/ubl-strings.h:174 source/ubl-strings.h:179 msgid "Unit file:" msgstr "" -#: source/ubl-strings.h:155 +#: source/ubl-strings.h:175 msgid "Unit file state:" msgstr "" -#: source/ubl-strings.h:156 source/ubl-strings.h:159 +#: source/ubl-strings.h:176 source/ubl-strings.h:179 msgid "Activated:" msgstr "" -#: source/ubl-strings.h:157 source/ubl-strings.h:159 +#: source/ubl-strings.h:177 source/ubl-strings.h:179 msgid "Deactivated:" msgstr "" -#: source/ubl-strings.h:159 +#: source/ubl-strings.h:179 msgid "Status:" msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index c35278a..348428b 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -77,7 +77,7 @@ msgstr "Только системные сервисы" msgid "User services only" msgstr "Только сервисы пользователя" -#: source/ubl-strings.h:19 source/ubl-strings.h:61 +#: source/ubl-strings.h:19 source/ubl-strings.h:62 msgid "Saving..." msgstr "Сохранение..." @@ -137,7 +137,7 @@ msgstr "Открыть лог сервиса" msgid "Service:" msgstr "Сервис:" -#: source/ubl-strings.h:37 source/ubl-strings.h:159 +#: source/ubl-strings.h:37 source/ubl-strings.h:179 msgid "Description:" msgstr "Описание:" @@ -170,354 +170,430 @@ msgid "Properties" msgstr "Свойства" #: source/ubl-strings.h:53 -msgid "Activate session" -msgstr "Активировать сессию" +msgid "Switch to session" +msgstr "Переключиться на сессию" #: source/ubl-strings.h:54 msgid "Terminate session" msgstr "Завершить сессию" -#: source/ubl-strings.h:55 -msgid "Block session" +#: source/ubl-strings.h:55 source/ubl-strings.h:139 +msgid "Lock session" msgstr "Заблокировать сессию" -#: source/ubl-strings.h:57 +#: source/ubl-strings.h:56 +msgid "Unlock session" +msgstr "Разблокировать сессию" + +#: source/ubl-strings.h:58 msgid "Service source were not loaded" msgstr "Сервис не был загружен" -#: source/ubl-strings.h:58 +#: source/ubl-strings.h:59 msgid "Failed to launch service" msgstr "Ошибка запуска сервиса" -#: source/ubl-strings.h:59 +#: source/ubl-strings.h:60 msgid "Failed to stop service" msgstr "Ошибка остановки сервиса" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:63 msgid "Saved" msgstr "Сохранено" -#: source/ubl-strings.h:63 +#: source/ubl-strings.h:64 msgid "Error has occured" msgstr "Произошла ошибка" -#: source/ubl-strings.h:65 +#: source/ubl-strings.h:66 msgid "Service were not stopped" msgstr "Сервис не был остановлен" -#: source/ubl-strings.h:66 +#: source/ubl-strings.h:67 msgid "Are you sure want to stop " msgstr "Вы уверены, что хотите выключить " -#: source/ubl-strings.h:66 source/ubl-strings.h:67 source/ubl-strings.h:68 -#: source/ubl-strings.h:69 source/ubl-strings.h:70 source/ubl-strings.h:71 +#: source/ubl-strings.h:67 source/ubl-strings.h:68 source/ubl-strings.h:69 +#: source/ubl-strings.h:70 source/ubl-strings.h:71 source/ubl-strings.h:72 +#: source/ubl-strings.h:73 source/ubl-strings.h:74 msgid "The system may become unstable." msgstr "Возможна нестабильная работа системы." -#: source/ubl-strings.h:67 +#: source/ubl-strings.h:68 msgid "Are you sure want to start " msgstr "Вы уверены, что хотите запустить " -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:69 msgid "Are you sure want to restart " msgstr "Вы уверены, что хотите перезапустить " -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:70 msgid "Are you sure want to reload " msgstr "Вы уверены, что хотите перезагрузить " -#: source/ubl-strings.h:70 -#, fuzzy +#: source/ubl-strings.h:71 msgid "Are you sure want to enable " msgstr "Вы уверены, что хотите включить автозапуск для " -#: source/ubl-strings.h:71 -#, fuzzy +#: source/ubl-strings.h:72 msgid "Are you sure want to disable " msgstr "Вы уверены, что хотите отключить автозапуск для " -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:73 +msgid "Are you sure want to reload system units settings?" +msgstr "Вы уверены, что хотите перезагрузить настройки системных юнитов?" + +#: source/ubl-strings.h:74 +msgid "Are you sure want to reload user units settings?" +msgstr "" +"Вы уверены, что хотите перезагрузить настройки пользовательских юнитов?" + +#: source/ubl-strings.h:75 +msgid "Are you sure you want to switch on session" +msgstr "Вы уверены, что хотите переключиться на сессию" + +#: source/ubl-strings.h:76 +msgid "Attention!" +msgstr "Внимание!" + +#: source/ubl-strings.h:76 +msgid "You are about to" +msgstr "Вы собираетесь" + +#: source/ubl-strings.h:76 +msgid "end your session" +msgstr "завершить сессию" + +#: source/ubl-strings.h:76 +msgid "" +"If this is your active session, you will be taken to the login screen. Make " +"sure to save all files before performing this operation." +msgstr "" +"Если это ваша активная сессия, вы будете выведены в экран входа. Убедитесь, " +"что сохранили все файлы перед выполнением этой операции." + +#: source/ubl-strings.h:77 +msgid "Are you sure you want to block session" +msgstr "Вы уверены, что хотите заблокировать сессию" + +#: source/ubl-strings.h:78 +msgid "Are you sure you want to unlock session" +msgstr "Вы уверены, что хотите разблокировать сессию" + +#: source/ubl-strings.h:80 +msgid "Service start" +msgstr "Запуск юнита" + +#: source/ubl-strings.h:81 +msgid "Service stop" +msgstr "Остановка юнита" + +#: source/ubl-strings.h:82 +msgid "Service enabling" +msgstr "Включение автообновления юнита" + +#: source/ubl-strings.h:83 +msgid "Service disabling" +msgstr "Отключение автообновления юнита" + +#: source/ubl-strings.h:85 +msgid "Switching to session" +msgstr "Переключение на сессию" + +#: source/ubl-strings.h:86 +msgid "Session locking" +msgstr "Блокирование сессии" + +#: source/ubl-strings.h:87 +msgid "Session unlocking" +msgstr "Разблакирование сессии" + +#: source/ubl-strings.h:88 +msgid "Session termination" +msgstr "Завершение сессии" + +#: source/ubl-strings.h:90 msgid "Days" msgstr "Дней" -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:91 msgid "Hours" msgstr "Часов" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:92 msgid "Minutes" msgstr "Минут" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:93 msgid "Seconds" msgstr "Секунд" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:95 msgid "Active" msgstr "Активна" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:96 msgid "Inactive" msgstr "Неактивна" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:98 msgid "System units" msgstr "Системные юниты" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:99 msgid "User units" msgstr "Пользовательские юниты" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:100 msgid "Config files" msgstr "Конфигурационные файлы" -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:101 msgid "Sessions" msgstr "Сессии" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:102 msgid "Timers" msgstr "Таймеры" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:104 msgid "System services status" msgstr "Статус сервисов системы" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:105 msgid "User services status" msgstr "Статус сервисов пользователя" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:106 msgid "Installed unit files" msgstr "Установленные юнит-файлы" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:107 msgid "Units and status list" msgstr "Список юнитов и состояния" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:108 msgid "Sockets and status list" msgstr "Список сокетов и состояния" -#: source/ubl-strings.h:91 +#: source/ubl-strings.h:109 msgid "Timers and status list" msgstr "Список таймеров и состояния" -#: source/ubl-strings.h:93 +#: source/ubl-strings.h:111 msgid "Unit" msgstr "Юнит" -#: source/ubl-strings.h:95 +#: source/ubl-strings.h:113 msgid "Reload settings" msgstr "Перезагрузить настройки" -#: source/ubl-strings.h:96 +#: source/ubl-strings.h:114 msgid "Reexec systemd" msgstr "Перезапустить systemd" -#: source/ubl-strings.h:97 -msgid "Show service information" -msgstr "Показать информацию о сервисе" +#: source/ubl-strings.h:115 +msgid "Service information" +msgstr "Информация о юните" -#: source/ubl-strings.h:98 -#, fuzzy +#: source/ubl-strings.h:116 msgid "Relaunch with new configuration" msgstr "Перезапустить с новой конфигурацией" -#: source/ubl-strings.h:99 -msgid "Show service log" -msgstr "Открыть лог сервиса" +#: source/ubl-strings.h:117 +msgid "Service log" +msgstr "Лог юнита" -#: source/ubl-strings.h:100 -msgid "Show service source file" -msgstr "Показать конфигурационный файл сервиса" +#: source/ubl-strings.h:118 +msgid "Service source file" +msgstr "Конфигурационный файл юнита" -#: source/ubl-strings.h:101 -msgid "Show service properties" -msgstr "Открыть свойства сервиса" +#: source/ubl-strings.h:119 +msgid "Service properties" +msgstr "Свойства юнита" -#: source/ubl-strings.h:102 -msgid "Show..." -msgstr "Показать..." +#: source/ubl-strings.h:120 +msgid "Additional information" +msgstr "Дополнительная информация" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:122 msgid "Edit configuration file" -msgstr "Редактировать в конфигурации" +msgstr "Редактировать конфигурационный файл" -#: source/ubl-strings.h:106 +#: source/ubl-strings.h:124 msgid "Show inactive" msgstr "Показать неактивные" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:125 msgid "Show unloaded" msgstr "Показать незагруженные" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:127 msgid "File" msgstr "Файл" -#: source/ubl-strings.h:110 +#: source/ubl-strings.h:128 msgid "Change date" msgstr "Изменён" -#: source/ubl-strings.h:111 +#: source/ubl-strings.h:129 msgid "Description" msgstr "Описание" -#: source/ubl-strings.h:112 +#: source/ubl-strings.h:130 msgid "Edit" msgstr "Редактировать" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:132 msgid "Session ID" msgstr "ID сессии" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:133 msgid "User ID" msgstr "ID пользователя" -#: source/ubl-strings.h:116 +#: source/ubl-strings.h:134 msgid "User name" msgstr "Имя пользователя" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:135 msgid "Seat ID" msgstr "Seat ID" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:137 msgid "Start session" msgstr "Запустить сессию" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:138 msgid "Stop session" msgstr "Остановить сессию" -#: source/ubl-strings.h:121 -msgid "Lock session" -msgstr "Заблокировать сессию" - -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:141 msgid "Timer" msgstr "Таймер" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:142 msgid "Next" msgstr "Следующий" -#: source/ubl-strings.h:125 +#: source/ubl-strings.h:143 msgid "Left" msgstr "Осталось времени" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:144 msgid "Last" msgstr "Последний" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:145 msgid "Passed" msgstr "Пройденный" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:146 msgid "Activates" msgstr "Активируется" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:148 source/ubl-settings-services.c:1377 +#: source/ubl-settings-services.c:1427 +msgid "disabled" +msgstr "неактивен" + +#: source/ubl-strings.h:149 msgid "active" msgstr "активен" -#: source/ubl-strings.h:131 +#: source/ubl-strings.h:150 msgid "dead" msgstr "остановлен" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:151 msgid "waiting" msgstr "ожидание" -#: source/ubl-strings.h:133 +#: source/ubl-strings.h:152 msgid "running" msgstr "работает" -#: source/ubl-strings.h:134 +#: source/ubl-strings.h:153 msgid "listening" msgstr "прослушивание" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:154 msgid "exited" msgstr "завершён" -#: source/ubl-strings.h:136 +#: source/ubl-strings.h:155 msgid "mounted" msgstr "примонтирован" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:156 msgid "plugged" msgstr "подключен" -#: source/ubl-strings.h:138 +#: source/ubl-strings.h:157 msgid "abandoned" msgstr "заброшен" -#: source/ubl-strings.h:140 +#: source/ubl-strings.h:159 msgid "State of " msgstr "Состояние " -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:160 msgid "View log" msgstr "Просмотр лога" -#: source/ubl-strings.h:141 -msgid "log" -msgstr "лога" - -#: source/ubl-strings.h:142 +#: source/ubl-strings.h:161 msgid "Edit unit file" msgstr "Редактировать юнит-файл" -#: source/ubl-strings.h:144 +#: source/ubl-strings.h:163 msgid "Failed to re-execute systemd" msgstr "Ошибка перезагрузки systemd" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:164 msgid "failed to relaunch systemd" msgstr "Ошибка перезапуска systemd" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:166 msgid "Systemd has been re-executed" msgstr "Systemd был успешно перезапущен" -#: source/ubl-strings.h:148 +#: source/ubl-strings.h:167 msgid "Systemd has been relaunched" msgstr "Systemd был успешно перезагружен" -#: source/ubl-strings.h:150 +#: source/ubl-strings.h:169 msgid "Service has been successfully restarted" msgstr "Сервис был успешно перезапущен" -#: source/ubl-strings.h:152 +#: source/ubl-strings.h:170 +msgid "Service has been successfully launched" +msgstr "Сервис был успешно запущен" + +#: source/ubl-strings.h:172 msgid "Save" msgstr "Сохранить" -#: source/ubl-strings.h:153 +#: source/ubl-strings.h:173 msgid "Null" msgstr "Нет данных" -#: source/ubl-strings.h:154 source/ubl-strings.h:159 +#: source/ubl-strings.h:174 source/ubl-strings.h:179 msgid "Unit file:" msgstr "Юнит-файл:" -#: source/ubl-strings.h:155 +#: source/ubl-strings.h:175 msgid "Unit file state:" msgstr "Статус юнит-файла:" -#: source/ubl-strings.h:156 source/ubl-strings.h:159 +#: source/ubl-strings.h:176 source/ubl-strings.h:179 msgid "Activated:" msgstr "Активирован:" -#: source/ubl-strings.h:157 source/ubl-strings.h:159 +#: source/ubl-strings.h:177 source/ubl-strings.h:179 msgid "Deactivated:" msgstr "Деактивирован:" -#: source/ubl-strings.h:159 +#: source/ubl-strings.h:179 msgid "Status:" msgstr "Статус:" @@ -545,7 +621,9 @@ msgstr "Настройка глобальных сетевых параметр msgid "" "Configuration file for systemd-pstore, a tool for archiving the contents of " "the pstore persistent storage file system" -msgstr "Файл конфигурации для systemd-pstore, инструмента для архивирования содержимого постоянной файловой системы хранения pstore" +msgstr "" +"Файл конфигурации для systemd-pstore, инструмента для архивирования " +"содержимого постоянной файловой системы хранения pstore" #: source/ubl-strings.h:159 msgid "Workstation hibernation options" @@ -563,22 +641,28 @@ msgstr "Конфигурация пользователя" msgid "" "Settings management configuration for user account home directories created " "and managed by systemd-homed.service" -msgstr "Конфигурация управления настройками для домашних каталогов учетных записей пользователей, созданная и управляемая systemd-homed.service" +msgstr "" +"Конфигурация управления настройками для домашних каталогов учетных записей " +"пользователей, созданная и управляемая systemd-homed.service" #: source/ubl-strings.h:159 msgid "" "Configuration files for various systemd-journal-remote.service parameters" -msgstr "Файлы конфигурации для различных параметров systemd-journal-remote.service" +msgstr "" +"Файлы конфигурации для различных параметров systemd-journal-remote.service" #: source/ubl-strings.h:159 msgid "Configuration files for various systemd login manager options" -msgstr "Файлы конфигурации для различных опций менеджера входа в систему systemd" +msgstr "" +"Файлы конфигурации для различных опций менеджера входа в систему systemd" #: source/ubl-strings.h:159 msgid "" "Configuration files for various out-of-memory (OOM) killer parameters in " "systemd user space" -msgstr "Файлы конфигурации для различных параметров исключения нехватки памяти (OOM) в пользовательском пространстве systemd" +msgstr "" +"Файлы конфигурации для различных параметров исключения нехватки памяти (OOM) " +"в пользовательском пространстве systemd" #: source/ubl-strings.h:159 msgid "Local DNS and LLMNR name resolution management configuration files" @@ -591,3 +675,6 @@ msgstr "Файлы конфигурации управления файлами #: source/ubl-strings.h:159 msgid "Configuration file controlling NTP network time synchronization" msgstr "Файл конфигурации, управляющий синхронизацией времени сети NTP" + +#~ msgid "Unit log" +#~ msgstr "Лог юнита"