Merge pull request 'master' (#128) from YanTheKaller/ubl-settings-video:master into master

Reviewed-on: #128
pull/150/head v2.25
Dmitry Razumov 5 months ago
commit 2fd141d7ee

@ -47,19 +47,31 @@ void on_install_activate(GtkWidget *self, main_window *widgets){
g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_install_activate),widgets); g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_install_activate),widgets);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self),!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self))); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self),!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)));
g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_install_activate),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_install_activate),widgets);
int is_installed = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
driver_struct *driver = g_object_get_data(G_OBJECT(self),"driver_struct"); driver_struct *driver = g_object_get_data(G_OBJECT(self),"driver_struct");
char *install_target = NULL; char *install_target = NULL;
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
if (self == driver->ModuleInstalledCheck){ if (self == driver->ModuleInstalledCheck){
install_target = driver->module; install_target = driver->module;
data->title = is_installed?MODULE_REMOVE_PROCESS_LABEL(install_target):MODULE_INSTALL_PROCESS_LABEL(install_target);
} else if (self == driver->PackageInstalledCheck){ } else if (self == driver->PackageInstalledCheck){
install_target = driver->package; install_target = driver->package;
data->title = is_installed?PACKAGE_REMOVE_PROCESS_LABEL(install_target):PACKAGE_INSTALL_PROCESS_LABEL(install_target);
}
if (is_installed){
data->action_text = REMOVE_CONFIRMATION_LABEL(install_target);
} else {
data->action_text = self == driver->ModuleInstalledCheck?yon_char_unite(INSTALL_CONFIRMATION_LABEL(install_target),"\n",INSTALL_ATTENTION_LABEL,NULL):
INSTALL_CONFIRMATION_LABEL(install_target);
} }
char *command = NULL; char *command = NULL;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self))){ if (is_installed){
command = delete_proprietary_command(install_target); command = delete_proprietary_command(install_target);
} else { } else {
command = install_proprietary_command(install_target); command = install_proprietary_command(install_target);
}
if (yon_confirmation_dialog_call(widgets->Window,data)!=GTK_RESPONSE_ACCEPT){
return;
} }
g_mutex_lock(&main_config.progress_mutex); g_mutex_lock(&main_config.progress_mutex);
main_config.progress_active=1; main_config.progress_active=1;
@ -69,7 +81,7 @@ void on_install_activate(GtkWidget *self, main_window *widgets){
vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1); vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1);
g_signal_connect_after(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_install_check),driver); g_signal_connect_after(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_install_check),driver);
yon_install_buttons_set_sensitive(widgets,0); yon_install_buttons_set_sensitive(widgets,0);
yon_terminal_integrated_start(widgets->InstallTerminal,command); yon_terminal_integrated_start_shell(widgets->InstallTerminal,command,NULL,NULL);
// g_signal_connect(G_OBJECT(widgets->InstallTerminal),"contents-changed",G_CALLBACK(on_terminal_check_progress),widgets); // g_signal_connect(G_OBJECT(widgets->InstallTerminal),"contents-changed",G_CALLBACK(on_terminal_check_progress),widgets);
if (!gtk_widget_get_visible(widgets->TerminalPaned)){ if (!gtk_widget_get_visible(widgets->TerminalPaned)){
on_terminal_revealer_open(NULL,widgets); on_terminal_revealer_open(NULL,widgets);

@ -23,6 +23,7 @@ void on_monitor_delete(GtkWidget *,monitor_data *window){
void on_monitor_switch(GtkWidget *,monitor_data *window){ void on_monitor_switch(GtkWidget *,monitor_data *window){
if(window){ if(window){
const char *name = gtk_label_get_text(GTK_LABEL(window->NameLabel)); const char *name = gtk_label_get_text(GTK_LABEL(window->NameLabel));
if (yon_char_is_empty(name)) return;
char *parameter = config(XORG_MONITOR(name)); char *parameter = config(XORG_MONITOR(name));
int size; int size;
config_str parsed = yon_char_parse(parameter,&size,","); config_str parsed = yon_char_parse(parameter,&size,",");
@ -282,6 +283,15 @@ void on_port_chosen_changed(GtkWidget *, monitor_edit_window *window){
} }
} }
int yon_string_compare(char **a, char **b){
gchar *key_a = g_utf8_collate_key(*a, -1);
gchar *key_b = g_utf8_collate_key(*b, -1);
gint result = strcmp(key_a, key_b);
g_free(key_a);
g_free(key_b);
return result;
}
void on_monitor_configure(GtkWidget *,monitor_data *window){ void on_monitor_configure(GtkWidget *,monitor_data *window){
if(window){ if(window){
@ -312,6 +322,8 @@ void on_monitor_configure(GtkWidget *,monitor_data *window){
monitors->ParameterLineEntry = yon_gtk_builder_get_widget(builder, "ParameterLineEntry"); monitors->ParameterLineEntry = yon_gtk_builder_get_widget(builder, "ParameterLineEntry");
monitors->CancelButton = yon_gtk_builder_get_widget(builder, "CancelButton"); monitors->CancelButton = yon_gtk_builder_get_widget(builder, "CancelButton");
monitors->SaveButton = yon_gtk_builder_get_widget(builder, "SaveButton"); monitors->SaveButton = yon_gtk_builder_get_widget(builder, "SaveButton");
monitors->resolutions = NULL;
monitors->resolutionssize=0;
char *title; char *title;
char *cur_port = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel)); char *cur_port = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel));
@ -346,6 +358,9 @@ void on_monitor_configure(GtkWidget *,monitor_data *window){
} }
guint ports_size; guint ports_size;
config_str ports = (config_str)g_hash_table_get_keys_as_array(main_config.ports_table,&ports_size); config_str ports = (config_str)g_hash_table_get_keys_as_array(main_config.ports_table,&ports_size);
// for (guint i=0;i<ports_size;i++){
qsort(ports,ports_size,sizeof(*ports),(int(*)(const void*,const void*))yon_string_compare);
// }
for (guint i=0;i<ports_size;i++){ for (guint i=0;i<ports_size;i++){
int found = yon_char_parsed_check_exist(config_ports,config_size,ports[i]); int found = yon_char_parsed_check_exist(config_ports,config_size,ports[i]);
if (found==-1||(!yon_char_is_empty(target)&&!strcmp(target,ports[i]))||yon_config_get_status(XORG_MONITOR(ports[i]))==-1){ if (found==-1||(!yon_char_is_empty(target)&&!strcmp(target,ports[i]))||yon_config_get_status(XORG_MONITOR(ports[i]))==-1){
@ -399,13 +414,17 @@ void on_monitor_configure(GtkWidget *,monitor_data *window){
resolution = current; resolution = current;
} }
if (!yon_char_is_empty(target)&&!yon_char_is_empty(resolutions)&&!strstr(resolutions,resolution)){ if (!yon_char_is_empty(resolution)&&!yon_char_is_empty(target)&&!yon_char_is_empty(resolutions)&&!strstr(resolutions,resolution)){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->UnsupportedCheck),1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->UnsupportedCheck),1);
while(gtk_events_pending()) gtk_main_iteration(); while(gtk_events_pending()) gtk_main_iteration();
} }
if (!yon_char_is_empty(resolution)){
gtk_combo_box_set_active_id(GTK_COMBO_BOX(monitors->ResolutionCombo),resolution); gtk_combo_box_set_active_id(GTK_COMBO_BOX(monitors->ResolutionCombo),resolution);
}else{
gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->ResolutionCombo),0);
}
} }
} }
gtk_widget_show(monitors->MainWindow); gtk_widget_show(monitors->MainWindow);

