hwmixvolume: switch to GTK+ 3.0 and GLib 2.0
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Tue, 18 Sep 2018 13:42:33 +0000 (15:42 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 20 Sep 2018 07:07:56 +0000 (09:07 +0200)
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>

hwmixvolume/hwmixvolume

index 64d232c..8e0b6b8 100755 (executable)
@@ -60,18 +60,18 @@ 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.new(self.get_label(info))
         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):
             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.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=adj)
             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.adjustments.append(adj)
         self.parent.scales_vbox.show_all()
@@ -174,45 +174,48 @@ class MixerWindow(Gtk.Window):
         self.connect('destroy', lambda w: Gtk.main_quit())
         self.set_title("Hardware Mixer Volumes")
 
-        vbox = Gtk.VBox()
+        vbox = Gtk.Grid()
+        vbox.set_orientation(Gtk.Orientation.VERTICAL)
         self.add(vbox)
 
-        hbox = Gtk.HBox()
-        vbox.pack_start(hbox, expand=False)
+        hbox = Gtk.Grid()
+        vbox.add(hbox)
 
-        label = Gtk.Label("_Sound Card: ")
-        label.set_use_underline(True)
-        hbox.pack_start(label, expand=False)
+        label = Gtk.Label.new_with_mnemonic("_Sound Card: ")
+        hbox.add(label)
 
-        combo = Gtk.combo_box_new_text()
+        combo = Gtk.ComboBoxText()
+        combo.set_hexpand(True)
         for i in self.card_numbers:
             str = "%d: %s" % (i, alsacard.card_get_name(i))
             combo.append_text(str)
         if len(self.card_numbers) > 0:
             combo.set_active(0)
         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)
 
-        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)
-        vbox.pack_start(self.lock_check, expand=False)
+        vbox.add(self.lock_check)
 
         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)
+        scrollwin.set_policy(hscrollbar_policy=Gtk.PolicyType.NEVER, vscrollbar_policy=Gtk.PolicyType.AUTOMATIC)
+        scrollwin.set_shadow_type(Gtk.ShadowType.NONE)
+        scrollwin.set_vexpand(True)
+        vbox.add(scrollwin)
 
-        self.scales_vbox = Gtk.VBox()
-        scrollwin.add_with_viewport(self.scales_vbox)
+        self.scales_vbox = Gtk.Grid()
+        self.scales_vbox.set_orientation(Gtk.Orientation.VERTICAL)
+        scrollwin.add(self.scales_vbox)
 
         label = Gtk.Label()
         label.set_single_line_mode(True)
-        line_height = label.size_request()[1]
+        line_height = max(label.get_size_request().height, 0)
         label.destroy()
-        scale = Gtk.HScale()
+        scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL)
         scale.set_draw_value(False)
-        line_height += scale.size_request()[1]
+        line_height += max(scale.get_size_request().height, 0)
         scale.destroy()
         # always have space for at least four sliders
         scrollwin.set_size_request(width=-1, height=line_height*4+4)
@@ -252,7 +255,7 @@ class MixerWindow(Gtk.Window):
             self.streams.append(stream)
 
         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()
 
@@ -270,8 +273,9 @@ class MixerWindow(Gtk.Window):
             else:
                 msg = "This card does not have stream controls."
             if not has_msg:
-                self.msg_label = Gtk.Label(msg)
-                self.scales_vbox.pack_start(self.msg_label)
+                self.msg_label = Gtk.Label.new(msg)
+                self.msg_label.set_vexpand(True)
+                self.scales_vbox.add(self.msg_label)
                 self.scales_vbox.show_all()
             elif self.msg_label.get_text() != msg:
                 self.msg_label.set_text(msg)
@@ -284,8 +288,8 @@ class MixerWindow(Gtk.Window):
         except:
             # TODO: alsa error msg
             dlg = Gtk.MessageDialog(self,
-                    Gtk.DIALOG_MODAL | Gtk.DIALOG_DESTROY_WITH_PARENT,
-                    Gtk.MESSAGE_ERROR, Gtk.BUTTONS_OK,
+                    Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
+                    Gtk.MessageType.ERROR, Gtk.ButtonsType.OK,
                     "Cannot open sound card control device.")
             dlg.run()
             dlg.destroy()