diff --git a/icons/com.ublinux.ubl-settings-services.cancel-uncolored-symbolic.svg b/icons/com.ublinux.ubl-settings-services.cancel-uncolored-symbolic.svg
index aa858f9..cd84b0e 100644
--- a/icons/com.ublinux.ubl-settings-services.cancel-uncolored-symbolic.svg
+++ b/icons/com.ublinux.ubl-settings-services.cancel-uncolored-symbolic.svg
@@ -1,49 +1 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/icons/com.ublinux.ubl-settings-services.important-symbolic.svg b/icons/com.ublinux.ubl-settings-services.important-symbolic.svg
index ff8d4b3..1ba5b9e 100644
--- a/icons/com.ublinux.ubl-settings-services.important-symbolic.svg
+++ b/icons/com.ublinux.ubl-settings-services.important-symbolic.svg
@@ -1,55 +1 @@
-
-
+
\ No newline at end of file
diff --git a/icons/com.ublinux.ubl-settings-services.lookup-symbolic.svg b/icons/com.ublinux.ubl-settings-services.lookup-symbolic.svg
index f442cd0..163827f 100644
--- a/icons/com.ublinux.ubl-settings-services.lookup-symbolic.svg
+++ b/icons/com.ublinux.ubl-settings-services.lookup-symbolic.svg
@@ -1,55 +1 @@
-
-
+
\ No newline at end of file
diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c
index 24aaf4a..935b734 100644
--- a/source/ubl-settings-services.c
+++ b/source/ubl-settings-services.c
@@ -5,44 +5,46 @@ config main_config;
//functions
void yon_load_proceed(YON_CONFIG_TYPE type){
- if (yon_config_load_register(type,"config","SERVICESSTART SERVICESNOSTART SERVICESMASK",NULL)){
+ if (yon_config_load_register(type,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL)){
}
}
void on_config_local_load(GtkWidget *self,main_window *widgets){
- if (self){};
- yon_load_proceed(YON_CONFIG_LOCAL);
- yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
- g_thread_new("",(GThreadFunc)yon_interface_update,widgets);
- main_config.load_mode=1;
- textdomain(template_ui_LocaleName);
- textdomain(LocaleName);
+ 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);
+ main_config.load_mode=1;
+ }
}
void on_config_global_load(GtkWidget *self,main_window *widgets){
- if (self){};
- yon_load_proceed(YON_CONFIG_GLOBAL);
- yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
- g_thread_new("",(GThreadFunc)yon_interface_update,widgets);
- main_config.load_mode=0;
- textdomain(template_ui_LocaleName);
- textdomain(LocaleName);
+ 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);
+ main_config.load_mode=0;
+ }
}
void on_config_global_local_save(){
- yon_save_proceed(NULL,YON_CONFIG_BOTH,"config","SERVICESSTART SERVICESNOSTART SERVICESMASK",NULL);
+ yon_save_proceed(NULL,YON_CONFIG_BOTH,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL);
}
void on_config_local_save(){
- yon_save_proceed("local",YON_CONFIG_LOCAL,"config","SERVICESSTART SERVICESNOSTART SERVICESMASK",NULL);
+ yon_save_proceed("local",YON_CONFIG_LOCAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL);
}
void on_config_global_save(){
- yon_save_proceed("global",YON_CONFIG_GLOBAL,"config","SERVICESSTART SERVICESNOSTART SERVICESMASK",NULL);
+ yon_save_proceed("global",YON_CONFIG_GLOBAL,"system","SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL);
}
@@ -112,22 +114,22 @@ void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){
free(name);
name=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,0,!status,-1);
- char *config_sting = yon_config_get_by_key("SERVICESSTART");
+ 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("SERVICESSTART",name,",")){
- yon_config_register("SERVICESSTART","[config]",name);
+ if (!yon_config_append("SERVICES_ENABLE",name,",")){
+ yon_config_register("SERVICES_ENABLE","[system]",name);
}
}
} else {
if (place !=-1){
parsed = yon_char_parsed_rip(parsed,&size,place);
if (parsed)
- yon_config_set("SERVICESSTART",yon_char_parsed_to_string(parsed,size,","));
- else yon_config_remove_by_key("SERVICESSTART");
+ yon_config_set("SERVICES_ENABLE",yon_char_parsed_to_string(parsed,size,","));
+ else yon_config_remove_by_key("SERVICES_ENABLE");
}
}
yon_char_parsed_free(parsed,size);
@@ -146,22 +148,22 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){
free(name);
name=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,1,!status,-1);
- char *config_sting = yon_config_get_by_key("SERVICESNOSTART");
+ 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("SERVICESNOSTART",name,",")){
- yon_config_register("SERVICESNOSTART","[config]",name);
+ if (!yon_config_append("SERVICES_DISABLE",name,",")){
+ yon_config_register("SERVICES_DISABLE","[system]",name);
}
}
} else {
if (place !=-1){
parsed = yon_char_parsed_rip(parsed,&size,place);
if (parsed)
- yon_config_set("SERVICESNOSTART",yon_char_parsed_to_string(parsed,size,","));
- else yon_config_remove_by_key("SERVICESNOSTART");
+ yon_config_set("SERVICES_DISABLE",yon_char_parsed_to_string(parsed,size,","));
+ else yon_config_remove_by_key("SERVICES_DISABLE");
}
}
yon_char_parsed_free(parsed,size);
@@ -181,22 +183,22 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){
free(name);
name=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,2,!status,-1);
- char *config_sting = yon_config_get_by_key("SERVICESMASK");
+ 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("SERVICESMASK",name,",")){
- yon_config_register("SERVICESMASK","[config]",name);
+ if (!yon_config_append("SERVICES_MASK",name,",")){
+ yon_config_register("SERVICES_MASK","[system]",name);
}
}
} else {
if (place !=-1){
parsed = yon_char_parsed_rip(parsed,&size,place);
if (parsed)
- yon_config_set("SERVICESMASK",yon_char_parsed_to_string(parsed,size,","));
- else yon_config_remove_by_key("SERVICESMASK");
+ yon_config_set("SERVICES_MASK",yon_char_parsed_to_string(parsed,size,","));
+ else yon_config_remove_by_key("SERVICES_MASK");
}
}
yon_char_parsed_free(parsed,size);
@@ -219,6 +221,12 @@ void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){
}
+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){
if (self){};
GtkTreeIter iter;
@@ -227,9 +235,29 @@ void on_system_launch_clicked(GtkWidget *self, main_window *widgets){
gboolean status = 0;
char *service_name;
gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1);
- gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,!status,-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);
+ }
+ } else {
+ gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,4,0,-1);
+ }
+ }
+ yon_char_parsed_free(result,size);
}
}
@@ -241,12 +269,6 @@ gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter,void *d
return 1;
}
-void on_source_changed(GtkWidget *self, main_window *widgets){
- if (self){};
- GtkTreePath *path = gtk_tree_path_new();
- GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),path);
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_service_source_check,NULL,NULL);
-}
gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){};
@@ -293,6 +315,26 @@ gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
return 0;
}
+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;
+
+}
+
+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;
+
+}
+
void on_type_changed(GtkWidget *self, main_window *widgets){
if (self){};
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){
@@ -320,6 +362,21 @@ void on_type_changed(GtkWidget *self, main_window *widgets){
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));
}
void on_service_update(GtkWidget *self, terminal_window* window){
@@ -365,6 +422,10 @@ void on_info_clicked(GtkWidget *self, main_window *widgets){
}
}
+void on_log_show(){
+
+}
+
void *yon_unthreaded_config_load(void *widgets){
if (main_config.load_mode==1){
on_config_local_load(NULL,(main_window*)widgets);
@@ -375,17 +436,38 @@ void *yon_unthreaded_config_load(void *widgets){
}
void on_update(GtkWidget *self,main_window *widgets){
- if (self){}
- yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
- g_thread_new("",(GThreadFunc)yon_unthreaded_config_load,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 *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 *yon_interface_update(main_window *widgets){
+gboolean yon_interface_update(main_window *widgets){
+ gtk_widget_set_sensitive(widgets->UpdateButton,0);
int size;
+ int size_users;
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,5,parsed[0],6,description,7,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;
@@ -405,9 +503,9 @@ void *yon_interface_update(main_window *widgets){
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("SERVICESSTART");
- char *stop = yon_config_get_by_key("SERVICESSROP");
- char *block = yon_config_get_by_key("SERVICESMASK");
+ 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';
@@ -450,16 +548,11 @@ void *yon_interface_update(main_window *widgets){
gtk_list_store_set(widgets->liststore2,&iter,3,0,-1);
}
free(name_parsed);
+ while(gtk_events_pending()) gtk_main_iteration();
}
- 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);
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),GTK_TREE_MODEL(widgets->liststore2));
- return NULL;
+ update_delay(widgets);
+ gtk_widget_set_sensitive(widgets->UpdateButton,1);
+ return 0;
}
void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){
@@ -473,13 +566,10 @@ void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *wid
}
GtkWidget *yon_menu_separator_create() {
- GtkWidget *menu_item = gtk_menu_item_new();
- GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
- GtkWidget *separator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
- gtk_box_pack_start(GTK_BOX(box),separator,1,1,0);
- gtk_container_add(GTK_CONTAINER(menu_item),box);
+ GtkWidget *menu_item = gtk_separator_menu_item_new();
- gtk_widget_show_all(menu_item);
+ 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;
}
@@ -488,12 +578,9 @@ 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;
- GtkWidget *check;
if(icon_name){
icon = gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_BUTTON);
- check = gtk_check_button_new();
gtk_box_pack_start(GTK_BOX(box),icon,0,0,5);
- gtk_box_pack_end(GTK_BOX(box),check,0,0,5);
}
GtkWidget *label = gtk_label_new(text);
gtk_box_pack_start(GTK_BOX(box),label,0,0,5);
@@ -518,7 +605,7 @@ gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window
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",LAUNCHED_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);
@@ -550,8 +637,7 @@ gboolean on_context_menu_open(GtkWidget *self,GdkEventButton *event, main_window
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_widget_show_all(widgets->menu->Menu);
+ gtk_widget_show_all(widgets->RMBMenu);
gtk_menu_popup_at_pointer(GTK_MENU(menu),NULL);
return 0;
}
@@ -575,33 +661,44 @@ void config_init(){
main_config.lock_save_global=0;
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){
if (self){};
GtkTreeIter iter;
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
+ 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(GTK_TREE_MODEL(widgets->liststore2),&iter,5,&name,6,&description,-1);
+ 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){
- gboolean CAutostart,CAutostop,CBlock,SAutostart,SLaunched;
- gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore2),&iter,0,&CAutostart,1,&CAutostop,2,&CBlock,3,&SAutostart,4,&SLaunched,-1);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(menu->MenuConfigAutostart)),0))),2)),CAutostart);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(menu->MenuConfigAutostop)),0))),2)),CAutostop);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(menu->MenuConfigBlock)),0))),2)),CBlock);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(menu->MenuSystemAutostart)),0))),2)),SAutostart);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(menu->MenuSystemLaunched)),0))),2)),SLaunched);
gtk_menu_popup_at_pointer(GTK_MENU(menu->Menu),NULL);
}
}
main_config.rmb_clicked=0;
}
+void on_tree_selection_changed(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;
+ }
+ 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)
* [EN]
*
@@ -642,7 +739,7 @@ void yon_main_window_complete(main_window *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_status_show),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);
@@ -650,6 +747,7 @@ void yon_main_window_complete(main_window *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);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
@@ -657,6 +755,7 @@ void yon_main_window_complete(main_window *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);
@@ -671,87 +770,23 @@ void yon_main_window_complete(main_window *widgets){
gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->MainTree),GTK_ENTRY(widgets->SearchEntry));
yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
- g_thread_new("",(GThreadFunc)yon_interface_update,widgets);
+ if (!main_config.update_thread_active){
+ main_config.update_thread_active=1;
+ gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
+ }
}
int main(int argc, char *argv[]){
local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
- int option_index=0;
- int show_help=0;
- {
- struct option long_options[] = {
- {"help", 0, 0, 'h'},
- {"version", 0, 0, 'V'},
- {"lock-help", 0,0, 1},
- {"lock-save", 0,0, 2},
- {"lock-save-local", 0,0, 3},
- {"lock-save-global", 0,0, 4},
- {"lock-load-global", 0,0, 5},
- {"socket-id", 1, 0, 's'},
- {"socket-ext-id", 1,0, 'e'},
- {"socket-trd-id", 1,0, 't'},
- {"clear-config", 0,0, 'c'},
- { NULL, 0, NULL, 0 }
- };
- for (int i=0;i
+#include
#include
#include
#include
@@ -32,6 +33,8 @@
#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 service_start_command(target) yon_char_append("systemctl start --no-pager ",target)
@@ -39,6 +42,8 @@
#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)
typedef char* string;
string version_application;
@@ -55,6 +60,7 @@ typedef struct {
int lock_save_local;
int lock_save_global;
int lock_load_global;
+ int lock_load_system;
int load_mode;
@@ -67,6 +73,9 @@ typedef struct {
GtkTreeModel *AutolaunchFilter;
GtkTreeModel *StoppedFilter;
GtkTreeModel *BlockedFilter;
+
+ GtkTreeModel *SourceFilter;
+ int update_thread_active;
} config;
@@ -181,7 +190,7 @@ void on_config_local_save();
void on_config_global_save();
-void *yon_interface_update(main_window *widgets);
+gboolean yon_interface_update(main_window *widgets);
GtkWidget *yon_menu_button_create(char *icon_name, char *text);
@@ -201,12 +210,12 @@ void on_config_block_clicked();
void on_system_autostart_clicked();
+void on_system_kill_confirmed(GtkWidget *self,char *service_name);
+
void on_system_launch_clicked();
gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data);
-void on_source_changed(GtkWidget *self, main_window *widgets);
-
gboolean yon_service_type_check(GtkTreeModel *model, GtkTreeIter *iter,void *data);
void on_type_changed(GtkWidget *self, main_window *widgets);
@@ -225,8 +234,13 @@ void yon_load_proceed(YON_CONFIG_TYPE type);
void config_init();
+void on_tree_selection_changed(GtkWidget *self, main_window *widgets);
+
void yon_main_window_complete(main_window *widgets);
+void on_log_show();
+
+void *update_delay(main_window *widgets);
gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
@@ -238,6 +252,10 @@ gboolean on_stopped_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data);
+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_service_update(GtkWidget *self, terminal_window* window);
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 70f96df..ecc6005 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -1,6 +1,3 @@
-#define VERSION_LABEL yon_char_unite(_("Version:")," ",version_application,"\n",NULL)
-#define HELP_LABEL yon_char_unite(_("ubl-settings-services version:")," ", version_application,"\n",TITLE_LABEL,"\n",_("Usage:"), " ubl-settings-services ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n\t--lock-save\t\t\t",_("Lock configuration saving"),"\n\t--lock-save-local\t\t",_("Lock local configration saving"),"\n\t--lock-save-global\t\t",_("Lock global configration saving"),"\n\t--lock-load-global\t\t",_("Lock global configration loading"),"\n\t--clear-config\t\t\t",_("Reset application settings"),"\n",NULL)
-
#define TITLE_LABEL _("Services and processes systemd")
#define TITLE_INFO_LABEL _("System services and processes configuration")
#define SERVICE_INFO_TITLE_LABEL _("Services and processes - service information")
@@ -30,7 +27,7 @@
#define AUTOSTOP_TOGGLE_LABEL _("Toggle autostop at configuration")
#define BLOCK_TOGGLE_LABEL _("Toggle service blocking at configuration")
#define SYSTEM_AUTOSTART_TOGGLE_LABEL _("Toggle autostart at system")
-#define SYSTEM_LAUNCH_TOGGLE_LABEL _("Launch service")
+#define SYSTEM_LAUNCH_TOGGLE_LABEL _("Launch/Stop service")
#define CHECKSTATUS_LABEL _("Check service status")
#define LOG_LABEL _("Check service log")
@@ -46,4 +43,7 @@
#define BLOCK_LABEL _("Block")
#define LAUNCHED_LABEL _("Launched")
#define LIST_LOAD_LABEL _("Service list is loading")
-#define STATUS_LABEL _("Status")
\ No newline at end of file
+#define STATUS_LABEL _("Status")
+
+#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
diff --git a/ubl-settings-services.css b/ubl-settings-services.css
index d6b13ef..fee529c 100644
--- a/ubl-settings-services.css
+++ b/ubl-settings-services.css
@@ -1,4 +1,3 @@
-
.thin {
margin:0px;
padding:0px;
@@ -38,10 +37,6 @@ background:transparent;
border-left-width:inherit;
border-right-width:inherit;
}
-
-.menuitemmiddlemargin{
- margin-top: 6px;
-}
.menuitemtop{
margin-bottom:0px;
@@ -50,17 +45,17 @@ background:transparent;
border-left-width:inherit;
border-right-width:inherit;
}
- .menuitemtop *{
+ .menuitemtop >*{
margin:4px 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
- .menuitemmiddle *{
+ .menuitemmiddle >*{
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
- .menuitembottom *{
+ .menuitembottom >*{
margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px;
}
@@ -85,19 +80,19 @@ background:transparent;
border-right-width:inherit;
}
- .menuitemtop:hover* {
+ .menuitemtop:hover>* {
margin:4px 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
- .menuitemmiddle:hover* {
+ .menuitemmiddle:hover>* {
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
- .menuitembottom:hover* {
+ .menuitembottom:hover>* {
margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
@@ -123,12 +118,16 @@ background:transparent;
border-style:solid;
}
-.debugborders *{
- border-width: 2px;
- border-color: #000000;
- border-style: solid;
+.sepat{
+ border-color: darker (@theme_bg_color);
+ border-top-width:1px;
+ border-style:solid;
}
.marginright image{
margin-right: 2px;
-}
\ No newline at end of file
+}
+
+treeview row:nth-child(odd) { background-color: #000000; }
+
+treeview row:nth-child(even) { background-color: #ffffff; }
\ No newline at end of file
diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade
index 4b2b7b1..ce0ef08 100644
--- a/ubl-settings-services.glade
+++ b/ubl-settings-services.glade
@@ -183,6 +183,7 @@