[alsa-devel] [PATCH - hwmixvolume v2 2/7] hwmixvolume: replace PyGTK with gobject-introspection
Emmanuel Gil Peyrot
linkmauve at jabberfr.org
Tue Sep 18 15:42:32 CEST 2018
From: Emmanuel Gil Peyrot <linkmauve at linkmauve.fr>
This doesn’t work yet, we require Gtk 3.0 rather than 2.0 and the API
changed quite a lot, so this is but a preparatory patch.
This is done so that we can get rid of GTK+ 2 which has been EOL for
many years already, and to add Python 3 support because Python 2 will
very soon be EOL as well.
Signed-off-by: Emmanuel Gil Peyrot <linkmauve at linkmauve.fr>
diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume
index 038bcb3..64d232c 100755
--- a/hwmixvolume/hwmixvolume
+++ b/hwmixvolume/hwmixvolume
@@ -15,7 +15,10 @@
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-import gobject, gtk
+import gi
+gi.require_version('GLib', '2.0')
+gi.require_version('Gtk', '3.0')
+from gi.repository import GLib, Gtk
from pyalsa import alsacard, alsahcontrol
INTF_PCM = alsahcontrol.interface_id['PCM']
@@ -57,16 +60,16 @@ class Stream:
value = alsahcontrol.Value(self.element)
value.read()
values = value.get_tuple(TYPE_INTEGER, info.count)
- self.label = gtk.Label(self.get_label(info))
+ self.label = Gtk.Label(self.get_label(info))
self.label.set_single_line_mode(True)
self.parent.scales_vbox.pack_start(self.label, expand=False)
for i in range(info.count):
- adj = gtk.Adjustment(value=values[i],
+ adj = Gtk.Adjustment(value=values[i],
lower=info.min, upper=info.max,
step_incr=1,
page_incr=(info.max-info.min+1)/8)
adj.connect('value-changed', self.update_ctl_from_scale, i)
- scale = gtk.HScale(adj)
+ scale = Gtk.HScale(adj)
scale.set_draw_value(False)
self.parent.scales_vbox.pack_start(scale, expand=False)
self.scales.append(scale)
@@ -157,7 +160,7 @@ class Stream:
f.close()
return cmdline.replace('\x00', ' ').strip()
-class MixerWindow(gtk.Window):
+class MixerWindow(Gtk.Window):
card_numbers = alsacard.card_list()
current_card = -1
hcontrol = None
@@ -167,21 +170,21 @@ class MixerWindow(gtk.Window):
hctl_sources = []
def __init__(self):
- gtk.Window.__init__(self)
- self.connect('destroy', lambda w: gtk.main_quit())
+ Gtk.Window.__init__(self)
+ self.connect('destroy', lambda w: Gtk.main_quit())
self.set_title("Hardware Mixer Volumes")
- vbox = gtk.VBox()
+ vbox = Gtk.VBox()
self.add(vbox)
- hbox = gtk.HBox()
+ hbox = Gtk.HBox()
vbox.pack_start(hbox, expand=False)
- label = gtk.Label("_Sound Card: ")
+ label = Gtk.Label("_Sound Card: ")
label.set_use_underline(True)
hbox.pack_start(label, expand=False)
- combo = gtk.combo_box_new_text()
+ combo = Gtk.combo_box_new_text()
for i in self.card_numbers:
str = "%d: %s" % (i, alsacard.card_get_name(i))
combo.append_text(str)
@@ -191,23 +194,23 @@ class MixerWindow(gtk.Window):
hbox.pack_start(combo)
label.set_mnemonic_widget(combo)
- self.lock_check = gtk.CheckButton(label="_Lock Channels")
+ self.lock_check = Gtk.CheckButton(label="_Lock Channels")
self.lock_check.set_active(True)
vbox.pack_start(self.lock_check, expand=False)
- scrollwin = gtk.ScrolledWindow()
- scrollwin.set_policy(hscrollbar_policy=gtk.POLICY_NEVER, vscrollbar_policy=gtk.POLICY_AUTOMATIC)
- scrollwin.set_shadow_type(gtk.SHADOW_NONE)
+ scrollwin = Gtk.ScrolledWindow()
+ scrollwin.set_policy(hscrollbar_policy=Gtk.POLICY_NEVER, vscrollbar_policy=Gtk.POLICY_AUTOMATIC)
+ scrollwin.set_shadow_type(Gtk.SHADOW_NONE)
vbox.pack_start(scrollwin)
- self.scales_vbox = gtk.VBox()
+ self.scales_vbox = Gtk.VBox()
scrollwin.add_with_viewport(self.scales_vbox)
- label = gtk.Label()
+ label = Gtk.Label()
label.set_single_line_mode(True)
line_height = label.size_request()[1]
label.destroy()
- scale = gtk.HScale()
+ scale = Gtk.HScale()
scale.set_draw_value(False)
line_height += scale.size_request()[1]
scale.destroy()
@@ -223,7 +226,7 @@ class MixerWindow(gtk.Window):
def change_card(self, cardnum):
for s in self.hctl_sources:
- gobject.source_remove(s)
+ GLib.source_remove(s)
self.hctl_sources = []
self.hcontrol = self.open_hcontrol_for_card(cardnum)
@@ -249,7 +252,7 @@ class MixerWindow(gtk.Window):
self.streams.append(stream)
for fd,condition in self.hcontrol.poll_fds:
- self.hctl_sources.append(gobject.io_add_watch(fd, condition, self.hctl_io_callback))
+ self.hctl_sources.append(GLib.io_add_watch(fd, condition, self.hctl_io_callback))
self.update_msg_label()
@@ -267,7 +270,7 @@ class MixerWindow(gtk.Window):
else:
msg = "This card does not have stream controls."
if not has_msg:
- self.msg_label = gtk.Label(msg)
+ self.msg_label = Gtk.Label(msg)
self.scales_vbox.pack_start(self.msg_label)
self.scales_vbox.show_all()
elif self.msg_label.get_text() != msg:
@@ -280,9 +283,9 @@ class MixerWindow(gtk.Window):
mode=alsahcontrol.open_mode['NONBLOCK'])
except:
# TODO: alsa error msg
- dlg = gtk.MessageDialog(self,
- gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
- gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
+ dlg = Gtk.MessageDialog(self,
+ Gtk.DIALOG_MODAL | Gtk.DIALOG_DESTROY_WITH_PARENT,
+ Gtk.MESSAGE_ERROR, Gtk.BUTTONS_OK,
"Cannot open sound card control device.")
dlg.run()
dlg.destroy()
@@ -304,7 +307,7 @@ class MixerWindow(gtk.Window):
def main():
MixerWindow()
- gtk.main()
+ Gtk.main()
main()
--
2.19.0
More information about the Alsa-devel
mailing list