You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubl-settings-services/source/ubl-settings-services.c

759 lines
34 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "ubl-settings-services.h"
config main_config;
//functions
void yon_load_proceed(YON_CONFIG_TYPE type){
if (yon_config_load_register(type,"config","SERVICESSTART SERVICESNOSTART SERVICESMASK",NULL)){
}
}
void on_config_local_load(GtkWidget *self,main_window *widgets){
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);
g_thread_new("",(GThreadFunc)yon_interface_update,widgets);
main_config.load_mode=1;
}
}
void on_config_global_load(GtkWidget *self,main_window *widgets){
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);
g_thread_new("",(GThreadFunc)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);
}
void on_config_local_save(){
yon_save_proceed("local",YON_CONFIG_LOCAL,"config","SERVICESSTART SERVICESNOSTART SERVICESMASK",NULL);
}
void on_config_global_save(){
yon_save_proceed("global",YON_CONFIG_GLOBAL,"config","SERVICESSTART SERVICESNOSTART SERVICESMASK",NULL);
}
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){
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)){
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 *config_sting = yon_config_get_by_key("SERVICESSTART");
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);
}
}
} 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_char_parsed_free(parsed,size);
}
}
void on_config_autostop_clicked(GtkWidget *self, 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)){
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 *config_sting = yon_config_get_by_key("SERVICESNOSTART");
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);
}
}
} 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_char_parsed_free(parsed,size);
}
}
void on_config_block_clicked(GtkWidget *self, 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)){
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 *config_sting = yon_config_get_by_key("SERVICESMASK");
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);
}
}
} 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_char_parsed_free(parsed,size);
}
}
void on_system_autostart_clicked(GtkWidget *self, 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)){
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);
yon_launch((!status)==1 ? service_enable_command(service_name) : \
service_disable_command(service_name));
}
}
void on_system_launch_clicked(GtkWidget *self, 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)){
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));
}
}
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_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){};
int type;
gtk_tree_model_get(model,iter,7,&type,-1);
if (type==1)
return 1;
return 0;
}
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;
}
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;
}
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;
}
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;
}
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;
}
}
void on_service_update(GtkWidget *self, terminal_window* window){
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);
}
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");
g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_service_update),window);
gtk_widget_show(window->Window);
return window;
}
void on_info_clicked(GtkWidget *self, main_window *widgets){
if (self){}
GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
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);
}
}
}
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);
}
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 *yon_interface_update(main_window *widgets){
int size;
GtkTreeIter iter;
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->MainTree),NULL);
config_str services = yon_config_load(load_services_command,&size);
for (int i=0;i<size;i++){
int parsed_size;
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,";");
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;
gtk_list_store_set(widgets->liststore2,&iter,5,parsed[0],6,description,7,type,-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("SERVICESSTART");
char *stop = yon_config_get_by_key("SERVICESSROP");
char *block = yon_config_get_by_key("SERVICESMASK");
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)){
char *name;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore2),&iter,5,&name,-1);
char *name_parsed = yon_char_divide(name,yon_char_find_last(name,'.'));
free(name);
if (!yon_char_is_empty(start)){
if (strstr(start,name_parsed))
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_parsed))
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_parsed))
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_parsed))
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_parsed))
gtk_list_store_set(widgets->liststore2,&iter,3,1,-1);
else
gtk_list_store_set(widgets->liststore2,&iter,3,0,-1);
}
free(name_parsed);
}
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));
main_config.update_thread_active=0;
return NULL;
}
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);
}
GtkWidget *yon_menu_separator_create() {
GtkWidget *menu_item = gtk_separator_menu_item_new();
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;
// 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);
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){
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",LAUNCHED_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_widget_show_all(widgets->menu->Menu);
gtk_menu_popup_at_pointer(GTK_MENU(menu),NULL);
return 0;
}
return 0;
}
/**config_init()
* [EN]
*
* [RU]
* Функция инициализации всех параметров конфигурации
*/
void config_init(){
main_config.always_open_documentation=0;
main_config.socket_id=-1;
main_config.save_socket_id=-1;
main_config.load_socket_id=-1;
main_config.lock_help=0;
main_config.lock_help=0;
main_config.lock_load_global=0;
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);
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_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);
}
}
main_config.rmb_clicked=0;
}
/**yon_main_window_complete(main_window *widgets)
* [EN]
*
* [RU]
* Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом.
*/
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
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->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");
gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddlemargin");
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_status_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->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->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_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));
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;
g_thread_new("",(GThreadFunc)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<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_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
gtk_main();
return 0;
}