Returned terminal command executing #39

Merged
asmeron merged 28 commits from YanTheKaller/ubl-settings-system:master into master 2 years ago

@ -457,13 +457,14 @@ domain_info_window *yon_information_window_new(){
domain_info_window *window = malloc(sizeof(domain_info_window)); domain_info_window *window = malloc(sizeof(domain_info_window));
window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); window->Window = yon_gtk_builder_get_widget(builder,"MainWindow");
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel");
window->ExecuteTerminal = yon_gtk_builder_get_widget(builder,"ExecuteTerminal"); window->ExecuteTerminal = yon_gtk_builder_get_widget(builder,"ExecuteTerminal");
window->TerminalScroll = yon_gtk_builder_get_widget(builder,"TerminalScroll"); window->TerminalScroll = yon_gtk_builder_get_widget(builder,"TerminalScroll");
yon_gtk_widget_set_scroll_window_for_scroll(window->Window,GTK_SCROLLBAR(window->TerminalScroll)); yon_gtk_widget_set_scroll_window_for_scroll(window->Window,GTK_SCROLLBAR(window->TerminalScroll));
GdkRGBA rgba; GdkRGBA rgba;
vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->ExecuteTerminal),&rgba); vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->ExecuteTerminal),&rgba);
vte_terminal_set_color_cursor(VTE_TERMINAL(window->ExecuteTerminal),&rgba); // vte_terminal_set_color_cursor(VTE_TERMINAL(window->ExecuteTerminal),&rgba);
yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,TITLE_LABEL,"com.ublinux.ubl-settings-system","InfoWindow"); yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,TITLE_LABEL,"com.ublinux.ubl-settings-system","InfoWindow");
return window; return window;
@ -478,7 +479,6 @@ void on_domain_connect(GtkWidget *self, dictionary *dict){
yon_ubl_status_highlight_incorrect(window->AdressEntry); yon_ubl_status_highlight_incorrect(window->AdressEntry);
return; return;
} }
g_source_remove(window->timer_id);
char *login = (char*)gtk_entry_get_text(GTK_ENTRY(window->LoginEntry)); char *login = (char*)gtk_entry_get_text(GTK_ENTRY(window->LoginEntry));
char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry));
char *kerberos = (char*)gtk_entry_get_text(GTK_ENTRY(window->KerberosServerEntry)); char *kerberos = (char*)gtk_entry_get_text(GTK_ENTRY(window->KerberosServerEntry));
@ -488,53 +488,33 @@ void on_domain_connect(GtkWidget *self, dictionary *dict){
client = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ClientCombo)); client = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ClientCombo));
} }
char *final = yon_char_unite(!yon_char_is_empty(kerberos)?kerberos_addition_command(kerberos):"",!yon_char_is_empty(kerberos)?" ":"",!yon_char_is_empty(dns)?dns_addition_command(dns):"",!yon_char_is_empty(dns)?" ":"",!yon_char_is_empty(client)?client_addition_command(client):"",!yon_char_is_empty(client)?" ":"",NULL); char *final = yon_char_unite(!yon_char_is_empty(kerberos)?kerberos_addition_command(kerberos):"",!yon_char_is_empty(kerberos)?" ":"",!yon_char_is_empty(dns)?dns_addition_command(dns):"",!yon_char_is_empty(dns)?" ":"",!yon_char_is_empty(client)?client_addition_command(client):"",!yon_char_is_empty(client)?" ":"",NULL);
int size;
domain_info_window *dialog = yon_information_window_new();
gtk_window_set_title(GTK_WINDOW(dialog->Window),DOMAIN_CONNECTING_LABEL);
gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),DOMAIN_CONNECTING_LABEL);
yon_debug_output(domain_connect_command(adress,login,password,final)); yon_debug_output(domain_connect_command(adress,login,password,final));
int size_; yon_debug_output(terminal_command_start(TITLE_LABEL,domain_connect_command(adress,login,password,final)));
config_str test = yon_config_load(domain_disconnect_command(adress,login,password),&size_); yon_launch_app_with_arguments(terminal_command_start(TITLE_LABEL,domain_connect_command(adress,login,password,final)),"");
vte_terminal_feed(VTE_TERMINAL(dialog->ExecuteTerminal),yon_char_parsed_to_string(test,size_,""),-1);
gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress); gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress);
gtk_widget_show(dialog->Window);
} }
void on_status_clicked(GtkWidget *self, connection_window *window){ void on_status_clicked(GtkWidget *self, connection_window *window){
domain_info_window *dialog = yon_information_window_new();
char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry));
if (!yon_char_is_empty(target)){ if (!yon_char_is_empty(target)){
yon_debug_output(domain_info(target)); yon_debug_output(domain_info(target));
int size_; yon_launch_app_with_arguments(terminal_command_start(TITLE_LABEL,domain_info(target)),"");
config_str test = yon_config_load(domain_info(target),&size_);
vte_terminal_feed(VTE_TERMINAL(dialog->ExecuteTerminal),yon_char_parsed_to_string(test,size_,""),-1);
} }
gtk_widget_show(dialog->Window);
} }
void on_find_domains_clicked(GtkWidget *self, connection_window *window){ void on_find_domains_clicked(GtkWidget *self, connection_window *window){
domain_info_window *dialog = yon_information_window_new();
yon_debug_output(domains_seek_command); yon_debug_output(domains_seek_command);
int size_; yon_launch_app_with_arguments(terminal_command_start(TITLE_LABEL,domains_seek_command),"");
config_str test = yon_config_load(domains_seek_command,&size_);
vte_terminal_feed(VTE_TERMINAL(dialog->ExecuteTerminal),yon_char_parsed_to_string(test,size_,""),-1);
gtk_widget_show(dialog->Window);
} }
void on_main_window_domain_status_clicked(GtkWidget *self, GtkEntryIconPosition icon_pos,GdkEvent* event,main_window *widgets){ void on_main_window_domain_status_clicked(GtkWidget *self, GtkEntryIconPosition icon_pos,GdkEvent* event,main_window *widgets){
if (icon_pos==GTK_ENTRY_ICON_SECONDARY){ if (icon_pos==GTK_ENTRY_ICON_SECONDARY&&main_config.domain_connected){
char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry)); char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry));
if (!yon_char_is_empty(target)){ if (!yon_char_is_empty(target)){
domain_info_window *window = yon_information_window_new();
gtk_widget_show(window->Window);
yon_debug_output(get_domain_info_command); yon_debug_output(get_domain_info_command);
int size_; yon_launch_app_with_arguments(terminal_command_start(TITLE_LABEL,get_domain_info_command),"");
config_str test = yon_config_load(get_domain_info_command,&size_);
vte_terminal_feed(VTE_TERMINAL(window->ExecuteTerminal),yon_char_parsed_to_string(test,size_,""),-1);
} }
} }
} }
@ -597,15 +577,9 @@ void on_domain_disconnect(GtkWidget *self, dictionary *dict){
yon_ubl_status_highlight_incorrect(window->AdressEntry); yon_ubl_status_highlight_incorrect(window->AdressEntry);
return; return;
} }
int size;
domain_info_window *dialog = yon_information_window_new();
gtk_widget_show(dialog->Window);
yon_debug_output(domain_disconnect_command(adress,login,password)); yon_debug_output(domain_disconnect_command(adress,login,password));
int size_; yon_launch_app_with_arguments(terminal_command_start(TITLE_LABEL,domain_disconnect_command(adress,login,password)),"");
config_str test = yon_config_load(domain_disconnect_command(adress,login,password),&size_);
vte_terminal_feed(VTE_TERMINAL(dialog->ExecuteTerminal),yon_char_parsed_to_string(test,size_,""),-1);
gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress); gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress);
on_subwindow_close(window->Window);
} }
domain_window *yon_domain_window_new(){ domain_window *yon_domain_window_new(){
@ -645,6 +619,7 @@ void on_domain_opened(GtkWidget *self, main_window *widgets){
yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_disconnect),dict); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_disconnect),dict);
g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_check_domain_connected),widgets);
gtk_widget_show(window->Window); gtk_widget_show(window->Window);
} else { } else {
@ -672,6 +647,7 @@ void on_domain_opened(GtkWidget *self, main_window *widgets){
yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_connect),dict); g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_connect),dict);
g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_check_domain_connected),widgets);
gtk_widget_show(window->Window); gtk_widget_show(window->Window);
} }
@ -692,14 +668,17 @@ void config_init(){
main_config.domain_connected=0; main_config.domain_connected=0;
} }
void on_check_domain_connected(main_window *widgets){ void on_check_domain_connected(GtkWidget *self, main_window *widgets){
if (!system(domain_connect_check)){ int ansv = system(domain_connect_check);
if (!ansv){
gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_connected_icon); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_connected_icon);
gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_DISCONNECT_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_DISCONNECT_LABEL);
gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,DOMAIN_CONNECTED_LABEL);
main_config.domain_connected=1; main_config.domain_connected=1;
} else { } else {
gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon);
gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_CONNECT_LABEL); gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_CONNECT_LABEL);
gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,DOMAIN_DISCONNECTED_LABEL);
main_config.domain_connected=0; main_config.domain_connected=0;
} }
} }
@ -708,7 +687,7 @@ main_window *yon_main_window_complete(main_window *widgets){
/* Widgets getting | Получение виджетов */ /* Widgets getting | Получение виджетов */
widgets = yon_remalloc(widgets,sizeof(main_window)); widgets = yon_remalloc(widgets,sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); 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); gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),0,0,0);
widgets->HostnameEntry = yon_gtk_builder_get_widget(builder,"HostnameEntry"); widgets->HostnameEntry = yon_gtk_builder_get_widget(builder,"HostnameEntry");
widgets->IDCombo = yon_gtk_builder_get_widget(builder,"IDCombo"); widgets->IDCombo = yon_gtk_builder_get_widget(builder,"IDCombo");
@ -764,8 +743,10 @@ main_window *yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->DomainEntry),"changed",G_CALLBACK(yon_gtk_windget_set_sensitive_from_entry_emptiness),widgets->DomainButton); g_signal_connect(G_OBJECT(widgets->DomainEntry),"changed",G_CALLBACK(yon_gtk_windget_set_sensitive_from_entry_emptiness),widgets->DomainButton);
g_signal_connect(G_OBJECT(widgets->DomainEntry),"focus-out-event",G_CALLBACK(on_domain_address_save),NULL); g_signal_connect(G_OBJECT(widgets->DomainEntry),"focus-out-event",G_CALLBACK(on_domain_address_save),NULL);
gtk_widget_set_size_request(widgets->Window,800,440);
g_timeout_add(1000,(GSourceFunc)on_check_domain_connected,widgets); // g_timeout_add(1000,(GSourceFunc)on_check_domain_connected,widgets);
main_config.localeslist = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); main_config.localeslist = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
int size; int size;

