hwmixvolume: switch to GTK+ 3.0 and GLib 2.0

This replaces VBox and HBox with Grid (using Gtk.Orientation), HScale
with Scale, creates labels with mnemonics, set hexpand and vexpand
properly, use the correct enum container classes, use the correct getter
for size request, and finally update to the correct GLib watch function.

Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Emmanuel Gil Peyrot 2018-09-18 15:42:33 +02:00 committed by Takashi Iwai
parent 0a9ad5c1e1
commit a21dda3d86

View file

@ -60,18 +60,18 @@ class Stream:
value = alsahcontrol.Value(self.element) value = alsahcontrol.Value(self.element)
value.read() value.read()
values = value.get_tuple(TYPE_INTEGER, info.count) values = value.get_tuple(TYPE_INTEGER, info.count)
self.label = Gtk.Label(self.get_label(info)) self.label = Gtk.Label.new(self.get_label(info))
self.label.set_single_line_mode(True) self.label.set_single_line_mode(True)
self.parent.scales_vbox.pack_start(self.label, expand=False) self.parent.scales_vbox.add(self.label)
for i in range(info.count): for i in range(info.count):
adj = Gtk.Adjustment(value=values[i], adj = Gtk.Adjustment(value=values[i],
lower=info.min, upper=info.max, lower=info.min, upper=info.max,
step_incr=1, step_incr=1,
page_incr=(info.max-info.min+1)/8) page_incr=(info.max-info.min+1)/8)
adj.connect('value-changed', self.update_ctl_from_scale, i) adj.connect('value-changed', self.update_ctl_from_scale, i)
scale = Gtk.HScale(adj) scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=adj)
scale.set_draw_value(False) scale.set_draw_value(False)
self.parent.scales_vbox.pack_start(scale, expand=False) self.parent.scales_vbox.add(scale)
self.scales.append(scale) self.scales.append(scale)
self.adjustments.append(adj) self.adjustments.append(adj)
self.parent.scales_vbox.show_all() self.parent.scales_vbox.show_all()
@ -174,45 +174,48 @@ class MixerWindow(Gtk.Window):
self.connect('destroy', lambda w: Gtk.main_quit()) self.connect('destroy', lambda w: Gtk.main_quit())
self.set_title("Hardware Mixer Volumes") self.set_title("Hardware Mixer Volumes")
vbox = Gtk.VBox() vbox = Gtk.Grid()
vbox.set_orientation(Gtk.Orientation.VERTICAL)
self.add(vbox) self.add(vbox)
hbox = Gtk.HBox() hbox = Gtk.Grid()
vbox.pack_start(hbox, expand=False) vbox.add(hbox)
label = Gtk.Label("_Sound Card: ") label = Gtk.Label.new_with_mnemonic("_Sound Card: ")
label.set_use_underline(True) hbox.add(label)
hbox.pack_start(label, expand=False)
combo = Gtk.combo_box_new_text() combo = Gtk.ComboBoxText()
combo.set_hexpand(True)
for i in self.card_numbers: for i in self.card_numbers:
str = "%d: %s" % (i, alsacard.card_get_name(i)) str = "%d: %s" % (i, alsacard.card_get_name(i))
combo.append_text(str) combo.append_text(str)
if len(self.card_numbers) > 0: if len(self.card_numbers) > 0:
combo.set_active(0) combo.set_active(0)
combo.connect('changed', lambda c: self.change_card(self.card_numbers[combo.get_active()])) combo.connect('changed', lambda c: self.change_card(self.card_numbers[combo.get_active()]))
hbox.pack_start(combo) hbox.add(combo)
label.set_mnemonic_widget(combo) label.set_mnemonic_widget(combo)
self.lock_check = Gtk.CheckButton(label="_Lock Channels") self.lock_check = Gtk.CheckButton.new_with_mnemonic(label="_Lock Channels")
self.lock_check.set_active(True) self.lock_check.set_active(True)
vbox.pack_start(self.lock_check, expand=False) vbox.add(self.lock_check)
scrollwin = Gtk.ScrolledWindow() scrollwin = Gtk.ScrolledWindow()
scrollwin.set_policy(hscrollbar_policy=Gtk.POLICY_NEVER, vscrollbar_policy=Gtk.POLICY_AUTOMATIC) scrollwin.set_policy(hscrollbar_policy=Gtk.PolicyType.NEVER, vscrollbar_policy=Gtk.PolicyType.AUTOMATIC)
scrollwin.set_shadow_type(Gtk.SHADOW_NONE) scrollwin.set_shadow_type(Gtk.ShadowType.NONE)
vbox.pack_start(scrollwin) scrollwin.set_vexpand(True)
vbox.add(scrollwin)
self.scales_vbox = Gtk.VBox() self.scales_vbox = Gtk.Grid()
scrollwin.add_with_viewport(self.scales_vbox) self.scales_vbox.set_orientation(Gtk.Orientation.VERTICAL)
scrollwin.add(self.scales_vbox)
label = Gtk.Label() label = Gtk.Label()
label.set_single_line_mode(True) label.set_single_line_mode(True)
line_height = label.size_request()[1] line_height = max(label.get_size_request().height, 0)
label.destroy() label.destroy()
scale = Gtk.HScale() scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL)
scale.set_draw_value(False) scale.set_draw_value(False)
line_height += scale.size_request()[1] line_height += max(scale.get_size_request().height, 0)
scale.destroy() scale.destroy()
# always have space for at least four sliders # always have space for at least four sliders
scrollwin.set_size_request(width=-1, height=line_height*4+4) scrollwin.set_size_request(width=-1, height=line_height*4+4)
@ -252,7 +255,7 @@ class MixerWindow(Gtk.Window):
self.streams.append(stream) self.streams.append(stream)
for fd,condition in self.hcontrol.poll_fds: for fd,condition in self.hcontrol.poll_fds:
self.hctl_sources.append(GLib.io_add_watch(fd, condition, self.hctl_io_callback)) self.hctl_sources.append(GLib.io_add_watch(fd, 0, GLib.IOCondition(condition), self.hctl_io_callback))
self.update_msg_label() self.update_msg_label()
@ -270,8 +273,9 @@ class MixerWindow(Gtk.Window):
else: else:
msg = "This card does not have stream controls." msg = "This card does not have stream controls."
if not has_msg: if not has_msg:
self.msg_label = Gtk.Label(msg) self.msg_label = Gtk.Label.new(msg)
self.scales_vbox.pack_start(self.msg_label) self.msg_label.set_vexpand(True)
self.scales_vbox.add(self.msg_label)
self.scales_vbox.show_all() self.scales_vbox.show_all()
elif self.msg_label.get_text() != msg: elif self.msg_label.get_text() != msg:
self.msg_label.set_text(msg) self.msg_label.set_text(msg)
@ -284,8 +288,8 @@ class MixerWindow(Gtk.Window):
except: except:
# TODO: alsa error msg # TODO: alsa error msg
dlg = Gtk.MessageDialog(self, dlg = Gtk.MessageDialog(self,
Gtk.DIALOG_MODAL | Gtk.DIALOG_DESTROY_WITH_PARENT, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MESSAGE_ERROR, Gtk.BUTTONS_OK, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK,
"Cannot open sound card control device.") "Cannot open sound card control device.")
dlg.run() dlg.run()
dlg.destroy() dlg.destroy()