|
|
#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;
|
|
|
} |