#include "ubl-settings-info.h" config main_config; void yon_terminal_style_update(VteTerminal *, main_window *widgets){ GdkRGBA *bg_color = NULL, *color=NULL; gtk_style_context_get(gtk_widget_get_style_context(widgets->TerminalTemplateLabel),GTK_STATE_FLAG_NORMAL,GTK_STYLE_PROPERTY_BACKGROUND_COLOR,&bg_color,GTK_STYLE_PROPERTY_COLOR,&color,NULL); vte_terminal_set_color_background(VTE_TERMINAL(widgets->InfoTerminal),bg_color); vte_terminal_set_color_foreground(VTE_TERMINAL(widgets->InfoTerminal),color); vte_terminal_set_color_cursor_foreground(VTE_TERMINAL(widgets->InfoTerminal),bg_color); vte_terminal_set_color_cursor(VTE_TERMINAL(widgets->InfoTerminal),bg_color); if (bg_color->blue>0.5&&bg_color->green>0.5&&bg_color->red>0.5){ gtk_image_set_from_file(GTK_IMAGE(widgets->InfoIcon),logo_icon_path); gtk_image_set_pixel_size(GTK_IMAGE(widgets->InfoIcon),255); } else if (bg_color->blue<0.5&&bg_color->green<0.5&&bg_color->red<0.5){ gtk_image_set_from_file(GTK_IMAGE(widgets->InfoIcon),logo_dark_icon_path); gtk_image_set_pixel_size(GTK_IMAGE(widgets->InfoIcon),255); } } void on_theme_changed(GSettings *, char *, main_window *widgets){ yon_terminal_style_update(NULL, widgets); } gboolean yon_adjustment_set(GtkAdjustment *adj){ gtk_adjustment_set_value(adj,0); return G_SOURCE_CONTINUE; } void on_child_exited(GtkWidget *, gint, GtkAdjustment *adj){ g_idle_remove_by_data(adj); } void terminal_integrated_start(GtkWidget *terminal,GtkAdjustment *adj, char* command){ gchar *envv[] = { NULL }; config_str parsed=NULL; int size=0; g_shell_parse_argv(command, &size,&parsed, NULL); vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,"/bin",parsed,envv,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,20,NULL,NULL,NULL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); gtk_widget_show_all(terminal); g_idle_add((GSourceFunc)yon_adjustment_set,adj); } /**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->InfoIcon = yon_gtk_builder_get_widget(builder,"InfoIcon"); widgets->InfoTerminal = yon_gtk_builder_get_widget(builder,"InfoTerminal"); widgets->TerminalTemplateLabel = yon_gtk_builder_get_widget(builder,"TerminalTemplateLabel"); widgets->adjustment = GTK_ADJUSTMENT(gtk_builder_get_object(builder,"adjustment1")); } { g_signal_connect(G_OBJECT(widgets->InfoTerminal),"eof",G_CALLBACK(on_child_exited),widgets->adjustment); terminal_integrated_start(widgets->InfoTerminal,widgets->adjustment,main_command); yon_terminal_style_update(NULL, widgets); GSettings *settings = g_settings_new("org.gnome.desktop.interface"); g_signal_connect(G_OBJECT(settings), "changed",G_CALLBACK(on_theme_changed),widgets); } GList *children = gtk_container_get_children(GTK_CONTAINER(widgets->RightBox)); gtk_widget_hide(GTK_WIDGET(g_list_nth_data(children,0))); gtk_widget_hide(widgets->LeftBox); gtk_widget_hide(widgets->StatusBox); g_list_free(children); } int main(int argc, char *argv[]){ setlocale(LC_ALL, ""); textdomain (LocaleName); yon_ubl_connect_config((_template_config*)&main_config); 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(); //turn off if custom presented yon_main_window_complete((main_window*)widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); gtk_main(); return 0; }