mirror of
				https://github.com/alsa-project/alsa-tools.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	hdajackretask: Some more UI fixes
- don't overwrite a set advanced override unless necessary - fix "not present" never selected - remove some trailing whitespaces Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									6391a860e8
								
							
						
					
					
						commit
						c416c1180d
					
				
					 2 changed files with 75 additions and 53 deletions
				
			
		| 
						 | 
					@ -5,19 +5,22 @@
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <gtk/gtk.h>
 | 
					#include <gtk/gtk.h>
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "sysfs-pin-configs.h"
 | 
					#include "sysfs-pin-configs.h"
 | 
				
			||||||
#include "apply-changes.h"
 | 
					#include "apply-changes.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct ui_data_t ui_data_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct pin_ui_data_t {
 | 
					typedef struct pin_ui_data_t {
 | 
				
			||||||
    pin_configs_t* pin_config;
 | 
					    pin_configs_t* pin_config;
 | 
				
			||||||
    typical_pins_t pins_info[32];
 | 
					    typical_pins_t pins_info[32];
 | 
				
			||||||
    GtkWidget *frame, *override, *jacktype;
 | 
					    GtkWidget *frame, *override, *jacktype;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    GtkWidget* free_override_cb[FREE_OVERRIDES_COUNT];
 | 
					    GtkWidget* free_override_cb[FREE_OVERRIDES_COUNT];
 | 
				
			||||||
 | 
					    ui_data_t* owner;
 | 
				
			||||||
} pin_ui_data_t;
 | 
					} pin_ui_data_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct ui_data_t {
 | 
					struct ui_data_t {
 | 
				
			||||||
    GList* pin_ui_data;
 | 
					    GList* pin_ui_data;
 | 
				
			||||||
    GtkWidget *main_window;
 | 
					    GtkWidget *main_window;
 | 
				
			||||||
    GtkWidget *content_scroll_widget;
 | 
					    GtkWidget *content_scroll_widget;
 | 
				
			||||||
| 
						 | 
					@ -32,9 +35,11 @@ typedef struct ui_data_t {
 | 
				
			||||||
    gboolean trust_codec;
 | 
					    gboolean trust_codec;
 | 
				
			||||||
    gboolean trust_defcfg;
 | 
					    gboolean trust_defcfg;
 | 
				
			||||||
    gboolean model_auto;
 | 
					    gboolean model_auto;
 | 
				
			||||||
} ui_data_t;
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void override_toggled(GtkWidget* sender, pin_ui_data_t* data)
 | 
					static void update_user_pin_config(ui_data_t* ui, pin_configs_t* cfg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void update_override_sensitive(GtkWidget* sender, pin_ui_data_t* data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender));
 | 
					    gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender));
 | 
				
			||||||
