Integrated terminal for drivers deleting and installing test

pull/9/head^2
parent a8a324789f
commit c787feb47e

@ -24,7 +24,7 @@ set(SOURCE_FILES
set(LIBRARIES set(LIBRARIES
${GTK_LIBRARIES} ${GTK_LIBRARIES}
pthread pthread
vte) vte-2.91)
add_executable(ubl-settings-video ${SOURCE_FILES}) add_executable(ubl-settings-video ${SOURCE_FILES})

@ -72,6 +72,12 @@ void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){
on_subwindow_close(self); on_subwindow_close(self);
} }
static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data)
{
if (!terminal) return;
if (pid == -1) printf("Error\n\n\n");
}
void on_driver_pack_install(GtkWidget *self,widgets_dict *widgets){ void on_driver_pack_install(GtkWidget *self,widgets_dict *widgets){
GtkTreeIter iter; GtkTreeIter iter;
char *name; char *name;
@ -80,7 +86,50 @@ void on_driver_pack_install(GtkWidget *self,widgets_dict *widgets){
gtk_tree_selection_get_selected(selection,&list_s,&iter); gtk_tree_selection_get_selected(selection,&list_s,&iter);
gtk_tree_model_get(list_s,&iter,1,&name,-1); gtk_tree_model_get(list_s,&iter,1,&name,-1);
pthread_t tid; pthread_t tid;
pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(install_proprietary_command,name)); char **command=new_arr(char*,2);
gchar **envp = g_get_environ();
command[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL"));
command[1]=NULL;
char **env=new_arr(char*,2);
env[0]="";
env[1]=NULL;
GtkWidget *terminal = vte_terminal_new();
// vte_terminal_set_size(VTE_TERMINAL(terminal),50,100);
gtk_box_pack_start(GTK_BOX(widgets->TerminalBox),terminal,1,1,0);
VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL);
// VtePty *pty = vte_terminal_pty_new_sync(VTE_TERMINAL(terminal),VTE_PTY_DEFAULT,NULL,NULL);
vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
vte_terminal_spawn_async(VTE_TERMINAL(terminal),
VTE_PTY_DEFAULT,
NULL, /* working directory */
command, /* command */
NULL, /* environment */
0, /* spawn flags */
NULL, NULL, /* child setup */
NULL, /* child pid */
-1, /* timeout */
NULL, /* cancellable */
child_ready, /* callback */
NULL); /* user_data */
vte_pty_spawn_async(pty,
NULL, /* working directory */
command, /* command */
NULL, /* environment */
0, /* spawn flags */
NULL, NULL, /* child setup */
NULL, /* child pid */
-1, /* timeout */
NULL, /* cancellable */
NULL, /* callback */
NULL); /* user_data */
char *install_command=yon_char_unite(install_proprietary_command,name,"\n",NULL);
vte_terminal_feed_child(VTE_TERMINAL(terminal),install_command,strlen(install_command));
vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), 0);
vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), FALSE);
vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE);
gtk_widget_show_all(widgets->TerminalWindow);
// pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(install_proprietary_command,name));
} }
@ -93,7 +142,7 @@ void on_driver_install(GtkWidget *self,widgets_dict *widgets){
gtk_tree_selection_get_selected(selection,&list_s,&iter); gtk_tree_selection_get_selected(selection,&list_s,&iter);
gtk_tree_model_get(list_s,&iter,1,&name,-1); gtk_tree_model_get(list_s,&iter,1,&name,-1);
pthread_t tid; pthread_t tid;
pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(install_proprietary_command,name)); // pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(install_proprietary_command,name));
} }
@ -106,7 +155,7 @@ void on_driver_pack_delete(GtkWidget *self,widgets_dict *widgets){
gtk_tree_selection_get_selected(selection,&list_s,&iter); gtk_tree_selection_get_selected(selection,&list_s,&iter);
gtk_tree_model_get(list_s,&iter,1,&name,-1); gtk_tree_model_get(list_s,&iter,1,&name,-1);
pthread_t tid; pthread_t tid;
pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(delete_proprietary_command,name)); // pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(delete_proprietary_command,name));
} }
@ -119,7 +168,7 @@ void on_driver_delete(GtkWidget *self,widgets_dict *widgets){
gtk_tree_selection_get_selected(selection,&list_s,&iter); gtk_tree_selection_get_selected(selection,&list_s,&iter);
gtk_tree_model_get(list_s,&iter,1,&name,-1); gtk_tree_model_get(list_s,&iter,1,&name,-1);
pthread_t tid; pthread_t tid;
pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(delete_proprietary_command,name)); // pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(delete_proprietary_command,name));
} }
@ -562,29 +611,33 @@ void yon_popen(thread_input *input){
*(FILE**)input->data=popen(input->command,"r"); *(FILE**)input->data=popen(input->command,"r");
} }
void yon_launch_with_output(char *command){ // void yon_launch_with_output(char *command){
pthread_t tid; // pthread_t tid;
FILE *output =NULL; // FILE *output =NULL;
FILE **output_file=&output; // FILE **output_file=&output;
thread_input input; // thread_input input;
input.command=command; // input.command=command;
input.data=output_file; // input.data=output_file;
pthread_create(&tid,NULL,(void*)yon_popen,&input); // pthread_create(&tid,NULL,(void*)yon_popen,&input);
// char **output_strings = NULL; // char *output_strings = "";
// output_strings = malloc(sizeof(char)); // int i = 0;
// int i = 0; // char str[1000];
// char str[1000]; // memset(str, 0, 1000);
// memset(str, 0, 1000); // while (1){
// while (1){ // clock();
// if (output){ // if (output){
// if (fgets(str, 1000, output)){ // if (fgets(str, 1000, output)){
// videoconfig.status_render.text_to_render=str; // output_strings=yon_char_get_augumented(output_strings,str);
// videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; // videoconfig.status_render.text_to_render=output_strings;
// _yon_ubl_status_box_render(&videoconfig.status_render); // videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE;
// } // _yon_ubl_status_box_render(&videoconfig.status_render);
// } // }
// } // }
} // float passed = clock();
// if ((passed=passed/_SC_CLK_TCK)<0.5)
// sleep(passed);
// }
// }
/**void yon_monitor_view_draw_all(GtkWidget *cnt) /**void yon_monitor_view_draw_all(GtkWidget *cnt)
* [EN] * [EN]
@ -1224,6 +1277,9 @@ void yon_setup_widgets(widgets_dict *widgets)
widgets->driversInfoButton = yon_gtk_builder_get_widget(widgets->builder, "driversInfoButton"); widgets->driversInfoButton = yon_gtk_builder_get_widget(widgets->builder, "driversInfoButton");
widgets->driversDeleteButton = yon_gtk_builder_get_widget(widgets->builder, "driversDeleteButton"); widgets->driversDeleteButton = yon_gtk_builder_get_widget(widgets->builder, "driversDeleteButton");
widgets->driversInstallButton = yon_gtk_builder_get_widget(widgets->builder, "driversInstallButton"); widgets->driversInstallButton = yon_gtk_builder_get_widget(widgets->builder, "driversInstallButton");
widgets->TerminalWindow = yon_gtk_builder_get_widget(widgets->builder, "TerminalWindow");
widgets->TerminalBox = yon_gtk_builder_get_widget(widgets->builder, "TerminalBox");
widgets->TerminalHeaderTitleLabel = yon_gtk_builder_get_widget(widgets->builder, "TerminalHeaderTitleLabel");
widgets->driversTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(widgets->builder, "driversTreeSelection")); widgets->driversTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(widgets->builder, "driversTreeSelection"));
widgets->proprietartInstalledColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "proprietartInstalledColumn")); widgets->proprietartInstalledColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "proprietartInstalledColumn"));

@ -1,7 +1,9 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gtk/gtkx.h> #include <gtk/gtkx.h>
#include <vte-2.91/vte/vte.h>
#include <locale.h> #include <locale.h>
#include <stdio.h> #include <stdio.h>
#include <time.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <libintl.h> #include <libintl.h>
@ -51,7 +53,7 @@
#define remove_drivers_local_command "/usr/bin/ubconfig --target global remove video " #define remove_drivers_local_command "/usr/bin/ubconfig --target global remove video "
#define install_proprietary_command "pkexec pacman -Sy --noconfirm " #define install_proprietary_command "pkexec pacman -Sy "
#define delete_proprietary_command "pkexec pacman -R --noconfirm " #define delete_proprietary_command "pkexec pacman -R --noconfirm "
@ -230,6 +232,10 @@ typedef struct
GtkTreeViewColumn *driverDriverColumn; GtkTreeViewColumn *driverDriverColumn;
GtkTreeViewColumn *driverDescriptionColumn; GtkTreeViewColumn *driverDescriptionColumn;
GtkTreeViewColumn *driverSupportedColumn; GtkTreeViewColumn *driverSupportedColumn;
GtkWidget *TerminalWindow;
GtkWidget *TerminalBox;
GtkWidget *TerminalHeaderTitleLabel;
} widgets_dict; } widgets_dict;
typedef struct typedef struct

@ -99,6 +99,59 @@
</object> </object>
</child> </child>
</object> </object>
<object class="GtkWindow" id="TerminalWindow">
<property name="width-request">800</property>
<property name="height-request">400</property>
<property name="can-focus">False</property>
<property name="default-width">800</property>
<property name="default-height">400</property>
<property name="icon-name">com.ublinux.ubl-settings-video</property>
<child>
<object class="GtkBox" id="TerminalBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="TerminalHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="TerminalHeaderTitleLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="hexpand">False</property>
<property name="label" translatable="yes">UBlinux Video Configuration</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-video</property>
</object>
</child>
</object>
</child>
</object>
<object class="GtkSizeGroup" id="ThirdColumnSizeGroup"/> <object class="GtkSizeGroup" id="ThirdColumnSizeGroup"/>
<object class="GtkAboutDialog" id="aboutWindow"> <object class="GtkAboutDialog" id="aboutWindow">
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -988,6 +1041,14 @@
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child> <child>
<object class="GtkLabel" id="mainStatusLabel"> <object class="GtkLabel" id="mainStatusLabel">
<property name="visible">True</property> <property name="visible">True</property>
@ -1004,6 +1065,16 @@
<attribute name="foreground" value="#000000000000"/> <attribute name="foreground" value="#000000000000"/>
</attributes> </attributes>
</object> </object>
</child>
<style>
<class name="thin"/>
</style>
</object>
</child>
<style>
<class name="thin"/>
</style>
</object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>

Loading…
Cancel
Save