mirror of
				https://github.com/alsa-project/alsa-tools.git
				synced 2025-10-29 05:40:25 -04:00 
			
		
		
		
	ALSA: echomixer, fix vmixer GUI
This patch fixes several bugs in the vmixer GUI and removes the "misc" button from the main window when the card has no global controls. Signed-off-by: Giuliano Pochini <pochini@shiny.it> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									a29ee706ff
								
							
						
					
					
						commit
						8e2e19c8e8
					
				
					 1 changed files with 38 additions and 69 deletions
				
			
		|  | @ -129,38 +129,8 @@ struct mixel { | ||||||
| snd_ctl_t *ctlhandle; | snd_ctl_t *ctlhandle; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #if __GNUC__ == 3		// gcc 2.x doesn't like unnamed unions inside structures
 |  | ||||||
| 
 |  | ||||||
| struct mixerControl_s { | struct mixerControl_s { | ||||||
|   union {               // Currently selected channels
 |   int input, inputs; | ||||||
|     int vchannel; |  | ||||||
|     int input; |  | ||||||
|   }; |  | ||||||
|   union {               // Number of channels
 |  | ||||||
|     int vchannels; |  | ||||||
|     int inputs; |  | ||||||
|   }; |  | ||||||
|   int output, outputs; |  | ||||||
|   int id; |  | ||||||
|   GtkWidget *window; |  | ||||||
|   GtkWidget *volume[ECHO_MAXAUDIOOUTPUTS]; |  | ||||||
|   GtkWidget *label[ECHO_MAXAUDIOOUTPUTS]; |  | ||||||
|   GtkObject *adj[ECHO_MAXAUDIOOUTPUTS]; |  | ||||||
|   GtkWidget *outsel[ECHO_MAXAUDIOOUTPUTS]; |  | ||||||
|   union { |  | ||||||
|     GtkWidget *inpsel[ECHO_MAXAUDIOINPUTS]; |  | ||||||
|     GtkWidget *vchsel[ECHO_MAXAUDIOOUTPUTS]; |  | ||||||
|   }; |  | ||||||
|   struct mixel mixer[ECHO_MAXAUDIOOUTPUTS][ECHO_MAXAUDIOOUTPUTS]; |  | ||||||
| } mixerControl, vmixerControl; |  | ||||||
| 
 |  | ||||||
| #else |  | ||||||
| 
 |  | ||||||
| struct mixerControl_s { |  | ||||||
|   int vchannel; |  | ||||||
|   int input; |  | ||||||
|   int vchannels; |  | ||||||
|   int inputs; |  | ||||||
|   int output, outputs; |   int output, outputs; | ||||||
|   int id; |   int id; | ||||||
|   GtkWidget *window; |   GtkWidget *window; | ||||||
|  | @ -173,9 +143,6 @@ struct mixerControl_s { | ||||||
|   struct mixel mixer[ECHO_MAXAUDIOOUTPUTS][ECHO_MAXAUDIOOUTPUTS]; |   struct mixel mixer[ECHO_MAXAUDIOOUTPUTS][ECHO_MAXAUDIOOUTPUTS]; | ||||||
| } mixerControl, vmixerControl; | } mixerControl, vmixerControl; | ||||||
| 
 | 
 | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| struct VolumeControl_s { | struct VolumeControl_s { | ||||||
|   int input, output;				// Currently selected channels
 |   int input, output;				// Currently selected channels
 | ||||||
|   int inputs, outputs; |   int inputs, outputs; | ||||||
|  | @ -677,8 +644,8 @@ gint DrawMixer(gpointer unused) { | ||||||
|   gdk_draw_rectangle(Mixpixmap, gc, TRUE, XCELLTOT*(mixerControl.output+1), YCELLTOT*mixerControl.input, XCELLTOT, Mixheight); |   gdk_draw_rectangle(Mixpixmap, gc, TRUE, XCELLTOT*(mixerControl.output+1), YCELLTOT*mixerControl.input, XCELLTOT, Mixheight); | ||||||
|   if (vmixerId) { |   if (vmixerId) { | ||||||
|     gdk_gc_set_foreground(gc, &Hilight2); |     gdk_gc_set_foreground(gc, &Hilight2); | ||||||
|     gdk_draw_rectangle(Mixpixmap, gc, TRUE, 0, YCELLTOT*(GMixerSection.VmixerFirst+vmixerControl.vchannel), XCELLTOT*(vmixerControl.output+1), YCELLTOT); |     gdk_draw_rectangle(Mixpixmap, gc, TRUE, 0, YCELLTOT*(GMixerSection.VmixerFirst+vmixerControl.input), XCELLTOT*(vmixerControl.output+1), YCELLTOT); | ||||||
|     gdk_draw_rectangle(Mixpixmap, gc, TRUE, XCELLTOT*(vmixerControl.output+1), YCELLTOT*(GMixerSection.VmixerFirst+vmixerControl.vchannel), XCELLTOT, Mixheight); |     gdk_draw_rectangle(Mixpixmap, gc, TRUE, XCELLTOT*(vmixerControl.output+1), YCELLTOT*(GMixerSection.VmixerFirst+vmixerControl.input), XCELLTOT, Mixheight); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // Draw the grid
 |   // Draw the grid
 | ||||||
|  | @ -720,7 +687,7 @@ gint DrawMixer(gpointer unused) { | ||||||
| 
 | 
 | ||||||
|   // Draw vchannels levels and peaks (Vmixer cards only)
 |   // Draw vchannels levels and peaks (Vmixer cards only)
 | ||||||
|   if (vmixerId) { |   if (vmixerId) { | ||||||
|     for (i=0; i<vmixerControl.vchannels; i++) |     for (i=0; i<vmixerControl.inputs; i++) | ||||||
|       DrawBar(0, i+GMixerSection.VmixerFirst, VirLevel[i], VirPeak[i], DONT_DRAW); |       DrawBar(0, i+GMixerSection.VmixerFirst, VirLevel[i], VirPeak[i], DONT_DRAW); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -739,7 +706,7 @@ gint DrawMixer(gpointer unused) { | ||||||
|   // Draw vmixer elements (Vmixer cards only)
 |   // Draw vmixer elements (Vmixer cards only)
 | ||||||
|   if (vmixerId) { |   if (vmixerId) { | ||||||
|     for (o=0; o<GMixerSection.Outputs; o++) |     for (o=0; o<GMixerSection.Outputs; o++) | ||||||
|       for (i=0; i<vmixerControl.vchannels; i++) { |       for (i=0; i<vmixerControl.inputs; i++) { | ||||||
|         dB=Add_dB(vmixerControl.mixer[o][i].Gain, VirLevel[i]); |         dB=Add_dB(vmixerControl.mixer[o][i].Gain, VirLevel[i]); | ||||||
|         DrawBar(o+1, i+GMixerSection.VmixerFirst, dB, DONT_DRAW, vmixerControl.mixer[o][i].Gain); |         DrawBar(o+1, i+GMixerSection.VmixerFirst, dB, DONT_DRAW, vmixerControl.mixer[o][i].Gain); | ||||||
|       } |       } | ||||||
|  | @ -945,7 +912,7 @@ static gint Gmixer_button_press(GtkWidget *widget, GdkEventButton *event) { | ||||||
|   } else if (GMixerRow>=GMixerSection.VmixerFirst && GMixerRow<=GMixerSection.VmixerLast) { |   } else if (GMixerRow>=GMixerSection.VmixerFirst && GMixerRow<=GMixerSection.VmixerLast) { | ||||||
|     if (GMixerColumn!=vmixerControl.output) |     if (GMixerColumn!=vmixerControl.output) | ||||||
|       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vmixerControl.outsel[GMixerColumn]), TRUE); |       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vmixerControl.outsel[GMixerColumn]), TRUE); | ||||||
|     if (GMixerRow!=vmixerControl.vchannel) |     if (GMixerRow!=vmixerControl.input) | ||||||
|       gtk_widget_grab_focus(GTK_WIDGET(vmixerControl.volume[GMixerRow-GMixerSection.VmixerFirst])); |       gtk_widget_grab_focus(GTK_WIDGET(vmixerControl.volume[GMixerRow-GMixerSection.VmixerFirst])); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -967,13 +934,13 @@ static gint Gmixer_button_press(GtkWidget *widget, GdkEventButton *event) { | ||||||
|     return TRUE; |     return TRUE; | ||||||
| 
 | 
 | ||||||
|   // See the note above
 |   // See the note above
 | ||||||
|   if (GMixerRow<GMixerSection.Inputs) { |   if (GMixerRow<GMixerSection.VmixerFirst) { | ||||||
|     if (GMixerRow!=mixerControl.input) |     if (GMixerRow!=mixerControl.input) | ||||||
|       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mixerControl.inpsel[GMixerRow]), TRUE); |       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mixerControl.inpsel[GMixerRow]), TRUE); | ||||||
|     if (GMixerColumn!=mixerControl.output) |     if (GMixerColumn!=mixerControl.output) | ||||||
|       gtk_widget_grab_focus(GTK_WIDGET(mixerControl.volume[GMixerColumn])); |       gtk_widget_grab_focus(GTK_WIDGET(mixerControl.volume[GMixerColumn])); | ||||||
|   } else if (GMixerRow>=GMixerSection.VmixerFirst && GMixerRow<=GMixerSection.VmixerLast) { |   } else if (GMixerRow>=GMixerSection.VmixerFirst && GMixerRow<=GMixerSection.VmixerLast) { | ||||||
|     if (GMixerRow!=vmixerControl.vchannel) |     if (GMixerRow!=vmixerControl.input+GMixerSection.VmixerFirst) | ||||||
|       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vmixerControl.vchsel[GMixerRow-GMixerSection.VmixerFirst]), TRUE); |       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vmixerControl.vchsel[GMixerRow-GMixerSection.VmixerFirst]), TRUE); | ||||||
|     if (GMixerColumn!=vmixerControl.output) |     if (GMixerColumn!=vmixerControl.output) | ||||||
|       gtk_widget_grab_focus(GTK_WIDGET(vmixerControl.volume[GMixerColumn])); |       gtk_widget_grab_focus(GTK_WIDGET(vmixerControl.volume[GMixerColumn])); | ||||||
|  | @ -1035,11 +1002,11 @@ static gint Gmixer_motion_notify(GtkWidget *widget, GdkEventMotion *event) { | ||||||
|     gtk_adjustment_set_value(GTK_ADJUSTMENT(mixerControl.adj[mixerControl.output]), (gfloat)val); |     gtk_adjustment_set_value(GTK_ADJUSTMENT(mixerControl.adj[mixerControl.output]), (gfloat)val); | ||||||
| #endif | #endif | ||||||
|   } else if (GMixerRow>=GMixerSection.VmixerFirst && GMixerRow<=GMixerSection.VmixerLast) { |   } else if (GMixerRow>=GMixerSection.VmixerFirst && GMixerRow<=GMixerSection.VmixerLast) { | ||||||
|     val=INVERT(vmixerControl.mixer[vmixerControl.output][vmixerControl.vchannel].Gain); |     val=INVERT(vmixerControl.mixer[vmixerControl.output][vmixerControl.input].Gain); | ||||||
|     val+=y-mouseY; |     val+=y-mouseY; | ||||||
|     mouseY=y; |     mouseY=y; | ||||||
| #ifdef REVERSE | #ifdef REVERSE | ||||||
|     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[vmixerControl.vchannel]), (gfloat)val); |     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[vmixerControl.input]), (gfloat)val); | ||||||
| #else | #else | ||||||
|     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[vmixerControl.output]), (gfloat)val); |     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[vmixerControl.output]), (gfloat)val); | ||||||
| #endif | #endif | ||||||
|  | @ -1259,7 +1226,7 @@ void Vmixer_volume_changed(GtkWidget *widget, gpointer ch) { | ||||||
|   v=channel; |   v=channel; | ||||||
|   o=vmixerControl.output; |   o=vmixerControl.output; | ||||||
| #else | #else | ||||||
|   v=vmixerControl.vchannel; |   v=vmixerControl.input; | ||||||
|   o=channel; |   o=channel; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -1281,8 +1248,8 @@ void Vmixer_volume_changed(GtkWidget *widget, gpointer ch) { | ||||||
| void Vmixer_volume_clicked(GtkWidget *widget, gpointer ch) { | void Vmixer_volume_clicked(GtkWidget *widget, gpointer ch) { | ||||||
| 
 | 
 | ||||||
| #ifdef REVERSE | #ifdef REVERSE | ||||||
|   vmixerControl.vchannel=(int)(long)ch; |   vmixerControl.input=(int)(long)ch; | ||||||
|   UI_DEBUG(("Vmixer_volume_clicked vch=%d\n",vmixerControl.vchannel)); |   UI_DEBUG(("Vmixer_volume_clicked vch=%d\n",vmixerControl.input)); | ||||||
| #else | #else | ||||||
|   vmixerControl.output=(int)(long)ch; |   vmixerControl.output=(int)(long)ch; | ||||||
|   UI_DEBUG(("Vmixer_volume_clicked out=%d\n",vmixerControl.output)); |   UI_DEBUG(("Vmixer_volume_clicked out=%d\n",vmixerControl.output)); | ||||||
|  | @ -1306,7 +1273,7 @@ void Vmixer_output_selector_clicked(GtkWidget *widget, gpointer ch) { | ||||||
|   snd_ctl_elem_id_alloca(&id); |   snd_ctl_elem_id_alloca(&id); | ||||||
|   snd_ctl_elem_value_alloca(&control); |   snd_ctl_elem_value_alloca(&control); | ||||||
|   snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER); |   snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER); | ||||||
|   for (c=vmixerControl.vchannels-1; c>=0; c--) { |   for (c=vmixerControl.inputs-1; c>=0; c--) { | ||||||
|     val=INVERT(vmixerControl.mixer[vmixerControl.output][c].Gain); |     val=INVERT(vmixerControl.mixer[vmixerControl.output][c].Gain); | ||||||
|     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[c]), (gfloat)val); |     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[c]), (gfloat)val); | ||||||
|   } |   } | ||||||
|  | @ -1319,16 +1286,16 @@ void Vmixer_vchannel_selector_clicked(GtkWidget *widget, gpointer ch) { | ||||||
|   snd_ctl_elem_id_t *id; |   snd_ctl_elem_id_t *id; | ||||||
|   snd_ctl_elem_value_t *control; |   snd_ctl_elem_value_t *control; | ||||||
| 
 | 
 | ||||||
|   if (vmixerControl.vchannel==(int)(long)ch) |   if (vmixerControl.input==(int)(long)ch) | ||||||
|     return; |     return; | ||||||
|   vmixerControl.vchannel=(int)(long)ch; |   vmixerControl.input=(int)(long)ch; | ||||||
| 
 | 
 | ||||||
|   UI_DEBUG(("Vmixer_selector_clicked vch=%d\n",vmixerControl.vchannel)); |   UI_DEBUG(("Vmixer_selector_clicked vch=%d\n",vmixerControl.input)); | ||||||
|   snd_ctl_elem_id_alloca(&id); |   snd_ctl_elem_id_alloca(&id); | ||||||
|   snd_ctl_elem_value_alloca(&control); |   snd_ctl_elem_value_alloca(&control); | ||||||
|   snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER); |   snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER); | ||||||
|   for (c=vmixerControl.outputs-1; c>=0; c--) { |   for (c=vmixerControl.outputs-1; c>=0; c--) { | ||||||
|     val=INVERT(vmixerControl.mixer[c][vmixerControl.vchannel].Gain); |     val=INVERT(vmixerControl.mixer[c][vmixerControl.input].Gain); | ||||||
|     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[c]), (gfloat)val); |     gtk_adjustment_set_value(GTK_ADJUSTMENT(vmixerControl.adj[c]), (gfloat)val); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | @ -1722,7 +1689,7 @@ int OpenControls(const char *card, const char *cardname) { | ||||||
|         vmixerId=vmixerControl.id=numid; |         vmixerId=vmixerControl.id=numid; | ||||||
|         CTLID_DEBUG(("First Vmixer id=%d\n", vmixerId)); |         CTLID_DEBUG(("First Vmixer id=%d\n", vmixerId)); | ||||||
|         vmixerControl.outputs=snd_ctl_elem_info_get_dimension(info, 0); |         vmixerControl.outputs=snd_ctl_elem_info_get_dimension(info, 0); | ||||||
|         vmixerControl.vchannels=snd_ctl_elem_info_get_dimension(info, 1); |         vmixerControl.inputs=snd_ctl_elem_info_get_dimension(info, 1); | ||||||
|       } |       } | ||||||
|     } else if (!strcmp("PCM Playback Volume", snd_ctl_elem_id_get_name(id))) { |     } else if (!strcmp("PCM Playback Volume", snd_ctl_elem_id_get_name(id))) { | ||||||
|       pcmoutId=pcmoutControl.id=numid; |       pcmoutId=pcmoutControl.id=numid; | ||||||
|  | @ -1808,7 +1775,7 @@ int OpenControls(const char *card, const char *cardname) { | ||||||
| 
 | 
 | ||||||
| #ifndef REAL | #ifndef REAL | ||||||
| vmixerId=1000; | vmixerId=1000; | ||||||
| vmixerControl.vchannels=12; | vmixerControl.inputs=12; | ||||||
| vmixerControl.outputs=mixerControl.outputs=nLOut=10; | vmixerControl.outputs=mixerControl.outputs=nLOut=10; | ||||||
| metersStreams=3; | metersStreams=3; | ||||||
| metersNumber=16; | metersNumber=16; | ||||||
|  | @ -1828,8 +1795,8 @@ printf("nIn=%d fdIn=%d nLOut=%d nPOut=%d fdOut=%d\n", nIn,fdIn,nLOut,nPOut, fdOu | ||||||
|     printf("** Warning - Vmixer cards without LineOut volume control are not supported !\n"); |     printf("** Warning - Vmixer cards without LineOut volume control are not supported !\n"); | ||||||
| 
 | 
 | ||||||
|   if (vmixerId) { |   if (vmixerId) { | ||||||
|     if (vmixerControl.vchannels!=nPOut || vmixerControl.outputs!=nLOut) { |     if (vmixerControl.inputs!=nPOut || vmixerControl.outputs!=nLOut) { | ||||||
|       printf("** Error - vmixer/channels mismatch:  vmp=%d npo=%d    vmo=%d nlo=%d !!\n", vmixerControl.vchannels, nPOut, vmixerControl.outputs, nLOut); |       printf("** Error - vmixer/channels mismatch:  vmp=%d npo=%d    vmo=%d nlo=%d !!\n", vmixerControl.inputs, nPOut, vmixerControl.outputs, nLOut); | ||||||
|       return(1); |       return(1); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | @ -1850,7 +1817,7 @@ printf("nIn=%d fdIn=%d nLOut=%d nPOut=%d fdOut=%d\n", nIn,fdIn,nLOut,nPOut, fdOu | ||||||
| 
 | 
 | ||||||
|   if (vmixerId) |   if (vmixerId) | ||||||
|     for (o=0, numid=vmixerId; o<vmixerControl.outputs; o++) { |     for (o=0, numid=vmixerId; o<vmixerControl.outputs; o++) { | ||||||
|       for (i=0; i<vmixerControl.vchannels; i++) { |       for (i=0; i<vmixerControl.inputs; i++) { | ||||||
|         vmixerControl.mixer[o][i].id=numid++; |         vmixerControl.mixer[o][i].id=numid++; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  | @ -1931,10 +1898,10 @@ printf("components = %s\n", snd_ctl_card_info_get_components(hw_info));*/ | ||||||
|   Mixerw_geom.st=NOPOS; |   Mixerw_geom.st=NOPOS; | ||||||
|   Vmixerw_geom.st=NOPOS; |   Vmixerw_geom.st=NOPOS; | ||||||
|   VUwindow=GMwindow=0; |   VUwindow=GMwindow=0; | ||||||
|   GMixerSection.Inputs=fdIn+2;	// The correct value is set by Digital_mode_activate()
 |   GMixerSection.Inputs=nIn;	// The correct value is set by Digital_mode_activate()
 | ||||||
|   GMixerSection.Outputs=fdOut+2; |   GMixerSection.Outputs=nLOut; | ||||||
|   GMixerSection.VmixerFirst=nIn; |   GMixerSection.VmixerFirst=nIn; | ||||||
|   GMixerSection.VmixerLast=nIn+vmixerControl.vchannels-1; |   GMixerSection.VmixerLast=nIn+vmixerControl.inputs-1; | ||||||
|   GMixerSection.LineOut=GMixerSection.VmixerLast+1; |   GMixerSection.LineOut=GMixerSection.VmixerLast+1; | ||||||
| 
 | 
 | ||||||
|   // Read current mixer setting.
 |   // Read current mixer setting.
 | ||||||
|  | @ -2523,7 +2490,7 @@ printf("components = %s\n", snd_ctl_card_info_get_components(hw_info));*/ | ||||||
|     gtk_widget_show(hbox); |     gtk_widget_show(hbox); | ||||||
|     gtk_container_add(GTK_CONTAINER(frame), hbox); |     gtk_container_add(GTK_CONTAINER(frame), hbox); | ||||||
| 
 | 
 | ||||||
|     for (i=0; i<vmixerControl.vchannels; i++) { |     for (i=0; i<vmixerControl.inputs; i++) { | ||||||
|       vbox=gtk_vbox_new(FALSE, 0); |       vbox=gtk_vbox_new(FALSE, 0); | ||||||
|       gtk_widget_show(vbox); |       gtk_widget_show(vbox); | ||||||
|       gtk_container_add(GTK_CONTAINER(hbox), vbox); |       gtk_container_add(GTK_CONTAINER(hbox), vbox); | ||||||
|  | @ -2582,7 +2549,7 @@ printf("components = %s\n", snd_ctl_card_info_get_components(hw_info));*/ | ||||||
|     gtk_container_add(GTK_CONTAINER(frame), vbsel); |     gtk_container_add(GTK_CONTAINER(frame), vbsel); | ||||||
| 
 | 
 | ||||||
|     bgroup=0; |     bgroup=0; | ||||||
|     for (i=0; i<vmixerControl.vchannels; i++) { |     for (i=0; i<vmixerControl.inputs; i++) { | ||||||
|       sprintf(str, "V%d", i); |       sprintf(str, "V%d", i); | ||||||
|       if (i) |       if (i) | ||||||
|         bgroup=gtk_radio_button_group(GTK_RADIO_BUTTON(vmixerControl.vchsel[i-1])); |         bgroup=gtk_radio_button_group(GTK_RADIO_BUTTON(vmixerControl.vchsel[i-1])); | ||||||
|  | @ -2626,7 +2593,7 @@ printf("components = %s\n", snd_ctl_card_info_get_components(hw_info));*/ | ||||||
|       gtk_box_pack_start(GTK_BOX(vbox), vmixerControl.label[i], FALSE, FALSE, 0); |       gtk_box_pack_start(GTK_BOX(vbox), vmixerControl.label[i], FALSE, FALSE, 0); | ||||||
|     } |     } | ||||||
|     gtk_widget_set_usize(GTK_WIDGET(vmixerControl.volume[0]), 0, 170);		// Set minimum y size
 |     gtk_widget_set_usize(GTK_WIDGET(vmixerControl.volume[0]), 0, 170);		// Set minimum y size
 | ||||||
|     vmixerControl.vchannel=-1; |     vmixerControl.input=-1; | ||||||
|     Vmixer_vchannel_selector_clicked(0, 0); |     Vmixer_vchannel_selector_clicked(0, 0); | ||||||
| #endif | #endif | ||||||
|   } |   } | ||||||
|  | @ -2693,13 +2660,15 @@ printf("components = %s\n", snd_ctl_card_info_get_components(hw_info));*/ | ||||||
|     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); |     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); | ||||||
| 
 | 
 | ||||||
|   // Misc controls button
 |   // Misc controls button
 | ||||||
|   button=gtk_toggle_button_new_with_label("Misc"); |   if (p4InId || p4OutId || phantomId || (dmodeId && ndmodes>1) || (clocksrcId && nclocksrc>1) || (spdifmodeId && nspdifmodes>1)) { | ||||||
|   gtk_widget_show(button); |     button=gtk_toggle_button_new_with_label("Misc"); | ||||||
|   gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 1); |     gtk_widget_show(button); | ||||||
|   gtk_signal_connect(GTK_OBJECT(button), "toggled", ToggleWindow, (gpointer)Miscwindow); |     gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 1); | ||||||
|   Miscw_geom.toggler=button; |     gtk_signal_connect(GTK_OBJECT(button), "toggled", ToggleWindow, (gpointer)Miscwindow); | ||||||
|   if (Miscw_geom.st==1) |     Miscw_geom.toggler=button; | ||||||
|     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); |     if (Miscw_geom.st==1) | ||||||
|  |       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   if (mixerId) { |   if (mixerId) { | ||||||
|     // Graphical mixer button
 |     // Graphical mixer button
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Giuliano Pochini
						Giuliano Pochini