diff --git a/Makefile b/Makefile
index 5e79ef1..a056d11 100644
--- a/Makefile
+++ b/Makefile
@@ -135,11 +135,18 @@ install: check uninstall
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.launch-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.important-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lookup-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.edit-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.lock-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.sync-time-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.menu-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.properties-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.source-symbolic.svg"
+ @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/actions/" "icons/com.ublinux.${PKGNAME}.save-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy"
@if [ -z ${DESTDIR} ]; then \
[ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \
update-desktop-database --quiet &>/dev/null || true; \
- [ -d "${DESTDIR}$/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \
+ [ -d "${DESTDIR}/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \
fi
@echo "Install: OK"
diff --git a/gresource.xml b/gresource.xml
index b6f2a4b..835a942 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -3,7 +3,6 @@
ubl-settings-services.glade
ubl-settings-services-terminal.glade
- ubl-settings-services-log.glade
ubl-settings-services.css
diff --git a/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg b/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg
new file mode 100644
index 0000000..baba3f9
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-services.edit-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg b/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg
new file mode 100644
index 0000000..132b656
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-services.lock-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg b/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg
new file mode 100644
index 0000000..f8e628f
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-services.menu-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg b/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg
new file mode 100644
index 0000000..93afc13
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-services.properties-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/com.ublinux.ubl-settings-services.save-symbolic.svg b/icons/com.ublinux.ubl-settings-services.save-symbolic.svg
new file mode 100644
index 0000000..69b2ef5
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-services.save-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/com.ublinux.ubl-settings-services.source-symbolic.svg b/icons/com.ublinux.ubl-settings-services.source-symbolic.svg
new file mode 100644
index 0000000..b509606
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-services.source-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg b/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg
new file mode 100644
index 0000000..87adb7a
--- /dev/null
+++ b/icons/com.ublinux.ubl-settings-services.sync-time-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index dde613a..b4d98a2 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -13,6 +13,11 @@ include_directories(${VTE291_INCLUDE_DIRS})
link_directories(${VTE291_LIBRARY_DIRS})
add_definitions(${VTE291_CFLAGS_OTHER})
+pkg_check_modules(JSON REQUIRED json-c)
+include_directories(${JSON_INCLUDE_DIRS})
+link_directories(${JSON_LIBRARY_DIRS})
+add_definitions(${JSON_CFLAGS_OTHER})
+
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
if(WEBKIT_LIBRARIES_FOUND)
@@ -32,7 +37,6 @@ add_custom_target(GLADE ubl-settings-services.glade)
set(DEPENDFILES
../ubl-settings-services.glade
../ubl-settings-services-terminal.glade
- ../ubl-settings-services-log.glade
../gresource.xml
../ubl-settings-services-banner.png
../ubl-settings-services.css
@@ -76,7 +80,8 @@ set(LIBRARIES
${GTK_LIBRARIES}
${WEBKIT_LIBRARIES}
${UTILS_LIBRARIES}
- ${VTE291_LIBRARIES}
+ ${VTE291_LIBRARIES}
+ ${JSON_LIBRARIES}
pthread
ublsettings
ublsettings-gtk3
diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c
index 9e072ef..f9beddf 100644
--- a/source/ubl-settings-services.c
+++ b/source/ubl-settings-services.c
@@ -2,19 +2,66 @@
config main_config;
-//functions
+//saving & loading
+
+void on_save_done(main_window *widgets, config_str output, int size){
+ if (widgets) {};
+ char *final_output = yon_char_parsed_to_string(output,size,"");
+ printf("%s\n",final_output);
+ free(final_output);
+ yon_char_parsed_free(output,size);
+ switch (main_config.save_config){
+ case 0:
+ yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ break;
+ case 1:
+ yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ break;
+ case 2:
+ yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ break;
+ }
+}
void yon_load_proceed(YON_CONFIG_TYPE type){
- if (yon_config_load_register(type,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL)){
-
- }
-
+ yon_config_clean();
+ if (!yon_char_is_empty(config_get_default_command))
+ yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
+ if (type==YON_CONFIG_GLOBAL){
+ yon_config_load_config(type,config_get_global_command,NULL);
+ } else if (type==YON_CONFIG_LOCAL){
+ yon_config_load_config(type,config_get_local_command,NULL);
+ } else if (type==YON_CONFIG_CUSTOM){
+ char *path="";
+ textdomain(template_ui_LocaleName);
+ GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL);
+ textdomain(LocaleName);
+ gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services");
+ gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL);
+ GtkFileFilter *filter = gtk_file_filter_new();
+ gtk_file_filter_add_pattern(filter,"*.ini");
+ gtk_file_filter_set_name(filter, "*.ini");
+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter);
+ gtk_widget_show(dialog);
+ int response = gtk_dialog_run(GTK_DIALOG(dialog));
+ if (response == GTK_RESPONSE_ACCEPT){
+ char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ if (!yon_char_is_empty(file)){
+ path=file;
+ }
+ gtk_widget_destroy(dialog);
+ } else {
+ gtk_widget_destroy(dialog);
+ }
+ char *command = yon_config_get_custom_command(path);
+ yon_config_load_config(type,command,NULL);
+ }
}
void on_config_local_load(GtkWidget *self,main_window *widgets){
+ if (self){}
if (!main_config.update_thread_active){
main_config.update_thread_active=1;
- if (self){};
yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
@@ -23,9 +70,9 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){
}
void on_config_global_load(GtkWidget *self,main_window *widgets){
+ if (self){}
if (!main_config.update_thread_active){
main_config.update_thread_active=1;
- if (self){};
yon_load_proceed(YON_CONFIG_GLOBAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
@@ -34,94 +81,138 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){
}
+void on_config_custom_load(GtkWidget *self,main_window *widgets){
+ if (self){}
+ yon_load_proceed(YON_CONFIG_CUSTOM);
+ textdomain(template_ui_LocaleName);
+ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ textdomain(LocaleName);
+ main_config.load_mode=3;
+ yon_interface_update(widgets);
+}
+
+void on_service_constant_update(){
+
+}
+
void on_config_global_local_save(){
- yon_save_proceed(NULL,YON_CONFIG_BOTH,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL);
+ main_config.save_config=3;
+ yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL);
}
void on_config_local_save(){
- yon_save_proceed("system",YON_CONFIG_LOCAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL);
+ main_config.save_config=1;
+ yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL);
}
void on_config_global_save(){
- yon_save_proceed("global",YON_CONFIG_GLOBAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL);
+ main_config.save_config=0;
+ yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL);
}
+void on_config_custom_save(GtkWidget *self, main_window *widgets){
+ if (self&&widgets){}
+ main_config.save_config=1;
+ template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL);
+ if (window){};
+}
+
+// functions
+
+enum YON_UNIT_TYPE {
+ YON_UNIT_SERVICE=0,
+ YON_UNIT_SWAP,
+ YON_UNIT_SOCKET,
+ YON_UNIT_DEVICE,
+ YON_UNIT_TARGET,
+ YON_UNIT_MOUNT,
+ YON_UNIT_TIMER,
+ YON_UNIT_PATH,
+ YON_UNIT_SLICE,
+ YON_UNIT_SCOPE,
+ YON_UNIT_UNRECOGNISED
+};
+enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name);
+
+enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name){
+ enum YON_UNIT_TYPE final_type=0;
+ char *type = yon_char_new(unit_name);
+ int cut = yon_char_find_last(type,'.');
+ if (cut>-1){
+ free(yon_char_divide(type,cut));
+ }
+ if (!strcmp(type,"service")){
+ final_type = YON_UNIT_SERVICE;
+ } else if (!strcmp(type,"swap")){
+ final_type = YON_UNIT_SWAP;
+ } else if (!strcmp(type,"socket")){
+ final_type = YON_UNIT_SOCKET;
+ } else if (!strcmp(type,"device")){
+ final_type = YON_UNIT_DEVICE;
+ } else if (!strcmp(type,"target")){
+ final_type = YON_UNIT_TARGET;
+ } else if (!strcmp(type,"automount")){
+ final_type = YON_UNIT_MOUNT;
+ } else if (!strcmp(type,"timer")){
+ final_type = YON_UNIT_TIMER;
+ } else if (!strcmp(type,"path")){
+ final_type = YON_UNIT_PATH;
+ } else if (!strcmp(type,"slice")){
+ final_type = YON_UNIT_SLICE;
+ } else if (!strcmp(type,"scope")){
+ final_type = YON_UNIT_SCOPE;
+ } else {
+ final_type = YON_UNIT_UNRECOGNISED;
+ }
+ free(type);
+ return final_type;
+}
-static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data)
-{
- if (error){};
- if (!terminal) return;
- if (pid == -1) printf("Error\n\n\n");
- else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data));
-}
-
-void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){
- char **commands=new_arr(char*,2);
- gchar **envp = g_get_environ();
- commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL"));
- commands[1]=NULL;
- char **env=new_arr(char*,2);
- env[0]="";
- env[1]=NULL;
- vte_terminal_set_size(VTE_TERMINAL(terminal),10,15);
- VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL);
- vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
- char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed; ",command," ; sleep 5; stty -echo; unset PS1","\n",NULL);
- if(endwork_function)
- g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument);
- vte_terminal_spawn_async(VTE_TERMINAL(terminal),
- VTE_PTY_DEFAULT,
- NULL,
- commands,
- NULL,
- 0,
- NULL, NULL,
- NULL,
- -1,
- NULL,
- child_ready,
- install_command);
- vte_pty_spawn_async(pty,
- NULL,
- commands,
- NULL,
- 0,
- NULL, NULL,
- NULL,
- -1,
- NULL,
- NULL,
- NULL);
- vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1);
- vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE);
- vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE);
- gtk_widget_show_all(terminal);
- }
-
-// standard functions
-
-void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){
+void on_activate(GtkTreeView *self, main_window *widgets){
+ if (self&&widgets){};
+}
+void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
if (self){};
- GtkTreeIter iter;
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
+ GtkTreeIter filter_iter;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreeModel *filter;
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
+ model = GTK_TREE_MODEL(widgets->SystemList);
+ filter = GTK_TREE_MODEL(widgets->SystemFilter);
+ } else {
+ model = GTK_TREE_MODEL(widgets->UserList);
+ filter = GTK_TREE_MODEL(widgets->UserFilter);
+ }
+ GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
+ gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
+ {
+ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gboolean status = 0;
char *name;
gtk_tree_model_get(model,&iter,0,&status,5,&name,-1);
- char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.'));
- free(name);
- name=parsed_name;
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,0,!status,-1);
+ char *unit = yon_char_new(name);
+ char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.'));
+ free(unit);
+ unit=parsed_name;
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!status,-1);
char *config_sting = yon_config_get_by_key("SERVICES_ENABLE");
int size;
config_str parsed = yon_char_parse(config_sting,&size,",");
int place = yon_char_parsed_check_exist(parsed,size,name);
if (status==0){
if (place ==-1){
- if (!yon_config_append("SERVICES_ENABLE",name,",")){
- yon_config_register("SERVICES_ENABLE","[system]",name);
+ if (yon_char_parsed_check_exist(parsed,size,unit)==-1){
+ if (!yon_config_append("SERVICES_ENABLE",name,",")){
+ yon_config_register("SERVICES_ENABLE",SERVICES_ENABLE_get_command,name);
+ }
+ } else {
+ parsed = yon_char_parsed_rip(parsed,&size,place);
+ if (parsed)
+ yon_config_set("SERVICES_ENABLE",yon_char_parsed_to_string(parsed,size,","));
+ else yon_config_remove_by_key("SERVICES_ENABLE");
}
}
} else {
@@ -136,26 +227,46 @@ void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){
}
}
-void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){
+void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
if (self){};
- GtkTreeIter iter;
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
+ GtkTreeIter filter_iter;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreeModel *filter;
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
+ model = GTK_TREE_MODEL(widgets->SystemList);
+ filter = GTK_TREE_MODEL(widgets->SystemFilter);
+ } else {
+ model = GTK_TREE_MODEL(widgets->UserList);
+ filter = GTK_TREE_MODEL(widgets->UserFilter);
+ }
+ GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
+ gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
+ {
+ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gboolean status = 0;
char *name;
gtk_tree_model_get(model,&iter,1,&status,5,&name,-1);
- char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.'));
- free(name);
- name=parsed_name;
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,1,!status,-1);
+ char *unit = yon_char_new(name);
+ char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.'));
+ free(unit);
+ unit=parsed_name;
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,1,!status,-1);
char *config_sting = yon_config_get_by_key("SERVICES_DISABLE");
int size;
config_str parsed = yon_char_parse(config_sting,&size,",");
int place = yon_char_parsed_check_exist(parsed,size,name);
if (status==0){
if (place ==-1){
- if (!yon_config_append("SERVICES_DISABLE",name,",")){
- yon_config_register("SERVICES_DISABLE","[system]",name);
+ if (yon_char_parsed_check_exist(parsed,size,unit)==-1){
+ if (!yon_config_append("SERVICES_DISABLE",name,",")){
+ yon_config_register("SERVICES_DISABLE",SERVICES_DISABLE_get_command,name);
+ }
+ } else {
+ parsed = yon_char_parsed_rip(parsed,&size,place);
+ if (parsed)
+ yon_config_set("SERVICES_DISABLE",yon_char_parsed_to_string(parsed,size,","));
+ else yon_config_remove_by_key("SERVICES_DISABLE");
}
}
} else {
@@ -171,26 +282,46 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){
}
-void on_config_block_clicked(GtkWidget *self, main_window *widgets){
+void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
if (self){};
- GtkTreeIter iter;
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
+ GtkTreeIter filter_iter;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreeModel *filter;
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
+ model = GTK_TREE_MODEL(widgets->SystemList);
+ filter = GTK_TREE_MODEL(widgets->SystemFilter);
+ } else {
+ model = GTK_TREE_MODEL(widgets->UserList);
+ filter = GTK_TREE_MODEL(widgets->UserFilter);
+ }
+ GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
+ gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
+ {
+ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gboolean status = 0;
char *name;
gtk_tree_model_get(model,&iter,2,&status,5,&name,-1);
- char *parsed_name = yon_char_divide(name, yon_char_find_last(name,'.'));
- free(name);
- name=parsed_name;
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,2,!status,-1);
+ char *unit = yon_char_new(name);
+ char *parsed_name = yon_char_divide(unit, yon_char_find_last(name,'.'));
+ free(unit);
+ unit=parsed_name;
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,2,!status,-1);
char *config_sting = yon_config_get_by_key("SERVICES_MASK");
int size;
config_str parsed = yon_char_parse(config_sting,&size,",");
int place = yon_char_parsed_check_exist(parsed,size,name);
if (status==0){
if (place ==-1){
- if (!yon_config_append("SERVICES_MASK",name,",")){
- yon_config_register("SERVICES_MASK","[system]",name);
+ if (yon_char_parsed_check_exist(parsed,size,unit)==-1){
+ if (!yon_config_append("SERVICES_MASK",name,",")){
+ yon_config_register("SERVICES_MASK",SERVICES_MASK_get_command,name);
+ }
+ } else {
+ parsed = yon_char_parsed_rip(parsed,&size,place);
+ if (parsed)
+ yon_config_set("SERVICES_MASK",yon_char_parsed_to_string(parsed,size,","));
+ else yon_config_remove_by_key("SERVICES_MASK");
}
}
} else {
@@ -206,55 +337,146 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){
}
-void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){
+void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets){
if (self){};
- GtkTreeIter iter;
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
+ GtkTreeIter filter_iter;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreeModel *filter;
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
+ model = GTK_TREE_MODEL(widgets->SystemList);
+ filter = GTK_TREE_MODEL(widgets->SystemFilter);
+ } else {
+ model = GTK_TREE_MODEL(widgets->UserList);
+ filter = GTK_TREE_MODEL(widgets->UserFilter);
+ }
+ GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
+ gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
+ {
+ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gboolean status = 0;
char *service_name;
gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1);
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,3,!status,-1);
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,3,!status,-1);
yon_launch((!status)==1 ? service_enable_command(service_name) : \
service_disable_command(service_name));
}
}
+gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){
+ gboolean autostart,autostop,masked,type,loaded,inactive;
+ char *name;
+ gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&inactive,-1);
+ GtkWidget *combo=NULL;
+ GtkWidget *loaded_check=NULL;
+ GtkWidget *active_check=NULL;
+ GtkWidget *name_entry = NULL;
+ int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
+ if (page == 0){
+ combo = widgets->SystemFiltersCombo;
+ loaded_check = widgets->SystemUnloadedShowCheck;
+ active_check = widgets->SystemInactiveShowCheck;
+ name_entry = widgets->SystemSearchEntry;
+ } else if (page == 1){
+ combo = widgets->UserFiltersCombo;
+ loaded_check = widgets->UserUnloadedShowCheck;
+ active_check = widgets->UserInactiveShowCheck;
+ name_entry = widgets->UserSearchEntry;
+ }
+ int type_filter = 1;
+ int active_filter = 0;
+ int loaded_filter = 0;
+ int name_filter = 1;
+
+ int filter_active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+ if (filter_active>0){
+ if (filter_active>3){
+ char *text = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo));
+ if (yon_get_unit_type(text)!=(enum YON_UNIT_TYPE)type) type_filter = 0;
+ } else {
+ switch (filter_active){
+ case 1: if (!autostart) type_filter=0;
+ break;
+ case 2: if (!autostop) type_filter=0;
+ break;
+ case 3: if (!masked) type_filter=0;
+ break;
+ }
+ }
+ }
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(active_check))){
+ active_filter=1;
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(loaded_check)))
+ loaded_filter=1;
+ }
+
+ char *name_text = (char*)gtk_entry_get_text(GTK_ENTRY(name_entry));
+ if (name&&!yon_char_is_empty(name_text)&&!strstr(name,name_text))
+ name_filter=0;
+ if (type_filter&&(active_filter||inactive)&&(loaded_filter||loaded)&&name_filter){
+ return 1;
+ }
+ return 0;
+}
+
+void on_filter_changed(GtkWidget *self, main_window *widgets){
+ if (self){};
+ int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
+ 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));
+ } 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));
+ }
+}
+
void on_system_kill_confirmed(GtkWidget *self,char *service_name){
if (self){};
char *command = service_kill_command(service_name);
yon_launch(command);
}
-void on_system_launch_clicked(GtkWidget *self, main_window *widgets){
+void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets){
if (self){};
- GtkTreeIter iter;
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
+ GtkTreeIter iter, filter_iter;
+ GtkTreeModel *model;
+ GtkTreeModel *filter;
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
+ model = GTK_TREE_MODEL(widgets->SystemList);
+ filter = GTK_TREE_MODEL(widgets->SystemFilter);
+ } else {
+ model = GTK_TREE_MODEL(widgets->UserList);
+ filter = GTK_TREE_MODEL(widgets->UserFilter);
+ }
+ GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
+ gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
+ {
+ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gboolean status = 0;
char *service_name;
gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1);
- yon_launch((!status)==1 ? service_start_command(service_name) : \
- service_stop_command(service_name));
int size;
config_str result = yon_config_load(service_check_active_command(service_name),&size);
yon_char_remove_last_symbol(result[0],'\n');
if (size>0){
if (!strcmp(result[0],"active")){
if (status){
- dialog_confirmation_data data;
- data.action_text=STOP_SERVICE_WARMING_LABEL(service_name);
- data.function=(void*)(void*)on_system_kill_confirmed;
- data.data=service_name;
- int answer = yon_confirmation_dialog_call(self,&data);
- if (answer)
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,0,-1);
- } else {
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,1,-1);
+ on_system_kill_confirmed(NULL,service_name);
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1);
}
} else {
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,0,-1);
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1);
+ }
+ yon_launch((!status)==1 ? service_start_command(service_name) : \
+ service_stop_command(service_name));
+ if (!status) {
+ gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1);
}
}
yon_char_parsed_free(result,size);
@@ -262,432 +484,788 @@ void on_system_launch_clicked(GtkWidget *self, main_window *widgets){
}
-gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- int type;
- gtk_tree_model_get(model,iter,8,&type,-1);
- return 1;
+void on_system_restart_clicked(GtkWidget *self, main_window *widgets){
+ if (self&&widgets){};
}
-
-gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- int type;
- gtk_tree_model_get(model,iter,7,&type,-1);
- if (type==1)
- return 1;
- return 0;
+void 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;
+ config_str sessions = yon_config_load(list_of_session_command,&sessions_size);
+ for (int i=0;i4){
+ 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_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList));
}
-gboolean on_socket_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- int type;
- gtk_tree_model_get(model,iter,7,&type,-1);
- if (type==2)
- return 1;
- return 0;
+void on_session_activate(GtkWidget *self, main_window *widgets){
+ if (self){};
+ 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);
+ char *convert = yon_char_from_int(id);
+ yon_launch(session_activate_session(convert));
+ free(convert);
+ yon_sessions_update(widgets);
+ }
}
-gboolean on_autostart_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- gboolean type;
- gtk_tree_model_get(model,iter,0,&type,-1);
- if (type)
- return 1;
- return 0;
+void on_session_end(GtkWidget *self, main_window *widgets){
+ if (self){};
+ 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);
+ char *convert = yon_char_from_int(id);
+ yon_launch(session_terminate_session(convert));
+ free(convert);
+ yon_sessions_update(widgets);
+ }
}
-gboolean on_stopped_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- gboolean type;
- gtk_tree_model_get(model,iter,1,&type,-1);
- if (type)
- return 1;
- return 0;
+void on_session_block(GtkWidget *self, main_window *widgets){
+ if (self){};
+ 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);
+ char *convert = yon_char_from_int(id);
+ yon_launch(session_lock_session(convert));
+ free(convert);
+ yon_sessions_update(widgets);
+ }
}
-gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- gboolean type;
- gtk_tree_model_get(model,iter,2,&type,-1);
- if (type)
- return 1;
- return 0;
+log_window *yon_log_window_new(){
+ log_window *window = malloc(sizeof(log_window));
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log);
+ window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow");
+ 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->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel");
+ window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton");
+ window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton");
+ window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
+ 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;
+ vte_terminal_get_color_background_for_draw(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");
+ g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),window);
+ return window;
}
-gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- gboolean type;
- gtk_tree_model_get(model,iter,8,&type,-1);
- if (type)
- return 1;
- return 0;
-
-}
+void yon_system_systemd_restart(GtkWidget *self, main_window *widgets){
+ if (self){};
+ if (widgets){
+ if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
+ if (system(reload_systemd_root_command)){
+ yon_ubl_status_box_render(SYSTEMD_RELAUNCH_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ } else {
+ yon_ubl_status_box_render(SYSTEMD_RELAUNCH_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
-gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
- if (data){};
- gboolean type;
- gtk_tree_model_get(model,iter,8,&type,-1);
- if (!type)
- return 1;
- return 0;
-
+ }
+ } else {
+ if (system(reload_systemd_user_command)){
+ yon_ubl_status_box_render(SYSTEMD_RELAUNCH_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ } else {
+ yon_ubl_status_box_render(SYSTEMD_RELAUNCH_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+
+ }
+ }
+ }
}
-void on_type_changed(GtkWidget *self, main_window *widgets){
- if (self){};
- switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){
- case 0:
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(widgets->liststore2));
- break;
- case 1:
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.ServiceFilter));
- gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter));
- break;
- case 2:
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.SocketFilter));
- gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SocketFilter));
- break;
- case 3:
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.AutolaunchFilter));
- gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.AutolaunchFilter));
- break;
- case 4:
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.StoppedFilter));
- gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.StoppedFilter));
- break;
- case 5:
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(main_config.BlockedFilter));
- gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter));
- break;
- }
- if (main_config.SourceFilter){
- g_object_unref(main_config.SourceFilter);
- main_config.SourceFilter=NULL;
- }
- main_config.SourceFilter = gtk_tree_model_filter_new(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree)),NULL);
- int active = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceSourceCombo));
- if (active==1){
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_system_filter,NULL,NULL);
-
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter);
- } else if (active==2){
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SourceFilter),(GtkTreeModelFilterVisibleFunc)on_source_user_filter,NULL,NULL);
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),main_config.SourceFilter);
- }
- gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.SourceFilter));
- gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->MainTree),5);
-}
-
-void on_service_update(GtkWidget *self, terminal_window* window){
+void yon_system_systemd_reexec(GtkWidget *self, main_window *widgets){
if (self){};
- yon_terminal_integrated_start(window->SystemTerminal,service_info_command(window->target),NULL,NULL);
- GdkRGBA rgba;
- vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->SystemTerminal),&rgba);
- vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba);
+ if (widgets){
+ if (getuid()!=0&>k_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
+ if (system(reexec_systemd_root_command)){
+ yon_ubl_status_box_render(SYSTEMD_REEXEC_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ } else {
+ yon_ubl_status_box_render(SYSTEMD_REEXEC_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+
+ }
+ } else {
+ if (system(reexec_systemd_user_command)){
+ yon_ubl_status_box_render(SYSTEMD_REEXEC_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ } else {
+ yon_ubl_status_box_render(SYSTEMD_REEXEC_SUCCESS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+
+ }
+ }
+ }
}
-terminal_window *yon_terminal_window_new(){
- terminal_window *window = malloc(sizeof(terminal_window));
- GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_terminal);
- window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow");
- window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal");
- window->UpdateButton = yon_gtk_builder_get_widget(builder,"UpdateButton");
- window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel");
- window->target=NULL;
- yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window");
+typedef void (*data_function)(void*,void*);
- g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_service_update),window);
- gtk_widget_show(window->Window);
- return window;
+void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
+ data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd");
+ data->data = widgets;
+ data->function = (data_function)yon_system_systemd_restart;
+ yon_confirmation_dialog_call(self,data);
+ }
}
-void on_info_clicked(GtkWidget *self, main_window *widgets){
- if (self){}
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
+void on_system_update_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
+ data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd");
+ data->data = widgets;
+ data->function = (data_function)yon_system_systemd_reexec;
+ yon_confirmation_dialog_call(self,data);
+ }
+
+}
+
+void on_system_info_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
GtkTreeIter iter;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
- char *service_name;
- gtk_tree_model_get(model,&iter,5,&service_name,-1);
- if (!yon_char_is_empty(service_name)){
- terminal_window *window = yon_terminal_window_new();
- window->target=service_name;
- char *header = yon_char_unite(STATUS_LABEL," ",service_name,NULL);
- gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),header);
- gtk_window_set_title(GTK_WINDOW(window->Window),header);
- free(header);
- on_service_update(NULL,window);
- }
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_STATE_TITLE_LABEL(name));
+ gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_STATE_TITLE_LABEL(name));
+ window->target = service_info_command(name);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
+ gtk_widget_show(window->Window);
}
+ }
+
}
-log_window *yon_log_window_new(){
- log_window *window = malloc(sizeof(log_window));
- GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log);
- window->Window = yon_gtk_builder_get_widget(builder,"MonitorWindow");
- window->SystemTerminal = yon_gtk_builder_get_widget(builder,"SystemTerminal");
- window->webHeaderNameLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel");
- window->target=NULL;
- yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"terminal_window");
- return window;
+void on_system_log_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_LOG_TITLE_LABEL(name));
+ gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_LOG_TITLE_LABEL(name));
+ window->target = get_log_command(name);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
+ gtk_widget_show(window->Window);
+ }
+ }
+
}
-void on_log_show(GtkWidget *self, main_window *widgets){
+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);
+ g_thread_new(NULL,(GThreadFunc)on_terminal_relaunch,window);
+}
+
+void on_update_clicked(GtkWidget *self, log_window *window){
if (self){};
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
+}
+
+void on_system_edit_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
GtkTreeIter iter;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
- log_window *window = yon_log_window_new();
+ 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);
- yon_terminal_integrated_start(window->SystemTerminal,start_log_command(name),NULL,NULL);
+ log_window *window = yon_log_window_new();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_UNIT_EDIT_TITLE_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_UNIT_EDIT_TITLE_LABEL);
+ gtk_widget_show(window->SaveButton);
+ window->target=show_source_command(name);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
GdkRGBA rgba;
- rgba.alpha=1;
- rgba.red=0.95;
- rgba.green=0.95;
- rgba.blue=0.95;
+ rgba.blue=1;
+ rgba.green=1;
+ rgba.red=1;
vte_terminal_set_color_cursor(VTE_TERMINAL(window->SystemTerminal),&rgba);
- vte_terminal_set_color_background(VTE_TERMINAL(window->SystemTerminal),&rgba);
- rgba.red=0;
- rgba.green=0;
- rgba.blue=0;
- vte_terminal_set_color_foreground(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);
}
-
+ }
+
}
-void *yon_unthreaded_config_load(void *widgets){
- if (main_config.load_mode==1){
- on_config_local_load(NULL,(main_window*)widgets);
- } else if (main_config.load_mode==0){
- on_config_global_load(NULL,(main_window*)widgets);
+void on_system_status_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),PROPERTIES_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),PROPERTIES_LABEL);
+ window->target = properties_command(name);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
+ gtk_widget_show(window->Window);
}
- return NULL;
+
+ }
+
}
-void on_update(GtkWidget *self,main_window *widgets){
- if (!main_config.update_thread_active){
- if (self){}
- yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
- if (yon_unthreaded_config_load(widgets)){};
+void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
+ data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd");
+ data->data = widgets;
+ data->function = (data_function)yon_system_systemd_restart;
+ yon_confirmation_dialog_call(self,data);
+
}
+
}
-void *update_delay(main_window *widgets){
- on_type_changed(NULL,widgets);
- main_config.update_thread_active=0;
- textdomain(template_ui_LocaleName);
- if (main_config.load_mode){
- yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
- } else {
- yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
- }
- textdomain(LocaleName);
- return NULL;
+void on_user_update_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
+ data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd");
+ data->data = widgets;
+ data->function = (data_function)yon_system_systemd_reexec;
+ yon_confirmation_dialog_call(self,data);
+ }
+
}
-gboolean yon_interface_update(main_window *widgets){
- gtk_widget_set_sensitive(widgets->UpdateButton,0);
- int size;
- int size_users;
+void on_user_info_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
GtkTreeIter iter;
- gtk_list_store_clear(widgets->liststore2);
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL);
- config_str services = yon_config_load(load_services_command,&size);
- char *command = load_user_services_command;
- config_str users_services = yon_config_load(command,&size_users);
- for (int i=0;iliststore2,&iter);
- int type;
- char *description = parsed[parsed_size-1];
- if (strstr(parsed[0],".socket"))
- type = 2;
- else type = 1;
- int user_service=0;
- gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1);
- }
- for (int i=0;iliststore2,&iter);
- int type;
- char *description = parsed[parsed_size-1];
- if (strstr(parsed[0],".socket"))
- type = 2;
- else type = 1;
- int user_service=1;
- gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,8,user_service,-1);
- }
-
- int launched_size;
- config_str launched_parsed = yon_config_load(load_launched_command,&launched_size);
- int enabled_size;
- config_str enabled_parsed = yon_config_load(load_enabled_command,&enabled_size);
- yon_char_parsed_divide_search_full(launched_parsed,launched_size,"\n",-1);
- yon_char_parsed_divide_search_full(enabled_parsed,enabled_size,"\n",-1);
- char *launched = yon_char_parsed_to_string(launched_parsed,launched_size,",");
- char *enabled = yon_char_parsed_to_string(enabled_parsed,enabled_size,",");
- char *start = yon_config_get_by_key("SERVICES_ENABLE");
- char *stop = yon_config_get_by_key("SERVICES_DISABLE");
- char *block = yon_config_get_by_key("SERVICES_MASK");
- if (!yon_char_is_empty(launched)&&launched[strlen(launched)-1]=='\n') launched[strlen(launched)-1]='\0';
- if (!yon_char_is_empty(enabled)&&enabled[strlen(enabled)-1]=='\n') enabled[strlen(enabled)-1]='\0';
- if (!yon_char_is_empty(start)&&start[strlen(start)-1]=='\n') start[strlen(start)-1]='\0';
- if (!yon_char_is_empty(stop)&&stop[strlen(stop)-1]=='\n') stop[strlen(stop)-1]='\0';
- if (!yon_char_is_empty(block)&&block[strlen(block)-1]=='\n') block[strlen(block)-1]='\0';
- int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->liststore2),&iter);
- for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->liststore2),&iter)){
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){
char *name;
- gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore2),&iter,5,&name,-1);
- char *name_copy = yon_char_new(name);
- char *name_parsed = yon_char_divide(name_copy,yon_char_find_last(name_copy,'.'));
- if (!yon_char_is_empty(start)){
- if (!strcmp(start,name))
- gtk_list_store_set(widgets->liststore2,&iter,0,1,-1);
- else if (strstr(start,name_parsed)&&strcmp(name_copy,"socket"))
- gtk_list_store_set(widgets->liststore2,&iter,0,1,-1);
- else
- gtk_list_store_set(widgets->liststore2,&iter,0,0,-1);
- }
- if (!yon_char_is_empty(stop)){
- if (strstr(stop,name))
- gtk_list_store_set(widgets->liststore2,&iter,1,1,-1);
- else if (strstr(stop,name_parsed)&&strcmp(name_copy,"socket"))
- gtk_list_store_set(widgets->liststore2,&iter,1,1,-1);
- else
- gtk_list_store_set(widgets->liststore2,&iter,1,0,-1);
- }
- if (!yon_char_is_empty(block)){
- if (strstr(block,name))
- gtk_list_store_set(widgets->liststore2,&iter,2,1,-1);
- else if (strstr(block,name_parsed)&&strcmp(name_copy,"socket"))
- gtk_list_store_set(widgets->liststore2,&iter,2,1,-1);
- else
- gtk_list_store_set(widgets->liststore2,&iter,2,0,-1);
- }
- if (!yon_char_is_empty(launched)){
- if (strstr(launched,name))
- gtk_list_store_set(widgets->liststore2,&iter,4,1,-1);
- else if (strstr(launched,name_parsed)&&strcmp(name_copy,"socket"))
- gtk_list_store_set(widgets->liststore2,&iter,4,1,-1);
- else
- gtk_list_store_set(widgets->liststore2,&iter,4,0,-1);
- }
- if (!yon_char_is_empty(enabled)){
- if (strstr(enabled,name))
- gtk_list_store_set(widgets->liststore2,&iter,3,1,-1);
- else if (strstr(enabled,name_parsed)&&strcmp(name_copy,"socket"))
- gtk_list_store_set(widgets->liststore2,&iter,3,1,-1);
- else
- gtk_list_store_set(widgets->liststore2,&iter,3,0,-1);
- }
- free(name);
- free(name_parsed);
- while(gtk_events_pending()) gtk_main_iteration();
- }
- update_delay(widgets);
- gtk_widget_set_sensitive(widgets->UpdateButton,1);
- return 0;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ log_window *window = yon_log_window_new();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_STATE_TITLE_LABEL(name));
+ gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_STATE_TITLE_LABEL(name));
+ window->target = user_service_info_command(name);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
+ gtk_widget_show(window->Window);
+ }
+ }
+
}
-void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){
- if (self||pspec){}
- GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree));
- int width_configuration = gtk_tree_view_column_get_width(g_list_nth_data(list,0))+gtk_tree_view_column_get_width(g_list_nth_data(list,1))+gtk_tree_view_column_get_width(g_list_nth_data(list,2));
- int width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4));
- g_list_free(list);
- gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->MainUpperTree),0),width_configuration);
- gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->MainUpperTree),1),width_system);
+void on_user_log_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ log_window *window = yon_log_window_new();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_LOG_TITLE_LABEL(name));
+ gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_LOG_TITLE_LABEL(name));
+ window->target = user_get_log_command(name);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
+ gtk_widget_show(window->Window);
+ }
+ }
+
}
-GtkWidget *yon_menu_separator_create() {
- GtkWidget *menu_item = gtk_separator_menu_item_new();
+void on_user_edit_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ log_window *window = yon_log_window_new();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SERVICE_UNIT_EDIT_TITLE_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),SERVICE_UNIT_EDIT_TITLE_LABEL);
+ gtk_widget_show(window->SaveButton);
+ window->target=user_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);
+ }
+ }
- gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"sepat");
- gtk_widget_show(menu_item);
- gtk_widget_set_sensitive(menu_item,0);
- return menu_item;
}
-GtkWidget *yon_menu_button_create(char *icon_name, char *text) {
- GtkWidget *menu_item = gtk_menu_item_new();
- GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
- GtkWidget *icon;
- if(icon_name){
- icon = gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_BUTTON);
- gtk_box_pack_start(GTK_BOX(box),icon,0,0,5);
+void on_user_status_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UserUnitsTree)),&model,&iter)){
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ log_window *window = yon_log_window_new();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),PROPERTIES_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),PROPERTIES_LABEL);
+ window->target = user_properties_command(name);
+ yon_terminal_integrated_start(window->SystemTerminal,window->target,NULL,NULL);
+ gtk_widget_show(window->Window);
}
- GtkWidget *label = gtk_label_new(text);
- gtk_box_pack_start(GTK_BOX(box),label,0,0,5);
- gtk_container_add(GTK_CONTAINER(menu_item),box);
- gtk_widget_show_all(menu_item);
- return menu_item;
+
+ }
+
}
-gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window *widgets){
+void on_config_log_save(GtkWidget *self, log_window *window){
if (self){};
- if (event->button==3){
- main_config.rmb_clicked=1;
- menu_obj *menu_object = g_malloc0(sizeof(menu_obj));
- GtkWidget *menu = gtk_menu_new();
- gtk_menu_set_reserve_toggle_size(GTK_MENU(menu),0);
- GtkWidget *menu_item_configuration_in_config = yon_menu_button_create(NULL,CONFIG_CONFIGURATION_LABEL);
- gtk_widget_set_sensitive(menu_item_configuration_in_config,0);
- GtkWidget *menu_item_autostart_config = yon_menu_button_create("media-playback-start-symbolic",AUTOSTART_LABEL);
- GtkWidget *menu_item_autostop = yon_menu_button_create("media-playback-stop-symbolic",AUTOSTOP_LABEL);
- GtkWidget *menu_item_block = yon_menu_button_create("process-stop-symbolic",BLOCK_LABEL);
- GtkWidget *menu_item_separator1 = yon_menu_separator_create();
- GtkWidget *menu_item_configuration_in_system = yon_menu_button_create(NULL,SYSTEM_CONFIGURATION_LABEL);
- gtk_widget_set_sensitive(menu_item_configuration_in_system,0);
- GtkWidget *menu_item_autostart_system = yon_menu_button_create("media-playback-start-symbolic",AUTOSTART_LABEL);
- GtkWidget *menu_item_launched = yon_menu_button_create("emoji-flags-symbolic",SYSTEM_LAUNCH_TOGGLE_LABEL);
- GtkWidget *menu_item_separator2 = yon_menu_separator_create();
- GtkWidget *menu_item_reload = yon_menu_button_create("emblem-synchronizing-symbolic",SERVICE_RELOAD_LABEL);
- GtkWidget *menu_item_status = yon_menu_button_create("dialog-information-symbolic",STATUS_LABEL);
- menu_object->Menu = menu;
- menu_object->MenuConfigAutostart = menu_item_autostart_config;
- menu_object->MenuConfigAutostop = menu_item_autostop;
- menu_object->MenuConfigBlock = menu_item_block;
- menu_object->MenuSystemAutostart = menu_item_autostart_system;
- menu_object->MenuSystemLaunched = menu_item_launched;
- menu_object->MenuReloadConfig = menu_item_reload;
- menu_object->MenuStatus = menu_item_status;
- g_signal_connect(G_OBJECT(menu_item_autostart_config),"activate",G_CALLBACK(on_config_autostart_clicked),widgets);
- g_signal_connect(G_OBJECT(menu_item_autostop),"activate",G_CALLBACK(on_config_autostop_clicked),widgets);
- g_signal_connect(G_OBJECT(menu_item_block),"activate",G_CALLBACK(on_config_block_clicked),widgets);
- g_signal_connect(G_OBJECT(menu_item_autostart_system),"activate",G_CALLBACK(on_system_autostart_clicked),widgets);
- g_signal_connect(G_OBJECT(menu_item_launched),"activate",G_CALLBACK(on_system_launch_clicked),widgets);
- g_signal_connect(G_OBJECT(menu_item_reload),"activate",G_CALLBACK(on_update),widgets);
- g_signal_connect(G_OBJECT(menu_item_status),"activate",G_CALLBACK(on_info_clicked),widgets);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_configuration_in_config);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostart_config);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostop);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_block);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_separator1);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_configuration_in_system);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_autostart_system);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_launched);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_separator2);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_reload);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_status);
- widgets->RMBMenu=menu;
- widgets->menu=menu_object;
- gtk_widget_show_all(widgets->RMBMenu);
- gtk_menu_popup_at_pointer(GTK_MENU(menu),NULL);
- return 0;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->TextEditor));
+ gtk_text_buffer_get_end_iter(buffer,&end);
+ gtk_text_buffer_get_start_iter(buffer,&start);
+ char *text = gtk_text_buffer_get_text(buffer,&start,&end,1);
+ if (text){
+ if (yon_file_save(window->target,text)){
+ yon_ubl_status_box_render(SAVED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ } else {
+ yon_ubl_status_box_render(ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
}
+}
+
+void on_config_edit_clicked(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ 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)){
+ log_window *window = yon_log_window_new();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),EDIT_CONFIG_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),EDIT_CONFIG_LABEL);
+ gtk_widget_hide(gtk_widget_get_parent(window->SystemTerminal));
+ gtk_widget_show(gtk_widget_get_parent(window->TextEditor));
+ gtk_widget_show(window->SaveButton);
+ char *name;
+ gtk_tree_model_get(model,&iter,0,&name,-1);
+ int size;
+ window->target = name;
+ 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);
+ g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_config_log_save),window);
+ gtk_widget_show(window->Window);
+ }
+
+ }
+
+}
+
+void on_system_services_status(GtkWidget *self, main_window *widgets){
+ if (self){}
+ if (widgets){
+ log_window *window = yon_log_window_new();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SYSTEM_STATUS_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),SYSTEM_STATUS_LABEL);
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),USER_STATUS_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),USER_STATUS_LABEL);
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),INSTALLED_UNIT_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),INSTALLED_UNIT_LABEL);
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),UNITS_LIST_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),UNITS_LIST_LABEL);
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),SOCKETS_LIST_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),SOCKETS_LIST_LABEL);
+ 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();
+ gtk_label_set_text(GTK_LABEL(window->webHeaderNameLabel),TIMERS_LIST_LABEL);
+ gtk_window_set_title(GTK_WINDOW(window->Window),TIMERS_LIST_LABEL);
+ 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){
+ if (widgets){
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),NULL);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),NULL);
+ gtk_list_store_clear(widgets->SystemList);
+ gtk_list_store_clear(widgets->UserList);
+ gtk_list_store_clear(widgets->ConfigList);
+ gtk_list_store_clear(widgets->TimersList);
+ 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 timers_size;
+ config_str timers = yon_config_load(get_timers_command,&timers_size);
+ struct json_object *jsobject = json_tokener_parse(timers[0]);
+ for (int i=0; iSystemList,&iter);
+ gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1);
+ }
+
+ }
+ for (int i=0; iUserList,&iter);
+ gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1);
+ }
+
+ }
+ for (int i=0; i2){
+ 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);
+ }
+ }
+ yon_sessions_update(widgets);
+ for (size_t i=0;iTimersList,&iter);
+ GDateTime *datetime=NULL;
+ if (!yon_char_is_empty(next)&&atol(next)!=0){
+ datetime = g_date_time_new_from_unix_local(atol(next)/1000000);
+ next = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
+ g_date_time_unref(datetime);
+ } else {
+ next="";
+ }
+ if (!yon_char_is_empty(left)&&atol(left)!=0){
+ datetime = g_date_time_new_from_unix_local(atol(left)/1000000);
+ GDateTime *now = g_date_time_new_now_local();
+ left = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
+ gint64 left_microseconds = 0;
+ left_microseconds = g_date_time_difference(datetime,now);
+ left_microseconds/=1000000;
+ long days = (long)((left_microseconds/60)/60)/24;
+ long hours = (long)(left_microseconds/60)/60%60;
+ long minutes = (long)left_microseconds/60%60;
+ long seconds = (long)left_microseconds%60;
+ g_date_time_unref(datetime);
+ left = yon_char_unite(days?yon_char_from_long(days):"",days?" ":"",days?DAYS_LABEL:"",days?" ":"",hours?yon_char_from_long(hours):"",hours?" ":"",hours?HOURS_LABEL:"",hours?" ":"",minutes?yon_char_from_long(minutes):"",minutes?" ":"",minutes?MINUTES_LABEL:"",minutes?" ":"",seconds?yon_char_from_long(seconds):"",seconds?" ":"",seconds?SECONDS_LABEL:"",NULL);
+ } else {
+ left="";
+ }
+ if (!yon_char_is_empty(last)&&atol(last)!=0){
+ datetime = g_date_time_new_from_unix_local(atol(last)/1000000);
+ last = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
+ g_date_time_unref(datetime);
+ } else {
+ last="";
+ }
+ if (!yon_char_is_empty(passed)&&atol(passed)!=0){
+ datetime = g_date_time_new_from_unix_local(atol(passed)/1000000);
+ passed = g_date_time_format(datetime,"%Y.%m.%d %H:%M:%S");
+ g_date_time_unref(datetime);
+ } else {
+ passed="";
+ }
+ gtk_list_store_set(widgets->TimersList,&iter,0,unit,1,next,2,left,3,last,4,passed,5,activates,-1);
+ }
+ }
+ {
+ int parsed_size;
+ char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER);
+ config_str parsed = yon_char_parse(enabled,&parsed_size,",");
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList);
+
+ int valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ gtk_list_store_set(widgets->SystemList,&iter,0,0,-1);
+ }
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ for (int i=0;iSystemList,&iter,0,1,-1);
+ }
+ }
+ yon_char_parsed_free(parsed,parsed_size);
+
+ char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER);
+ parsed = yon_char_parse(disabled,&parsed_size,",");
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ gtk_list_store_set(widgets->SystemList,&iter,1,0,-1);
+ }
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ for (int i=0;iSystemList,&iter,1,1,-1);
+ }
+ }
+ yon_char_parsed_free(parsed,parsed_size);
+
+ char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER);
+ parsed = yon_char_parse(masked,&parsed_size,",");
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ gtk_list_store_set(widgets->SystemList,&iter,2,0,-1);
+ }
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ for (int i=0;iSystemList,&iter,2,1,-1);
+ }
+ }
+ }
+ {
+
+ int parsed_size;
+ char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER);
+ config_str parsed = yon_char_parse(enabled,&parsed_size,",");
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList);
+
+ int valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ gtk_list_store_set(widgets->UserList,&iter,0,0,-1);
+ }
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ for (int i=0;iUserList,&iter,0,1,-1);
+ }
+ }
+ yon_char_parsed_free(parsed,parsed_size);
+
+ char *disabled = yon_config_get_by_key(SERVICES_DISABLE_PARAMETER);
+ parsed = yon_char_parse(disabled,&parsed_size,",");
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ gtk_list_store_set(widgets->UserList,&iter,1,0,-1);
+ }
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ for (int i=0;iUserList,&iter,1,1,-1);
+ }
+ }
+ yon_char_parsed_free(parsed,parsed_size);
+
+ char *masked = yon_config_get_by_key(SERVICES_MASK_PARAMETER);
+ parsed = yon_char_parse(masked,&parsed_size,",");
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ gtk_list_store_set(widgets->UserList,&iter,2,0,-1);
+ }
+ valid = gtk_tree_model_get_iter_first(model,&iter);
+ for (;valid;valid=gtk_tree_model_iter_next(model,&iter))
+ {
+ char *name;
+ gtk_tree_model_get(model,&iter,5,&name,-1);
+ for (int i=0;iUserList,&iter,2,1,-1);
+ }
+ }
+ }
+ 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->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList));
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList));
+ main_config.update_thread_active=0;
return 0;
}
+void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){
+ if (self||pspec){}
+ GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree));
+ int width_configuration = gtk_tree_view_column_get_width(g_list_nth_data(list,0))+gtk_tree_view_column_get_width(g_list_nth_data(list,1))+gtk_tree_view_column_get_width(g_list_nth_data(list,2));
+ int width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4))+gtk_tree_view_column_get_width(g_list_nth_data(list,5));
+ g_list_free(list);
+ gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),0),width_configuration);
+ gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),1),width_system);
+
+ list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->UserUnitsTree));
+ width_configuration = gtk_tree_view_column_get_width(g_list_nth_data(list,0))+gtk_tree_view_column_get_width(g_list_nth_data(list,1))+gtk_tree_view_column_get_width(g_list_nth_data(list,2));
+ width_system = gtk_tree_view_column_get_width(g_list_nth_data(list,3))+gtk_tree_view_column_get_width(g_list_nth_data(list,4))+gtk_tree_view_column_get_width(g_list_nth_data(list,5));
+ g_list_free(list);
+ gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),0),width_configuration);
+ gtk_tree_view_column_set_fixed_width(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),1),width_system);
+}
+
/**config_init()
* [EN]
*
@@ -706,41 +1284,91 @@ void config_init(){
main_config.lock_save_local=0;
main_config.load_mode=1;
main_config.update_thread_active=0;
-}
-
-void on_activate(GtkTreeView *self, main_window *widgets){
+}
+
+void on_tree_selection_changed(GtkWidget *self, main_window *widgets){
if (self){};
+ GtkTreeModel *model;
+ GtkWidget *Tree;
GtkTreeIter iter;
- GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->MainTree));
- char *name=NULL;
- char *description=NULL;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
- gtk_tree_model_get(model,&iter,5,&name,6,&description,-1);
- gtk_label_set_text(GTK_LABEL(widgets->ServiceLabel),name);
- gtk_label_set_text(GTK_LABEL(widgets->DescriptionLabel),description);
- menu_obj *menu=widgets->menu;
- if (main_config.rmb_clicked){
- gtk_menu_popup_at_pointer(GTK_MENU(menu->Menu),NULL);
+ int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
+ if (page==0){
+ model = GTK_TREE_MODEL(widgets->SystemList);
+ Tree = widgets->SystemUnitsTree;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){
+ char *name, *descr;
+ gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1);
+ gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),name);
+ gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),descr);
+ gtk_widget_set_sensitive(widgets->SystemStatusButton,1);
+ gtk_widget_set_sensitive(widgets->SystemInfoButton,1);
+ if (getuid()==0){
+ gtk_widget_set_sensitive(widgets->SystemEditButton,1);
+ gtk_widget_set_sensitive(widgets->SystemLogButton,1);
+
+ }
+ } else {
+ gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),"");
+ gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),"");
+ gtk_widget_set_sensitive(widgets->SystemStatusButton,0);
+ gtk_widget_set_sensitive(widgets->SystemInfoButton,0);
+ if (getuid()==0){
+ gtk_widget_set_sensitive(widgets->SystemEditButton,0);
+ gtk_widget_set_sensitive(widgets->SystemLogButton,0);
+ }
}
+ } else if (page==1){
+ model = GTK_TREE_MODEL(widgets->UserList);
+ Tree = widgets->UserUnitsTree;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){
+ char *name, *descr;
+ gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1);
+ gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),name);
+ gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),descr);
+ gtk_widget_set_sensitive(widgets->UserStatusButton,1);
+ gtk_widget_set_sensitive(widgets->UserInfoButton,1);
+ if (getuid()==0){
+ gtk_widget_set_sensitive(widgets->UserEditButton,1);
+ gtk_widget_set_sensitive(widgets->UserLogButton,1);
+ }
+ } else {
+ gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),"");
+ gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),"");
+ gtk_widget_set_sensitive(widgets->UserStatusButton,0);
+ gtk_widget_set_sensitive(widgets->UserInfoButton,0);
+ if (getuid()==0){
+ gtk_widget_set_sensitive(widgets->UserEditButton,0);
+ gtk_widget_set_sensitive(widgets->UserLogButton,0);
+
+ }
+ }
+
+ }
+ if (getuid()==0){
}
- main_config.rmb_clicked=0;
}
-void on_tree_selection_changed(GtkWidget *self, main_window *widgets){
+void on_root_get_root(char *argline){
+ yon_launch(argline);
+}
+
+void on_root_access(GtkWidget *self, main_window *widgets){
if (self){};
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
- GtkTreeIter iter;
- int switch_status=0;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
- switch_status=1;
+ if (getuid()){
+ char *argline = LocaleName;
+ for (int i=1;iWindow);
+ }
}
- gtk_widget_set_sensitive(widgets->ConfigAutostartButton,switch_status);
- gtk_widget_set_sensitive(widgets->ConfigAutostopButton,switch_status);
- gtk_widget_set_sensitive(widgets->ConfigBlockButton,switch_status);
- gtk_widget_set_sensitive(widgets->SystemAutostartButton,switch_status);
- gtk_widget_set_sensitive(widgets->SystemLaunchButton,switch_status);
- gtk_widget_set_sensitive(widgets->InfoButton,switch_status);
- gtk_widget_set_sensitive(widgets->LogButton,switch_status);
}
/**yon_main_window_complete(main_window *widgets)
@@ -754,70 +1382,243 @@ void yon_main_window_complete(main_window *widgets){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0);
// Custom widgets configuration
-
- widgets->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
- widgets->liststore2=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2"));
+ {
+ widgets->UserList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UserList"));
+ widgets->TimersList =GTK_LIST_STORE(gtk_builder_get_object(builder,"TimersList"));
+ widgets->SessionsList=GTK_LIST_STORE(gtk_builder_get_object(builder,"SessionsList"));
+ widgets->ConfigList=GTK_LIST_STORE(gtk_builder_get_object(builder,"ConfigList"));
+ widgets->SystemList=GTK_LIST_STORE(gtk_builder_get_object(builder,"SystemList"));
widgets->BoxMain=yon_gtk_builder_get_widget(builder,"BoxMain");
- widgets->ServiceSourceCombo=yon_gtk_builder_get_widget(builder,"ServiceSourceCombo");
- widgets->ServiceTypeCombo=yon_gtk_builder_get_widget(builder,"ServiceTypeCombo");
- widgets->SearchEntry=yon_gtk_builder_get_widget(builder,"SearchEntry");
- widgets->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton");
- widgets->ConfigAutostartButton=yon_gtk_builder_get_widget(builder,"ConfigAutostartButton");
- widgets->ConfigAutostopButton=yon_gtk_builder_get_widget(builder,"ConfigAutostopButton");
- widgets->ConfigBlockButton=yon_gtk_builder_get_widget(builder,"ConfigBlockButton");
- widgets->SystemAutostartButton=yon_gtk_builder_get_widget(builder,"SystemAutostartButton");
- widgets->SystemLaunchButton=yon_gtk_builder_get_widget(builder,"SystemLaunchButton");
- widgets->InfoButton=yon_gtk_builder_get_widget(builder,"InfoButton");
- widgets->LogButton=yon_gtk_builder_get_widget(builder,"LogButton");
- widgets->MainUpperTree=yon_gtk_builder_get_widget(builder,"MainUpperTree");
- widgets->MainTree=yon_gtk_builder_get_widget(builder,"MainTree");
- widgets->DescriptionLabel=yon_gtk_builder_get_widget(builder,"DescriptionLabel");
- widgets->ServiceLabel=yon_gtk_builder_get_widget(builder,"ServiceLabel");
- GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->MainTree));
- yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->MainTree));
- g_signal_connect(G_OBJECT(widgets->MainTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets);
- g_signal_connect(G_OBJECT(widgets->ConfigAutostartButton),"clicked",G_CALLBACK(on_config_autostart_clicked),widgets);
- g_signal_connect(G_OBJECT(widgets->ConfigAutostopButton),"clicked",G_CALLBACK(on_config_autostop_clicked),widgets);
- g_signal_connect(G_OBJECT(widgets->ConfigBlockButton),"clicked",G_CALLBACK(on_config_block_clicked),widgets);
- g_signal_connect(G_OBJECT(widgets->SystemAutostartButton),"clicked",G_CALLBACK(on_system_autostart_clicked),widgets);
- g_signal_connect(G_OBJECT(widgets->SystemLaunchButton),"clicked",G_CALLBACK(on_system_launch_clicked),widgets);
- g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update),widgets);
- g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets);
- g_signal_connect(G_OBJECT(widgets->LogButton),"clicked",G_CALLBACK(on_log_show),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,1)),"notify::width",G_CALLBACK(on_column_resize),widgets);
- g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets);
- g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets);
- g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets);
- g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_activate),widgets);
- g_signal_connect(G_OBJECT(widgets->ServiceTypeCombo),"changed",G_CALLBACK(on_type_changed),widgets);
- g_signal_connect(G_OBJECT(widgets->ServiceSourceCombo),"changed",G_CALLBACK(on_type_changed),widgets);
+ widgets->SystemSearchEntry=yon_gtk_builder_get_widget(builder,"SystemSearchEntry");
+ widgets->SystemUpperTree=yon_gtk_builder_get_widget(builder,"SystemUpperTree");
+ widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree");
+ 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->SystemFiltersCombo=yon_gtk_builder_get_widget(builder,"SystemFiltersCombo");
+ widgets->SystemInactiveShowCheck=yon_gtk_builder_get_widget(builder,"SystemInactiveShowCheck");
+ widgets->SystemUnloadedShowCheck=yon_gtk_builder_get_widget(builder,"SystemUnloadedShowCheck");
+ widgets->SystemUpperTree=yon_gtk_builder_get_widget(builder,"SystemUpperTree");
+ widgets->SystemUnitsTree=yon_gtk_builder_get_widget(builder,"SystemUnitsTree");
+ widgets->SystemPrevButton=yon_gtk_builder_get_widget(builder,"SystemPrevButton");
+ widgets->SystemUpdateButton=yon_gtk_builder_get_widget(builder,"SystemUpdateButton");
+ widgets->SystemInfoButton=yon_gtk_builder_get_widget(builder,"SystemInfoButton");
+ widgets->SystemLogButton=yon_gtk_builder_get_widget(builder,"SystemLogButton");
+ 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->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter"));
+ 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"));
+ widgets->ConfigBlockCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigBlockCell"));
+ widgets->SystemAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"SystemAutostartCell"));
+ widgets->SystemLaunchedCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"SystemLaunchedCell"));
+
+ widgets->UserConfigAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigAutostartCell"));
+ widgets->UserConfigAutostopCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigAutostopCell"));
+ widgets->UserConfigBlockCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserConfigBlockCell"));
+ widgets->UserSystemAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserSystemAutostartCell"));
+ widgets->UserSystemLaunchedCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserSystemLaunchedCell"));
+ widgets->SystemMenu = yon_rmb_menu_setup(widgets->SystemUnitsTree,NULL,NULL,
+ RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets,
+ STATUS_LABEL,status_icon_path,on_system_info_clicked,widgets,
+ SHOW_LOG_LABEL,log_icon_path,on_system_log_clicked,widgets,
+ SHOW_SOURCE_LABEL,source_icon_path,on_system_edit_clicked,widgets,
+ PROPERTIES_LABEL,properties_icon_path,on_system_status_clicked,widgets,
+ NULL);
+
+ widgets->UserSearchEntry=yon_gtk_builder_get_widget(builder,"UserSearchEntry");
+ widgets->UserFiltersCombo=yon_gtk_builder_get_widget(builder,"UserFiltersCombo");
+ widgets->UserInactiveShowCheck=yon_gtk_builder_get_widget(builder,"UserInactiveShowCheck");
+ widgets->UserUnloadedShowCheck=yon_gtk_builder_get_widget(builder,"UserUnloadedShowCheck");
+ widgets->UsersUpperTree=yon_gtk_builder_get_widget(builder,"UsersUpperTree");
+ widgets->UserUnitsTree=yon_gtk_builder_get_widget(builder,"UserUnitsTree");
+ widgets->UserPrevButton=yon_gtk_builder_get_widget(builder,"UserPrevButton");
+ widgets->UserUpdateButton=yon_gtk_builder_get_widget(builder,"UserUpdateButton");
+ widgets->UserInfoButton=yon_gtk_builder_get_widget(builder,"UserInfoButton");
+ widgets->UserLogButton=yon_gtk_builder_get_widget(builder,"UserLogButton");
+ widgets->UserEditButton=yon_gtk_builder_get_widget(builder,"UserEditButton");
+ widgets->UserStatusButton=yon_gtk_builder_get_widget(builder,"UserStatusButton");
+ widgets->UserServiceLabel=yon_gtk_builder_get_widget(builder,"UserServiceLabel");
+ widgets->UserDescriptionLabel=yon_gtk_builder_get_widget(builder,"UserDescriptionLabel");
+ widgets->UserMenu = yon_rmb_menu_setup(widgets->UserUnitsTree,NULL,NULL,
+ RESTART_LABEL,update_icon_path,G_CALLBACK(on_system_restart_clicked),widgets,
+ STATUS_LABEL,status_icon_path,on_user_info_clicked,widgets,
+ SHOW_LOG_LABEL,log_icon_path,on_user_log_clicked,widgets,
+ SHOW_SOURCE_LABEL,source_icon_path,on_user_edit_clicked,widgets,
+ PROPERTIES_LABEL,properties_icon_path,on_user_status_clicked,widgets,
+ NULL);
+
+ widgets->ConfigEditButton=yon_gtk_builder_get_widget(builder,"ConfigEditButton");
+ widgets->ConfigMainTree=yon_gtk_builder_get_widget(builder,"ConfigMainTree");
+
+ widgets->SessionMainTree=yon_gtk_builder_get_widget(builder,"SessionMainTree");
+ 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,
+ BLOCK_SESSION_LABEL,block_icon_path,G_CALLBACK(on_session_block),widgets,
+ NULL);
+ {
+ 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");
+ g_list_free(list);
+ }
+ {
+ GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->UserMenu->menu));
+ gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorTop");
+ g_list_free(list);
+ }
+ widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel");
+ widgets->SystemDescriptionLabel=yon_gtk_builder_get_widget(builder,"SystemDescriptionLabel");
+ }
+ widgets->TimersMainTree=yon_gtk_builder_get_widget(builder,"TimersMainTree");
+ 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));
+
+ g_signal_connect(G_OBJECT(widgets->SystemPrevButton),"clicked",G_CALLBACK(on_system_update_hz_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemUpdateButton),"clicked",G_CALLBACK(on_system_update_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemInfoButton),"clicked",G_CALLBACK(on_system_info_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemLogButton),"clicked",G_CALLBACK(on_system_log_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemEditButton),"clicked",G_CALLBACK(on_system_edit_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemStatusButton),"clicked",G_CALLBACK(on_system_status_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets);
+
+ g_signal_connect(G_OBJECT(widgets->UserPrevButton),"clicked",G_CALLBACK(on_user_update_hz_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserUpdateButton),"clicked",G_CALLBACK(on_user_update_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserInfoButton),"clicked",G_CALLBACK(on_user_info_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserLogButton),"clicked",G_CALLBACK(on_user_log_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserEditButton),"clicked",G_CALLBACK(on_user_edit_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserStatusButton),"clicked",G_CALLBACK(on_user_status_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),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->SessionStartButton),"clicked",G_CALLBACK(on_session_activate),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->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->ConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->ConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->ConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),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);
+ if (getuid()==0){
+ g_signal_connect(G_OBJECT(widgets->SystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->SystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets);
+
+ g_signal_connect(G_OBJECT(widgets->UserSystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserSystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets);
+ } else {
+ gtk_widget_set_sensitive(widgets->SystemUpdateButton,0);
+ gtk_widget_set_sensitive(widgets->UserUpdateButton,0);
+ gtk_widget_set_sensitive(widgets->SystemPrevButton,0);
+ gtk_widget_set_sensitive(widgets->UserPrevButton,0);
+ }
+ yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UserUnitsTree));
+ yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree));
+ yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->ConfigMainTree));
+ yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SessionMainTree));
+ yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->TimersMainTree));
+ g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->SystemUnloadedShowCheck);
+ g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->UserUnloadedShowCheck);
+ for (unsigned int i=0;iUserUnitsTree));
+ for (unsigned int i=0;iConfigMainTree));
+ for (unsigned int i=0;iSessionMainTree));
+ for (unsigned int i=0;iTimersMainTree));
+ for (unsigned int i=0;iLoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
+ g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets);
g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL);
g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL);
g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL);
- g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets);
- g_list_free(list);
- main_config.ServiceFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL);
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.ServiceFilter),(GtkTreeModelFilterVisibleFunc)on_service_filter,NULL,NULL);
- main_config.SocketFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL);
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.SocketFilter),(GtkTreeModelFilterVisibleFunc)on_socket_filter,NULL,NULL);
- main_config.AutolaunchFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL);
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.AutolaunchFilter),(GtkTreeModelFilterVisibleFunc)on_autostart_filter,NULL,NULL);
- main_config.StoppedFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL);
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.StoppedFilter),(GtkTreeModelFilterVisibleFunc)on_stopped_filter,NULL,NULL);
- main_config.BlockedFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL);
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter),(GtkTreeModelFilterVisibleFunc)on_blocked_filter,NULL,NULL);
- gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->MainTree),GTK_ENTRY(widgets->SearchEntry));
+ g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL);
+ g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->UserUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets);
+ GtkWidget *root_item = gtk_menu_item_new();
+ gtk_style_context_add_class(gtk_widget_get_style_context(root_item),"menuitemtop");
+ gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle");
+ gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop");
+ GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
+ GtkWidget *root_label = gtk_label_new(ROOT_CHECK_LABEL);
+ GtkWidget *root_check = gtk_check_button_new();
+ gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->DocumentationMenuItem)),root_item);
+ gtk_box_pack_start(GTK_BOX(box),root_label,1,1,0);
+ gtk_box_pack_start(GTK_BOX(box),root_check,0,0,0);
+ gtk_container_add(GTK_CONTAINER(root_item),box);
+ gtk_widget_show_all(root_item);
+ g_signal_connect(G_OBJECT(root_item),"activate", G_CALLBACK(on_root_access),widgets);
+ if (getuid()==0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(root_check),1);
+ gtk_widget_set_sensitive(root_item,0);
+ }
+ 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);
+ 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);
if (!main_config.update_thread_active){
main_config.update_thread_active=1;
- gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
+ pthread_t tid;
+ pthread_create(&tid,NULL,(void*)(void*)((yon_interface_update)),widgets);
}
+ yon_save_window_set_postsave_function(on_save_done,widgets);
}
int main(int argc, char *argv[]){
@@ -833,6 +1634,15 @@ int main(int argc, char *argv[]){
gtk_init(&argc,&argv);
template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
+ char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
+ yon_window_config_load(path);
+ if (getuid()!=0){
+ textdomain(template_ui_LocaleName);
+ yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ textdomain(LocaleName);
+ }
+ main_config.launch_arguments=argv;
+ main_config.launch_size=argc;
gtk_main();
return 0;
}
\ No newline at end of file
diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h
index a98cd69..62429f2 100644
--- a/source/ubl-settings-services.h
+++ b/source/ubl-settings-services.h
@@ -13,6 +13,7 @@
#include
#include
#include
+#include
#ifdef WEBKIT_FOUND
#include
#endif
@@ -23,8 +24,7 @@
#define _(String) gettext(String)
#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-log.glade"
+#define glade_path_log "/com/ublinux/ui/ubl-settings-services-terminal.glade"
#define banner_path "/com/ublinux/images/ubl-settings-services-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-services.css"
@@ -33,20 +33,84 @@
#define LocalePath "/usr/share/locale"
#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_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_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_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_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_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:"
+#define load_launched_command "systemctl list-units --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:"
#define service_start_command(target) yon_char_append("systemctl start --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_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_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 user_service_info_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ status -l --no-pager ",target,NULL)
+#define user_get_log_command(target) yon_char_unite("usermod -a -G systemd-journal ",yon_ubl_root_user_get(),";journalctl --user -u --all --no-pager --unit ",target,NULL)
+#define user_show_source_command(target) yon_char_unite("systemctl edit --full ",target,NULL)
+#define user_properties_command(target) yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ show --no-pager ",target,NULL)
+
+#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_timers_command "systemctl list-timers --all --no-pager --plain --no-legend --output=json"
+
+#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 yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL)
+#define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK"
+#define config_get_global_command yon_char_new("ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK")
+#define config_get_default_command ""
+
+#define config_get_global_only_parameters ""
+#define config_get_local_only_parameters ""
+
+#define SERVICES_ENABLE_get_command "ubconfig --source global get [system] SERVICES_ENABLE"
+#define SERVICES_DISABLE_get_command "ubconfig --source global get [system] SERVICES_DISABLE"
+#define SERVICES_MASK_get_command "ubconfig --source global get [system] SERVICES_MASK"
+#define CONSOLE_FONT_get_command "ubconfig --source global get [locale] CONSOLE_FONT"
+
+#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 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"
+#define log_icon_path "com.ublinux.ubl-settings-services.lookup-symbolic"
+#define source_icon_path "com.ublinux.ubl-settings-services.source-symbolic"
+#define properties_icon_path "com.ublinux.ubl-settings-services.properties-symbolic"
+#define status_icon_path "com.ublinux.ubl-settings-services.important-symbolic"
+
+#define reload_systemd_root_command "systemctl daemon-reload"
+#define reexec_systemd_root_command "systemctl daemon-reexec"
+
+#define reload_systemd_user_command "systemctl --user daemon-reload"
+#define reexec_systemd_user_command "systemctl --user daemon-reexec"
+
+#define session_activate_session(target) yon_char_append("loginctl activate ",target)
+#define session_terminate_session(target) yon_char_append("loginctl terminate-session ",target)
+#define session_lock_session(target) yon_char_append("loginctl lock-session ",target)
+#define session_unlock_session(target) yon_char_append("loginctl unlock-session ",target)
+
+#define SERVICES_ENABLE_PARAMETER "SERVICES_ENABLE"
+#define SERVICES_DISABLE_PARAMETER "SERVICES_DISABLE"
+#define SERVICES_MASK_PARAMETER "SERVICES_MASK"
typedef char* string;
string version_application;
@@ -54,22 +118,7 @@ string version_application;
char *local;
typedef struct {
-// Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT {
- int socket_id;
- int load_socket_id;
- int save_socket_id;
-
- int lock_help;
- int lock_save_local;
- int lock_save_global;
- int lock_load_global;
- int lock_load_system;
-
- int load_mode;
-
- int always_open_documentation;
-// } Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT
-// Type custom parameters below:
+ template_config_fields
int rmb_clicked;
GtkTreeModel *ServiceFilter;
GtkTreeModel *SocketFilter;
@@ -79,72 +128,86 @@ typedef struct {
GtkTreeModel *SourceFilter;
int update_thread_active;
+ config_str launch_arguments;
+ int launch_size;
+ int save_config;
} config;
-
-typedef struct {
- GtkWidget *Menu;
- GtkWidget *MenuConfigAutostart;
- GtkWidget *MenuConfigAutostop;
- GtkWidget *MenuConfigBlock;
- GtkWidget *MenuSystemAutostart;
- GtkWidget *MenuSystemLaunched;
- GtkWidget *MenuReloadConfig;
- GtkWidget *MenuStatus;
-} menu_obj;
typedef struct {
-// Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT {
- GtkWidget *Window;
- GtkWidget *HeadLabel;
- GtkWidget *PlugBox;
-
- GtkWidget *HeadOverlay;
- GtkWidget *HeadImage;
- GtkWidget *HeadBox;
- GtkWidget *HeadTitleLabel;
- GtkWidget *HeadInfoLabel;
-
- GtkWidget *StatusBox;
- GtkWidget *StatusIcon;
- GtkWidget *StatusLabel;
-
- GtkWidget *SaveMenuItem;
- GtkWidget *SaveGlobalMenuItem;
- GtkWidget *SaveLocalMenuItem;
- GtkWidget *RightBox;
-
- GtkWidget *LoadGlobalMenuItem;
- GtkWidget *LoadLocalMenuItem;
- GtkWidget *LeftBox;
-
- GtkWidget *DocumentationMenuItem;
- GtkWidget *AboutMenuItem;
-
- GtkWidget *InterfaceBox;
-// } Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT
-// Type custom parameters below:
- GtkListStore *liststore1;
- GtkListStore *liststore2;
+ template_window_fields
+ GtkListStore *UserList;
+ GtkListStore *TimersList;
+ GtkListStore *SessionsList;
+ GtkListStore *ConfigList;
+ GtkListStore *SystemList;
GtkWidget *BoxMain;
- GtkWidget *ServiceSourceCombo;
- GtkWidget *ServiceTypeCombo;
- GtkWidget *SearchEntry;
- GtkWidget *UpdateButton;
- GtkWidget *ConfigAutostartButton;
- GtkWidget *ConfigAutostopButton;
- GtkWidget *ConfigBlockButton;
- GtkWidget *SystemAutostartButton;
- GtkWidget *SystemLaunchButton;
- GtkWidget *InfoButton;
- GtkWidget *LogButton;
- GtkWidget *MainUpperTree;
- GtkWidget *MainTree;
- GtkWidget *RMBMenu;
- menu_obj *menu;
- GtkWidget *ServiceLabel;
- GtkWidget *DescriptionLabel;
+
+ GtkWidget *SystemSearchEntry;
+ GtkWidget *SystemFiltersCombo;
+ GtkWidget *SystemInactiveShowCheck;
+ GtkWidget *SystemUnloadedShowCheck;
+ GtkWidget *SystemUpperTree;
+ GtkWidget *SystemUnitsTree;
+ GtkWidget *SystemPrevButton;
+ GtkWidget *SystemUpdateButton;
+ GtkWidget *SystemInfoButton;
+ GtkWidget *SystemLogButton;
+ GtkWidget *SystemEditButton;
+ GtkWidget *SystemPropertiesButton;
+ GtkWidget *SystemStatusButton;
+ rmb_menu_window *SystemMenu;
+ GtkWidget *SystemServiceLabel;
+ GtkWidget *SystemDescriptionLabel;
+
+ GtkWidget *UserSearchEntry;
+ GtkWidget *UserFiltersCombo;
+ GtkWidget *UserInactiveShowCheck;
+ GtkWidget *UserUnloadedShowCheck;
+ GtkWidget *UsersUpperTree;
+ GtkWidget *UserUnitsTree;
+ GtkWidget *UserPrevButton;
+ GtkWidget *UserUpdateButton;
+ GtkWidget *UserInfoButton;
+ GtkWidget *UserLogButton;
+ GtkWidget *UserEditButton;
+ GtkWidget *UserStatusButton;
+ rmb_menu_window *UserMenu;
+ GtkWidget *UserServiceLabel;
+ GtkWidget *UserDescriptionLabel;
+
+ GtkWidget *ConfigEditButton;
+ GtkWidget *ConfigMainTree;
+
+ GtkWidget *SessionMainTree;
+ GtkWidget *SessionStartButton;
+ GtkWidget *SessionStopButton;
+ GtkWidget *SessionBlockButton;
+ rmb_menu_window *SessionMenu;
+
+ GtkWidget *TimersMainTree;
+ GtkWidget *MainNotebook;
+
+ GtkWidget *SystemServicesStatusMenuItem;
+ GtkWidget *UserServicesStatusMenuItem;
+ GtkWidget *InstalledUnitsStatusMenuItem;
+ GtkWidget *UnitsStatusListMenuItem;
+ GtkWidget *SocketsStatusListMenuItem;
+ GtkWidget *TimersStatusListMenuItem;
+ GtkTreeModelFilter *SystemFilter;
+ GtkTreeModelFilter *UserFilter;
+ GtkCellRenderer *ConfigAutostartCell;
+ GtkCellRenderer *ConfigAutostopCell;
+ GtkCellRenderer *ConfigBlockCell;
+ GtkCellRenderer *SystemAutostartCell;
+ GtkCellRenderer *SystemLaunchedCell;
+
+ GtkCellRenderer *UserConfigAutostartCell;
+ GtkCellRenderer *UserConfigAutostopCell;
+ GtkCellRenderer *UserConfigBlockCell;
+ GtkCellRenderer *UserSystemAutostartCell;
+ GtkCellRenderer *UserSystemLaunchedCell;
} main_window;
typedef struct {
@@ -175,18 +238,16 @@ typedef struct{
GtkWidget *MainTree;
} bl_settings_services_window;
-typedef struct {
- GtkWidget *Window;
- GtkWidget *UpdateButton;
- GtkWidget *SystemTerminal;
- GtkWidget *webHeaderNameLabel;
- char *target;
-} terminal_window;
-
typedef struct {
GtkWidget *Window;
GtkWidget *SystemTerminal;
+ GtkWidget *TerminalScroll;
+ GtkWidget *TextEditor;
GtkWidget *webHeaderNameLabel;
+ GtkWidget *UpdateButton;
+ GtkWidget *SaveButton;
+ GtkWidget *StatusBox;
+ GtkAdjustment *adjustment;
char *target;
} log_window;
@@ -194,14 +255,35 @@ void on_config_local_load(GtkWidget *self,main_window *widgets);
void on_config_global_load(GtkWidget *self,main_window *widgets);
+void on_config_custom_load(GtkWidget *self,main_window *widgets);
+
void on_config_global_local_save();
void on_config_local_save();
void on_config_global_save();
+void on_config_custom_save(GtkWidget *self, main_window *widgets);
+
+void on_service_constant_update();
+
log_window *yon_log_window_new();
+gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets);
+void on_filter_changed(GtkWidget *self, main_window *widgets);
+
+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);
GtkWidget *yon_menu_button_create(char *icon_name, char *text);
@@ -212,19 +294,70 @@ gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window
GtkWidget *yon_menu_separator_create();
-void on_config_autostart_clicked();
+void on_config_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets);
void on_activate(GtkTreeView *self, main_window *widgets);
-void on_config_autostop_clicked();
+void on_config_autostop_clicked(GtkCellRenderer *self, char *path, main_window *widgets);
-void on_config_block_clicked();
+void on_config_block_clicked(GtkCellRenderer *self, char *path, main_window *widgets);
-void on_system_autostart_clicked();
+void on_system_autostart_clicked(GtkCellRenderer *self, char *path, main_window *widgets);
void on_system_kill_confirmed(GtkWidget *self,char *service_name);
-void on_system_launch_clicked();
+void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets);
+
+void on_system_restart_clicked(GtkWidget *self, main_window *widgets);
+
+void on_source_show();
+
+void on_properties_show();
+
+void yon_sessions_update(main_window *widgets);
+
+void on_session_activate();
+
+void on_session_end();
+
+void on_session_block();
+
+void yon_system_systemd_restart(GtkWidget *self, main_window *widgets);
+void yon_user_systemd_restart(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_info_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_filter_changed(GtkWidget *self, main_window *widgets);
+
+void on_system_status_clicked(GtkWidget *self, main_window *widgets);
+
+void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets);
+
+void on_user_update_clicked(GtkWidget *self, main_window *widgets);
+
+void on_user_info_clicked(GtkWidget *self, main_window *widgets);
+
+void on_user_log_clicked(GtkWidget *self, main_window *widgets);
+
+void on_user_edit_clicked(GtkWidget *self, main_window *widgets);
+
+void on_user_status_clicked(GtkWidget *self, main_window *widgets);
+
+void on_config_log_save(GtkWidget *self, log_window *window);
+void on_config_edit_clicked(GtkWidget *self, main_window *widgets);
gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data);
@@ -268,6 +401,7 @@ gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data
gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
-terminal_window *yon_terminal_window_new();
+void on_root_get_root(char *argline);
+void on_root_access(GtkWidget *self, main_window *widgets);
-void on_service_update(GtkWidget *self, terminal_window* window);
\ No newline at end of file
+void on_save_done(main_window *widgets, config_str output, int size);
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index ecc6005..971fb69 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -44,6 +44,100 @@
#define LAUNCHED_LABEL _("Launched")
#define LIST_LOAD_LABEL _("Service list is loading")
#define STATUS_LABEL _("Status")
+#define RESTART_LABEL _("Restart with new configuration")
+#define SHOW_LOG_LABEL _("Show log")
+#define SHOW_SOURCE_LABEL _("Show source")
+#define PROPERTIES_LABEL _("Properties")
+#define ACTIVATE_SESSION_LABEL _("Activate session")
+#define END_SESSION_LABEL _("End session")
+#define BLOCK_SESSION_LABEL _("Block session")
+
+#define SOURCE_UNFOUND_LABEL _("Service source were not loaded")
+
+#define SAVING_LABEL _("Saving...")
+#define SAVED_LABEL _("Saved")
+#define ERROR_LABEL _("Error has occured")
#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)
\ No newline at end of file
+#define REEXEC_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to restart "),target,"?\n",_("The system may become unstable."),NULL)
+#define RELOAD_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to reload "),target,"?\n",_("The system may become unstable."),NULL)
+#define DAYS_LABEL _("Days")
+#define HOURS_LABEL _("Hours")
+#define MINUTES_LABEL _("Minutes")
+#define SECONDS_LABEL _("Seconds")
+
+#define ACTIVE_LABEL _("Active")
+#define INACTIVE_LABEL _("Inactive")
+
+#define SYSTEM_UNITS_LABEL _("System units")
+#define USER_UNITS_LABEL _("User units")
+#define CONFIG_FILES_LABEL _("Config files")
+#define SESSIONS__LABEL _("Sessions")
+#define TIMERS_LABEL _("Timers")
+
+#define SYSTEM_STATUS_LABEL _("System services status")
+#define USER_STATUS_LABEL _("User services status")
+#define INSTALLED_UNIT_LABEL _("Installed unit files")
+#define UNITS_LIST_LABEL _("Units and status list")
+#define SOCKETS_LIST_LABEL _("Sockets and status list")
+#define TIMERS_LIST_LABEL _("Timers and status list")
+
+#define UNIT_LABEL _("Unit")
+
+#define RELAUNCH_SYSTEMCTL_LABEL _("Relaunch systemctl")
+#define REEXEC_SYSTEMCTL_LABEL _("Reexec systemctl")
+#define SHOW_SERVICE_INFO_LABEL _("Show service information")
+#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 EDIT_CONFIG_LABEL _("Edit configuration file")
+
+#define SHOW_INACTIVE_LABEL _("Show inactive")
+#define SHOW_UNLOADED_LABEL _("Show unloaded")
+
+#define FILE_LABEL _("File")
+#define CHANGE_DATE_LABEL _("Change date")
+#define DESCRIPTION_TAB_LABEL _("Description")
+#define EDIT_LABEL _("Edit")
+
+#define SESSION_ID_LABEL _("Session ID")
+#define USER_ID_LABEL _("User ID")
+#define USER_NAME_LABEL _("User name")
+#define SEAT_ID_LABEL _("Seat ID")
+
+#define SESSION_START_LABEL _("Start session")
+#define SESSION_END_LABEL _("Stop session")
+#define SESSION_LOCK_LABEL _("Lock session")
+
+#define TIMER_LABEL _("Timer")
+#define NEXT_LABEL _("Next")
+#define LEFT_LABEL _("Left")
+#define LAST_LABEL _("Last")
+#define PASSED_LABEL _("Passed")
+#define ACTIVATES_LABEL _("Activates")
+
+#define STATE_ACTIVE_LABEL _("active")
+#define STATE_DEAD_LABEL _("dead")
+#define STATE_WAITING_LABEL _("waiting")
+#define STATE_RUNNING_LABEL _("running")
+#define STATE_LISTENING_LABEL _("listening")
+#define STATE_EXITED_LABEL _("exited")
+#define STATE_MOUNTED_LABEL _("mounted")
+#define STATE_PLUGGED_LABEL _("plugged")
+#define STATE_ABANDONED_LABEL _("abandoned")
+
+#define ROOT_CHECK_LABEL _("Upgrade to root")
+
+#define SERVICE_STATE_TITLE_LABEL(target) yon_char_append(_("State of "),target)
+#define SERVICE_LOG_TITLE_LABEL(target) yon_char_unite(_("View")," ",target," ",_("log"),NULL)
+#define SERVICE_UNIT_EDIT_TITLE_LABEL _("Edit unit file")
+
+#define SYSTEMD_REEXEC_ERROR_LABEL _("Failed to re-execute systemd")
+#define SYSTEMD_RELAUNCH_ERROR_LABEL _("failed to relaunch systemd")
+
+#define SYSTEMD_REEXEC_SUCCESS_LABEL _("Systemd has been re-executed")
+#define SYSTEMD_RELAUNCH_SUCCESS_LABEL _("Systemd has been relaunched")
+
+#define SAVE_LABEL _("Save")
\ No newline at end of file
diff --git a/ubl-settings-services-log.glade b/ubl-settings-services-log.glade
deleted file mode 100644
index 9b05667..0000000
--- a/ubl-settings-services-log.glade
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/ubl-settings-services-terminal.glade b/ubl-settings-services-terminal.glade
index ba2cd2f..e43daa6 100644
--- a/ubl-settings-services-terminal.glade
+++ b/ubl-settings-services-terminal.glade
@@ -14,6 +14,12 @@
False
com.ublinux.ubl-settings-services.sync-symbolic
+
+ True
+ False
+ com.ublinux.ubl-settings-services.save-symbolic
+
+
800
600
@@ -23,32 +29,14 @@
True
False
- 5
- 5
- 5
- 5
- 5
+ vertical
-
+
True
False
vertical
-
- True
- True
- True
- Update
- image1
-
-
-
- False
- True
- 0
-
+
@@ -61,35 +49,126 @@
True
False
+ 5
+ 5
+ 5
+ 5
5
-
+
True
- False
- True
- natural
- adjustment1
- natural
- UTF-8
- 0
- True
- False
+ False
+ vertical
+ 5
+
+
+ True
+ True
+ True
+ Update
+ image1
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+ Save
+ image2
+
+
+
+ False
+ True
+ 1
+
+
- True
+ False
True
0
-
+
True
False
- vertical
- adjustment1
+ 5
+
+
+ True
+ False
+
+
+ True
+ False
+ True
+ natural
+ adjustment1
+ natural
+ UTF-8
+ 0
+ True
+ False
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ False
+ vertical
+ adjustment1
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ in
+
+
+ True
+ True
+ textbuffer1
+
+
+
+
+ True
+ True
+ 2
+
+
- False
+ True
True
1
diff --git a/ubl-settings-services.css b/ubl-settings-services.css
index fee529c..1ca94fe 100644
--- a/ubl-settings-services.css
+++ b/ubl-settings-services.css
@@ -118,12 +118,18 @@ background:transparent;
border-style:solid;
}
-.sepat{
+.separatorTop{
border-color: darker (@theme_bg_color);
border-top-width:1px;
border-style:solid;
}
+.separatorBottom{
+ border-color: darker (@theme_bg_color);
+ border-bottom-width:1px;
+ border-style:solid;
+}
+
.marginright image{
margin-right: 2px;
}
diff --git a/ubl-settings-services.desktop b/ubl-settings-services.desktop
index 3df33d6..494dca1 100644
--- a/ubl-settings-services.desktop
+++ b/ubl-settings-services.desktop
@@ -7,7 +7,7 @@ GenericName[ru]=Службы и процесссы systemd
Comment=System cervices and processes configuration
Comment[ru]=Настройка работы служб и процессов системы
Type=Application
-Exec=pkexec ubl-settings-services
+Exec=ubl-settings-services
Icon=com.ublinux.ubl-settings-services
Terminal=false
X-XfcePluggable=true
diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade
index ce0ef08..5d0fa4e 100644
--- a/ubl-settings-services.glade
+++ b/ubl-settings-services.glade
@@ -3,155 +3,407 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SystemList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserList
+
True
False
- com.ublinux.ubl-settings-services.play-symbolic
+ com.ublinux.ubl-settings-services.sync-time-symbolic
-
+
True
False
com.ublinux.ubl-settings-services.stop-symbolic
-
+
True
False
- com.ublinux.ubl-settings-services.cancel-uncolored-symbolic
+ com.ublinux.ubl-settings-services.play-symbolic
-
+
True
False
- com.ublinux.ubl-settings-services.launch-symbolic
+ com.ublinux.ubl-settings-services.edit-symbolic
-
+
True
False
- com.ublinux.ubl-settings-services.check-symbolic
+ com.ublinux.ubl-settings-services.sync-time-symbolic
-
+
+ True
+ False
+ com.ublinux.ubl-settings-services.sync-symbolic
+
+
True
False
com.ublinux.ubl-settings-services.important-symbolic
-
+
+ True
+ False
+ com.ublinux.ubl-settings-services.lookup-symbolic
+
+
+ True
+ False
+ com.ublinux.ubl-settings-services.source-symbolic
+
+
+ True
+ False
+ com.ublinux.ubl-settings-services.properties-symbolic
+
+
+ True
+ False
+ com.ublinux.ubl-settings-services.important-symbolic
+
+
True
False
com.ublinux.ubl-settings-services.lookup-symbolic
+
+ True
+ False
+ com.ublinux.ubl-settings-services.source-symbolic
+
+
+ True
+ False
+ com.ublinux.ubl-settings-services.properties-symbolic
+
True
False
com.ublinux.ubl-settings-services.sync-symbolic
+
+ True
+ False
+ com.ublinux.ubl-settings-services.lock-symbolic
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
True
False
vertical
-
+
True
- False
- 0.019999999552965164
- in
+ True
-
+
True
False
- 5
- 5
- 5
+ 5
+ 5
+ 5
+ 5
+ vertical
+ 5
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ 0
+
+ - All
+ - Autolaunch in configuration
+ - Stopped in configuration
+ - Blocked in configuration
+ - service
+ - swap
+ - socket
+ - target
+ - device
+ - automount
+ - timer
+ - slice
+ - path
+ - scope
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ Show inactive
+ True
+ True
+ False
+ True
+
+
+ False
+ True
+ 1
+
+
+
+
+ Show unloaded
+ True
+ False
+ True
+ False
+ True
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ True
+ edit-find-symbolic
+ False
+ False
+
+
+ True
+ True
+ 3
+
+
+
+
+ False
+ True
+ 0
+
+
True
False
- vertical
5
True
False
+ vertical
5
-
+
True
- False
- 0
-
- - All services
- - System services only
- - User services only
-
+ True
+ True
+ Relaunch systemctl
+ image1
+
- True
+ False
True
0
-
+
True
- False
- 0
-
- - All
- - Services
- - Sockets
- - Autolaunch in configuration
- - Stopped in configuration
- - Blocked in configuration
-
+ True
+ True
+ Reexec systemctl
+ image8
+
- True
+ False
True
1
-
+
True
- True
- edit-find-symbolic
- False
- False
+ False
- True
+ False
True
2
-
+
True
+ False
True
True
- Update
- image8
+ Show service information
+ image3
@@ -162,179 +414,109 @@
3
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 5
-
+
True
- False
- vertical
- 5
-
-
- True
- False
- True
- True
- Toggle autostart at configuration
- image1
-
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- True
- True
- Toggle autostop at configuration
- image2
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- True
- True
- Toggle service blocking at configuration
- image3
-
-
-
- False
- True
- 2
-
-
-
-
- True
- False
-
-
- False
- True
- 3
-
-
-
-
- True
- False
- True
- True
- Toggle autostart at system
- image4
-
-
-
- False
- True
- 4
-
-
-
-
- True
- False
- True
- True
- Launch/Stop service
- image5
-
-
-
- False
- True
- 5
-
-
+ False
+ True
+ True
+ Show service log
+ image4
+
+
+
+ False
+ True
+ 4
+
+
+
+
+ True
+ False
+ True
+ True
+ Show service source file
+ image5
+
+
+
+ False
+ True
+ 5
+
+
+
+
+ True
+ False
+ True
+ True
+ Show service properties
+ image7
+
+
+
+ False
+ True
+ 6
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 7
+
+
+
+
False
True
- 0
+ 8
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ vertical
+ 5
True
@@ -347,7 +529,7 @@
False
vertical
-
+
True
True
liststore1
@@ -385,10 +567,10 @@
True
True
-
+
True
True
- liststore2
+ SystemList
5
horizontal
@@ -398,9 +580,10 @@
True
fixed
+ 20
Autostart
-
+
0
@@ -411,9 +594,10 @@
True
fixed
+ 20
Autostop
-
+
1
@@ -424,9 +608,10 @@
True
fixed
+ 20
Block
-
+
2
@@ -437,9 +622,10 @@
True
fixed
+ 20
Autostart
-
+
3
@@ -450,9 +636,10 @@
True
fixed
+ 20
Launched
-
+
4
@@ -461,7 +648,23 @@
- autosize
+ True
+ 10
+ 20
+ Unit
+
+
+
+ 11
+
+
+
+
+
+
+ True
+ fixed
+ 20
@@ -489,54 +692,6 @@
True
True
- 1
-
-
-
-
- True
- True
- 1
-
-
-
-
- True
- False
- vertical
- 5
-
-
- True
- False
- 5
-
-
- True
- False
- Service:
-
-
- False
- True
- 0
-
-
-
-
- True
- False
-
-
- False
- True
- 1
-
-
-
-
- False
- True
0
@@ -544,12 +699,36 @@
True
False
+ vertical
5
-
+
True
False
- Description:
+ 5
+
+
+ True
+ False
+ Service:
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
False
@@ -558,10 +737,34 @@
-
+
True
False
- True
+ 5
+
+
+ True
+ False
+ Description:
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ True
+
+
+ False
+ True
+ 1
+
+
False
@@ -578,28 +781,1029 @@
- False
+ True
True
- 2
+ 1
+
+ True
+ True
+ 1
+
-
+
True
False
- Services
+ System units
+
+ False
+
-
-
- True
- True
- 0
-
-
+
+
+ True
+ False
+ 5
+ 5
+ 5
+ 5
+ vertical
+ 5
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ 0
+
+ - All
+ - Autolaunch in configuration
+ - Stopped in configuration
+ - Blocked in configuration
+ - service
+ - swap
+ - socket
+ - target
+ - device
+ - automount
+ - timer
+ - path
+ - slice
+ - scope
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ Show inactive
+ True
+ True
+ False
+ True
+
+
+ False
+ True
+ 1
+
+
+
+
+ Show unloaded
+ True
+ False
+ True
+ False
+ True
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ True
+ edit-find-symbolic
+ False
+ False
+
+
+ True
+ True
+ 3
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ vertical
+ 5
+
+
+ True
+ True
+ True
+ Relaunch systemctl
+ image13
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+ True
+ Reexec systemctl
+ image14
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ False
+ True
+ True
+ Show service information
+ image15
+
+
+
+ False
+ True
+ 3
+
+
+
+
+ True
+ False
+ True
+ True
+ Show service log
+ image16
+
+
+
+ False
+ True
+ 4
+
+
+
+
+ True
+ False
+ True
+ True
+ Show service source file
+ image17
+
+
+
+ False
+ True
+ 5
+
+
+
+
+ True
+ False
+ True
+ True
+ Show service properties
+ image18
+
+
+
+ False
+ True
+ 7
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ vertical
+ 5
+
+
+ True
+ False
+ 0.019999999552965164
+ in
+
+
+ True
+ False
+ vertical
+
+
+ True
+ True
+ liststore1
+
+
+
+
+
+ Configure in configuration
+
+
+
+
+ Configure in system
+
+
+
+
+ Service
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+
+
+ True
+ True
+ UserList
+ 5
+ horizontal
+
+
+
+
+
+ True
+ fixed
+ 20
+ Autostart
+
+
+
+ 0
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Autostop
+
+
+
+ 1
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Block
+
+
+
+ 2
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Autostart
+
+
+
+ 3
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Launched
+
+
+
+ 4
+
+
+
+
+
+
+ True
+ 10
+ 20
+ Unit
+
+
+
+ 11
+
+
+
+
+
+
+ autosize
+ 20
+
+ True
+
+
+
+ 5
+
+
+
+
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+
+
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ False
+ vertical
+ 5
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ Service:
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ Description:
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ 1
+
+
+
+
+ True
+ False
+ User units
+
+
+ 1
+ False
+
+
+
+
+ True
+ False
+ 5
+ 5
+ 5
+ 5
+ 5
+
+
+ True
+ False
+ vertical
+
+
+ True
+ True
+ True
+ Edit configuration file
+ image12
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 0
+ in
+
+
+ True
+ True
+
+
+ True
+ True
+ ConfigList
+
+
+
+
+
+ True
+ fixed
+ 20
+ File
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Change date
+ 1
+
+
+
+ 1
+
+
+
+
+
+
+ 20
+ Description
+ True
+ 2
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ 2
+
+
+
+
+ True
+ False
+ Config files
+
+
+ 2
+ False
+
+
+
+
+ True
+ False
+ 5
+ 5
+ 5
+ 5
+ 5
+
+
+ True
+ False
+ vertical
+ 5
+
+
+ True
+ True
+ True
+ image11
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+ True
+ image10
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ True
+ True
+ image9
+
+
+
+ False
+ True
+ 2
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 0
+ in
+
+
+ True
+ True
+
+
+ True
+ True
+ SessionsList
+
+
+
+
+
+ True
+ fixed
+ 20
+ Session ID
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Status
+ 1
+
+
+
+ 1
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ User ID
+ 2
+
+
+
+ 2
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ User name
+ 3
+
+
+
+ 3
+
+
+
+
+
+
+ 20
+ Seat ID
+ True
+ 4
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ 3
+
+
+
+
+ True
+ False
+ Sessions
+
+
+ 3
+ False
+
+
+
+
+ True
+ False
+ 5
+ 5
+ 5
+ 5
+ vertical
+
+
+ True
+ False
+ 0.019999999552965164
+ in
+
+
+ True
+ True
+
+
+ True
+ True
+ TimersList
+
+
+
+
+
+ True
+ fixed
+ 20
+ Timer
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Next
+ 1
+
+
+
+ 1
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Left
+ 2
+
+
+
+ 2
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Last
+ 3
+
+
+
+ 3
+
+
+
+
+
+
+ True
+ fixed
+ 20
+ Passed
+ 4
+
+
+
+ 4
+
+
+
+
+
+
+ 20
+ Activates
+ True
+ 5
+
+
+
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ 4
+
+
+
+
+ True
+ False
+ Timers
+
+
+ 4
+ False
+
+
+
+
+ True
+ True
+ 0
+
+
+
+
diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot
index 90c1107..04c881f 100644
--- a/ubl-settings-services.pot
+++ b/ubl-settings-services.pot
@@ -18,199 +18,449 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: source/ubl-strings.h:1
-msgid "Version:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "ubl-settings-services version:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Usage:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "[OPTIONS]"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Options:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Show this help"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Show package version"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock this help menu"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock configuration saving"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock local configration saving"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration saving"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration loading"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Reset application settings"
-msgstr ""
-
-#: source/ubl-strings.h:4
msgid "Services and processes systemd"
msgstr ""
-#: source/ubl-strings.h:5
+#: source/ubl-strings.h:2
msgid "System services and processes configuration"
msgstr ""
-#: source/ubl-strings.h:6
+#: source/ubl-strings.h:3
msgid "Services and processes - service information"
msgstr ""
-#: source/ubl-strings.h:8 source/ubl-strings.h:40
+#: source/ubl-strings.h:5 source/ubl-strings.h:37
msgid "Configure in configuration"
msgstr ""
-#: source/ubl-strings.h:9 source/ubl-strings.h:44
+#: source/ubl-strings.h:6 source/ubl-strings.h:41
msgid "Autostart"
msgstr ""
-#: source/ubl-strings.h:10 source/ubl-strings.h:45
+#: source/ubl-strings.h:7 source/ubl-strings.h:42
msgid "Autostop"
msgstr ""
-#: source/ubl-strings.h:11 source/ubl-strings.h:46
+#: source/ubl-strings.h:8 source/ubl-strings.h:43
msgid "Block"
msgstr ""
-#: source/ubl-strings.h:12 source/ubl-strings.h:41
+#: source/ubl-strings.h:9 source/ubl-strings.h:38
msgid "Configure in system"
msgstr ""
-#: source/ubl-strings.h:13 source/ubl-strings.h:47
+#: source/ubl-strings.h:10 source/ubl-strings.h:44
msgid "Launched"
msgstr ""
-#: source/ubl-strings.h:14
+#: source/ubl-strings.h:11
msgid "Reload"
msgstr ""
-#: source/ubl-strings.h:15
+#: source/ubl-strings.h:12
msgid "Show status"
msgstr ""
-#: source/ubl-strings.h:16
+#: source/ubl-strings.h:13
msgid "Update"
msgstr ""
-#: source/ubl-strings.h:18
+#: source/ubl-strings.h:15
msgid "All services"
msgstr ""
-#: source/ubl-strings.h:19
+#: source/ubl-strings.h:16
msgid "System services only"
msgstr ""
-#: source/ubl-strings.h:20
+#: source/ubl-strings.h:17
msgid "User services only"
msgstr ""
-#: source/ubl-strings.h:22
+#: source/ubl-strings.h:19
msgid "All"
msgstr ""
-#: source/ubl-strings.h:23
+#: source/ubl-strings.h:20
msgid "Services"
msgstr ""
-#: source/ubl-strings.h:24
+#: source/ubl-strings.h:21
msgid "Sockets"
msgstr ""
-#: source/ubl-strings.h:25
+#: source/ubl-strings.h:22
msgid "Autolaunch in configuration"
msgstr ""
-#: source/ubl-strings.h:26
+#: source/ubl-strings.h:23
msgid "Stopped in configuration"
msgstr ""
-#: source/ubl-strings.h:27
+#: source/ubl-strings.h:24
msgid "Blocked in configuration"
msgstr ""
-#: source/ubl-strings.h:29
+#: source/ubl-strings.h:26
msgid "Toggle autostart at configuration"
msgstr ""
-#: source/ubl-strings.h:30
+#: source/ubl-strings.h:27
msgid "Toggle autostop at configuration"
msgstr ""
-#: source/ubl-strings.h:31
+#: source/ubl-strings.h:28
msgid "Toggle service blocking at configuration"
msgstr ""
-#: source/ubl-strings.h:32
+#: source/ubl-strings.h:29
msgid "Toggle autostart at system"
msgstr ""
-#: source/ubl-strings.h:33
+#: source/ubl-strings.h:30
msgid "Launch/Stop service"
msgstr ""
-#: source/ubl-strings.h:34
+#: source/ubl-strings.h:31
msgid "Check service status"
msgstr ""
-#: source/ubl-strings.h:35
+#: source/ubl-strings.h:32
msgid "Check service log"
msgstr ""
-#: source/ubl-strings.h:37
+#: source/ubl-strings.h:34
msgid "Service:"
msgstr ""
-#: source/ubl-strings.h:38
+#: source/ubl-strings.h:35
msgid "Description:"
msgstr ""
-#: source/ubl-strings.h:42
+#: source/ubl-strings.h:39
msgid "Service"
msgstr ""
-#: source/ubl-strings.h:48
+#: source/ubl-strings.h:45
msgid "Service list is loading"
msgstr ""
-#: source/ubl-strings.h:49
+#: source/ubl-strings.h:46
msgid "Status"
msgstr ""
+#: source/ubl-strings.h:47
+msgid "Restart with new configuration"
+msgstr ""
+
+#: source/ubl-strings.h:48
+msgid "Show log"
+msgstr ""
+
+#: source/ubl-strings.h:49
+msgid "Show source"
+msgstr ""
+
+#: source/ubl-strings.h:50
+msgid "Properties"
+msgstr ""
+
#: source/ubl-strings.h:51
-msgid "Service were not stopped"
+msgid "Activate session"
msgstr ""
#: source/ubl-strings.h:52
-msgid "Are you sure want to stop "
+msgid "End session"
msgstr ""
-#: source/ubl-strings.h:52
-msgid ""
-"The stop will be forced.\n"
-"The system may become unstable."
+#: source/ubl-strings.h:53
+msgid "Block session"
+msgstr ""
+
+#: source/ubl-strings.h:55
+msgid "Service source were not loaded"
+msgstr ""
+
+#: source/ubl-strings.h:57
+msgid "Saving..."
+msgstr ""
+
+#: source/ubl-strings.h:58
+msgid "Saved"
+msgstr ""
+
+#: source/ubl-strings.h:59
+msgid "Error has occured"
+msgstr ""
+
+#: source/ubl-strings.h:61
+msgid "Service were not stopped"
+msgstr ""
+
+#: source/ubl-strings.h:62
+msgid "Are you sure want to restart "
+msgstr ""
+
+#: source/ubl-strings.h:62 source/ubl-strings.h:63
+msgid "The system may become unstable."
+msgstr ""
+
+#: source/ubl-strings.h:63
+msgid "Are you sure want to reload "
+msgstr ""
+
+#: source/ubl-strings.h:64
+msgid "Days"
+msgstr ""
+
+#: source/ubl-strings.h:65
+msgid "Hours"
+msgstr ""
+
+#: source/ubl-strings.h:66
+msgid "Minutes"
+msgstr ""
+
+#: source/ubl-strings.h:67
+msgid "Seconds"
+msgstr ""
+
+#: source/ubl-strings.h:69
+msgid "Active"
+msgstr ""
+
+#: source/ubl-strings.h:70
+msgid "Inactive"
+msgstr ""
+
+#: source/ubl-strings.h:72
+msgid "System units"
+msgstr ""
+
+#: source/ubl-strings.h:73
+msgid "User units"
+msgstr ""
+
+#: source/ubl-strings.h:74
+msgid "Config files"
+msgstr ""
+
+#: source/ubl-strings.h:75
+msgid "Sessions"
+msgstr ""
+
+#: source/ubl-strings.h:76
+msgid "Timers"
+msgstr ""
+
+#: source/ubl-strings.h:78
+msgid "System services status"
+msgstr ""
+
+#: source/ubl-strings.h:79
+msgid "User services status"
+msgstr ""
+
+#: source/ubl-strings.h:80
+msgid "Installed unit files"
+msgstr ""
+
+#: source/ubl-strings.h:81
+msgid "Units and status list"
+msgstr ""
+
+#: source/ubl-strings.h:82
+msgid "Sockets and status list"
+msgstr ""
+
+#: source/ubl-strings.h:83
+msgid "Timers and status list"
+msgstr ""
+
+#: source/ubl-strings.h:85
+msgid "Unit"
+msgstr ""
+
+#: source/ubl-strings.h:87
+msgid "Relaunch systemctl"
+msgstr ""
+
+#: source/ubl-strings.h:88
+msgid "Reexec systemctl"
+msgstr ""
+
+#: source/ubl-strings.h:89
+msgid "Show service information"
+msgstr ""
+
+#: source/ubl-strings.h:90
+msgid "Show service log"
+msgstr ""
+
+#: source/ubl-strings.h:91
+msgid "Show service source file"
+msgstr ""
+
+#: source/ubl-strings.h:92
+msgid "Show service properties"
+msgstr ""
+
+#: source/ubl-strings.h:93
+msgid "Show..."
+msgstr ""
+
+#: source/ubl-strings.h:95
+msgid "Edit configuration file"
+msgstr ""
+
+#: source/ubl-strings.h:97
+msgid "Show inactive"
+msgstr ""
+
+#: source/ubl-strings.h:98
+msgid "Show unloaded"
+msgstr ""
+
+#: source/ubl-strings.h:100
+msgid "File"
+msgstr ""
+
+#: source/ubl-strings.h:101
+msgid "Change date"
+msgstr ""
+
+#: source/ubl-strings.h:102
+msgid "Description"
+msgstr ""
+
+#: source/ubl-strings.h:103
+msgid "Edit"
+msgstr ""
+
+#: source/ubl-strings.h:105
+msgid "Session ID"
+msgstr ""
+
+#: source/ubl-strings.h:106
+msgid "User ID"
+msgstr ""
+
+#: source/ubl-strings.h:107
+msgid "User name"
+msgstr ""
+
+#: source/ubl-strings.h:108
+msgid "Seat ID"
+msgstr ""
+
+#: source/ubl-strings.h:110
+msgid "Start session"
+msgstr ""
+
+#: source/ubl-strings.h:111
+msgid "Stop session"
+msgstr ""
+
+#: source/ubl-strings.h:112
+msgid "Lock session"
+msgstr ""
+
+#: source/ubl-strings.h:114
+msgid "Timer"
+msgstr ""
+
+#: source/ubl-strings.h:115
+msgid "Next"
+msgstr ""
+
+#: source/ubl-strings.h:116
+msgid "Left"
+msgstr ""
+
+#: source/ubl-strings.h:117
+msgid "Last"
+msgstr ""
+
+#: source/ubl-strings.h:118
+msgid "Passed"
+msgstr ""
+
+#: source/ubl-strings.h:119
+msgid "Activates"
+msgstr ""
+
+#: source/ubl-strings.h:121
+msgid "active"
+msgstr ""
+
+#: source/ubl-strings.h:122
+msgid "dead"
+msgstr ""
+
+#: source/ubl-strings.h:123
+msgid "waiting"
+msgstr ""
+
+#: source/ubl-strings.h:124
+msgid "running"
+msgstr ""
+
+#: source/ubl-strings.h:125
+msgid "listening"
+msgstr ""
+
+#: source/ubl-strings.h:126
+msgid "exited"
+msgstr ""
+
+#: source/ubl-strings.h:127
+msgid "mounted"
+msgstr ""
+
+#: source/ubl-strings.h:128
+msgid "plugged"
+msgstr ""
+
+#: source/ubl-strings.h:129
+msgid "abandoned"
+msgstr ""
+
+#: source/ubl-strings.h:131
+msgid "Upgrade to root"
+msgstr ""
+
+#: source/ubl-strings.h:133
+msgid "State of "
+msgstr ""
+
+#: source/ubl-strings.h:134
+msgid "View"
+msgstr ""
+
+#: source/ubl-strings.h:134
+msgid "log"
+msgstr ""
+
+#: source/ubl-strings.h:135
+msgid "Edit unit file"
+msgstr ""
+
+#: source/ubl-strings.h:137
+msgid "Failed to re-execute systemd"
+msgstr ""
+
+#: source/ubl-strings.h:138
+msgid "failed to relaunch systemd"
+msgstr ""
+
+#: source/ubl-strings.h:140
+msgid "Systemd has been re-executed"
+msgstr ""
+
+#: source/ubl-strings.h:141
+msgid "Systemd has been relaunched"
+msgstr ""
+
+#: source/ubl-strings.h:143
+msgid "Save"
msgstr ""
diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po
index 588e6cb..972937f 100644
--- a/ubl-settings-services_ru.po
+++ b/ubl-settings-services_ru.po
@@ -18,201 +18,450 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: source/ubl-strings.h:1
-msgid "Version:"
-msgstr "Версия:"
-
-#: source/ubl-strings.h:2
-msgid "ubl-settings-services version:"
-msgstr "Версия ubl-settings-services: "
-
-#: source/ubl-strings.h:2
-msgid "Usage:"
-msgstr "Использование:"
-
-#: source/ubl-strings.h:2
-msgid "[OPTIONS]"
-msgstr "[АРГУМЕНТЫ]"
-
-#: source/ubl-strings.h:2
-msgid "Options:"
-msgstr "Аргументы:"
-
-#: source/ubl-strings.h:2
-msgid "Show this help"
-msgstr "Показать параметры справки"
-
-#: source/ubl-strings.h:2
-msgid "Show package version"
-msgstr "Показать текущую версию"
-
-#: source/ubl-strings.h:2
-msgid "Lock this help menu"
-msgstr "Блокировка вызова справки"
-
-#: source/ubl-strings.h:2
-msgid "Lock configuration saving"
-msgstr "Блокировка сохранения локальной и глобальной конфигурации"
-
-#: source/ubl-strings.h:2
-msgid "Lock local configration saving"
-msgstr "Блокировка сохранения локальной конфигурации"
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration saving"
-msgstr "Блокировка сохранения глобальной конфигурации"
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration loading"
-msgstr "Блокировка загрузки глобальной конфигурации"
-
-#: source/ubl-strings.h:2
-msgid "Reset application settings"
-msgstr "Сбросить настройки утилиты"
-
-#: source/ubl-strings.h:4
msgid "Services and processes systemd"
msgstr "Сервисы и процессы systemd"
-#: source/ubl-strings.h:5
+#: source/ubl-strings.h:2
msgid "System services and processes configuration"
msgstr "Настройка работы служб и процессов системы"
-#: source/ubl-strings.h:6
+#: source/ubl-strings.h:3
msgid "Services and processes - service information"
msgstr "Сервисы и процессы - статус"
-#: source/ubl-strings.h:8 source/ubl-strings.h:40
+#: source/ubl-strings.h:5 source/ubl-strings.h:37
msgid "Configure in configuration"
msgstr "Настройка в конфигурации"
-#: source/ubl-strings.h:9 source/ubl-strings.h:44
+#: source/ubl-strings.h:6 source/ubl-strings.h:41
msgid "Autostart"
msgstr "Автостарт"
-#: source/ubl-strings.h:10 source/ubl-strings.h:45
+#: source/ubl-strings.h:7 source/ubl-strings.h:42
msgid "Autostop"
msgstr "Автостоп"
-#: source/ubl-strings.h:11 source/ubl-strings.h:46
+#: source/ubl-strings.h:8 source/ubl-strings.h:43
msgid "Block"
msgstr "Блокировать"
-#: source/ubl-strings.h:12 source/ubl-strings.h:41
+#: source/ubl-strings.h:9 source/ubl-strings.h:38
msgid "Configure in system"
msgstr "Настройка в системе"
-#: source/ubl-strings.h:13 source/ubl-strings.h:47
+#: source/ubl-strings.h:10 source/ubl-strings.h:44
msgid "Launched"
msgstr "Запущено"
-#: source/ubl-strings.h:14
+#: source/ubl-strings.h:11
msgid "Reload"
msgstr "Перезагрузить"
-#: source/ubl-strings.h:15
+#: source/ubl-strings.h:12
msgid "Show status"
msgstr "Показать статус"
-#: source/ubl-strings.h:16
+#: source/ubl-strings.h:13
msgid "Update"
msgstr "Обновить"
-#: source/ubl-strings.h:18
+#: source/ubl-strings.h:15
msgid "All services"
msgstr "Все сервисы"
-#: source/ubl-strings.h:19
+#: source/ubl-strings.h:16
msgid "System services only"
msgstr "Только системные сервисы"
-#: source/ubl-strings.h:20
+#: source/ubl-strings.h:17
msgid "User services only"
msgstr "Только сервисы пользователя"
-#: source/ubl-strings.h:22
+#: source/ubl-strings.h:19
msgid "All"
msgstr "Все"
-#: source/ubl-strings.h:23
+#: source/ubl-strings.h:20
msgid "Services"
msgstr "Сервисы"
-#: source/ubl-strings.h:24
+#: source/ubl-strings.h:21
msgid "Sockets"
msgstr "Сокеты"
-#: source/ubl-strings.h:25
+#: source/ubl-strings.h:22
msgid "Autolaunch in configuration"
msgstr "Автозапуск в конфигурации"
-#: source/ubl-strings.h:26
+#: source/ubl-strings.h:23
msgid "Stopped in configuration"
msgstr "Остановлено в конфигурации"
-#: source/ubl-strings.h:27
+#: source/ubl-strings.h:24
msgid "Blocked in configuration"
msgstr "Заблокированные в конфигурации"
-#: source/ubl-strings.h:29
+#: source/ubl-strings.h:26
msgid "Toggle autostart at configuration"
msgstr "Переключить автозапуск в конфигурации"
-#: source/ubl-strings.h:30
+#: source/ubl-strings.h:27
msgid "Toggle autostop at configuration"
msgstr "Переключить автостоп в конфигурации"
-#: source/ubl-strings.h:31
+#: source/ubl-strings.h:28
msgid "Toggle service blocking at configuration"
msgstr "Переключить блокирование в конфигурации"
-#: source/ubl-strings.h:32
+#: source/ubl-strings.h:29
msgid "Toggle autostart at system"
msgstr "Переключить автозапуск в системе"
-#: source/ubl-strings.h:33
+#: source/ubl-strings.h:30
msgid "Launch/Stop service"
msgstr "Запустить/Остановить сервис"
-#: source/ubl-strings.h:34
+#: source/ubl-strings.h:31
msgid "Check service status"
msgstr "Проверить статус сервиса"
-#: source/ubl-strings.h:35
+#: source/ubl-strings.h:32
msgid "Check service log"
msgstr "Открыть лог сервиса"
-#: source/ubl-strings.h:37
+#: source/ubl-strings.h:34
msgid "Service:"
msgstr "Сервис:"
-#: source/ubl-strings.h:38
+#: source/ubl-strings.h:35
#, fuzzy
msgid "Description:"
msgstr "Описание:"
-#: source/ubl-strings.h:42
+#: source/ubl-strings.h:39
msgid "Service"
msgstr "Сервис"
-#: source/ubl-strings.h:48
+#: source/ubl-strings.h:45
msgid "Service list is loading"
msgstr "Список сервисов загружается"
-#: source/ubl-strings.h:49
+#: source/ubl-strings.h:46
msgid "Status"
msgstr "Статус"
+#: source/ubl-strings.h:47
+msgid "Restart with new configuration"
+msgstr "Перезагрузить с новой конфигурацией"
+
+#: source/ubl-strings.h:48
+msgid "Show log"
+msgstr "Показать логи"
+
+#: source/ubl-strings.h:49
+msgid "Show source"
+msgstr "Открыть конфигурационный файл"
+
+#: source/ubl-strings.h:50
+msgid "Properties"
+msgstr "Свойства"
+
#: source/ubl-strings.h:51
+msgid "Activate session"
+msgstr "Активировать сессию"
+
+#: source/ubl-strings.h:52
+msgid "End session"
+msgstr "Завершить сессию"
+
+#: source/ubl-strings.h:53
+msgid "Block session"
+msgstr "Заблокировать сессию"
+
+#: source/ubl-strings.h:55
+msgid "Service source were not loaded"
+msgstr "Сервис не был загружен"
+
+#: source/ubl-strings.h:57
+msgid "Saving..."
+msgstr "Сохранение..."
+
+#: source/ubl-strings.h:58
+msgid "Saved"
+msgstr "Сохранено"
+
+#: source/ubl-strings.h:59
+msgid "Error has occured"
+msgstr "Произошла ошибка"
+
+#: source/ubl-strings.h:61
msgid "Service were not stopped"
msgstr "Сервис не был остановлен"
-#: source/ubl-strings.h:52
-msgid "Are you sure want to stop "
-msgstr "Вы уверены что хотите остановить "
+#: source/ubl-strings.h:62
+msgid "Are you sure want to restart "
+msgstr "Вы уверены, что хотите перезапустить "
-#: source/ubl-strings.h:52
-msgid ""
-"The stop will be forced.\n"
-"The system may become unstable."
-msgstr "Остановка будет произведена принудительно.\n"
-"Возможна нестабильная работа системы."
+#: source/ubl-strings.h:62 source/ubl-strings.h:63
+msgid "The system may become unstable."
+msgstr "Возможна нестабильная работа системы."
+
+#: source/ubl-strings.h:63
+msgid "Are you sure want to reload "
+msgstr "Вы уверены, что хотите перезагрузить "
+
+#: source/ubl-strings.h:64
+msgid "Days"
+msgstr "Дней"
+
+#: source/ubl-strings.h:65
+msgid "Hours"
+msgstr "Часов"
+
+#: source/ubl-strings.h:66
+msgid "Minutes"
+msgstr "Минут"
+
+#: source/ubl-strings.h:67
+msgid "Seconds"
+msgstr "Секунд"
+
+#: source/ubl-strings.h:69
+msgid "Active"
+msgstr "Активна"
+
+#: source/ubl-strings.h:70
+msgid "Inactive"
+msgstr "Неактивна"
+
+#: source/ubl-strings.h:72
+msgid "System units"
+msgstr "Системные юниты"
+
+#: source/ubl-strings.h:73
+msgid "User units"
+msgstr "Пользовательские юниты"
+
+#: source/ubl-strings.h:74
+msgid "Config files"
+msgstr "Конфигурационные файлы"
+
+#: source/ubl-strings.h:75
+msgid "Sessions"
+msgstr "Сессии"
+
+#: source/ubl-strings.h:76
+msgid "Timers"
+msgstr "Таймеры"
+
+#: source/ubl-strings.h:78
+msgid "System services status"
+msgstr "Статус сервисов системы"
+
+#: source/ubl-strings.h:79
+msgid "User services status"
+msgstr "Статус сервисов пользователя"
+
+#: source/ubl-strings.h:80
+msgid "Installed unit files"
+msgstr "Установленные юнит-файлы"
+
+#: source/ubl-strings.h:81
+msgid "Units and status list"
+msgstr "Список юнитов и состояния"
+
+#: source/ubl-strings.h:82
+msgid "Sockets and status list"
+msgstr "Список сокетов и состояния"
+
+#: source/ubl-strings.h:83
+msgid "Timers and status list"
+msgstr "Список таймеров и состояния"
+
+#: source/ubl-strings.h:85
+msgid "Unit"
+msgstr "Юнит"
+
+#: source/ubl-strings.h:87
+msgid "Relaunch systemctl"
+msgstr "Перезагрузить systemctl"
+
+#: source/ubl-strings.h:88
+msgid "Reexec systemctl"
+msgstr "Перезапустить systemctl"
+
+#: source/ubl-strings.h:89
+msgid "Show service information"
+msgstr "Показать информацию о сервисе"
+
+#: source/ubl-strings.h:90
+msgid "Show service log"
+msgstr "Открыть лог сервиса"
+
+#: source/ubl-strings.h:91
+msgid "Show service source file"
+msgstr "Показать конфигурационный файл сервиса"
+
+#: source/ubl-strings.h:92
+msgid "Show service properties"
+msgstr "Открыть свойства сервиса"
+
+#: source/ubl-strings.h:93
+msgid "Show..."
+msgstr "Показать..."
+
+#: source/ubl-strings.h:95
+msgid "Edit configuration file"
+msgstr "Редактировать в конфигурации"
+
+#: source/ubl-strings.h:97
+msgid "Show inactive"
+msgstr "Показать неактивные"
+
+#: source/ubl-strings.h:98
+msgid "Show unloaded"
+msgstr "Показать незагруженные"
+
+#: source/ubl-strings.h:100
+msgid "File"
+msgstr "Файл"
+
+#: source/ubl-strings.h:101
+msgid "Change date"
+msgstr "Изменён"
+
+#: source/ubl-strings.h:102
+msgid "Description"
+msgstr "Описание"
+
+#: source/ubl-strings.h:103
+msgid "Edit"
+msgstr "Редактировать"
+
+#: source/ubl-strings.h:105
+msgid "Session ID"
+msgstr "ID сессии"
+
+#: source/ubl-strings.h:106
+msgid "User ID"
+msgstr "ID пользователя"
+
+#: source/ubl-strings.h:107
+msgid "User name"
+msgstr "Имя пользователя"
+
+#: source/ubl-strings.h:108
+msgid "Seat ID"
+msgstr "Seat ID"
+
+#: source/ubl-strings.h:110
+msgid "Start session"
+msgstr "Запустить сессию"
+
+#: source/ubl-strings.h:111
+msgid "Stop session"
+msgstr "Остановить сессию"
+
+#: source/ubl-strings.h:112
+msgid "Lock session"
+msgstr "Заблокировать сессию"
+
+#: source/ubl-strings.h:114
+msgid "Timer"
+msgstr "Таймер"
+
+#: source/ubl-strings.h:115
+msgid "Next"
+msgstr "Следующий"
+
+#: source/ubl-strings.h:116
+msgid "Left"
+msgstr "Осталось времени"
+
+#: source/ubl-strings.h:117
+msgid "Last"
+msgstr "Последний"
+
+#: source/ubl-strings.h:118
+msgid "Passed"
+msgstr "Пройденный"
+
+#: source/ubl-strings.h:119
+msgid "Activates"
+msgstr "Активируется"
+
+#: source/ubl-strings.h:121
+msgid "active"
+msgstr "активен"
+
+#: source/ubl-strings.h:122
+msgid "dead"
+msgstr "остановлен"
+
+#: source/ubl-strings.h:123
+msgid "waiting"
+msgstr "ожидание"
+
+#: source/ubl-strings.h:124
+msgid "running"
+msgstr "работает"
+
+#: source/ubl-strings.h:125
+msgid "listening"
+msgstr "прослушивание"
+
+#: source/ubl-strings.h:126
+msgid "exited"
+msgstr "завершён"
+
+#: source/ubl-strings.h:127
+msgid "mounted"
+msgstr "примонтирован"
+
+#: source/ubl-strings.h:128
+msgid "plugged"
+msgstr "подключен"
+
+#: source/ubl-strings.h:129
+msgid "abandoned"
+msgstr "заброшен"
+
+#: source/ubl-strings.h:131
+msgid "Upgrade to root"
+msgstr "Повысить права до root"
+
+#: source/ubl-strings.h:133
+msgid "State of "
+msgstr "Состояние сервиса "
+
+#: source/ubl-strings.h:134
+msgid "View"
+msgstr "Просмотр"
+
+#: source/ubl-strings.h:134
+msgid "log"
+msgstr "лога"
+
+#: source/ubl-strings.h:135
+msgid "Edit unit file"
+msgstr "Редактировать юнит-файл"
+
+#: source/ubl-strings.h:137
+msgid "Failed to re-execute systemd"
+msgstr "Ошибка перезагрузки systemd"
+
+#: source/ubl-strings.h:138
+msgid "failed to relaunch systemd"
+msgstr "Ошибка перезапуска systemd"
+
+#: source/ubl-strings.h:140
+msgid "Systemd has been re-executed"
+msgstr "Systemd был успешно перезапущен"
+
+#: source/ubl-strings.h:141
+msgid "Systemd has been relaunched"
+msgstr "Systemd был успешно перезагружен"
+
+#: source/ubl-strings.h:143
+msgid "Save"
+msgstr "Сохранить"