Merge pull request 'master' (#12) from YanTheKaller/ubl-settings-services:master into master

Reviewed-on: #12
pull/128/head^2 v2.0
Dmitry Razumov 2 years ago
commit 8b2b6a5b56

@ -1,49 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"/></svg>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="3.175mm"
height="3.175mm"
viewBox="0 0 3.175 3.175"
version="1.1"
id="svg36"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="com.ublinux.ubl-settings-usergroups.cancel-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview38"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="29.309298"
inkscape:cx="17.74181"
inkscape:cy="7.3867343"
inkscape:window-width="1920"
inkscape:window-height="1056"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs33" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-75.62433,-104.22131)">
<path
style="fill:#d40000;fill-opacity:1;stroke:none;stroke-width:0.264583"
d="m 77.21183,104.22131 c -0.8763,0 -1.5875,0.7112 -1.5875,1.5875 0,0.8763 0.7112,1.5875 1.5875,1.5875 0.8763,0 1.5875,-0.7112 1.5875,-1.5875 0,-0.8763 -0.7112,-1.5875 -1.5875,-1.5875 z m 0,0.56696 c 0.563335,0 1.020535,0.4572 1.020535,1.02054 0,0.15224 -0.03405,0.2963 -0.0939,0.42611 l -1.353627,-1.35275 c 0.129997,-0.0601 0.274468,-0.0939 0.426995,-0.0939 z m -0.91423,0.56874 1.366915,1.36603 c -0.136513,0.0678 -0.290022,0.1063 -0.452685,0.1063 -0.563336,0 -1.020536,-0.4572 -1.020536,-1.02053 0,-0.16238 0.03874,-0.31547 0.106306,-0.4518 z"
id="Symbol"
inkscape:label="#path2424"
inkscape:connector-curvature="0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 541 B

@ -1,55 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
<svg
viewBox="0 0 24 24"
id="svg2"
version="1.1"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="com.ublinux.libublsettingsui-gtk3.important.svg"
width="24"
height="24"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1023"
id="namedview8"
showgrid="false"
inkscape:zoom="18.96875"
inkscape:cx="5.4827018"
inkscape:cy="9.3311367"
inkscape:current-layer="svg2"
inkscape:pagecheckerboard="0"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<path
id="path4136-2"
style="opacity:1;fill:#4d4d4d;fill-opacity:1"
d="M 11.292969,22.976562 A 11.000002,11 3.688344 0 1 1.0234375,11.292969 11.000002,11 3.688344 0 1 12.707031,1.0234375 11.000002,11 3.688344 0 1 22.976562,12.707031 11.000002,11 3.688344 0 1 11.292969,22.976562 Z M 11.996094,18 h 0.0078 C 12.556173,18 13,17.5561 13,17.003906 V 9.9960935 c 0,-0.552419 -0.443827,-0.996094 -0.996094,-0.996094 h -0.0078 C 11.443827,8.9999995 11,9.4436745 11,9.9960935 V 17.003906 C 11,17.5561 11.443827,18 11.996094,18 Z M 12,6.9999995 c 0.554,0 1,-0.446 1,-1 0,-0.554 -0.446,-1 -1,-1 -0.554,0 -1,0.446 -1,1 0,0.554 0.446,1 1,1 z" />
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 543 B

@ -1,55 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M96 0C60.7 0 32 28.7 32 64V288H144c6.1 0 11.6 3.4 14.3 8.8L176 332.2l49.7-99.4c2.7-5.4 8.3-8.8 14.3-8.8s11.6 3.4 14.3 8.8L281.9 288H352c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-6.1 0-11.6-3.4-14.3-8.8L240 275.8l-49.7 99.4c-2.7 5.4-8.3 8.8-14.3 8.8s-11.6-3.4-14.3-8.8L134.1 320H32V448c0 35.3 28.7 64 64 64H352c35.3 0 64-28.7 64-64V160H288c-17.7 0-32-14.3-32-32V0H96zM288 0V128H416L288 0z"/></svg>
<svg
height="16px"
viewBox="0 0 16 16"
width="16px"
version="1.1"
id="svg8"
sodipodi:docname="com.ublinux.ubl-settings-services.lookup-symbolic.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs12" />
<sodipodi:namedview
id="namedview10"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="11.359375"
inkscape:cx="-8.8913342"
inkscape:cy="-1.0563961"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg8" />
<g
fill="#2e3436"
id="g6">
<path
d="M 2,0 C 1.449219,0 1,0.449219 1,1 v 14 c 0,0.550781 0.449219,1 1,1 h 8.437942 c 0.550781,0 1,-0.449219 1,-1 0,-0.550781 -0.449219,-1 -1,-1 H 3 V 2 h 7.585938 L 13,4.414062 V 12 c 0,0.550781 0.449219,1 1,1 0.550781,0 1,-0.449219 1,-1 V 4 C 15,3.734375 14.894531,3.480469 14.707031,3.292969 l -3,-3 C 11.519531,0.105469 11.265625,0 11,0 Z"
fill-rule="evenodd"
id="path4"
sodipodi:nodetypes="sssssssccccssssssss" />
</g>
<g
fill="#2e3436"
id="g6-7"
transform="matrix(0.55886012,0,0,0.55886012,5.204732,6.5543801)">
<path
d="M 10.600418,9.6980908 C 9.7879179,9.8426218 8.8328458,10.316309 9.556877,11.037281 l 4.95693,5.29613 c 1.144435,1.201619 2.826056,-0.640864 1.68162,-1.842483 l -4.95693,-5.29613 C 10.953555,8.8843791 10.928542,9.6316848 10.600418,9.6980908 Z"
id="path2"
sodipodi:nodetypes="cccccc" />
<path
d="M 6.5,0 C 2.921875,0 0,2.921875 0,6.5 0,10.078125 2.921875,12.996094 6.5,12.996094 10.078125,12.996094 13,10.078125 13,6.5 13,2.921875 10.078125,0 6.5,0 Z m 0,2 C 8.996094,2 11,4.003906 11,6.5 11,8.996094 8.996094,10.996094 6.5,10.996094 4.003906,10.996094 2,8.996094 2,6.5 2,4.003906 4.003906,2 6.5,2 Z m 0,0"
id="path4-5" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 674 B

@ -5,44 +5,46 @@ config main_config;
//functions //functions
void yon_load_proceed(YON_CONFIG_TYPE type){ 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){ void on_config_local_load(GtkWidget *self,main_window *widgets){
if (!main_config.update_thread_active){
main_config.update_thread_active=1;
if (self){}; if (self){};
yon_load_proceed(YON_CONFIG_LOCAL); yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("",(GThreadFunc)yon_interface_update,widgets); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
main_config.load_mode=1; main_config.load_mode=1;
textdomain(template_ui_LocaleName); }
textdomain(LocaleName);
} }
void on_config_global_load(GtkWidget *self,main_window *widgets){ void on_config_global_load(GtkWidget *self,main_window *widgets){
if (!main_config.update_thread_active){
main_config.update_thread_active=1;
if (self){}; if (self){};
yon_load_proceed(YON_CONFIG_GLOBAL); yon_load_proceed(YON_CONFIG_GLOBAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("",(GThreadFunc)yon_interface_update,widgets); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets);
main_config.load_mode=0; main_config.load_mode=0;
textdomain(template_ui_LocaleName); }
textdomain(LocaleName);
} }
void on_config_global_local_save(){ 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(){ 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(){ 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); free(name);
name=parsed_name; name=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,0,!status,-1); 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; int size;
config_str parsed = yon_char_parse(config_sting,&size,","); config_str parsed = yon_char_parse(config_sting,&size,",");
int place = yon_char_parsed_check_exist(parsed,size,name); int place = yon_char_parsed_check_exist(parsed,size,name);
if (status==0){ if (status==0){
if (place ==-1){ if (place ==-1){
if (!yon_config_append("SERVICESSTART",name,",")){ if (!yon_config_append("SERVICES_ENABLE",name,",")){
yon_config_register("SERVICESSTART","[config]",name); yon_config_register("SERVICES_ENABLE","[system]",name);
} }
} }
} else { } else {
if (place !=-1){ if (place !=-1){
parsed = yon_char_parsed_rip(parsed,&size,place); parsed = yon_char_parsed_rip(parsed,&size,place);
if (parsed) if (parsed)
yon_config_set("SERVICESSTART",yon_char_parsed_to_string(parsed,size,",")); yon_config_set("SERVICES_ENABLE",yon_char_parsed_to_string(parsed,size,","));
else yon_config_remove_by_key("SERVICESSTART"); else yon_config_remove_by_key("SERVICES_ENABLE");
} }
} }
yon_char_parsed_free(parsed,size); yon_char_parsed_free(parsed,size);
@ -146,22 +148,22 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){
free(name); free(name);
name=parsed_name; name=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,1,!status,-1); 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; int size;
config_str parsed = yon_char_parse(config_sting,&size,","); config_str parsed = yon_char_parse(config_sting,&size,",");
int place = yon_char_parsed_check_exist(parsed,size,name); int place = yon_char_parsed_check_exist(parsed,size,name);
if (status==0){ if (status==0){
if (place ==-1){ if (place ==-1){
if (!yon_config_append("SERVICESNOSTART",name,",")){ if (!yon_config_append("SERVICES_DISABLE",name,",")){
yon_config_register("SERVICESNOSTART","[config]",name); yon_config_register("SERVICES_DISABLE","[system]",name);
} }
} }
} else { } else {
if (place !=-1){ if (place !=-1){
parsed = yon_char_parsed_rip(parsed,&size,place); parsed = yon_char_parsed_rip(parsed,&size,place);
if (parsed) if (parsed)
yon_config_set("SERVICESNOSTART",yon_char_parsed_to_string(parsed,size,",")); yon_config_set("SERVICES_DISABLE",yon_char_parsed_to_string(parsed,size,","));
else yon_config_remove_by_key("SERVICESNOSTART"); else yon_config_remove_by_key("SERVICES_DISABLE");
} }
} }
yon_char_parsed_free(parsed,size); yon_char_parsed_free(parsed,size);
@ -181,22 +183,22 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){
free(name); free(name);
name=parsed_name; name=parsed_name;
gtk_list_store_set(GTK_LIST_STORE(widgets->liststore2),&iter,2,!status,-1); 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; int size;
config_str parsed = yon_char_parse(config_sting,&size,","); config_str parsed = yon_char_parse(config_sting,&size,",");
int place = yon_char_parsed_check_exist(parsed,size,name); int place = yon_char_parsed_check_exist(parsed,size,name);
if (status==0){ if (status==0){
if (place ==-1){ if (place ==-1){
if (!yon_config_append("SERVICESMASK",name,",")){ if (!yon_config_append("SERVICES_MASK",name,",")){
yon_config_register("SERVICESMASK","[config]",name); yon_config_register("SERVICES_MASK","[system]",name);
} }
} }
} else { } else {
if (place !=-1){ if (place !=-1){
parsed = yon_char_parsed_rip(parsed,&size,place); parsed = yon_char_parsed_rip(parsed,&size,place);
if (parsed) if (parsed)
yon_config_set("SERVICESMASK",yon_char_parsed_to_string(parsed,size,",")); yon_config_set("SERVICES_MASK",yon_char_parsed_to_string(parsed,size,","));
else yon_config_remove_by_key("SERVICESMASK"); else yon_config_remove_by_key("SERVICES_MASK");
} }
} }
yon_char_parsed_free(parsed,size); 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){ void on_system_launch_clicked(GtkWidget *self, main_window *widgets){
if (self){}; if (self){};
GtkTreeIter iter; GtkTreeIter iter;
@ -227,9 +235,29 @@ void on_system_launch_clicked(GtkWidget *self, main_window *widgets){
gboolean status = 0; gboolean status = 0;
char *service_name; char *service_name;
gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1); 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) : \ yon_launch((!status)==1 ? service_start_command(service_name) : \
service_stop_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; 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){ gboolean on_service_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
if (data){}; if (data){};
@ -293,6 +315,26 @@ gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data){
return 0; 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){ void on_type_changed(GtkWidget *self, main_window *widgets){
if (self){}; if (self){};
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ServiceTypeCombo))){ 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)); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(main_config.BlockedFilter));
break; 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){ 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){ void *yon_unthreaded_config_load(void *widgets){
if (main_config.load_mode==1){ if (main_config.load_mode==1){
on_config_local_load(NULL,(main_window*)widgets); 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){ void on_update(GtkWidget *self,main_window *widgets){
if (!main_config.update_thread_active){
if (self){} if (self){}
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
g_thread_new("",(GThreadFunc)yon_unthreaded_config_load,widgets); if (yon_unthreaded_config_load(widgets)){};
}
} }
void *yon_interface_update(main_window *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;
}
gboolean yon_interface_update(main_window *widgets){
gtk_widget_set_sensitive(widgets->UpdateButton,0);
int size; int size;
int size_users;
GtkTreeIter iter; GtkTreeIter iter;
gtk_list_store_clear(widgets->liststore2);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL);
config_str services = yon_config_load(load_services_command,&size); 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;i<size;i++){ for (int i=0;i<size;i++){
while(gtk_events_pending()) gtk_main_iteration();
int parsed_size; int parsed_size;
if (services[i][strlen(services[i])-1]=='\n') services[i][strlen(services[i])-1]='\0'; if (services[i][strlen(services[i])-1]=='\n') services[i][strlen(services[i])-1]='\0';
config_str parsed = yon_char_parse(services[i],&parsed_size,";"); config_str parsed = yon_char_parse(services[i],&parsed_size,";");
@ -395,8 +477,24 @@ void *yon_interface_update(main_window *widgets){
if (strstr(parsed[0],".socket")) if (strstr(parsed[0],".socket"))
type = 2; type = 2;
else type = 1; else type = 1;
gtk_list_store_set(widgets->liststore2,&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;i<size_users;i++){
while(gtk_events_pending()) gtk_main_iteration();
int parsed_size;
if (users_services[i][strlen(users_services[i])-1]=='\n') users_services[i][strlen(users_services[i])-1]='\0';
config_str parsed = yon_char_parse(users_services[i],&parsed_size,";");
gtk_list_store_append(widgets->liststore2,&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; int launched_size;
config_str launched_parsed = yon_config_load(load_launched_command,&launched_size); config_str launched_parsed = yon_config_load(load_launched_command,&launched_size);
int enabled_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); yon_char_parsed_divide_search_full(enabled_parsed,enabled_size,"\n",-1);
char *launched = yon_char_parsed_to_string(launched_parsed,launched_size,","); char *launched = yon_char_parsed_to_string(launched_parsed,launched_size,",");
char *enabled = yon_char_parsed_to_string(enabled_parsed,enabled_size,","); char *enabled = yon_char_parsed_to_string(enabled_parsed,enabled_size,",");
char *start = yon_config_get_by_key("SERVICESSTART"); char *start = yon_config_get_by_key("SERVICES_ENABLE");
char *stop = yon_config_get_by_key("SERVICESSROP"); char *stop = yon_config_get_by_key("SERVICES_DISABLE");
char *block = yon_config_get_by_key("SERVICESMASK"); 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(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(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(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); gtk_list_store_set(widgets->liststore2,&iter,3,0,-1);
} }
free(name_parsed); free(name_parsed);
while(gtk_events_pending()) gtk_main_iteration();
} }
textdomain(template_ui_LocaleName); update_delay(widgets);
if (main_config.load_mode){ gtk_widget_set_sensitive(widgets->UpdateButton,1);
yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); return 0;
} 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;
} }
void on_column_resize(GtkTreeViewColumn *self,GParamSpec *pspec,main_window *widgets){ 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 *yon_menu_separator_create() {
GtkWidget *menu_item = gtk_menu_item_new(); GtkWidget *menu_item = gtk_separator_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);
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); gtk_widget_set_sensitive(menu_item,0);
return menu_item; 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 *menu_item = gtk_menu_item_new();
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
GtkWidget *icon; GtkWidget *icon;
GtkWidget *check;
if(icon_name){ if(icon_name){
icon = gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_BUTTON); 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_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); GtkWidget *label = gtk_label_new(text);
gtk_box_pack_start(GTK_BOX(box),label,0,0,5); 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); GtkWidget *menu_item_configuration_in_system = yon_menu_button_create(NULL,SYSTEM_CONFIGURATION_LABEL);
gtk_widget_set_sensitive(menu_item_configuration_in_system,0); 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_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_separator2 = yon_menu_separator_create();
GtkWidget *menu_item_reload = yon_menu_button_create("emblem-synchronizing-symbolic",SERVICE_RELOAD_LABEL); 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); 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); gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item_status);
widgets->RMBMenu=menu; widgets->RMBMenu=menu;
widgets->menu=menu_object; widgets->menu=menu_object;
// gtk_widget_show_all(widgets->RMBMenu); gtk_widget_show_all(widgets->RMBMenu);
// gtk_widget_show_all(widgets->menu->Menu);
gtk_menu_popup_at_pointer(GTK_MENU(menu),NULL); gtk_menu_popup_at_pointer(GTK_MENU(menu),NULL);
return 0; return 0;
} }
@ -575,33 +661,44 @@ void config_init(){
main_config.lock_save_global=0; main_config.lock_save_global=0;
main_config.lock_save_local=0; main_config.lock_save_local=0;
main_config.load_mode=1; main_config.load_mode=1;
main_config.update_thread_active=0;
} }
void on_activate(GtkTreeView *self, main_window *widgets){ void on_activate(GtkTreeView *self, main_window *widgets){
if (self){}; if (self){};
GtkTreeIter iter; 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 *name=NULL;
char *description=NULL; char *description=NULL;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ 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->ServiceLabel),name);
gtk_label_set_text(GTK_LABEL(widgets->DescriptionLabel),description); gtk_label_set_text(GTK_LABEL(widgets->DescriptionLabel),description);
menu_obj *menu=widgets->menu; menu_obj *menu=widgets->menu;
if (main_config.rmb_clicked){ 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); gtk_menu_popup_at_pointer(GTK_MENU(menu->Menu),NULL);
} }
} }
main_config.rmb_clicked=0; 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) /**yon_main_window_complete(main_window *widgets)
* [EN] * [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->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->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->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,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,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,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(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->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->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->LoadLocalMenuItem),"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->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->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->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->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); g_list_free(list);
main_config.ServiceFilter = gtk_tree_model_filter_new(GTK_TREE_MODEL(widgets->liststore2),NULL); 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); 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)); gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->MainTree),GTK_ENTRY(widgets->SearchEntry));
yon_load_proceed(YON_CONFIG_LOCAL); yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); 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[]){ int main(int argc, char *argv[]){
local=setlocale(LC_ALL, ""); local=setlocale(LC_ALL, "");
textdomain (LocaleName); textdomain (LocaleName);
config_init(); 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<argc;i++){
int argument=getopt_long(argc,argv,"hVvs:e:t:c",long_options,&option_index);
switch(argument){
case 'h':
show_help=1;
break;
case 'v':
case 'V':
printf("%s\n",VERSION_LABEL);
exit(0);
break;
case 's':
if(optarg)
main_config.socket_id=atoi(optarg);
break;
case 'e':
if(optarg)
main_config.save_socket_id=atoi(optarg);
break;
case 't':
if(optarg)
main_config.load_socket_id=atoi(optarg);
break;
case 'c': if (system(yon_char_unite("rm -rfd ", yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",NULL))){};
break;
case 1:
main_config.lock_help=1;
break;
case 2:
main_config.lock_save_local=1;
main_config.lock_save_global=1;
break;
case 3:
main_config.lock_save_local=1;
break;
case 4:
main_config.lock_save_global=1;
break;
case 5:
main_config.lock_load_global=1;
break;
}
}
if (show_help==1&&main_config.lock_help!=1){
printf("%s\n",HELP_LABEL);
exit(0);
}
}
if (getuid()!=0){
main_config.lock_load_global=1;
main_config.lock_save_global=1;
main_config.lock_save_local=1;
}
gtk_init(&argc,&argv);
yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_connect_config((_template_config*)&main_config);
yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
config_str unfound = NULL;
int size=0;
yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL);
gtk_init(&argc,&argv);
template_main_window *widgets = yon_ubl_window_setup(); template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets); yon_main_window_complete((main_window*)widgets);
gtk_main(); gtk_main();

@ -1,4 +1,5 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gtk/gtkx.h> #include <gtk/gtkx.h>
#include <locale.h> #include <locale.h>
#include <stdio.h> #include <stdio.h>
@ -32,6 +33,8 @@
#define LocaleName "ubl-settings-services" #define LocaleName "ubl-settings-services"
#define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' -e 's/running /running;/g' -e 's/inactive /inactive;/g'" #define load_services_command "systemctl list-units --type=service --type=socket --no-pager --all |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_enabled_command "systemctl list-unit-files --type=service --type=socket --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:"
#define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:" #define load_launched_command "systemctl list-units --type=service --type=socket --no-pager --state=active --all --no-legend|sed -e 's/^ //g' -e 's/ */:/g' |cut -f1 -d:"
#define service_start_command(target) yon_char_append("systemctl start --no-pager ",target) #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_enable_command(target) yon_char_append("systemctl enable --no-pager ",target)
#define service_disable_command(target) yon_char_append("systemctl disable --no-pager ",target) #define service_disable_command(target) yon_char_append("systemctl disable --no-pager ",target)
#define service_info_command(target) yon_char_append("systemctl status -l --no-pager ",target) #define service_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; typedef char* string;
string version_application; string version_application;
@ -55,6 +60,7 @@ typedef struct {
int lock_save_local; int lock_save_local;
int lock_save_global; int lock_save_global;
int lock_load_global; int lock_load_global;
int lock_load_system;
int load_mode; int load_mode;
@ -68,6 +74,9 @@ typedef struct {
GtkTreeModel *StoppedFilter; GtkTreeModel *StoppedFilter;
GtkTreeModel *BlockedFilter; GtkTreeModel *BlockedFilter;
GtkTreeModel *SourceFilter;
int update_thread_active;
} config; } config;
typedef struct { typedef struct {
@ -181,7 +190,7 @@ void on_config_local_save();
void on_config_global_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); 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_autostart_clicked();
void on_system_kill_confirmed(GtkWidget *self,char *service_name);
void on_system_launch_clicked(); void on_system_launch_clicked();
gboolean yon_service_source_check(GtkTreeModel *model, GtkTreeIter *iter, void *data); 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); gboolean yon_service_type_check(GtkTreeModel *model, GtkTreeIter *iter,void *data);
void on_type_changed(GtkWidget *self, main_window *widgets); 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 config_init();
void on_tree_selection_changed(GtkWidget *self, main_window *widgets);
void yon_main_window_complete(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); 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_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(); terminal_window *yon_terminal_window_new();
void on_service_update(GtkWidget *self, terminal_window* window); void on_service_update(GtkWidget *self, terminal_window* window);