@ -80,12 +80,15 @@
#define domain_check_alive(target) yon_char_unite("timeout --kill-after=0.1 2 dig +time=1 +tries=1 +noall -t SRV _ldap._tcp.",target," @",target," &>/dev/null",NULL) #define domain_check_alive(target) yon_char_unite("timeout --kill-after=0.1 2 dig +time=1 +tries=1 +noall -t SRV _ldap._tcp.",target," @",target," &>/dev/null",NULL)
#define terminal_command_start(title,command) yon_char_unite("vte-2.91 --name=vte --cursor-shape=ibeam --cursor-blink=off --keep --no-pty --title=\"",title,"\" --no-shell --icon-title --no-context-menu -background-color='rgb(0,0,0)' --foreground-color='rgb(255,255,255)' --whole-window-transparent --no-geometry-hints -- ", command, NULL)
#define DOMAIN "DOMAIN" #define DOMAIN "DOMAIN"
#define DOMAIN_ADMANGER "DOMAIN[admanger]" #define DOMAIN_ADMANGER "DOMAIN[admanger]"
#define DOMAIN_SERVER "DOMAIN[server]" #define DOMAIN_SERVER "DOMAIN[server]"
#define DOMAIN_DNS "DOMAIN[dns]" #define DOMAIN_DNS "DOMAIN[dns]"
#define DOMAIN_CLIENT "DOMAIN[client]" #define DOMAIN_CLIENT "DOMAIN[client]"
typedef char* string; typedef char* string;
string version_application; string version_application;
@ -178,6 +181,7 @@ typedef struct {
typedef struct { typedef struct {
GtkWidget *Window; GtkWidget *Window;
GtkWidget *StatusBox;
GtkWidget *HeadLabel; GtkWidget *HeadLabel;
@ -186,4 +190,6 @@ typedef struct {
} domain_info_window; } domain_info_window;
main_window *setup_window(); main_window *setup_window();
void on_id_changed(GtkEntry *self, main_window *widgets); void on_id_changed(GtkEntry *self, main_window *widgets);
void on_check_domain_connected(GtkWidget *self, main_window *widgets);

@ -52,4 +52,9 @@
#define DOMAIN_CONNECTING_LABEL _("Connecting to domain") #define DOMAIN_CONNECTING_LABEL _("Connecting to domain")
#define DOMAIN_CONNECT_LABEL _("Connect to domain") #define DOMAIN_CONNECT_LABEL _("Connect to domain")
#define DOMAIN_DISCONNECT_LABEL _("Disconnect from domain") #define DOMAIN_DISCONNECT_LABEL _("Disconnect from domain")
#define DOMAIN_CONNECTED_LABEL _("Connected to domain")
#define DOMAIN_DISCONNECTED_LABEL _("Disconnected from domain")
#define LOADING_LABEL _("Loading...")

@ -13,7 +13,6 @@
<property name="width-request">800</property> <property name="width-request">800</property>
<property name="height-request">600</property> <property name="height-request">600</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-repomanager</property> <property name="icon-name">com.ublinux.ubl-settings-repomanager</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
@ -43,7 +42,7 @@
<child> <child>
<object class="VteTerminal" id="ExecuteTerminal"> <object class="VteTerminal" id="ExecuteTerminal">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="hscroll-policy">natural</property> <property name="hscroll-policy">natural</property>
<property name="vadjustment">adjustment1</property> <property name="vadjustment">adjustment1</property>
<property name="vscroll-policy">natural</property> <property name="vscroll-policy">natural</property>

@ -52,7 +52,7 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Domain adress:</property> <property name="label" translatable="yes">Domain address:</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
<packing> <packing>

@ -196,3 +196,15 @@ msgstr ""
#: source/ubl-strings.h:55 #: source/ubl-strings.h:55
msgid "Disconnect from domain" msgid "Disconnect from domain"
msgstr "" msgstr ""
#: source/ubl-strings.h:57
msgid "Connected to domain"
msgstr ""
#: source/ubl-strings.h:58
msgid "Disconnected from domain"
msgstr ""
#: source/ubl-strings.h:60
msgid "Loading..."
msgstr ""

@ -148,7 +148,7 @@ msgstr "Сервер домена Kerberos/AD"
#: source/ubl-strings.h:42 #: source/ubl-strings.h:42
msgid "DNS server:" msgid "DNS server:"
msgstr "DNS сервер" msgstr "DNS сервер:"
#: source/ubl-strings.h:43 #: source/ubl-strings.h:43
msgid "Domain connection client" msgid "Domain connection client"
@ -198,6 +198,18 @@ msgstr "Войти в домен"
msgid "Disconnect from domain" msgid "Disconnect from domain"
msgstr "Выйти из домена" msgstr "Выйти из домена"
#: source/ubl-strings.h:57
msgid "Connected to domain"
msgstr "Подключен к домену"
#: source/ubl-strings.h:60
msgid "Loading..."
msgstr "Загрузка..."
#: source/ubl-strings.h:58
msgid "Disconnected from domain"
msgstr "Не подключен к домену"
msgid "Version:" msgid "Version:"
msgstr "Версия:" msgstr "Версия:"

Loading…
Cancel
Save