[-,hwmixvolume,1/9] hwmixvolume: replace PyGTK with gobject-introspection
diff mbox series

Message ID 20180808155637.5592-2-linkmauve@jabberfr.org
State New
Headers show
Series
  • [-,hwmixvolume,1/9] hwmixvolume: replace PyGTK with gobject-introspection
Related show

Commit Message

Emmanuel Gil Peyrot Aug. 8, 2018, 3:56 p.m. UTC
This doesn’t work yet, we require Gtk 3.0 rather than 2.0 and the API
changed quite a lot.

Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>

Comments

Emmanuel Gil Peyrot Aug. 10, 2018, 3:29 p.m. UTC | #1
On Fri, Aug 10, 2018 at 04:56:47PM +0200, Takashi Iwai wrote:
> On Wed, 08 Aug 2018 17:56:29 +0200,
> Emmanuel Gil Peyrot wrote:
> > 
> > This doesn’t work yet, we require Gtk 3.0 rather than 2.0 and the API
> > changed quite a lot.
> > 
> > Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
> 
> Thanks for the patches.  Most of changes look good, but also most of
> patches have no change log at all.  That's already a bad sign.
> 
> Could you give some details, especially why the change is needed, in
> each patch and resubmit as a patchset?  At best, send with a cover
> letter and a thread as a patch set at the next time (git-send-email
> can manage it well).

I actually wrote a cover letter[1], but it seems your email service
didn’t accept the UTF-8 encoding of it, I received a bounce email about
that.

I’ll send a v2 with more detailed commit messages, thanks.

> 
> 
> Takashi

[1] https://linkmauve.fr/files/0000-cover-letter.patch
Takashi Sakamoto Aug. 14, 2018, 4:24 a.m. UTC | #2
Hi,

On Aug 10 2018 23:56, Takashi Iwai wrote:
> On Wed, 08 Aug 2018 17:56:29 +0200,
> Emmanuel Gil Peyrot wrote:
>>
>> This doesn’t work yet, we require Gtk 3.0 rather than 2.0 and the API
>> changed quite a lot.
>>
>> Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
> 
> Thanks for the patches.  Most of changes look good, but also most of
> patches have no change log at all.  That's already a bad sign.
> 
> Could you give some details, especially why the change is needed, in
> each patch and resubmit as a patchset?  At best, send with a cover
> letter and a thread as a patch set at the next time (git-send-email
> can manage it well).

In my opinion, the aim of this patchset is porting from Gtk+2.0 to 
Gtk+3.0, according to EOL of python bindings. Original script uses 
PyGtk[1], which is an application of Gtk+2.0, but PyGtk is already at 
the end of life and usage of PyGObject[2] to access to metadata of 
Gtk+3.0 is a fresh way instead. In this point, Emmanuel's proposal is 
preferable in 2018.

Anyway, I encourage Emmanuel to re-post this patchset with enough 
comment according to maintainer's advice. I'll review his next post for 
merging.

[1] https://github.com/GNOME/pygtk
[2] https://gitlab.gnome.org/GNOME/pygobject


Thanks

Takashi Sakamoto

Patch
diff mbox series

diff --git a/hwmixvolume/hwmixvolume b/hwmixvolume/hwmixvolume
index ef80bc8..28ce776 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()