@ -76,7 +76,7 @@ END {\n\
#define get_resolutions_supportable_command "resource:///com/ublinux/csv/resolutions.csv" #define get_resolutions_supportable_command "resource:///com/ublinux/csv/resolutions.csv"
#define install_proprietary_command(target) yon_char_append("pacman --quiet --needed -Sy ",target) #define install_proprietary_command(target) yon_char_append("echo y| pacman --quiet --needed -Sy ",target)
#define delete_proprietary_command(target) yon_char_append("pacman -R --noconfirm ",target) #define delete_proprietary_command(target) yon_char_append("pacman -R --noconfirm ",target)
@ -471,5 +471,6 @@ char *yon_optirun_default(char *target);
char *yon_primusrun_default(char *target); char *yon_primusrun_default(char *target);
void yon_all_resolutions_update(); void yon_all_resolutions_update();
void yon_monitor_port_manual(GtkToggleButton *self,monitor_edit_window *monitors); void yon_monitor_port_manual(GtkToggleButton *self,monitor_edit_window *monitors);
int yon_string_compare(char **a, char **b);
#endif #endif

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.40.0 -->
<interface domain="ubl-settings-video"> <interface domain="ubl-settings-video">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-video.css --> <!-- interface-css-provider-path ubl-settings-video.css -->
@ -550,4 +550,10 @@
</object> </object>
</child> </child>
</object> </object>
<object class="GtkSizeGroup">
<widgets>
<widget name="MainCheck"/>
<widget name="UnsupportedCheck"/>
</widgets>
</object>
</interface> </interface>

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.40.0 -->
<interface domain="ubl-settings-video"> <interface domain="ubl-settings-video">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<requires lib="vte-2.91" version="0.76"/> <requires lib="vte-2.91" version="0.76"/>
@ -207,10 +207,11 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel" id="label4">
<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">Choose driver automatically:</property> <property name="label" translatable="yes">Choose driver automatically:</property>
<property name="xalign">0</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -247,10 +248,11 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel" id="label5">
<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">Failsafe Nvidia driver:</property> <property name="label" translatable="yes">Failsafe Nvidia driver:</property>
<property name="xalign">0</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -952,7 +954,7 @@
<property name="sensitive">False</property> <property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Supported Devices</property> <property name="tooltip-text" translatable="yes">Supported devices</property>
<property name="image">image4</property> <property name="image">image4</property>
<style> <style>
<class name="thin"/> <class name="thin"/>
@ -1633,6 +1635,12 @@
<widget name="label3"/> <widget name="label3"/>
</widgets> </widgets>
</object> </object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label4"/>
<widget name="label5"/>
</widgets>
</object>
<object class="GtkListStore" id="liststore1"> <object class="GtkListStore" id="liststore1">
<columns> <columns>
<!-- column-name is_installed --> <!-- column-name is_installed -->

Loading…
Cancel
Save