| 
						 | 
					@ -43,6 +48,17 @@ static void override_toggled(GtkWidget* sender, pin_ui_data_t* data)
 | 
				
			||||||
        gtk_widget_set_sensitive(data->free_override_cb[i], checked);
 | 
					        gtk_widget_set_sensitive(data->free_override_cb[i], checked);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void override_toggled(GtkWidget* sender, pin_ui_data_t* data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    update_override_sensitive(sender, data);
 | 
				
			||||||
 | 
					    update_user_pin_config(data->owner, data->pin_config);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void jacktype_changed(GtkWidget* sender, pin_ui_data_t* data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    update_user_pin_config(data->owner, data->pin_config);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg)
 | 
					static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GtkWidget* result;
 | 
					    GtkWidget* result;
 | 
				
			||||||
| 
						 | 
					@ -56,6 +72,7 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    data = calloc(1, sizeof(pin_ui_data_t));
 | 
					    data = calloc(1, sizeof(pin_ui_data_t));
 | 
				
			||||||
    data->pin_config = pin_cfg;
 | 
					    data->pin_config = pin_cfg;
 | 
				
			||||||
 | 
					    data->owner = ui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    { /* Frame */
 | 
					    { /* Frame */
 | 
				
			||||||
        gchar* d = get_config_description(pin_cfg->init_pin_config);
 | 
					        gchar* d = get_config_description(pin_cfg->init_pin_config);
 | 
				
			||||||
| 
						 | 
					@ -93,6 +110,7 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg)
 | 
				
			||||||
        gtk_combo_box_set_active(GTK_COMBO_BOX(jacktype), index);
 | 
					        gtk_combo_box_set_active(GTK_COMBO_BOX(jacktype), index);
 | 
				
			||||||
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(override), pin_cfg->user_override);
 | 
					        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(override), pin_cfg->user_override);
 | 
				
			||||||
        g_signal_connect(override, "toggled", G_CALLBACK(override_toggled), data);
 | 
					        g_signal_connect(override, "toggled", G_CALLBACK(override_toggled), data);
 | 
				
			||||||
 | 
					        g_signal_connect(jacktype, "changed", G_CALLBACK(jacktype_changed), data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gtk_container_add(box, override);
 | 
					        gtk_container_add(box, override);
 | 
				
			||||||
        gtk_container_add(GTK_CONTAINER(jacktype_box), jacktype);
 | 
					        gtk_container_add(GTK_CONTAINER(jacktype_box), jacktype);
 | 
				
			||||||
| 
						 | 
					@ -125,6 +143,7 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (index >= 0)
 | 
					            if (index >= 0)
 | 
				
			||||||
                gtk_combo_box_set_active(GTK_COMBO_BOX(data->free_override_cb[i]), index);
 | 
					                gtk_combo_box_set_active(GTK_COMBO_BOX(data->free_override_cb[i]), index);
 | 
				
			||||||
 | 
					            g_signal_connect(data->free_override_cb[i], "changed", G_CALLBACK(jacktype_changed), data);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gtk_grid_attach(grid, gtk_label_new("Connectivity"), 0, 0, 1, 1);
 | 
					        gtk_grid_attach(grid, gtk_label_new("Connectivity"), 0, 0, 1, 1);
 | 
				
			||||||
| 
						 | 
					@ -148,7 +167,7 @@ static GtkWidget* create_pin_ui(ui_data_t* ui, pin_configs_t* pin_cfg)
 | 
				
			||||||
        if (ui->free_overrides)
 | 
					        if (ui->free_overrides)
 | 
				
			||||||
            gtk_container_add(box, GTK_WIDGET(grid));
 | 
					            gtk_container_add(box, GTK_WIDGET(grid));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    override_toggled(data->override, data);
 | 
					    update_override_sensitive(data->override, data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gtk_container_add(GTK_CONTAINER(result), GTK_WIDGET(box));
 | 
					    gtk_container_add(GTK_CONTAINER(result), GTK_WIDGET(box));
 | 
				
			||||||
    ui->pin_ui_data = g_list_prepend(ui->pin_ui_data, data);
 | 
					    ui->pin_ui_data = g_list_prepend(ui->pin_ui_data, data);
 | 
				
			||||||
| 
						 | 
					@ -169,18 +188,16 @@ static gint pin_config_find(pin_ui_data_t* pin_ui, pin_configs_t* cfg)
 | 
				
			||||||
    return pin_ui->pin_config == cfg ? 0 : 1;
 | 
					    return pin_ui->pin_config == cfg ? 0 : 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void update_user_pin_config(ui_data_t* ui)
 | 
					static void update_user_pin_config(ui_data_t* ui, pin_configs_t* cfg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int i;
 | 
					 | 
				
			||||||
    for (i = 0; i < ui->sysfs_pincount; i++) {
 | 
					 | 
				
			||||||
    pin_ui_data_t* pin_ui;
 | 
					    pin_ui_data_t* pin_ui;
 | 
				
			||||||
        GList *pos = g_list_find_custom(ui->pin_ui_data, &ui->sysfs_pins[i], (GCompareFunc) pin_config_find);
 | 
					    GList *pos = g_list_find_custom(ui->pin_ui_data, cfg, (GCompareFunc) pin_config_find);
 | 
				
			||||||
        ui->sysfs_pins[i].user_override = FALSE;
 | 
					    cfg->user_override = FALSE;
 | 
				
			||||||
    if (!pos)
 | 
					    if (!pos)
 | 
				
			||||||
            continue;
 | 
					        return;
 | 
				
			||||||
    pin_ui = pos->data;
 | 
					    pin_ui = pos->data;
 | 
				
			||||||
    if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pin_ui->override)))
 | 
					    if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pin_ui->override)))
 | 
				
			||||||
            continue;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ui->free_overrides) {
 | 
					    if (ui->free_overrides) {
 | 
				
			||||||
        int j;
 | 
					        int j;
 | 
				
			||||||
| 
						 | 
					@ -193,18 +210,23 @@ static void update_user_pin_config(ui_data_t* ui)
 | 
				
			||||||
            val += get_free_override_list(j)[index].value;
 | 
					            val += get_free_override_list(j)[index].value;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (index < 0)
 | 
					        if (index < 0)
 | 
				
			||||||
                continue;
 | 
					            return;
 | 
				
			||||||
            ui->sysfs_pins[i].user_pin_config = val;
 | 
					        cfg->user_pin_config = val;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        int index;
 | 
					        int index;
 | 
				
			||||||
        index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype));
 | 
					        index = gtk_combo_box_get_active(GTK_COMBO_BOX(pin_ui->jacktype));
 | 
				
			||||||
        if (index < 0)
 | 
					        if (index < 0)
 | 
				
			||||||
                continue;
 | 
					            return;
 | 
				
			||||||
            ui->sysfs_pins[i].user_pin_config = pin_ui->pins_info[index].pin_set;
 | 
					        cfg->user_pin_config = pin_ui->pins_info[index].pin_set;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
        ui->sysfs_pins[i].user_override = TRUE;
 | 
					    cfg->user_override = TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void update_all_user_pin_config(ui_data_t* ui)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					    for (i = 0; i < ui->sysfs_pincount; i++)
 | 
				
			||||||
 | 
					        update_user_pin_config(ui, &ui->sysfs_pins[i]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean validate_user_pin_config(ui_data_t* ui, GError** err)
 | 
					static gboolean validate_user_pin_config(ui_data_t* ui, GError** err)
 | 
				
			||||||
| 
						 | 
					@ -215,7 +237,7 @@ static gboolean validate_user_pin_config(ui_data_t* ui, GError** err)
 | 
				
			||||||
        g_set_error(err, 0, 0, "You must first select a codec!");
 | 
					        g_set_error(err, 0, 0, "You must first select a codec!");
 | 
				
			||||||
        return FALSE;
 | 
					        return FALSE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    update_user_pin_config(ui);
 | 
					    update_all_user_pin_config(ui);
 | 
				
			||||||
    if (ui->free_overrides)
 | 
					    if (ui->free_overrides)
 | 
				
			||||||
        return TRUE;
 | 
					        return TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -325,7 +347,7 @@ static void resize_main_window(ui_data_t* ui)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void update_codec_ui(ui_data_t* ui) 
 | 
					static void update_codec_ui(ui_data_t* ui, bool codec_change)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int codec_index = gtk_combo_box_get_active(GTK_COMBO_BOX(ui->codec_selection_combo));
 | 
					    int codec_index = gtk_combo_box_get_active(GTK_COMBO_BOX(ui->codec_selection_combo));
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
| 
						 | 
					@ -337,6 +359,7 @@ static void update_codec_ui(ui_data_t* ui)
 | 
				
			||||||
    if (codec_index < 0)
 | 
					    if (codec_index < 0)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    ui->current_codec = &ui->sysfs_codec_names[codec_index];
 | 
					    ui->current_codec = &ui->sysfs_codec_names[codec_index];
 | 
				
			||||||
 | 
					    if (codec_change)
 | 
				
			||||||
        ui->sysfs_pincount = get_pin_configs_list(ui->sysfs_pins, 32, ui->current_codec->card, ui->current_codec->device);
 | 
					        ui->sysfs_pincount = get_pin_configs_list(ui->sysfs_pins, 32, ui->current_codec->card, ui->current_codec->device);
 | 
				
			||||||
    for (i = 0; i < ui->sysfs_pincount; i++) {
 | 
					    for (i = 0; i < ui->sysfs_pincount; i++) {
 | 
				
			||||||
        GtkWidget *w = create_pin_ui(ui, &ui->sysfs_pins[i]);
 | 
					        GtkWidget *w = create_pin_ui(ui, &ui->sysfs_pins[i]);
 | 
				
			||||||
| 
						 | 
					@ -350,14 +373,14 @@ static void update_codec_ui(ui_data_t* ui)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void codec_selected(GtkComboBox* combo, gpointer user_data) 
 | 
					static void codec_selected(GtkComboBox* combo, gpointer user_data) 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    update_codec_ui(user_data);
 | 
					    update_codec_ui(user_data, true);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void showallpins_toggled(GtkWidget* sender, ui_data_t* ui_data)
 | 
					static void showallpins_toggled(GtkWidget* sender, ui_data_t* ui_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender));
 | 
					    gboolean checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender));
 | 
				
			||||||
    ui_data->trust_defcfg = !checked;
 | 
					    ui_data->trust_defcfg = !checked;
 | 
				
			||||||
    update_codec_ui(ui_data);
 | 
					    update_codec_ui(ui_data, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void automodel_toggled(GtkWidget* sender, ui_data_t* ui_data)
 | 
					static void automodel_toggled(GtkWidget* sender, ui_data_t* ui_data)
 | 
				
			||||||
| 
						 | 
					@ -367,9 +390,8 @@ static void automodel_toggled(GtkWidget* sender, ui_data_t* ui_data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void free_override_toggled(GtkWidget* sender, ui_data_t* ui_data)
 | 
					static void free_override_toggled(GtkWidget* sender, ui_data_t* ui_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    update_user_pin_config(ui_data);
 | 
					 | 
				
			||||||
    ui_data->free_overrides = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender));
 | 
					    ui_data->free_overrides = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sender));
 | 
				
			||||||
    update_codec_ui(ui_data);
 | 
					    update_codec_ui(ui_data, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char* readme_text = 
 | 
					static const char* readme_text = 
 | 
				
			||||||
| 
						 | 
					@ -517,7 +539,7 @@ int main(int argc, char *argv[])
 | 
				
			||||||
    ui = create_ui();
 | 
					    ui = create_ui();
 | 
				
			||||||
    gtk_widget_show_all(ui->main_window);
 | 
					    gtk_widget_show_all(ui->main_window);
 | 
				
			||||||
    if (ui->codec_selection_combo)
 | 
					    if (ui->codec_selection_combo)
 | 
				
			||||||
        update_codec_ui(ui);
 | 
					        update_codec_ui(ui, true);
 | 
				
			||||||
    gtk_main();
 | 
					    gtk_main();
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -472,7 +472,7 @@ unsigned long get_free_override_mask(int type)
 | 
				
			||||||
        AC_DEFCFG_DEVICE,
 | 
					        AC_DEFCFG_DEVICE,
 | 
				
			||||||
        AC_DEFCFG_CONN_TYPE,
 | 
					        AC_DEFCFG_CONN_TYPE,
 | 
				
			||||||
        AC_DEFCFG_COLOR,
 | 
					        AC_DEFCFG_COLOR,
 | 
				
			||||||
        AC_DEFCFG_MISC & 1,
 | 
					        AC_DEFCFG_MISC & (AC_DEFCFG_MISC_NO_PRESENCE << AC_DEFCFG_MISC_SHIFT),
 | 
				
			||||||
        AC_DEFCFG_DEF_ASSOC,
 | 
					        AC_DEFCFG_DEF_ASSOC,
 | 
				
			||||||
        AC_DEFCFG_SEQUENCE,
 | 
					        AC_DEFCFG_SEQUENCE,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue