diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 7a882ba..1b2bf70 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -145,69 +145,115 @@ void on_driver_pack_info(GtkWidget *self, main_window *widgets){ } void on_pack_install_activate(GtkCellRendererToggle* self,gchar* path,main_window *widgets){ + + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); GtkTreeIter iter; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); - char *package; - int installed; - gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,1,&installed,8,&package,-1); - if (!installed){ - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text=INSTALL_CONFIRMATION_LABEL(package); - data->function=NULL; - data->data=NULL; - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = install_proprietary_command(package); - yon_terminal_start(widgets,command); - } - } - free(data); + if (!GTK_IS_TREE_MODEL_FILTER(model)){ + + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); + model=GTK_TREE_MODEL(main_config.list); } else { - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text=REMOVE_CONFIRMATION_LABEL(package); - data->function=NULL; - data->data=NULL; - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = delete_proprietary_command(package); - yon_terminal_start(widgets,command); + GtkTreeIter itar; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); + } + char *package; + int installed; + gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,1,&installed,8,&package,-1); + if (!installed){ + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text=INSTALL_CONFIRMATION_LABEL(package); + data->function=NULL; + data->data=NULL; + if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ + if (!yon_char_is_empty(package)){ + char *command = install_proprietary_command(package); + yon_terminal_start(widgets,command); + } } + free(data); + } else { + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text=REMOVE_CONFIRMATION_LABEL(package); + data->function=NULL; + data->data=NULL; + if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ + if (!yon_char_is_empty(package)){ + char *command = delete_proprietary_command(package); + yon_terminal_start(widgets,command); + } + } + free(data); } - free(data); - } } void on_module_install_activate(GtkCellRendererToggle* self,gchar* path,main_window *widgets){ - + + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); GtkTreeIter iter; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); - char *package; - int installed; + if (!GTK_IS_TREE_MODEL_FILTER(model)){ + + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); + } else { + GtkTreeIter itar; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); + } + char *package; + int installed; gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,1,&installed,7,&package,-1); - if (!installed){ - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text=INSTALL_CONFIRMATION_LABEL(package); - data->function=NULL; - data->data=NULL; - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = install_proprietary_command(package); - yon_terminal_start(widgets,command); + if (!installed){ + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text=INSTALL_CONFIRMATION_LABEL(package); + data->function=NULL; + data->data=NULL; + if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ + if (!yon_char_is_empty(package)){ + char *command = install_proprietary_command(package); + yon_terminal_start(widgets,command); + } + } + free(data); + } else { + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text=REMOVE_CONFIRMATION_LABEL(package); + data->function=NULL; + data->data=NULL; + if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ + if (!yon_char_is_empty(package)){ + char *command = delete_proprietary_command(package); + yon_terminal_start(widgets,command); + } } + free(data); + } +} + +gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widgets){ + const char *target = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); + char *cur; + gtk_tree_model_get(model,iter,2,&cur,-1); + if (!strcmp(cur,target))return 1; + return 0; +} + +void on_kernel_filter_changed(GtkWidget *self, main_window *widgets){ + int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); + if (active){ + if (!GTK_IS_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))){ + GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(main_config.list),NULL); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),model); + gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_filter_func,widgets,NULL); + } else { + gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))); } - free(data); } else { - dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text=REMOVE_CONFIRMATION_LABEL(package); - data->function=NULL; - data->data=NULL; - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = delete_proprietary_command(package); - yon_terminal_start(widgets,command); - } + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); + if (GTK_IS_TREE_MODEL_FILTER(model)) { + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); + g_object_unref(model); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); } - free(data); } } @@ -1279,6 +1325,7 @@ template_main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); g_signal_connect(G_OBJECT(widgets->OptirunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->OptirunEntry); g_signal_connect(G_OBJECT(widgets->PrimusrunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->PrimusrunEntry); + g_signal_connect(G_OBJECT(widgets->KernelsCombo),"changed",G_CALLBACK(on_kernel_filter_changed),widgets); // yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->DriversTree));