@ -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_LABEL _("Services and processes systemd")
#define TITLE_INFO_LABEL _("System services and processes configuration") #define TITLE_INFO_LABEL _("System services and processes configuration")
#define SERVICE_INFO_TITLE_LABEL _("Services and processes - service information") #define SERVICE_INFO_TITLE_LABEL _("Services and processes - service information")
@ -30,7 +27,7 @@
#define AUTOSTOP_TOGGLE_LABEL _("Toggle autostop at configuration") #define AUTOSTOP_TOGGLE_LABEL _("Toggle autostop at configuration")
#define BLOCK_TOGGLE_LABEL _("Toggle service blocking at configuration") #define BLOCK_TOGGLE_LABEL _("Toggle service blocking at configuration")
#define SYSTEM_AUTOSTART_TOGGLE_LABEL _("Toggle autostart at system") #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 CHECKSTATUS_LABEL _("Check service status")
#define LOG_LABEL _("Check service log") #define LOG_LABEL _("Check service log")
@ -47,3 +44,6 @@
#define LAUNCHED_LABEL _("Launched") #define LAUNCHED_LABEL _("Launched")
#define LIST_LOAD_LABEL _("Service list is loading") #define LIST_LOAD_LABEL _("Service list is loading")
#define STATUS_LABEL _("Status") #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)

@ -1,4 +1,3 @@
.thin { .thin {
margin:0px; margin:0px;
padding:0px; padding:0px;
@ -39,10 +38,6 @@ background:transparent;
border-right-width:inherit; border-right-width:inherit;
} }
.menuitemmiddlemargin{
margin-top: 6px;
}
.menuitemtop{ .menuitemtop{
margin-bottom:0px; margin-bottom:0px;
border-color:inherit; border-color:inherit;
@ -50,17 +45,17 @@ background:transparent;
border-left-width:inherit; border-left-width:inherit;
border-right-width:inherit; border-right-width:inherit;
} }
.menuitemtop *{ .menuitemtop >*{
margin:4px 2px 0 2px; margin:4px 2px 0 2px;
padding: 3px 10px 3px 5px; padding: 3px 10px 3px 5px;
border:transparent; border:transparent;
} }
.menuitemmiddle *{ .menuitemmiddle >*{
margin:0 2px 0 2px; margin:0 2px 0 2px;
padding: 3px 10px 3px 5px; padding: 3px 10px 3px 5px;
border:transparent; border:transparent;
} }
.menuitembottom *{ .menuitembottom >*{
margin:0 2px 2px 2px; margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px; padding: 3px 10px 3px 5px;
} }
@ -85,19 +80,19 @@ background:transparent;
border-right-width:inherit; border-right-width:inherit;
} }
.menuitemtop:hover* { .menuitemtop:hover>* {
margin:4px 2px 0 2px; margin:4px 2px 0 2px;
padding: 3px 10px 3px 5px; padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color; background:@theme_selected_bg_color;
border-radius:2px; border-radius:2px;
} }
.menuitemmiddle:hover* { .menuitemmiddle:hover>* {
margin:0 2px 0 2px; margin:0 2px 0 2px;
padding: 3px 10px 3px 5px; padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color; background:@theme_selected_bg_color;
border-radius:2px; border-radius:2px;
} }
.menuitembottom:hover* { .menuitembottom:hover>* {
margin:0 2px 2px 2px; margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px; padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color; background:@theme_selected_bg_color;
@ -123,12 +118,16 @@ background:transparent;
border-style:solid; border-style:solid;
} }
.debugborders *{ .sepat{
border-width: 2px; border-color: darker (@theme_bg_color);
border-color: #000000; border-top-width:1px;
border-style: solid; border-style:solid;
} }
.marginright image{ .marginright image{
margin-right: 2px; margin-right: 2px;
} }
treeview row:nth-child(odd) { background-color: #000000; }
treeview row:nth-child(even) { background-color: #ffffff; }

@ -183,6 +183,7 @@
<child> <child>
<object class="GtkButton" id="ConfigAutostartButton"> <object class="GtkButton" id="ConfigAutostartButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Toggle autostart at configuration</property> <property name="tooltip-text" translatable="yes">Toggle autostart at configuration</property>
@ -200,6 +201,7 @@
<child> <child>
<object class="GtkButton" id="ConfigAutostopButton"> <object class="GtkButton" id="ConfigAutostopButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Toggle autostop at configuration</property> <property name="tooltip-text" translatable="yes">Toggle autostop at configuration</property>
@ -217,6 +219,7 @@
<child> <child>
<object class="GtkButton" id="ConfigBlockButton"> <object class="GtkButton" id="ConfigBlockButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Toggle service blocking at configuration</property> <property name="tooltip-text" translatable="yes">Toggle service blocking at configuration</property>
@ -231,9 +234,21 @@
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child> <child>
<object class="GtkButton" id="SystemAutostartButton"> <object class="GtkButton" id="SystemAutostartButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Toggle autostart at system</property> <property name="tooltip-text" translatable="yes">Toggle autostart at system</property>
@ -245,15 +260,16 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">3</property> <property name="position">4</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="SystemLaunchButton"> <object class="GtkButton" id="SystemLaunchButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Launch service</property> <property name="tooltip-text" translatable="yes">Launch/Stop service</property>
<property name="image">image5</property> <property name="image">image5</property>
<style> <style>
<class name="thin"/> <class name="thin"/>
@ -262,12 +278,24 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">4</property> <property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="InfoButton"> <object class="GtkButton" id="InfoButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Check service status</property> <property name="tooltip-text" translatable="yes">Check service status</property>
@ -279,12 +307,13 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">5</property> <property name="position">7</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="LogButton"> <object class="GtkButton" id="LogButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Check service log</property> <property name="tooltip-text" translatable="yes">Check service log</property>
@ -296,7 +325,7 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">6</property> <property name="position">8</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -361,7 +390,7 @@
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">liststore2</property> <property name="model">liststore2</property>
<property name="search-column">5</property> <property name="search-column">5</property>
<property name="enable-grid-lines">vertical</property> <property name="enable-grid-lines">horizontal</property>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection"/> <object class="GtkTreeSelection"/>
</child> </child>

@ -170,7 +170,7 @@ msgid "Toggle autostart at system"
msgstr "" msgstr ""
#: source/ubl-strings.h:33 #: source/ubl-strings.h:33
msgid "Launch service" msgid "Launch/Stop service"
msgstr "" msgstr ""
#: source/ubl-strings.h:34 #: source/ubl-strings.h:34
@ -200,3 +200,17 @@ msgstr ""
#: source/ubl-strings.h:49 #: source/ubl-strings.h:49
msgid "Status" msgid "Status"
msgstr "" msgstr ""
#: source/ubl-strings.h:51
msgid "Service were not stopped"
msgstr ""
#: source/ubl-strings.h:52
msgid "Are you sure want to stop "
msgstr ""
#: source/ubl-strings.h:52
msgid ""
"The stop will be forced.\n"
"The system may become unstable."
msgstr ""

@ -170,8 +170,8 @@ msgid "Toggle autostart at system"
msgstr "Переключить автозапуск в системе" msgstr "Переключить автозапуск в системе"
#: source/ubl-strings.h:33 #: source/ubl-strings.h:33
msgid "Launch service" msgid "Launch/Stop service"
msgstr "Запустить сервис" msgstr "Запустить/Остановить сервис"
#: source/ubl-strings.h:34 #: source/ubl-strings.h:34
msgid "Check service status" msgid "Check service status"
@ -201,3 +201,18 @@ msgstr "Список сервисов загружается"
#: source/ubl-strings.h:49 #: source/ubl-strings.h:49
msgid "Status" msgid "Status"
msgstr "Статус" msgstr "Статус"
#: source/ubl-strings.h:51
msgid "Service were not stopped"
msgstr "Сервис не был остановлен"
#: source/ubl-strings.h:52
msgid "Are you sure want to stop "
msgstr "Вы уверены что хотите остановить "
#: source/ubl-strings.h:52
msgid ""
"The stop will be forced.\n"
"The system may become unstable."
msgstr "Остановка будет произведена принудительно.\n"
"Возможна нестабильная работа системы."

Loading…
Cancel
Save