#include "ubl-settings-repomanager.h" config main_config; /**on_close_subwindow(GtkWidget *self) * [EN] * Closes window in which [self] is contained. * [RU] * Закрывает окно, в котором расположен виджет [self]. */ void on_close_subwindow(GtkWidget *self){ gtk_widget_destroy(gtk_widget_get_toplevel(self)); } /**yon_open_browser(GtkWidget *self, char *link) * [EN] * Opens browser with [link] link. * [RU] * Открывает браузер с [link] ссылкой. */ void yon_open_browser(GtkWidget *self, char *link){ yon_ubl_browser_window_open(link,TITLE_LABEL); } /**on_open_documentation_confirmation(GtkWidget *self, char *link) * [EN] * Opens confirmation window for [link] link. * [RU] * Открывает окно подтверждение перехода по ссылке [link]. */ void on_open_documentation_confirmation(GtkWidget *self, char *link){ if (main_config.always_open_documentation==0){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); documentation_confirmation_window *widgets = malloc(sizeof(documentation_confirmation_window)); widgets->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow"); widgets->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton"); widgets->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton"); widgets->HatText = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); widgets->HeaderText = yon_gtk_builder_get_widget(builder,"helpHeader"); widgets->InfoText = yon_gtk_builder_get_widget(builder,"helpText"); widgets->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox"); gtk_label_set_text(GTK_LABEL(widgets->HatText),TITLE_LABEL); gtk_label_set_text(GTK_LABEL(widgets->HeaderText),HELP_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(widgets->InfoText),HELP_INFO_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->AcceptButton),OPEN_HELP_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->AlwaysOpenCheck),HELP_ALWAYS_OPEN_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->CloseButton),CANCEL_LABEL); gtk_widget_show_all(widgets->Window); g_signal_connect(G_OBJECT(widgets->CloseButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link)); g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); } else { yon_open_browser(self,link); } } /**on_link(GtkWidget *self, char* uri, gpointer user_data) * [EN] * Signal for hadnling AboutDialog links. * Connect to "activate-link" signal. * [self] is AboutDialog window; * [uri] is activated link; * [user_data] is pointer for user data, hasn't used in standard handler; * [RU] * Функция для обработки сигнала нажатия на ссылку окна AboutDialog. * Присоединять к сигналу "activate-link". * [self] - окно AboutDialog; * [uri] - ссылка, по которой совершается переход; * [user_data] - указатель на любые другие данные, не используется в стандартном обработчике; */ void on_link(GtkWidget *self, char* uri, gpointer user_data){ gtk_widget_destroy(self); on_open_documentation_confirmation(self,uri); } /**on_about() * [EN] * Function for setting up and showing AboutDialog. * Connect it to "activate" signal of Documentation MenuItem. * [RU] * Функиця для настройки и показа окна AboutDialog. * Присоединять к сигналу "activate" кнопки справки типа MenuItem. */ void on_about(){ GtkBuilder *builder=gtk_builder_new_from_resource(glade_path); GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow"); GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic"); GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide"); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application); gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),PROJECT_HOME_LABEL); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL); gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL); g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL); gtk_widget_set_visible(hideButtonBox,0); gtk_widget_destroy(hideButtonBox); gtk_widget_show(window); } void on_load(){ gsize size=0; gsize sigsize=0; config_str repos = yon_window_config_get_section("repos",&size); config_str signatures = yon_window_config_get_section("signatures",&sigsize); gtk_tree_store_clear(main_config.tree_store); for (int i=0;i",-1); if (repostatus == 1) gtk_tree_store_set(main_config.tree_store,&iter,0,folder_no_edits,3,0,-1); else if (repostatus == -1){ yon_launch(yon_char_unite("rm -rfd ",origin_flagged,NULL)); yon_window_config_erase_custom_parameter(origin_flagged,"repos"); GtkTreeIter *deleteIter = gtk_tree_iter_copy(&iter); if (!gtk_tree_model_iter_previous(GTK_TREE_MODEL(main_config.tree_store),deleteIter)){ gtk_tree_iter_free(deleteIter); deleteIter = gtk_tree_iter_copy(&iter); if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),deleteIter)){ gtk_tree_iter_free(deleteIter); deleteIter = gtk_tree_iter_copy(&iter); gtk_tree_store_remove(main_config.tree_store,deleteIter); break; } else { gtk_tree_store_remove(main_config.tree_store,&iter); } } else { gtk_tree_store_remove(main_config.tree_store,&iter); } continue; } gboolean valid_child=gtk_tree_model_iter_children(GTK_TREE_MODEL(main_config.tree_store),&childIter,&iter); for (;valid_child;valid_child=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),&childIter)){ char *pack_name, *pack_path; char *pack_old_repo, *pack_new_repo; char *pack_code_name, *pack_version, *pack_arch, *pack_depends; int pack_status=0; gboolean moved=0; char *icon; char *pack_sign; gboolean pack_signed=0; gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&childIter,0,&icon,1,&pack_name,2,&pack_path,3,&pack_status,4,&pack_old_repo,5,&pack_new_repo,6,&moved,9,&pack_code_name,10,&pack_version,11,&pack_arch,12,&pack_depends,13,&pack_sign,14,&pack_signed,-1); if (!pack_path) continue; char *pack_sign_paths; pack_sign_paths = yon_char_new(pack_path); yon_char_divide(pack_sign_paths,yon_char_find_last(pack_sign_paths,'/')); packnames = yon_char_unite(packnames ? yon_char_append(packnames," "):"",pack_sign_paths,NULL); if (pack_sign&&pack_signed==1){ char *package_full_name = yon_char_new(pack_path); yon_char_divide(package_full_name,yon_char_find_last(package_full_name,'/')); yon_window_config_add_custom_parameter(package_full_name,"signatures",yon_char_new(pack_sign),YON_TYPE_STRING); yon_char_divide_search(pack_sign,"<",-1); pack_sign=yon_char_divide_search(pack_sign,">",-1); if (!pack_groups||!(yon_dictionary_get(&pack_groups,pack_sign))){ dictionary *dict = yon_dictionary_new(); dict->key = pack_sign_paths; yon_dictionary_add_or_create_if_exists_with_data(pack_groups,yon_char_new(pack_sign),dict); } else { dictionary *dict = yon_dictionary_new(); dict->key = pack_sign_paths; yon_dictionary_add_or_create_if_exists_with_data(pack_groups->data,yon_char_new(pack_sign),dict); } } printf("%d\n",pack_status); if (pack_status==1||!strcmp(icon,document_added)){ add_packages = yon_char_unite(add_packages ? yon_char_append(add_packages,",") : "",pack_path,NULL); yon_char_divide(pack_path,yon_char_find_last(pack_path,'/')); pack_path = yon_char_unite(origin_flagged,"/pool/overlay/",pack_path,NULL); gtk_tree_store_set(main_config.tree_store,&childIter,2,pack_path,-1); repostatus=1; } else if (pack_status==-1||!strcmp(icon,document_deleted)){ remove_packages = yon_char_unite(remove_packages ? yon_char_append(remove_packages,",") : "",pack_code_name,NULL); } if (pack_status==1||!strcmp(icon,document_added)) gtk_tree_store_set(main_config.tree_store,&childIter,0,document_no_edits,3,0,-1); if (pack_status == -1||!strcmp(icon,document_deleted)){ GtkTreeIter *deleteIter = gtk_tree_iter_copy(&childIter); if (!gtk_tree_model_iter_previous(GTK_TREE_MODEL(main_config.tree_store),deleteIter)){ gtk_tree_iter_free(deleteIter); deleteIter = gtk_tree_iter_copy(&childIter); if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),deleteIter)){ gtk_tree_iter_free(deleteIter); deleteIter = gtk_tree_iter_copy(&childIter); gtk_tree_store_remove(main_config.tree_store,deleteIter); break; } else { gtk_tree_store_remove(main_config.tree_store,&childIter); } } else { gtk_tree_store_remove(main_config.tree_store,&childIter); } } } if (origin_flagged&&name_flagged){ if (add_packages){ char *sign_check = repo_sign_flagged ? yon_char_new(repo_sign_flagged) : NULL; add_command = yon_char_unite(command, " add -d \"",origin_flagged,"\" -r \"",name_flagged, sign_flagged ? yon_char_append("\" --sign-repo ",sign_flagged):"\"" ," -p ", add_packages,NULL); } if (remove_packages){ char *sign_check = repo_sign_flagged ? yon_char_new(repo_sign_flagged) : NULL; remove_command = yon_char_unite(command, " remove -d \"",origin_flagged,"\" -r \"",name_flagged, sign_flagged ? yon_char_append("\" --sign-repo ",sign_flagged):"\"" , " -p ", remove_packages,NULL); } if (repostatus == 1){ yon_window_config_add_custom_parameter(yon_char_unite(origin_flagged,NULL),"repos",packnames,YON_TYPE_STRING); } if (!add_packages&&!signed_packages&&!remove_packages&&repostatus==1) add_command = yon_char_unite(command, " add -d \"",origin_flagged,"\" -r \"",name_flagged,sign_flagged ? yon_char_append("\" --sign-repo ",sign_flagged):"\"" ,NULL); if (add_signed_command){ yon_launch(add_signed_command); yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);} if (add_command) { yon_launch(add_command); yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);} if (remove_command) { yon_launch(remove_command); yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);} if (pack_groups){ dictionary *dct; for_dictionaries(dct,pack_groups){ char *signed_packs=NULL; dictionary *pck; for_dictionaries(pck,yon_dictionary_get_data(dct,dictionary*)){ signed_packs=yon_char_unite(signed_packs ? yon_char_append(signed_packs,","): "" ,pck->key,NULL); } char *sign_command = yon_char_unite(command, " add -f -d ",origin_flagged," -r ",name_flagged," --sign-pkg ", dct->key," -p $(find ",origin_flagged,"/pool/overlay -name ", signed_packs,")",NULL); yon_launch(sign_command); } } if (repo_sign_flagged){ char *repo_sign_command = yon_char_unite(command, " add -f -d ",origin_flagged, " -r ", name_flagged, " --sign-repo ", repo_sign_flagged ,NULL); yon_window_config_add_custom_parameter(yon_char_unite(origin_flagged,NULL),"signatures",repo_sign_flagged_full,YON_TYPE_STRING); yon_launch(repo_sign_command); } } } yon_ubl_status_box_render(SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } void on_search(GtkCellEditable *self, main_window *widgets){ GtkTreeIter iter, childIter; char *name=NULL; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.tree_store),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),&iter)){ gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&iter,1,&name,-1); if (strstr(name,gtk_entry_get_text(GTK_ENTRY(widgets->Finder)))) { gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&iter); return; } gtk_tree_view_expand_row(GTK_TREE_VIEW(widgets->RepoTree),gtk_tree_model_get_path(GTK_TREE_MODEL(main_config.tree_store),&iter),1); int child_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(main_config.tree_store),&childIter,&iter); for (;child_valid;child_valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.tree_store),&childIter)){ gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&childIter,1,&name,-1); if (strstr(name,gtk_entry_get_text(GTK_ENTRY(widgets->Finder)))) { gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&childIter); return; } } gtk_tree_view_expand_row(GTK_TREE_VIEW(widgets->RepoTree),gtk_tree_model_get_path(GTK_TREE_MODEL(main_config.tree_store),&iter),0); } yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } void on_tree_selection_changed(GtkWidget *self,main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ char *codeName=NULL,*version=NULL,*architecture=NULL, *dependeces=NULL, *signature=NULL; int serverType=0,trusted=0,published=0; gtk_tree_model_get(model,&iter,9,&codeName,10,&version,11,&architecture,12,&dependeces,13,&signature,-1); gtk_label_set_text(GTK_LABEL(widgets->CodeNameInfoLabel),codeName ? codeName : ""); gtk_label_set_text(GTK_LABEL(widgets->VersionInfoLabel),version ? version : ""); gtk_label_set_text(GTK_LABEL(widgets->ArchitectureInfoLabel),architecture ? architecture : ""); gtk_label_set_text(GTK_LABEL(widgets->DependencesInfoLabel),dependeces ? dependeces : ""); gtk_label_set_text(GTK_LABEL(widgets->SignatureInfoLabel),signature ? signature : ABSENT_LABEL); int depth = gtk_tree_store_iter_depth(main_config.tree_store,&iter); if (depth == 0){ gtk_widget_set_sensitive(widgets->CreateButton,1); gtk_widget_set_sensitive(widgets->LoadFromLocalButton,1); gtk_widget_set_sensitive(widgets->ConfigureButton,1); gtk_widget_set_sensitive(widgets->DeleteButton,1); gtk_widget_set_sensitive(widgets->AddPackageButton,1); gtk_widget_set_sensitive(widgets->RemovePackageButton,0); gtk_widget_set_sensitive(widgets->SignButton,1); gtk_widget_set_visible(widgets->NameBox,1); gtk_widget_set_visible(widgets->DependenceBox,0); gtk_widget_set_visible(widgets->VersionBox,0); gtk_widget_set_visible(widgets->ArchitectureBox,0); gtk_widget_set_visible(widgets->SignatureBox,1); } else if (depth == 1){ gtk_widget_set_sensitive(widgets->CreateButton,1); gtk_widget_set_sensitive(widgets->LoadFromLocalButton,1); gtk_widget_set_sensitive(widgets->ConfigureButton,0); gtk_widget_set_sensitive(widgets->DeleteButton,0); gtk_widget_set_sensitive(widgets->AddPackageButton,1); gtk_widget_set_sensitive(widgets->RemovePackageButton,1); gtk_widget_set_sensitive(widgets->SignButton,1); gtk_widget_set_visible(widgets->NameBox,1); gtk_widget_set_visible(widgets->DependenceBox,1); gtk_widget_set_visible(widgets->VersionBox,1); gtk_widget_set_visible(widgets->ArchitectureBox,1); gtk_widget_set_visible(widgets->SignatureBox,1); } } else { gtk_widget_set_sensitive(widgets->CreateButton,1); gtk_widget_set_sensitive(widgets->LoadFromLocalButton,1); gtk_widget_set_sensitive(widgets->ConfigureButton,0); gtk_widget_set_sensitive(widgets->DeleteButton,0); gtk_widget_set_sensitive(widgets->AddPackageButton,0); gtk_widget_set_sensitive(widgets->RemovePackageButton,0); gtk_widget_set_sensitive(widgets->SignButton,0); gtk_widget_set_visible(widgets->NameBox,0); gtk_widget_set_visible(widgets->DependenceBox,0); gtk_widget_set_visible(widgets->VersionBox,0); gtk_widget_set_visible(widgets->ArchitectureBox,0); gtk_widget_set_visible(widgets->SignatureBox,0); } } void on_repo_add_new(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); repo_create_window *window = yon_dictionary_get_data(dict->first->next,repo_create_window*); if (!window->path){ yon_ubl_status_box_render(CHOOSE_PATH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); return;} char *name=NULL; name = window->path; if (!name||strcmp(name,"")!=0){ GtkTreeIter *iter = yon_repo_append(widgets, name, YON_REPO_LINE_REPO_TYPE); if (iter){ struct dirent *de; GtkTreeIter child; char *reponame = yon_char_new(name); yon_char_divide(reponame,yon_char_find_last(reponame,'/')); char *searchpath = yon_char_unite(name,"/",reponame,"/x86_64/",NULL); DIR *directory = opendir(searchpath); if (directory){ char *found_packages = NULL; while ((de = readdir(directory))) { if (strstr(de->d_name,"pkg.tar.")&&!strstr(de->d_name,".sig")){ char *filename = yon_char_unite(searchpath,"/",de->d_name,NULL); FILE *file = popen(get_package_info_command(filename),"r"); char *cur_string=g_malloc0(sizeof(char)*4096); char *packname=NULL, *packver=NULL, *packarch=NULL, *packdepends=NULL; while (fgets(cur_string,4096,file)){ char *stringe = yon_char_divide_search(cur_string,"\n",-1); char *p = yon_char_divide_search(stringe,":",-1); if (strstr(p,"Name")) packname = yon_char_new(stringe); else if (strstr(p,"Version")) packver = yon_char_new(stringe); else if (strstr(p,"Architecture")) packarch = yon_char_new(stringe); else if (strstr(p,"Depends On")) packdepends = yon_char_new(stringe); else if (strstr(p,"Depends On")) packdepends = yon_char_new(stringe); } gtk_tree_store_append(main_config.tree_store,&child,iter); gtk_tree_store_set(main_config.tree_store,&child,0,document_no_edits,1,yon_char_unite(packname,"-",packver,"-",packarch,NULL),2,filename,3,0,9,packname,10,packver,11,packarch,12,packdepends,-1); found_packages = yon_char_unite(found_packages ? yon_char_append(found_packages," ") : "",de->d_name,NULL); } } yon_window_config_add_custom_parameter(window->path,"repos",found_packages,YON_TYPE_STRING); gtk_tree_store_set(main_config.tree_store,iter,0,folder_no_edits,2,window->path,3,0,9,reponame,-1); } else { gtk_tree_store_set(main_config.tree_store,iter,0,folder_added,2,window->path,3,1,9,reponame,-1); } } } } char *on_choose_repo_folder(GtkWidget *self,repo_create_window *window){ GtkWidget *chooser = gtk_file_chooser_dialog_new(ADD_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); gtk_window_set_icon_name(GTK_WINDOW(chooser),icon_path); int res = gtk_dialog_run(GTK_DIALOG(chooser)); if (res==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); window->path=yon_char_new(filename); } on_close_subwindow(chooser); } void on_repo_new (GtkWidget *self, main_window *widgets){ repo_create_window *window = new(repo_create_window); window->path=NULL; on_choose_repo_folder(self,window); dictionary *dict = yon_dictionary_new_with_data("",widgets); dict = yon_dictionary_append_with_data(dict,"",window); on_repo_add_new(self,dict); } void on_repo_add_file(GtkWidget *self, main_window *widgets){ yon_add_file(widgets); } void on_repo_remove_package(GtkWidget *self, main_window *widgets){ yon_repo_remove_package(widgets); } void on_repo_remove(GtkWidget *self, main_window *widgets){ yon_repo_remove(widgets); } void on_sign_save(GtkWidget *self, dictionary *dict){ GtkTreeIter iter; main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); repo_sign_window *window = yon_dictionary_get_data(dict->first->next,repo_sign_window*); GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ char *key = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->KeysCombo)); gtk_tree_store_set(main_config.tree_store,&iter,13,key,14,1,-1); } on_tree_selection_changed(self,widgets); yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); on_close_subwindow(self); } void on_repo_sign(GtkWidget *self, main_window *widgets){ repo_sign_window *window = g_malloc(sizeof(repo_sign_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_sign_path); window->Window = yon_gtk_builder_get_widget(builder,"repoSignWindow"); window->HeaderLabel = yon_gtk_builder_get_widget(builder,"signHeaderNameLabel"); window->KeysCombo = yon_gtk_builder_get_widget(builder,"repoSignKeysCombo"); window->SaveButton = yon_gtk_builder_get_widget(builder,"repoSignSaveButton"); window->CloseButton = yon_gtk_builder_get_widget(builder,"repoSignCancelButton"); GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); GtkTreeIter iter; gtk_window_set_title(GTK_WINDOW(window->Window),TITLE_LABEL); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ if (gtk_tree_store_iter_depth(main_config.tree_store,&iter)==1) gtk_label_set_text(GTK_LABEL( window->HeaderLabel),yon_char_unite(DIGITAL_SIGNATURE_LABEL," - ",PACKAGE_LABEL,NULL)); else gtk_label_set_text(GTK_LABEL( window->HeaderLabel),yon_char_unite(DIGITAL_SIGNATURE_LABEL," - ",REPOSITORY_LABEL,NULL)); int size=0; config_str ret = yon_config_load(get_gpg_keys_command,&size); for (int i=0;iKeysCombo),ret[i]); } dictionary *dict = yon_dictionary_new_with_data("",widgets); dict = yon_dictionary_append_with_data(dict,"",window); g_signal_connect(G_OBJECT(window->SaveButton),"clicked", G_CALLBACK(on_sign_save),dict); g_signal_connect(G_OBJECT(window->CloseButton),"clicked", G_CALLBACK(on_close_subwindow),NULL); gtk_widget_show(window->Window); } else { yon_ubl_status_box_render(SIGN_CHOOSE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void on_repo_configure(GtkWidget *self, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_repo_path); repo_create_window *window = new(repo_create_window); window->Window=yon_gtk_builder_get_widget(builder,"repoEditWindow"); window->NameEntry=yon_gtk_builder_get_widget(builder,"repoEditNameEntry"); window->CancelButton=yon_gtk_builder_get_widget(builder,"repoEditCancelButton"); window->SaveButton=yon_gtk_builder_get_widget(builder,"repoEditSaveButton"); window->BranchesTree=yon_gtk_builder_get_widget(builder,"repoEditBranchTree"); window->BranchesListStore=GTK_LIST_STORE(gtk_builder_get_object(builder,"curRepoEditList")); gtk_widget_show(window->Window); dictionary *dict = yon_dictionary_new_with_data("",widgets); dict = yon_dictionary_append_with_data(dict,"",window); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_repo_configure_done),dict); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); gtk_list_store_clear(window->BranchesListStore); } else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } void on_repo_configure_done(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); repo_create_window *window = yon_dictionary_get_data(dict->first->next,repo_create_window*); GtkTreeIter iter, parentIter; GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(main_config.tree_store),&parentIter,&iter)) iter=parentIter; char *oldname=NULL; int status=0; char *name = (char*)gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); gtk_tree_model_get(model,&iter,1,&oldname,3,&status,-1); if (status==0) gtk_tree_store_set(main_config.tree_store,&iter,1,name,4,oldname,6,1,-1); else if (status==1) gtk_tree_store_set(main_config.tree_store,&iter,1,name,-1); } yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); on_close_subwindow(self); } void on_repo_load_local(GtkWidget *self, main_window *widgets){ GtkFileFilter *file_filter = gtk_file_filter_new(); GtkWidget *chooser = gtk_file_chooser_dialog_new(LOAD_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); gtk_window_set_icon_name(GTK_WINDOW(chooser),"com.ublinux.ubl-settings-repomanager"); int res = gtk_dialog_run(GTK_DIALOG(chooser)); if (res==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); yon_repo_append(widgets,filename,YON_REPO_LINE_REPO_TYPE); } on_close_subwindow(chooser); } GtkTreeIter *yon_repo_append(main_window *widgets, char *name, YON_REPO_LINE_TYPE type){ GtkTreeIter *retIter=g_malloc0(sizeof(GtkTreeIter)); GtkTreeIter iter,parentIter; GtkIconTheme *theme = gtk_icon_theme_get_default(); char *name_short = yon_char_new(name); gboolean fls = 0; while(1){ yon_char_divide_search(name_short,"/",-1); if (!strstr(name_short,"/")) break; } GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&parentIter)){ if (type==YON_REPO_LINE_REPO_TYPE){ GtkTreeIter ater; char *repo_path; int valid = gtk_tree_model_get_iter_first(model,&ater); for (;valid;valid=gtk_tree_model_iter_next(model,&ater)){ gtk_tree_model_get(model,&ater,2,&repo_path,-1); if (!strcmp(repo_path,name)){ yon_ubl_status_box_render(REPO_ALREADY_EXISTS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); return NULL; } } gtk_tree_store_append(main_config.tree_store,&iter,NULL); gtk_tree_store_set(main_config.tree_store,&iter,0, folder_no_edits, 1, name_short,2,name,3,1,4,fls,-1); retIter = gtk_tree_iter_copy(&iter); } else if (type==YON_REPO_LINE_FILE_TYPE){ GtkTreeIter branch; if (gtk_tree_model_iter_parent(model,&branch,&parentIter)){ GtkTreeIter repo; char *filename; int valid = gtk_tree_model_iter_nth_child(model,&repo,&branch,0); for (;valid;valid=gtk_tree_model_iter_next(model,&repo)){ gtk_tree_model_get(model,&repo,1,&filename,-1); if (!strcmp(yon_char_divide_search(yon_char_new(name_short),".pkg.tar",-1), filename)){ yon_ubl_status_box_render(ALREADY_EXIST,BACKGROUND_IMAGE_FAIL_TYPE); return NULL; } free(filename); } gtk_tree_store_append(main_config.tree_store,&iter,&branch); gtk_tree_store_set(main_config.tree_store,&iter,0, document_no_edits, 1, name_short,2,name,3,1,4,fls,-1); retIter = gtk_tree_iter_copy(&iter); } else { GtkTreeIter repo; char *filename; int valid = gtk_tree_model_iter_nth_child(model,&repo,&parentIter,0); for (;valid;valid=gtk_tree_model_iter_next(model,&repo)){ gtk_tree_model_get(model,&repo,1,&filename,-1); if (!strcmp(yon_char_divide_search(yon_char_new(name_short),".pkg.tar",-1), filename)){ yon_ubl_status_box_render(ALREADY_EXIST,BACKGROUND_IMAGE_FAIL_TYPE); return NULL; } free(filename); } gtk_tree_store_append(main_config.tree_store,&iter,&parentIter); gtk_tree_store_set(main_config.tree_store,&iter,0, document_no_edits, 1, name_short,2,name,3,1,4,fls,-1); retIter = gtk_tree_iter_copy(&iter); } yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&iter); } else if (type==YON_REPO_LINE_REPO_TYPE){ gtk_tree_store_append(main_config.tree_store,&iter,NULL); gtk_tree_store_set(main_config.tree_store,&iter,0, folder_no_edits, 1, name_short,2,name,3,1,4,fls,9,name_short,-1); retIter = gtk_tree_iter_copy(&iter); gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&iter); } else { yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } return retIter; } void yon_repo_remove_package(main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ GtkTreeIter iterparent; if (gtk_tree_model_iter_parent(model,&iterparent,&iter)){ int status = 0; gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&iter,3,&status,-1); if (status != 1){ gtk_tree_store_set(main_config.tree_store,&iter,3,-1,-1); gtk_tree_store_set(main_config.tree_store,&iter,0,document_deleted,-1); } else gtk_tree_store_remove(main_config.tree_store,&iter); yon_ubl_status_box_render(OPERATION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); }else yon_ubl_status_box_render(CHOOSE_PACK_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void yon_repo_remove(main_window *widgets){ GtkTreeIter iter, childIter, *deletecopy; GtkTreeModel *model = GTK_TREE_MODEL(main_config.tree_store); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),&model,&iter)){ if(gtk_tree_store_iter_depth(main_config.tree_store,&iter)==0){ int repostatus=0; gtk_tree_model_get(GTK_TREE_MODEL(main_config.tree_store),&iter,3,&repostatus,-1); if (repostatus ==0){ gtk_tree_store_set(main_config.tree_store,&iter,3,-1,0,folder_deleted,-1); int valid=gtk_tree_model_iter_children(model,&childIter,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&childIter)){ int status=5; gtk_tree_model_get(model,&childIter,3,&status,-1); if (status==1){ deletecopy = gtk_tree_iter_copy(&childIter); gtk_tree_model_iter_previous(model,&childIter); gtk_tree_store_remove(main_config.tree_store,deletecopy); } else if (status == 0){ gtk_tree_store_set(main_config.tree_store,&childIter, 0,document_deleted,3,-1,-1); } } } else if (repostatus == 1) { gtk_tree_store_remove(main_config.tree_store,&iter); } }else yon_ubl_status_box_render(CHOOSE_REPO_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } else yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } gboolean yon_check_file_pattern(GtkFileFilterInfo *info){ if (!strstr(info->filename,".sig")&&strstr(info->filename,".pkg.tar.")) return 1; else return 0; } void yon_add_file(main_window *widgets){ GtkWidget *chooser = gtk_file_chooser_dialog_new(ADD_PACKAGE_REPO_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); GtkFileFilter *file_filter = gtk_file_filter_new(); file_filter = gtk_file_filter_new(); gtk_file_filter_add_custom(file_filter,GTK_FILE_FILTER_FILENAME,(GtkFileFilterFunc)yon_check_file_pattern,NULL,NULL); gtk_file_filter_set_name(file_filter,".pkg.tar.*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser),file_filter); file_filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(file_filter,"*"); gtk_file_filter_set_name(file_filter,"All"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser),file_filter); gtk_window_set_icon_name(GTK_WINDOW(chooser),"com.ublinux.ubl-settings-repomanager"); int res = gtk_dialog_run(GTK_DIALOG(chooser)); if (res==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); FILE *file = popen(get_package_info_command(filename),"r"); char *cur_string=g_malloc0(sizeof(char)*4096); char *packname=NULL, *packver=NULL, *packarch=NULL, *packdepends=NULL; while (fgets(cur_string,4096,file)){ char *stringe = yon_char_divide_search(cur_string,"\n",-1); char *p = yon_char_divide_search(stringe,":",-1); if (strstr(p,"Name")) packname = yon_char_new(stringe); else if (strstr(p,"Version")) packver = yon_char_new(stringe); else if (strstr(p,"Architecture")) packarch = yon_char_new(stringe); else if (strstr(p,"Depends On")) packdepends = yon_char_new(stringe); else if (strstr(p,"Depends On")) packdepends = yon_char_new(stringe); } int add = 1; GtkTreeIter *iter = yon_repo_append(widgets,filename,YON_REPO_LINE_FILE_TYPE); if (iter){ gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->RepoTree),gtk_tree_model_get_path(GTK_TREE_MODEL(main_config.tree_store),iter)); gtk_tree_store_set(main_config.tree_store,iter,0,document_added,1,yon_char_unite(packname,"-",packver,"-",packarch,NULL),2,filename,3,add,9,packname,10,packver,11,packarch,12,packdepends,-1); } } on_tree_selection_changed(NULL,widgets); on_close_subwindow(chooser); } /* setup functions */ void config_init(){ main_config.tree_store=NULL; main_config.always_open_documentation=0; main_config.win_height=0; main_config.win_width=0; main_config.win_pos_x=0; main_config.win_pos_y=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_window *setup_window(){ /* Widgets getting | Получение виджетов */ main_window *widgets = malloc(sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); widgets->HatLabel = yon_gtk_builder_get_widget(builder,"headerTopic"); widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox"); widgets->MovePaned = yon_gtk_builder_get_widget(builder,"MovePaned"); widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"HeadOverlay"); widgets->HeadImage = yon_gtk_builder_get_widget(builder,"HeadBackgroundImage"); widgets->HeadBox = yon_gtk_builder_get_widget(builder,"HeaderBox"); widgets->HeadTitleLabel = yon_gtk_builder_get_widget(builder,"HeaderTitleLabel"); widgets->HeadInfoLabel = yon_gtk_builder_get_widget(builder,"HeaderInfoLabel"); widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox"); widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon"); widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel"); widgets->SaveLabel = yon_gtk_builder_get_widget(builder,"headerSaveConfigLabel"); widgets->SaveMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalLocalConfigurationMenuItem"); widgets->SaveGlobalMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalConfigurationMenuItem"); widgets->SaveLocalMenuItem = yon_gtk_builder_get_widget(builder,"SaveLocalConfigurationMenuItem"); widgets->RightBox = yon_gtk_builder_get_widget(builder,"HeaderRightBox"); widgets->LoadLabel = yon_gtk_builder_get_widget(builder,"headerLoadConfigLabel"); widgets->LoadGlobalMenuItem = yon_gtk_builder_get_widget(builder,"LoadGlobalConfigurationMenuItem"); widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem"); widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox"); widgets->GeneralTabLabel = yon_gtk_builder_get_widget(builder,"GeneralTabLabel"); widgets->PublicationTabLabel = yon_gtk_builder_get_widget(builder,"PublicationTabLabel"); widgets->CreateButton = yon_gtk_builder_get_widget(builder,"CreateButton"); widgets->LoadFromNetButton = yon_gtk_builder_get_widget(builder,"LoadNetButton"); widgets->ConfigureButton = yon_gtk_builder_get_widget(builder,"ConfigureButton"); widgets->DeleteButton = yon_gtk_builder_get_widget(builder,"DeleteButton"); widgets->LoadFromLocalButton = yon_gtk_builder_get_widget(builder,"LoadLocalButton"); widgets->SwitchPublishButton = yon_gtk_builder_get_widget(builder,"SwitchPublishButton"); widgets->CheckDependencesButton = yon_gtk_builder_get_widget(builder,"CheckDependencesButton"); widgets->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); widgets->AddPackageButton = yon_gtk_builder_get_widget(builder,"AddPackageButton"); widgets->RemovePackageButton = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); widgets->RepoTree = yon_gtk_builder_get_widget(builder,"RepoTree"); widgets->TrustedRepoCheck = yon_gtk_builder_get_widget(builder,"TrustedCheck"); widgets->ServerTypeLabel = yon_gtk_builder_get_widget(builder,"ServerLabel"); widgets->ServerTypeCombo = yon_gtk_builder_get_widget(builder,"ServerCombo"); widgets->IpAdressLabel = yon_gtk_builder_get_widget(builder,"IpAdresslabel"); widgets->IpAdressCombo = yon_gtk_builder_get_widget(builder,"IpAdressCombo"); widgets->PortLabel = yon_gtk_builder_get_widget(builder,"PortLabel"); widgets->PortSpin = yon_gtk_builder_get_widget(builder,"PortSpin"); widgets->OutputEntry = yon_gtk_builder_get_widget(builder,"OutputEntry"); widgets->CopyButton = yon_gtk_builder_get_widget(builder,"CopyButton"); widgets->PublishButton = yon_gtk_builder_get_widget(builder,"PublishButton"); widgets->CodeNameLabel = yon_gtk_builder_get_widget(builder,"CodeNameLabel"); widgets->CodeNameInfoLabel = yon_gtk_builder_get_widget(builder,"CodeNameInfoLabel"); widgets->BranchLabel = yon_gtk_builder_get_widget(builder,"BranchLabel"); widgets->BranchInfoLabel = yon_gtk_builder_get_widget(builder,"BranchInfoLabel"); widgets->VersionLabel = yon_gtk_builder_get_widget(builder,"VersionLabel"); widgets->VersionInfoLabel = yon_gtk_builder_get_widget(builder,"VersionInfoLabel"); widgets->ArchitectureLabel = yon_gtk_builder_get_widget(builder,"ArchitectureLabel"); widgets->ArchitectureInfoLabel = yon_gtk_builder_get_widget(builder,"ArchitectureInfoLabel"); widgets->ComponentsLabel = yon_gtk_builder_get_widget(builder,"ComponentsLabel"); widgets->DependencesInfoLabel = yon_gtk_builder_get_widget(builder,"DependencesInfoLabel"); widgets->SignatureLabel = yon_gtk_builder_get_widget(builder,"SignatureLabel"); widgets->SignatureInfoLabel = yon_gtk_builder_get_widget(builder,"SignatureInfoLabel"); widgets->Finder = yon_gtk_builder_get_widget(builder,"RepoFinder"); widgets->NameBox = yon_gtk_builder_get_widget(builder,"nameBox"); widgets->VersionBox = yon_gtk_builder_get_widget(builder,"versionBox"); widgets->ArchitectureBox = yon_gtk_builder_get_widget(builder,"archBox"); widgets->DependenceBox = yon_gtk_builder_get_widget(builder,"dependBox"); widgets->SignatureBox = yon_gtk_builder_get_widget(builder,"signatureBox"); widgets->SaveButton = yon_gtk_builder_get_widget(builder,"mainSaveButton"); main_config.tree_store = GTK_TREE_STORE(gtk_builder_get_object(builder,"RepoStore")); widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL); widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL); gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL); GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem); if (main_config.lock_load_global == 1){ gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); } if (main_config.lock_save_global == 1&&main_config.lock_save_local == 1){ gtk_widget_set_sensitive(gtk_widget_get_parent(gtk_widget_get_parent(widgets->SaveLabel)),0); }else{ if (main_config.lock_save_global == 1){ gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0); gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } if (main_config.lock_save_local == 1){ gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0); gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } } /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ yon_window_config_add_listener(widgets->MovePaned,"pane_position","position",YON_TYPE_INT); /* Signal connection | Присоединение сигналов */ g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL); g_signal_connect(G_OBJECT(widgets->CreateButton),"clicked",G_CALLBACK(on_repo_new),widgets); g_signal_connect(G_OBJECT(widgets->AddPackageButton),"clicked",G_CALLBACK(on_repo_add_file),widgets); g_signal_connect(G_OBJECT(widgets->RemovePackageButton),"clicked",G_CALLBACK(on_repo_remove_package),widgets); g_signal_connect(G_OBJECT(widgets->DeleteButton),"clicked",G_CALLBACK(on_repo_remove),widgets); g_signal_connect(G_OBJECT(widgets->LoadFromLocalButton),"clicked",G_CALLBACK(on_repo_load_local),widgets); g_signal_connect(G_OBJECT(widgets->ConfigureButton),"clicked",G_CALLBACK(on_repo_configure),widgets); g_signal_connect(G_OBJECT(widgets->SignButton),"clicked",G_CALLBACK(on_repo_sign),widgets); g_signal_connect(G_OBJECT(widgets->SaveButton),"clicked",G_CALLBACK(on_save),widgets); g_signal_connect(G_OBJECT(widgets->RepoTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->Finder),"changed",G_CALLBACK(on_search),widgets); /* Localisation | Локализация */ gtk_widget_show(widgets->Window); return widgets; } int main(int argc, char *argv[]){ local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); int option_index=0; int show_help=0; int debug_mode=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'}, {"debug", 0,0, 'd'}, {"clean-config", 0,0, 'c'}, { NULL, 0, NULL, 0 } }; for (int i=0;iHeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); yon_ubl_status_box_render(LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id); yon_window_config_setup(GTK_WINDOW(widgets->Window)); yon_window_config_load(config_path); /*Check for null config parameter | Проверка на отсутствующий в конфигурации параметр */ GValue *val = g_malloc0(sizeof(GValue)); g_object_get_property(G_OBJECT(widgets->MovePaned),"position",val); int paned_size = g_value_get_int(val); if (paned_size<100) gtk_paned_set_position(GTK_PANED(widgets->MovePaned),400); on_load(); GtkTreeIter *iter = g_malloc0(sizeof(GtkTreeIter)); if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.tree_store),iter)) gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoTree)),iter); GtkCssProvider *css=gtk_css_provider_new(); gtk_css_provider_load_from_resource(css,CssPath); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(css), -1); gtk_main(); }