diff --git a/0000-add-python3-compat.patch b/0000-add-python3-compat.patch
new file mode 100644
index 0000000..174fc7a
--- /dev/null
+++ b/0000-add-python3-compat.patch
@@ -0,0 +1,912 @@
+--- a/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
++++ b/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
+@@ -10,7 +10,7 @@
+
+ import pygtk
+ pygtk.require('2.0')
+-import gtk, gobject
++import gtk as Gtk
+ import os
+
+ configdir = os.getenv('HOME') + "/.pulse"
+@@ -21,288 +21,290 @@ presetdir1 = configdir + "/presets"
+ presetdir2 = "/usr/share/pulseaudio-equalizer/presets"
+
+ def GetSettings():
+- global rawdata
+- global rawpresets
+- global ladspa_filename
+- global ladspa_name
+- global ladspa_label
+- global preamp
+- global num_ladspa_controls
+- global ladspa_controls
+- global ladspa_inputs
+- global status
+- global realstatus
+- global persistence
+- global preset
+- global ranges
+- global windowtitle
+- global presetmatch
+- global clearpreset
+-
+- print "Getting settings..."
+-
+- os.system('pulseaudio-equalizer interface.getsettings')
+-
+- f = open(eqconfig, "r")
+- rawdata=f.read().split('\n')
+- f.close()
+-
+- rawpresets = {}
+- f = open(eqpresets, "r")
+- rawpresets=f.read().split('\n')
+- f.close()
+- del rawpresets[len(rawpresets)-1]
+-
+- ladspa_filename = str(rawdata[0])
+- ladspa_name = str(rawdata[1])
+- ladspa_label = str(rawdata[2])
+- preamp = (rawdata[3])
+- preset = str(rawdata[4])
+- status = int(rawdata[5])
+- persistence = int(rawdata[6])
+- ranges = rawdata[7:9]
+- num_ladspa_controls = int(rawdata[9])
+- ladspa_controls = rawdata[10:(10+num_ladspa_controls)]
+- ladspa_inputs = rawdata[(10+num_ladspa_controls):(10+num_ladspa_controls)+(num_ladspa_controls)]
+-
+- if status == 1:
+- realstatus = "Enabled"
+- else:
+- realstatus = "Disabled"
+-
+- windowtitle = "PulseAudio " + ladspa_label
+-
+- clearpreset = 1
+- presetmatch = ''
+- for i in range(len(rawpresets)):
+- if rawpresets[i] == preset:
+- print "Match!"
+- presetmatch = 1
++ global rawdata
++ global rawpresets
++ global ladspa_filename
++ global ladspa_name
++ global ladspa_label
++ global preamp
++ global num_ladspa_controls
++ global ladspa_controls
++ global ladspa_inputs
++ global status
++ global realstatus
++ global persistence
++ global preset
++ global ranges
++ global windowtitle
++ global presetmatch
++ global clearpreset
++
++ print("Getting settings...")
++
++ os.system("pulseaudio-equalizer interface.getsettings")
++
++ f = open(eqconfig, "r")
++ rawdata=f.read().split("\n")
++ f.close()
++
++ rawpresets = {}
++ f = open(eqpresets, "r")
++ rawpresets=f.read().split("\n")
++ f.close()
++ del rawpresets[len(rawpresets)-1]
++
++ ladspa_filename = str(rawdata[0])
++ ladspa_name = str(rawdata[1])
++ ladspa_label = str(rawdata[2])
++ preamp = (rawdata[3])
++ preset = str(rawdata[4])
++ status = int(rawdata[5])
++ persistence = int(rawdata[6])
++ ranges = rawdata[7 : 9]
++ num_ladspa_controls = int(rawdata[9])
++ ladspa_controls = rawdata[10 : (10 + num_ladspa_controls)]
++ ladspa_inputs = rawdata[(10 + num_ladspa_controls) :
++ (10 + num_ladspa_controls) + (num_ladspa_controls)]
++
++ if status == 1:
++ realstatus = "Enabled"
++ else:
++ realstatus = "Disabled"
++
++ windowtitle = "PulseAudio " + ladspa_label
++
++ clearpreset = 1
++ presetmatch = ""
++ for i in range(len(rawpresets)):
++ if rawpresets[i] == preset:
++ print("Match!")
++ presetmatch = 1
+
+ def ApplySettings():
+- print "Applying settings..."
+- f = open(eqconfig, "w")
+- del rawdata[:]
+- rawdata.append(str(ladspa_filename))
+- rawdata.append(str(ladspa_name))
+- rawdata.append(str(ladspa_label))
+- rawdata.append(str(preamp))
+- rawdata.append(str(preset))
+- rawdata.append(str(status))
+- rawdata.append(str(persistence))
+- for i in range(2):
+- rawdata.append(str(ranges[i]))
+- rawdata.append(str(num_ladspa_controls))
+- for i in range(num_ladspa_controls):
+- rawdata.append(str(ladspa_controls[i]))
+- for i in range(num_ladspa_controls):
+- rawdata.append(str(ladspa_inputs[i]))
+-
+- for i in rawdata:
+- f.write(str(i)+'\n')
+- f.close()
++ print("Applying settings...")
++ f = open(eqconfig, "w")
++ del rawdata[:]
++ rawdata.append(str(ladspa_filename))
++ rawdata.append(str(ladspa_name))
++ rawdata.append(str(ladspa_label))
++ rawdata.append(str(preamp))
++ rawdata.append(str(preset))
++ rawdata.append(str(status))
++ rawdata.append(str(persistence))
++ for i in range(2):
++ rawdata.append(str(ranges[i]))
++ rawdata.append(str(num_ladspa_controls))
++ for i in range(num_ladspa_controls):
++ rawdata.append(str(ladspa_controls[i]))
++ for i in range(num_ladspa_controls):
++ rawdata.append(str(ladspa_inputs[i]))
++
++ for i in rawdata:
++ f.write(str(i) + "\n")
++ f.close()
+
+- os.system('pulseaudio-equalizer interface.applysettings')
++ os.system("pulseaudio-equalizer interface.applysettings")
+
+ def FormatLabels(x):
+- global c
+- global suffix
+- global whitespace1
+- global whitespace2
+-
+- whitespace1 = ""
+- whitespace2 = ""
+-
+- current_input = int(ladspa_inputs[x-1])
+- if current_input < 99:
+- a = current_input
+- suffix = "Hz"
+- if current_input > 99 and current_input < 999:
+- a = current_input
+- suffix = "Hz"
+- if current_input > 999 and current_input < 9999:
+- a = float(current_input)/1000
+- suffix = "KHz"
+- if current_input > 9999:
+- a = float(current_input)/1000
+- suffix = "KHz"
+-
+- # Filter out unnecessary ".0" from ladspa_inputs
+- b=str(a)
+- if b[-2:] == ".0":
+- c = b[:-2]
+- else:
+- c = b
+-
+- # Add whitespace formatting to ensure text is centered
+- if len(c) == 3 and len(suffix) == 2:
+- whitespace2 = " "
+- if len(c) < 4 and len(suffix) == 3:
+- whitespace1 = " "
+- if len(c) < 2 and len(suffix) == 3:
+- whitespace1 = " "
++ global c
++ global suffix
++ global whitespace1
++ global whitespace2
++
++ whitespace1 = ""
++ whitespace2 = ""
++
++ current_input = int(ladspa_inputs[x-1])
++ if current_input < 99:
++ a = current_input
++ suffix = "Hz"
++ if current_input > 99 and current_input < 999:
++ a = current_input
++ suffix = "Hz"
++ if current_input > 999 and current_input < 9999:
++ a = float(current_input) / 1000
++ suffix = "KHz"
++ if current_input > 9999:
++ a = float(current_input) / 1000
++ suffix = "KHz"
++
++ # Filter out unnecessary ".0" from ladspa_inputs
++ b=str(a)
++ if b[-2:] == ".0":
++ c = b[:-2]
++ else:
++ c = b
++
++ # Add whitespace formatting to ensure text is centered
++ if len(c) == 3 and len(suffix) == 2:
++ whitespace2 = " "
++ if len(c) < 4 and len(suffix) == 3:
++ whitespace1 = " "
++ if len(c) < 2 and len(suffix) == 3:
++ whitespace1 = " "
+
+ class Equalizer:
+ def on_scale(self, widget, y):
+- global ladspa_controls
+- global preset
+- global clearpreset
+- newvalue = float(round(widget.get_value(),1))
+- del ladspa_controls[y-1]
+- ladspa_controls.insert(y-1, newvalue)
+- if clearpreset == 1:
+- preset = ''
+- presetsbox.get_child().set_text(preset)
+- for i in range(1,num_ladspa_controls+1):
+- self.scalevalues[i].set_markup("" + str(float(ladspa_controls[i-1])) + "\ndB")
++ global ladspa_controls
++ global preset
++ global clearpreset
++ newvalue = float(round(widget.get_value(), 1))
++ del ladspa_controls[y - 1]
++ ladspa_controls.insert(y - 1, newvalue)
++ if clearpreset == 1:
++ preset = ""
++ presetsbox.get_child().set_text(preset)
++ for i in range(1,num_ladspa_controls + 1):
++ self.scalevalues[i].set_markup("" + str(float(ladspa_controls[i-1])) + "\ndB")
+
+ def on_presetsbox(self, widget, x):
+- global preset
+- global presetmatch
+- global clearpreset
+- global ladspa_filename
+- global ladspa_name
+- global ladspa_label
+- global preamp
+- global num_ladspa_controls
+- global ladspa_controls
+- global ladspa_inputs
+- global windowtitle
+- preset = presetsbox.get_child().get_text()
+-
+- presetmatch = ''
+- for i in range(len(rawpresets)):
+- if rawpresets[i] == preset:
+- print "Match!"
+- presetmatch = 1
+-
+- if presetmatch == 1:
+- if os.path.isfile(presetdir1 + "/" + preset + ".preset"):
+- f = open(presetdir1 + "/" + preset + ".preset", "r")
+- rawdata=f.read().split('\n')
+- else:
+- f = open(presetdir2 + "/" + preset + ".preset", "r")
+- rawdata=f.read().split('\n')
+- f.close
+-
+- ladspa_filename = str(rawdata[0])
+- ladspa_name = str(rawdata[1])
+- ladspa_label = str(rawdata[2])
+- #preamp = (rawdata[3])
+- preset = str(rawdata[4])
+- num_ladspa_controls = int(rawdata[5])
+- ladspa_controls = rawdata[6:(6+num_ladspa_controls)]
+- ladspa_inputs = rawdata[(6+num_ladspa_controls):(6+num_ladspa_controls)+(num_ladspa_controls)]
+-
+- preampscale.set_value(float(preamp))
+- preampscalevalue.set_markup(str(preampscale.get_value()) + "x")
+- windowtitle = "PulseAudio " + ladspa_label
+- self.window.set_title(windowtitle + " [" + realstatus + "]")
+- clearpreset = ''
+- for i in range(1,num_ladspa_controls+1):
+- self.scales[i].set_value(float(ladspa_controls[i-1]))
+- FormatLabels(i)
+- self.labels[i].set_markup("" + whitespace1 + c + "\n" + whitespace2 + suffix + "")
+- self.scalevalues[i].set_markup("" + str(float(ladspa_controls[i-1])) + "\ndB")
+- # Set preset again due to interference from scale modifications
+- preset = str(rawdata[4])
+- clearpreset = 1
+- presetsbox.get_child().set_text(preset)
+- ApplySettings()
++ global preset
++ global presetmatch
++ global clearpreset
++ global ladspa_filename
++ global ladspa_name
++ global ladspa_label
++ global preamp
++ global num_ladspa_controls
++ global ladspa_controls
++ global ladspa_inputs
++ global windowtitle
++ preset = presetsbox.get_child().get_text()
++
++ presetmatch = ""
++ for i in range(len(rawpresets)):
++ if rawpresets[i] == preset:
++ print("Match!")
++ presetmatch = 1
++
++ if presetmatch == 1:
++ if os.path.isfile(presetdir1 + "/" + preset + ".preset"):
++ f = open(presetdir1 + "/" + preset + ".preset", "r")
++ rawdata=f.read().split("\n")
++ else:
++ f = open(presetdir2 + "/" + preset + ".preset", "r")
++ rawdata=f.read().split("\n")
++ f.close
++
++ ladspa_filename = str(rawdata[0])
++ ladspa_name = str(rawdata[1])
++ ladspa_label = str(rawdata[2])
++ #preamp = (rawdata[3])
++ preset = str(rawdata[4])
++ num_ladspa_controls = int(rawdata[5])
++ ladspa_controls = rawdata[6 : (6 + num_ladspa_controls)]
++ ladspa_inputs = rawdata[(6 + num_ladspa_controls) :
++ (6 + num_ladspa_controls) + (num_ladspa_controls)]
++
++ preampscale.set_value(float(preamp))
++ preampscalevalue.set_markup(str(preampscale.get_value()) + "x")
++ windowtitle = "PulseAudio " + ladspa_label
++ self.window.set_title(windowtitle + " [" + realstatus + "]")
++ clearpreset = ""
++ for i in range(1,num_ladspa_controls + 1):
++ self.scales[i].set_value(float(ladspa_controls[i - 1]))
++ FormatLabels(i)
++ self.labels[i].set_markup("" + whitespace1 + c + "\n" + whitespace2 + suffix + "")
++ self.scalevalues[i].set_markup("" + str(float(ladspa_controls[i-1])) + "\ndB")
++ # Set preset again due to interference from scale modifications
++ preset = str(rawdata[4])
++ clearpreset = 1
++ presetsbox.get_child().set_text(preset)
++ ApplySettings()
+
+ def on_applysettings(self, widget):
+- ApplySettings()
++ ApplySettings()
+
+ def on_resetsettings(self, widget):
+- print "Resetting to defaults..."
+- os.system('pulseaudio-equalizer interface.resetsettings')
+- GetSettings()
+-
+- eqenabled.set_active(status)
+- keepsettings.set_active(persistence)
+- presetsbox.get_child().set_text(preset)
+- preampscale.set_value(float(preamp))
+- for i in range(1,num_ladspa_controls+1):
+- self.scales[i].set_value(float(ladspa_controls[i-1]))
+- FormatLabels(i)
+- self.labels[i].set_markup("" + whitespace1 + c + "\n" + whitespace2 + suffix + "")
+- self.scalevalues[i].set_markup("" + str(float(ladspa_controls[i-1])) + "\ndB")
++ print("Resetting to defaults...")
++ os.system("pulseaudio-equalizer interface.resetsettings")
++ GetSettings()
++
++ eqenabled.set_active(status)
++ keepsettings.set_active(persistence)
++ presetsbox.get_child().set_text(preset)
++ preampscale.set_value(float(preamp))
++ for i in range(1, num_ladspa_controls+1):
++ self.scales[i].set_value(float(ladspa_controls[i-1]))
++ FormatLabels(i)
++ self.labels[i].set_markup("" + whitespace1 + c + "\n" + whitespace2 + suffix + "")
++ self.scalevalues[i].set_markup("" + str(float(ladspa_controls[i-1])) + "\ndB")
+
+ def on_savepreset(self, widget):
+- global preset
+- global presetmatch
+- preset = presetsbox.get_child().get_text()
+- if preset == '' or presetmatch == 1:
+- print 'Invalid preset name'
+- else:
+- f = open(presetdir1 + "/" + preset + ".preset", "w")
+-
+- del rawdata[:]
+- rawdata.append(str(ladspa_filename))
+- rawdata.append(str(ladspa_name))
+- rawdata.append(str(ladspa_label))
+- rawdata.append(str(preamp))
+- rawdata.append(str(preset))
+- rawdata.append(str(num_ladspa_controls))
+- for i in range(num_ladspa_controls):
+- rawdata.append(str(ladspa_controls[i]))
+- for i in range(num_ladspa_controls):
+- rawdata.append(str(ladspa_inputs[i]))
+-
+- for i in rawdata:
+- f.write(str(i)+'\n')
+- f.close()
+-
+- # Clear preset list from ComboBox
+- for i in range(len(rawpresets)):
+- presetsbox.remove_text(0)
+-
+- # Apply settings (which will save new preset as default)
+- ApplySettings()
+-
+- # Refresh (and therefore, sort) preset list
+- GetSettings()
+-
+- # Repopulate preset list into ComboBox
+- for i in range(len(rawpresets)):
+- presetsbox.append_text(rawpresets[i])
++ global preset
++ global presetmatch
++ preset = presetsbox.get_child().get_text()
++ if preset == "" or presetmatch == 1:
++ print("Invalid preset name")
++ else:
++ f = open(presetdir1 + "/" + preset + ".preset", "w")
++
++ del rawdata[:]
++ rawdata.append(str(ladspa_filename))
++ rawdata.append(str(ladspa_name))
++ rawdata.append(str(ladspa_label))
++ rawdata.append(str(preamp))
++ rawdata.append(str(preset))
++ rawdata.append(str(num_ladspa_controls))
++ for i in range(num_ladspa_controls):
++ rawdata.append(str(ladspa_controls[i]))
++ for i in range(num_ladspa_controls):
++ rawdata.append(str(ladspa_inputs[i]))
++
++ for i in rawdata:
++ f.write(str(i) + "\n")
++ f.close()
++
++ # Clear preset list from ComboBox
++ for i in range(len(rawpresets)):
++ presetsbox.remove_text(0)
++
++ # Apply settings (which will save new preset as default)
++ ApplySettings()
++
++ # Refresh (and therefore, sort) preset list
++ GetSettings()
++
++ # Repopulate preset list into ComboBox
++ for i in range(len(rawpresets)):
++ presetsbox.append_text(rawpresets[i])
+
+ def on_preampscale(self, widget):
+- global preamp
+- preamp = float(round(widget.get_value(),1))
+- preampscalevalue.set_markup(str(preamp) + "x")
+- #preset = ''
+- #presetsbox.get_child().set_text(preset)
++ global preamp
++ preamp = float(round(widget.get_value(), 1))
++ preampscalevalue.set_markup(str(preamp) + "x")
++ #preset = ""
++ #presetsbox.get_child().set_text(preset)
+
+ def on_eqenabled(self, widget):
+- global status
++ global status
+ if widget.get_active():
+- self.window.set_title(windowtitle + " [Enabled]")
+- status = 1
++ self.window.set_title(windowtitle + " [Enabled]")
++ status = 1
+ else:
+- self.window.set_title(windowtitle + " [Disabled]")
+- status = 0
+- ApplySettings()
++ self.window.set_title(windowtitle + " [Disabled]")
++ status = 0
++ ApplySettings()
+
+ def on_keepsettings(self, widget):
+- global persistence
++ global persistence
+ if widget.get_active():
+- persistence = 1
++ persistence = 1
+ else:
+- persistence = 0
+- ApplySettings()
++ persistence = 0
++ ApplySettings()
+
+ def on_removepreset(self,widget):
+- global preset
++ global preset
+ global presets
+- dialog = gtk.FileChooserDialog("Choose preset to remove...",
++ dialog = Gtk.FileChooserDialog("Choose preset to remove...",
+ None,
+- gtk.FILE_CHOOSER_ACTION_OPEN,
+- (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+- gtk.STOCK_OK, gtk.RESPONSE_OK))
+- dialog.set_default_response(gtk.RESPONSE_OK)
++ Gtk.FILE_CHOOSER_ACTION_OPEN,
++ (Gtk.STOCK_CANCEL, Gtk.RESPONSE_CANCEL,
++ Gtk.STOCK_OK, Gtk.RESPONSE_OK))
++ dialog.set_default_response(Gtk.RESPONSE_OK)
+
+- filter = gtk.FileFilter()
++ filter = Gtk.FileFilter()
+ filter.set_name("Preset files")
+ filter.add_pattern("*.preset")
+ dialog.add_filter(filter)
+@@ -310,209 +312,209 @@ class Equalizer:
+ dialog.show()
+
+ response = dialog.run()
+- if response == gtk.RESPONSE_OK:
+- filename = dialog.get_filename()
+- path_and_name = os.path.split(filename)
+- name = path_and_name[1]
+- os.remove(filename)
+-
+- # Make a note of the current preset, then clear it temporarily
+- preset = presetsbox.get_child().get_text()
+- realpreset = preset
+- preset = ''
+- presetsbox.get_child().set_text('')
+-
+- # Clear preset list from ComboBox
+- for i in range(len(rawpresets)):
+- presetsbox.remove_text(0)
+-
+- # Refresh (and therefore, sort) preset list
+- GetSettings()
+-
+- # Clear preset (if it is the same as removed preset), or restore preset
+- if (presetdir1 + "/" + preset + ".preset") == filename:
+- preset = ''
+- else:
+- preset = realpreset
+-
+- # Restore preset
+- presetsbox.get_child().set_text(preset)
+-
+- # Repopulate preset list into ComboBox
+- for i in range(len(rawpresets)):
+- presetsbox.append_text(rawpresets[i])
++ if response == Gtk.RESPONSE_OK:
++ filename = dialog.get_filename()
++ path_and_name = os.path.split(filename)
++ name = path_and_name[1]
++ os.remove(filename)
++
++ # Make a note of the current preset, then clear it temporarily
++ preset = presetsbox.get_child().get_text()
++ realpreset = preset
++ preset = ""
++ presetsbox.get_child().set_text("")
++
++ # Clear preset list from ComboBox
++ for i in range(len(rawpresets)):
++ presetsbox.remove_text(0)
++
++ # Refresh (and therefore, sort) preset list
++ GetSettings()
++
++ # Clear preset (if it is the same as removed preset), or restore preset
++ if (presetdir1 + "/" + preset + ".preset") == filename:
++ preset = ""
++ else:
++ preset = realpreset
++
++ # Restore preset
++ presetsbox.get_child().set_text(preset)
++
++ # Repopulate preset list into ComboBox
++ for i in range(len(rawpresets)):
++ presetsbox.append_text(rawpresets[i])
+
+- # Apply settings
+- ApplySettings()
++ # Apply settings
++ ApplySettings()
+
+ dialog.destroy()
+
+ def destroy_equalizer(self, widget, data=None):
+- gtk.main_quit()
++ Gtk.main_quit()
+
+ def __init__(self):
+- GetSettings()
++ GetSettings()
+
+- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
++ self.window = Gtk.Window(Gtk.WINDOW_TOPLEVEL)
+ self.window.set_resizable(True)
+
+ self.window.connect("destroy", self.destroy_equalizer)
+ self.window.set_title(windowtitle + " [" + realstatus + "]")
+ self.window.set_border_width(0)
+- icon = self.window.set_icon_from_file("/usr/share/icons/hicolor/scalable/apps/multimedia-volume-control.svg")
++ icon = self.window.set_icon_from_file("/usr/share/icons/hicolor/scalable/apps/multimedia-volume-control.svg")
+
+- menu = gtk.Menu()
++ menu = Gtk.Menu()
+
+- menu_item = gtk.MenuItem('Reset to defaults')
++ menu_item = Gtk.MenuItem("Reset to defaults")
+ menu_item.connect("activate", self.on_resetsettings)
+- menu.append(menu_item)
+- menu_item.show()
+- menu_item = gtk.MenuItem('Remove user preset...')
+- menu_item.connect("activate", self.on_removepreset)
+ menu.append(menu_item)
+- menu_item.show()
+- root_menu = gtk.MenuItem("Advanced")
++ menu_item.show()
++ menu_item = Gtk.MenuItem("Remove user preset...")
++ menu_item.connect("activate", self.on_removepreset)
++ menu.append(menu_item)
++ menu_item.show()
++ root_menu = Gtk.MenuItem("Advanced")
+ root_menu.show()
+ root_menu.set_submenu(menu)
+
+- vbox1 = gtk.VBox(False, 0)
++ vbox1 = Gtk.VBox(False, 0)
+ self.window.add(vbox1)
+ vbox1.show()
+- menu_bar = gtk.MenuBar()
++ menu_bar = Gtk.MenuBar()
+ vbox1.pack_start(menu_bar, False, False, 2)
+ menu_bar.show()
+ menu_bar.append (root_menu)
+
+- hbox1 = gtk.HBox(False, 1)
++ hbox1 = Gtk.HBox(False, 1)
+ #hbox1.set_border_width(10)
+ vbox1.add(hbox1)
+ hbox1.show()
+
+- table = gtk.Table(3, 17, False)
++ table = Gtk.Table(3, 17, False)
+ table.set_border_width(5)
+ hbox1.add(table)
+
+- # Preamp widget
+- global preampscale
+- global preampscalevalue
+- preampscale = gtk.VScale()
+- preampscale.set_draw_value(0)
+- preampscale.set_inverted(1)
+- preampscale.set_value_pos(gtk.POS_BOTTOM)
+- preampscale.set_range(0.0,2.0)
+- preampscale.set_increments(1, 0.1)
+- preampscale.set_digits(1)
+- preampscale.set_size_request(35,200)
+- preampscale.set_value(float(preamp))
+- preampscale.connect("value-changed", self.on_preampscale)
+- label = gtk.Label()
+- label.set_markup("Preamp")
+- preampscalevalue = gtk.Label()
+- preampscalevalue.set_markup(str(preampscale.get_value()) + "x")
+- table.attach(label, 1, 2, 0, 1)
+- table.attach(preampscale, 1, 2, 1, 2)
+- table.attach(preampscalevalue, 1, 2, 2, 3)
+- label.show()
+- preampscale.show()
+- preampscalevalue.show()
+-
+- # Separator between preamp and bands
+- separator = gtk.VSeparator()
+- table.attach(separator, 2, 3, 1, 2)
+- separator.show()
+-
+- # Equalizer bands
+- global scale
+- self.scales = {}
+- self.labels = {}
+- self.scalevalues = {}
+- for x in range(1,num_ladspa_controls+1):
+- scale = gtk.VScale()
+- self.scales[x] = scale
+- scale.set_draw_value(0)
+- scale.set_inverted(1)
+- scale.set_value_pos(gtk.POS_BOTTOM)
+- scale.set_range(float(ranges[0]), float(ranges[1]))
+- scale.set_increments(1, 0.1)
+- scale.set_digits(1)
+- scale.set_size_request(35,200)
+- scale.set_value(float(ladspa_controls[x-1]))
+- scale.connect("value-changed", self.on_scale, x)
+- FormatLabels(x)
+- label = gtk.Label()
+- self.labels[x] = label
+- label.set_markup("" + whitespace1 + c + "\n" + whitespace2 + suffix + "")
+- scalevalue = gtk.Label()
+- self.scalevalues[x] = scalevalue
+- scalevalue.set_markup("" + str(scale.get_value()) + "\ndB")
+- table.attach(label, x+2, x+3, 0, 1)
+- table.attach(scale, x+2, x+3, 1, 2)
+- table.attach(scalevalue, x+2, x+3, 2, 3)
+- label.show()
+- scale.show()
+- scalevalue.show()
++ # Preamp widget
++ global preampscale
++ global preampscalevalue
++ preampscale = Gtk.VScale()
++ preampscale.set_draw_value(0)
++ preampscale.set_inverted(1)
++ preampscale.set_value_pos(Gtk.POS_BOTTOM)
++ preampscale.set_range(0.0, 2.0)
++ preampscale.set_increments(1, 0.1)
++ preampscale.set_digits(1)
++ preampscale.set_size_request(35, 200)
++ preampscale.set_value(float(preamp))
++ preampscale.connect("value-changed", self.on_preampscale)
++ label = Gtk.Label()
++ label.set_markup("Preamp")
++ preampscalevalue = Gtk.Label()
++ preampscalevalue.set_markup(str(preampscale.get_value()) + "x")
++ table.attach(label, 1, 2, 0, 1)
++ table.attach(preampscale, 1, 2, 1, 2)
++ table.attach(preampscalevalue, 1, 2, 2, 3)
++ label.show()
++ preampscale.show()
++ preampscalevalue.show()
++
++ # Separator between preamp and bands
++ separator = Gtk.VSeparator()
++ table.attach(separator, 2, 3, 1, 2)
++ separator.show()
++
++ # Equalizer bands
++ global scale
++ self.scales = {}
++ self.labels = {}
++ self.scalevalues = {}
++ for x in range(1,num_ladspa_controls+1):
++ scale = Gtk.VScale()
++ self.scales[x] = scale
++ scale.set_draw_value(0)
++ scale.set_inverted(1)
++ scale.set_value_pos(Gtk.POS_BOTTOM)
++ scale.set_range(float(ranges[0]), float(ranges[1]))
++ scale.set_increments(1, 0.1)
++ scale.set_digits(1)
++ scale.set_size_request(35, 200)
++ scale.set_value(float(ladspa_controls[x - 1]))
++ scale.connect("value-changed", self.on_scale, x)
++ FormatLabels(x)
++ label = Gtk.Label()
++ self.labels[x] = label
++ label.set_markup("" + whitespace1 + c + "\n" + whitespace2 + suffix + "")
++ scalevalue = Gtk.Label()
++ self.scalevalues[x] = scalevalue
++ scalevalue.set_markup("" + str(scale.get_value()) + "\ndB")
++ table.attach(label, x + 2, x + 3, 0, 1)
++ table.attach(scale, x + 2, x + 3, 1, 2)
++ table.attach(scalevalue, x + 2, x + 3, 2, 3)
++ label.show()
++ scale.show()
++ scalevalue.show()
+
+- table.show()
++ table.show()
+
+- vbox2 = gtk.VBox(True, 1)
++ vbox2 = Gtk.VBox(True, 1)
+ vbox2.set_border_width(10)
+ hbox1.add(vbox2)
+ vbox2.show()
+
+- presetslabel = gtk.Label()
+- presetslabel.set_markup("Preset:")
+- vbox2.pack_start(presetslabel, False, False, 0)
+- presetslabel.show()
+-
+- global presetsbox
+- presetsbox = gtk.combo_box_entry_new_text()
+- vbox2.pack_start(presetsbox, False, False, 0)
+- presetsbox.get_child().set_text(preset)
+- for i in range(len(rawpresets)):
+- presetsbox.append_text(rawpresets[i])
++ presetslabel = Gtk.Label()
++ presetslabel.set_markup("Preset:")
++ vbox2.pack_start(presetslabel, False, False, 0)
++ presetslabel.show()
++
++ global presetsbox
++ presetsbox = Gtk.combo_box_entry_new_text()
++ vbox2.pack_start(presetsbox, False, False, 0)
++ presetsbox.get_child().set_text(preset)
++ for i in range(len(rawpresets)):
++ presetsbox.append_text(rawpresets[i])
+ presetsbox.connect("changed", self.on_presetsbox, x)
+- presetsbox.show()
++ presetsbox.show()
+
+- savepreset = gtk.Button('Save Preset')
+- vbox2.pack_start(savepreset, False, False, 0)
++ savepreset = Gtk.Button("Save Preset")
++ vbox2.pack_start(savepreset, False, False, 0)
+ savepreset.connect("clicked", self.on_savepreset)
+- savepreset.show()
++ savepreset.show()
+
+- global eqenabled
+- eqenabled = gtk.CheckButton("EQ Enabled")
++ global eqenabled
++ eqenabled = Gtk.CheckButton("EQ Enabled")
+ eqenabled.set_active(status)
+- eqenabled.unset_flags(gtk.CAN_FOCUS)
++ eqenabled.unset_flags(Gtk.CAN_FOCUS)
+ eqenabled.connect("clicked", self.on_eqenabled)
+- vbox2.pack_start(eqenabled, False, False, 0)
+- eqenabled.show()
++ vbox2.pack_start(eqenabled, False, False, 0)
++ eqenabled.show()
+
+- global keepsettings
+- keepsettings = gtk.CheckButton('Keep Settings')
+- keepsettings.set_active(persistence)
+- keepsettings.unset_flags(gtk.CAN_FOCUS)
++ global keepsettings
++ keepsettings = Gtk.CheckButton("Keep Settings")
++ keepsettings.set_active(persistence)
++ keepsettings.unset_flags(Gtk.CAN_FOCUS)
+ keepsettings.connect("clicked", self.on_keepsettings)
+- vbox2.pack_start(keepsettings, False, False, 0)
+- keepsettings.show()
++ vbox2.pack_start(keepsettings, False, False, 0)
++ keepsettings.show()
+
+- applysettings = gtk.Button('Apply Settings')
+- vbox2.pack_start(applysettings, False, False, 0)
++ applysettings = Gtk.Button("Apply Settings")
++ vbox2.pack_start(applysettings, False, False, 0)
+ applysettings.connect("clicked", self.on_applysettings)
+- applysettings.show()
++ applysettings.show()
+
+- quitbutton = gtk.Button('Quit')
+- vbox2.pack_start(quitbutton, False, False, 0)
+- quitbutton.connect("clicked", lambda w: gtk.main_quit())
+- quitbutton.show()
+-
+- separator = gtk.HSeparator()
+- vbox2.pack_start(separator, False, False, 0)
+- separator.set_size_request(100, 10)
+- #separator.show()
++ quitbutton = Gtk.Button("Quit")
++ vbox2.pack_start(quitbutton, False, False, 0)
++ quitbutton.connect("clicked", lambda w: Gtk.main_quit())
++ quitbutton.show()
++
++ separator = Gtk.HSeparator()
++ vbox2.pack_start(separator, False, False, 0)
++ separator.set_size_request(100, 10)
++ #separator.show()
+
+ self.window.show()
+
+ def main():
+- gtk.main()
++ Gtk.main()
+ return 0
+
+ if __name__ == "__main__":
diff --git a/0001-pulse-path.patch b/0001-pulse-path.patch
index 1067c0c..2cbcb4c 100644
--- a/0001-pulse-path.patch
+++ b/0001-pulse-path.patch
@@ -1,42 +1,56 @@
---- pulseaudio-equalizer.orig/usr/bin/pulseaudio-equalizer 2013-10-24 10:23:27.000000000 +0000
-+++ pulseaudio-equalizer/usr/bin/pulseaudio-equalizer 2013-10-24 10:53:48.000000000 +0000
-@@ -18,11 +18,11 @@
+--- a/usr/bin/pulseaudio-equalizer
++++ b/usr/bin/pulseaudio-equalizer
+@@ -18,12 +18,17 @@ PA_CONTROL_MAX="30"
PA_PREAMP="1.0"
PA_CURRENT_PRESET=""
-PRESET_DIR1=$HOME/.pulse/presets
-+PRESET_DIR1=$HOME/.config/pulse/presets
++if [ -z "$XDG_CONFIG_HOME" ]; then
++ CONFIG_DIR="$HOME/.config/pulse"
++else
++ CONFIG_DIR="$XDG_CONFIG_HOME/pulse"
++fi
++PRESET_DIR1="$CONFIG_DIR/presets"
PRESET_DIR2=/usr/share/pulseaudio-equalizer/presets
SCRIPT_NAME=pulseaudio-equalizer
SCRIPT_VERSION="2.7 (05/02/2010)"
-CONFIG_NAME=$HOME/.pulse/equalizerrc
-+CONFIG_NAME=$HOME/.config/pulse/equalizerrc
- LOG_NAME=$HOME/Desktop/pulseaudio-equalizer.log
+-LOG_NAME=$HOME/Desktop/pulseaudio-equalizer.log
++CONFIG_NAME="$CONFIG_DIR/equalizerrc"
++LOG_NAME="$HOME/pulseaudio-equalizer.log"
# Don't execute the script with elevated privileges
-@@ -125,8 +125,8 @@
+ if [[ ! $EUID -ne 0 ]]; then
+@@ -125,12 +130,12 @@ else
fi
# Check if equalizer is set as persistent
-if [ -f $HOME/.pulse/default.pa ]; then
- if [ "$(cat $HOME/.pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
-+if [ -f $HOME/.config/pulse/default.pa ]; then
-+ if [ "$(cat $HOME/.config/pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
- PA_EQUALIZER_PERSISTENCE=1
- fi
+- PA_EQUALIZER_PERSISTENCE=1
+- fi
++if [ -f "$CONFIG_DIR/default.pa" ]; then
++ if [ "$(cat "$CONFIG_DIR/default.pa" | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
++ PA_EQUALIZER_PERSISTENCE=1
++ fi
else
-@@ -204,8 +204,8 @@
+- PA_EQUALIZER_PERSISTENCE=0
++ PA_EQUALIZER_PERSISTENCE=0
+ fi
+
+ # DEBUG
+@@ -204,8 +209,8 @@ if [ "$1" = "log" ]; then
echo PA_PREAMP=$PA_PREAMP
echo PA_REAL_PREAMP=$PA_REAL_PREAMP
- if [ -f $HOME/.pulse/default.pa ]; then
- tail -n7 $HOME/.pulse/default.pa
-+ if [ -f $HOME/.config/pulse/default.pa ]; then
-+ tail -n7 $HOME/.config/pulse/default.pa
++ if [ -f "$CONFIG_DIR/default.pa" ]; then
++ tail -n7 "$CONFIG_DIR/default.pa"
fi
echo "---"
-@@ -253,24 +253,24 @@
+@@ -253,24 +258,24 @@ if [ "$1" = "enable-config" ]; then
echo "-------------------------------------"
# If equalizer configuration is already set, delete file
@@ -44,10 +58,10 @@
- if [ "$(cat $HOME/.pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
- echo "Equalizer definition detected in file '$HOME/.pulse/default.pa', deleting..."
- rm $HOME/.pulse/default.pa
-+ if [ -f $HOME/.config/pulse/default.pa ]; then
-+ if [ "$(cat $HOME/.config/pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
-+ echo "Equalizer definition detected in file '$HOME/.config/pulse/default.pa', deleting..."
-+ rm $HOME/.config/pulse/default.pa
++ if [ -f "$CONFIG_DIR/default.pa" ]; then
++ if [ "$(cat "$CONFIG_DIR/default.pa" | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
++ echo "Equalizer definition detected in file '$CONFIG_DIR/default.pa', deleting..."
++ rm "$CONFIG_DIR/default.pa"
fi
fi
@@ -56,61 +70,61 @@
- echo "Found '$HOME/.pulse/default.pa', making a copy..."
- cp $HOME/.pulse/default.pa $HOME/.pulse/default.pa.noeq
- CFG_SOURCE_FILE="$HOME/.pulse/default.pa.noeq"
-+ if [ -f $HOME/.config/pulse/default.pa ]; then
-+ echo "Found '$HOME/.config/pulse/default.pa', making a copy..."
-+ cp $HOME/.config/pulse/default.pa $HOME/.config/pulse/default.pa.noeq
-+ CFG_SOURCE_FILE="$HOME/.config/pulse/default.pa.noeq"
++ if [ -f "$CONFIG_DIR/default.pa" ]; then
++ echo "Found '$CONFIG_DIR/default.pa', making a copy..."
++ cp "$CONFIG_DIR/default.pa" "$CONFIG_DIR/default.pa.noeq"
++ CFG_SOURCE_FILE="$CONFIG_DIR/default.pa.noeq"
fi
# Decide which file to use as the configuration source
- if [ -f $HOME/.pulse/default.pa.noeq ]; then
- echo "Found '$HOME/.pulse/default.pa.noeq'..."
- CFG_SOURCE_FILE="$HOME/.pulse/default.pa.noeq"
-+ if [ -f $HOME/.config/pulse/default.pa.noeq ]; then
-+ echo "Found '$HOME/.config/pulse/default.pa.noeq'..."
-+ CFG_SOURCE_FILE="$HOME/.config/pulse/default.pa.noeq"
++ if [ -f "$CONFIG_DIR/default.pa.noeq" ]; then
++ echo "Found '$CONFIG_DIR/default.pa.noeq'..."
++ CFG_SOURCE_FILE="$CONFIG_DIR/default.pa.noeq"
else
CFG_SOURCE_FILE="/etc/pulse/default.pa"
fi
-@@ -278,19 +278,19 @@
+@@ -278,19 +283,19 @@ if [ "$1" = "enable-config" ]; then
echo "Using configuration file '$CFG_SOURCE_FILE' as source..."
# Modify module-stream-restore line to disable cached sinks
- cat $CFG_SOURCE_FILE | sed 's/load-module module-stream-restore/load-module module-stream-restore restore_device=false/g' >$HOME/.pulse/default.pa
-+ cat $CFG_SOURCE_FILE | sed 's/load-module module-stream-restore/load-module module-stream-restore restore_device=false/g' >$HOME/.config/pulse/default.pa
++ cat "$CFG_SOURCE_FILE" | sed 's/load-module module-stream-restore/load-module module-stream-restore restore_device=false/g' >"$CONFIG_DIR/default.pa"
# Add module-ladspa-sink definition
- echo "" >>$HOME/.pulse/default.pa
- echo "### BEGIN: Equalized audio configuration" >>$HOME/.pulse/default.pa
- echo "### Generated from: $SCRIPT_NAME" >>$HOME/.pulse/default.pa
- echo "load-module module-ladspa-sink sink_name=$PA_LADSPA_SINK master=$PA_MASTER_SINK plugin=$PA_LADSPA_PLUGIN label=$PA_LADSPA_LABEL control=$PA_LADSPA_CONTROLS" >>$HOME/.pulse/default.pa
-+ echo "" >>$HOME/.config/pulse/default.pa
-+ echo "### BEGIN: Equalized audio configuration" >>$HOME/.config/pulse/default.pa
-+ echo "### Generated from: $SCRIPT_NAME" >>$HOME/.config/pulse/default.pa
-+ echo "load-module module-ladspa-sink sink_name=$PA_LADSPA_SINK master=$PA_MASTER_SINK plugin=$PA_LADSPA_PLUGIN label=$PA_LADSPA_LABEL control=$PA_LADSPA_CONTROLS" >>$HOME/.config/pulse/default.pa
++ echo "" >>"$CONFIG_DIR/default.pa"
++ echo "### BEGIN: Equalized audio configuration" >>"$CONFIG_DIR/default.pa"
++ echo "### Generated from: $SCRIPT_NAME" >>"$CONFIG_DIR/default.pa"
++ echo "load-module module-ladspa-sink sink_name=$PA_LADSPA_SINK master=$PA_MASTER_SINK plugin=$PA_LADSPA_PLUGIN label=$PA_LADSPA_LABEL control=$PA_LADSPA_CONTROLS" >>"$CONFIG_DIR/default.pa"
# Set LADSPA sink as default sink & set appropriate master sink (preamp) volume
- echo "set-default-sink $PA_LADSPA_SINK" >>$HOME/.pulse/default.pa
- echo "set-sink-volume $PA_MASTER_SINK $PA_REAL_PREAMP" >>$HOME/.pulse/default.pa
- echo "set-sink-mute $PA_MASTER_SINK 0" >>$HOME/.pulse/default.pa
- echo "### END: Equalized audio configuration" >>$HOME/.pulse/default.pa
-+ echo "set-default-sink $PA_LADSPA_SINK" >>$HOME/.config/pulse/default.pa
-+ echo "set-sink-volume $PA_MASTER_SINK $PA_REAL_PREAMP" >>$HOME/.config/pulse/default.pa
-+ echo "set-sink-mute $PA_MASTER_SINK 0" >>$HOME/.config/pulse/default.pa
-+ echo "### END: Equalized audio configuration" >>$HOME/.config/pulse/default.pa
++ echo "set-default-sink $PA_LADSPA_SINK" >>"$CONFIG_DIR/default.pa"
++ echo "set-sink-volume $PA_MASTER_SINK $PA_REAL_PREAMP" >>"$CONFIG_DIR/default.pa"
++ echo "set-sink-mute $PA_MASTER_SINK 0" >>"$CONFIG_DIR/default.pa"
++ echo "### END: Equalized audio configuration" >>"$CONFIG_DIR/default.pa"
echo "Equalizer setting saved (enable-config)."
echo "-------------------------------------"
-@@ -306,16 +306,16 @@
+@@ -306,16 +311,16 @@ if [ "$1" = "disable-config" ]; then
echo "-------------------------------------"
# Move .noeq configuration file if it exists
- if [ -f $HOME/.pulse/default.pa.noeq ]; then
- echo "Found '$HOME/.pulse/default.pa.noeq', moving..."
- mv $HOME/.pulse/default.pa.noeq $HOME/.pulse/default.pa
-+ if [ -f $HOME/.config/pulse/default.pa.noeq ]; then
-+ echo "Found '$HOME/.config/pulse/default.pa.noeq', moving..."
-+ mv $HOME/.config/pulse/default.pa.noeq $HOME/.config/pulse/default.pa
++ if [ -f "$CONFIG_DIR/default.pa.noeq" ]; then
++ echo "Found '$CONFIG_DIR/default.pa.noeq', moving..."
++ mv "$CONFIG_DIR/default.pa.noeq" "$CONFIG_DIR/default.pa"
fi
# If equalizer configuration is present, delete file
@@ -118,44 +132,47 @@
- if [ "$(cat $HOME/.pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
- echo "Equalizer definition detected, deleting '$HOME/.pulse/default.pa'..."
- rm $HOME/.pulse/default.pa
-+ if [ -f $HOME/.config/pulse/default.pa ]; then
-+ if [ "$(cat $HOME/.config/pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
-+ echo "Equalizer definition detected, deleting '$HOME/.config/pulse/default.pa'..."
-+ rm $HOME/.config/pulse/default.pa
++ if [ -f "$CONFIG_DIR/default.pa" ]; then
++ if [ "$(cat "$CONFIG_DIR/default.pa" | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
++ echo "Equalizer definition detected, deleting '$CONFIG_DIR/default.pa'..."
++ rm "$CONFIG_DIR/default.pa"
fi
fi
-@@ -426,8 +426,8 @@
+@@ -426,8 +431,8 @@ if [ "$PA_CURRENT_SINK" = "$PA_LADSPA_SI
echo "-------------------------------------"
echo "Equalizer status: [enabled]"
- if [ -f $HOME/.pulse/default.pa ]; then
- if [ "$(cat $HOME/.pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
-+ if [ -f $HOME/.config/pulse/default.pa ]; then
-+ if [ "$(cat $HOME/.config/pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
++ if [ -f "$CONFIG_DIR/default.pa" ]; then
++ if [ "$(cat "$CONFIG_DIR/default.pa" | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
echo "Equalizer configuration status: [enabled]"
else
echo "Equalizer configuration status: [disabled]"
-@@ -448,8 +448,8 @@
+@@ -448,8 +453,8 @@ else
echo "-------------------------------------"
echo "Equalizer status: [disabled]"
- if [ -f $HOME/.pulse/default.pa ]; then
- if [ "$(cat $HOME/.pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
-+ if [ -f $HOME/.config/pulse/default.pa ]; then
-+ if [ "$(cat $HOME/.config/pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
++ if [ -f "$CONFIG_DIR/default.pa" ]; then
++ if [ "$(cat "$CONFIG_DIR/default.pa" | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
echo "Equalizer configuration status: [enabled]"
echo "Equalizer plugin: [$PA_LADSPA_PLUGIN/$PA_LADSPA_LABEL]"
echo "Equalizer control: [$PA_LADSPA_CONTROLS]"
-
---- pulseaudio-equalizer.orig/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py 2013-10-24 10:23:27.000000000 +0000
-+++ pulseaudio-equalizer/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py 2013-10-24 10:53:48.000000000 +0000
-@@ -13,7 +13,7 @@
- import gtk, gobject
+--- a/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
++++ b/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
+@@ -10,10 +10,10 @@
+
+ import pygtk
+ pygtk.require('2.0')
+-import gtk as Gtk
++import glib as GLib, gtk as Gtk
import os
-configdir = os.getenv('HOME') + "/.pulse"
-+configdir = os.getenv('HOME') + "/.config/pulse"
++configdir = GLib.get_user_config_dir() + "/pulse"
eqconfig = configdir + "/equalizerrc"
eqconfig2 = configdir + "/equalizerrc.test"
eqpresets = eqconfig + ".availablepresets"
diff --git a/0002-remove-preamp.patch b/0002-remove-preamp.patch
index 74c2d84..7adfe06 100644
--- a/0002-remove-preamp.patch
+++ b/0002-remove-preamp.patch
@@ -1,6 +1,15 @@
---- pulseaudio-equalizer.orig/usr/bin/pulseaudio-equalizer
-+++ pulseaudio-equalizer/usr/bin/pulseaudio-equalizer
-@@ -378,7 +378,7 @@
+--- a/usr/bin/pulseaudio-equalizer
++++ b/usr/bin/pulseaudio-equalizer
+@@ -293,7 +293,7 @@ if [ "$1" = "enable-config" ]; then
+
+ # Set LADSPA sink as default sink & set appropriate master sink (preamp) volume
+ echo "set-default-sink $PA_LADSPA_SINK" >>"$CONFIG_DIR/default.pa"
+- echo "set-sink-volume $PA_MASTER_SINK $PA_REAL_PREAMP" >>"$CONFIG_DIR/default.pa"
++ #echo "set-sink-volume $PA_MASTER_SINK $PA_REAL_PREAMP" >>"$CONFIG_DIR/default.pa"
+ echo "set-sink-mute $PA_MASTER_SINK 0" >>"$CONFIG_DIR/default.pa"
+ echo "### END: Equalized audio configuration" >>"$CONFIG_DIR/default.pa"
+
+@@ -383,7 +383,7 @@ if [ "$1" = "enable" ]; then
# Unmute & set preamp level on ALSA sink (as LADSPA sink will act as primary volume control)
echo "Setting ALSA sink ($PA_MASTER_SINK) preamp ("$PA_PREAMP"x)..."
@@ -9,24 +18,24 @@
echo >>/tmp/eqcommands.sh "set-sink-mute $PA_MASTER_SINK 0"
# Set the LADSPA sink as the default
---- pulseaudio-equalizer.orig/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
-+++ pulseaudio-equalizer/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
-@@ -412,14 +412,14 @@
- table.attach(label, 1, 2, 0, 1)
- table.attach(preampscale, 1, 2, 1, 2)
- table.attach(preampscalevalue, 1, 2, 2, 3)
-- label.show()
-- preampscale.show()
-- preampscalevalue.show()
-+ #label.show()
-+ #preampscale.show()
-+ #preampscalevalue.show()
+--- a/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
++++ b/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
+@@ -414,14 +414,14 @@ class Equalizer:
+ table.attach(label, 1, 2, 0, 1)
+ table.attach(preampscale, 1, 2, 1, 2)
+ table.attach(preampscalevalue, 1, 2, 2, 3)
+- label.show()
+- preampscale.show()
+- preampscalevalue.show()
++ #label.show()
++ #preampscale.show()
++ #preampscalevalue.show()
- # Separator between preamp and bands
- separator = gtk.VSeparator()
- table.attach(separator, 2, 3, 1, 2)
-- separator.show()
-+ #separator.show()
+ # Separator between preamp and bands
+ separator = Gtk.VSeparator()
+ table.attach(separator, 2, 3, 1, 2)
+- separator.show()
++ #separator.show()
- # Equalizer bands
- global scale
+ # Equalizer bands
+ global scale
diff --git a/0003-force-default-persistence-value.patch b/0003-force-default-persistence-value.patch
index d76c007..b11fb9c 100644
--- a/0003-force-default-persistence-value.patch
+++ b/0003-force-default-persistence-value.patch
@@ -1,14 +1,11 @@
---- pulseaudio-equalizer.orig/usr/bin/pulseaudio-equalizer
-+++ pulseaudio-equalizer/usr/bin/pulseaudio-equalizer
-@@ -128,7 +128,9 @@
- if [ -f $HOME/.config/pulse/default.pa ]; then
- if [ "$(cat $HOME/.config/pulse/default.pa | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
- PA_EQUALIZER_PERSISTENCE=1
-- fi
+--- a/usr/bin/pulseaudio-equalizer
++++ b/usr/bin/pulseaudio-equalizer
+@@ -133,6 +133,8 @@ fi
+ if [ -f "$CONFIG_DIR/default.pa" ]; then
+ if [ "$(cat "$CONFIG_DIR/default.pa" | grep -m1 "### BEGIN: Equalized audio configuration")" = "### BEGIN: Equalized audio configuration" ]; then
+ PA_EQUALIZER_PERSISTENCE=1
+ else
-+ PA_EQUALIZER_PERSISTENCE=0
-+ fi
++ PA_EQUALIZER_PERSISTENCE=0
+ fi
else
- PA_EQUALIZER_PERSISTENCE=0
- fi
-
+ PA_EQUALIZER_PERSISTENCE=0
diff --git a/0004-do-not-crash-on-missing-preset.patch b/0004-do-not-crash-on-missing-preset.patch
index 6e67545..0e7c9c1 100644
--- a/0004-do-not-crash-on-missing-preset.patch
+++ b/0004-do-not-crash-on-missing-preset.patch
@@ -1,17 +1,17 @@
---- pulseaudio-equalizer.orig/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py 2011-03-17 10:53:48.000000000 +0000
-+++ pulseaudio-equalizer/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py 2011-03-17 11:18:04.000000000 +0000
-@@ -180,10 +180,13 @@ class Equalizer:
- if os.path.isfile(presetdir1 + "/" + preset + ".preset"):
- f = open(presetdir1 + "/" + preset + ".preset", "r")
- rawdata=f.read().split('\n')
-- else:
-+ f.close
-+ elif os.path.isfile(presetdir2 + "/" + preset + ".preset"):
- f = open(presetdir2 + "/" + preset + ".preset", "r")
- rawdata=f.read().split('\n')
- f.close
-+ else:
-+ print "Can't find %s preset" % preset
+--- a/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
++++ b/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
+@@ -181,10 +181,13 @@ class Equalizer:
+ if os.path.isfile(presetdir1 + "/" + preset + ".preset"):
+ f = open(presetdir1 + "/" + preset + ".preset", "r")
+ rawdata=f.read().split("\n")
+- else:
++ f.close
++ elif os.path.isfile(presetdir2 + "/" + preset + ".preset"):
+ f = open(presetdir2 + "/" + preset + ".preset", "r")
+ rawdata=f.read().split("\n")
+ f.close
++ else:
++ print("Can't find %s preset" % preset)
- ladspa_filename = str(rawdata[0])
- ladspa_name = str(rawdata[1])
+ ladspa_filename = str(rawdata[0])
+ ladspa_name = str(rawdata[1])
diff --git a/0005-window-icon.patch b/0005-window-icon.patch
index d9dda03..b3357f4 100644
--- a/0005-window-icon.patch
+++ b/0005-window-icon.patch
@@ -1,24 +1,20 @@
---- pulseaudio-equalizer.orig/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py 2011-03-17 10:23:27.000000000 +0000
-+++ pulseaudio-equalizer/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py 2011-03-17 10:53:48.000000000 +0000
-@@ -359,7 +359,20 @@ class Equalizer:
+--- a/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
++++ b/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
+@@ -364,7 +364,16 @@ class Equalizer:
self.window.connect("destroy", self.destroy_equalizer)
self.window.set_title(windowtitle + " [" + realstatus + "]")
self.window.set_border_width(0)
-- icon = self.window.set_icon_from_file("/usr/share/icons/hicolor/scalable/apps/multimedia-volume-control.svg")
-+
-+ icon_theme = gtk.icon_theme_get_default()
-+ icon_theme = gtk.icon_theme_get_default()
+- icon = self.window.set_icon_from_file("/usr/share/icons/hicolor/scalable/apps/multimedia-volume-control.svg")
++
++ icon_theme = Gtk.icon_theme_get_default()
+ if icon_theme.has_icon("multimedia-volume-control"):
-+ icon = icon_theme.load_icon("multimedia-volume-control", 16, 0)
-+ self.window.set_icon(icon)
++ self.window.set_icon_name("multimedia-volume-control")
+ elif icon_theme.has_icon("gnome-volume-control"):
-+ icon = icon_theme.load_icon("gnome-volume-control",16,0)
-+ self.window.set_icon(icon)
++ self.window.set_icon_name("gnome-volume-control")
+ elif icon_theme.has_icon("stock_volume"):
-+ icon = icon_theme.load_icon("stock_volume",16,0)
-+ self.window.set_icon(icon)
++ self.window.set_icon_name("stock_volume")
+ else:
-+ print ("No icon found, window will be iconless")
++ print("No icon found, the window will be iconless")
- menu = gtk.Menu()
+ menu = Gtk.Menu()
diff --git a/0007-pygobject3-port.patch b/0007-pygobject3-port.patch
new file mode 100644
index 0000000..d8fcc72
--- /dev/null
+++ b/0007-pygobject3-port.patch
@@ -0,0 +1,298 @@
+--- a/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
++++ b/usr/share/pulseaudio-equalizer/pulseaudio-equalizer.py
+@@ -8,11 +8,13 @@
+ # Version: (see '/usr/pulseaudio-equalizer' script)
+ #
+
+-import pygtk
+-pygtk.require('2.0')
+-import glib as GLib, gtk as Gtk
++import gi
++gi.require_version("Gtk", "3.0")
++from gi.repository import GLib, Gtk
+ import os
+
++GTK_VERSION = (Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION)
++
+ configdir = GLib.get_user_config_dir() + "/pulse"
+ eqconfig = configdir + "/equalizerrc"
+ eqconfig2 = configdir + "/equalizerrc.test"
+@@ -300,12 +302,16 @@ class Equalizer:
+ def on_removepreset(self,widget):
+ global preset
+ global presets
+- dialog = Gtk.FileChooserDialog("Choose preset to remove...",
+- None,
+- Gtk.FILE_CHOOSER_ACTION_OPEN,
+- (Gtk.STOCK_CANCEL, Gtk.RESPONSE_CANCEL,
+- Gtk.STOCK_OK, Gtk.RESPONSE_OK))
+- dialog.set_default_response(Gtk.RESPONSE_OK)
++ dialog = Gtk.FileChooserDialog(title="Choose preset to remove...",
++ transient_for=widget.get_toplevel(),
++ action=Gtk.FileChooserAction.OPEN)
++
++ button = dialog.add_button("_Cancel", Gtk.ResponseType.CANCEL)
++ button.set_image(Gtk.Image.new_from_icon_name("gtk-cancel", Gtk.IconSize.BUTTON))
++ button = dialog.add_button("_Open", Gtk.ResponseType.OK)
++ button.set_image(Gtk.Image.new_from_icon_name("document-open", Gtk.IconSize.BUTTON))
++ button.grab_default()
++ dialog.set_default_response(Gtk.ResponseType.OK)
+
+ filter = Gtk.FileFilter()
+ filter.set_name("Preset files")
+@@ -315,7 +321,7 @@ class Equalizer:
+ dialog.show()
+
+ response = dialog.run()
+- if response == Gtk.RESPONSE_OK:
++ if response == Gtk.ResponseType.OK:
+ filename = dialog.get_filename()
+ path_and_name = os.path.split(filename)
+ name = path_and_name[1]
+@@ -358,14 +364,13 @@ class Equalizer:
+ def __init__(self):
+ GetSettings()
+
+- self.window = Gtk.Window(Gtk.WINDOW_TOPLEVEL)
++ self.window = Gtk.Window()
+ self.window.set_resizable(True)
+
+ self.window.connect("destroy", self.destroy_equalizer)
+ self.window.set_title(windowtitle + " [" + realstatus + "]")
+- self.window.set_border_width(0)
+
+- icon_theme = Gtk.icon_theme_get_default()
++ icon_theme = Gtk.IconTheme.get_default()
+ if icon_theme.has_icon("multimedia-volume-control"):
+ self.window.set_icon_name("multimedia-volume-control")
+ elif icon_theme.has_icon("gnome-volume-control"):
+@@ -377,42 +382,61 @@ class Equalizer:
+
+ menu = Gtk.Menu()
+
+- menu_item = Gtk.MenuItem("Reset to defaults")
++ menu_item = Gtk.MenuItem(label="Reset to defaults")
+ menu_item.connect("activate", self.on_resetsettings)
+ menu.append(menu_item)
+ menu_item.show()
+- menu_item = Gtk.MenuItem("Remove user preset...")
++ menu_item = Gtk.MenuItem(label="Remove user preset...")
+ menu_item.connect("activate", self.on_removepreset)
+ menu.append(menu_item)
+ menu_item.show()
+- root_menu = Gtk.MenuItem("Advanced")
++ root_menu = Gtk.MenuItem(label="Advanced")
+ root_menu.show()
+ root_menu.set_submenu(menu)
+
+- vbox1 = Gtk.VBox(False, 0)
++ if GTK_VERSION >= (3, 0, 0):
++ vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
++ else:
++ vbox1 = Gtk.VBox()
+ self.window.add(vbox1)
+ vbox1.show()
+ menu_bar = Gtk.MenuBar()
+- vbox1.pack_start(menu_bar, False, False, 2)
++ if GTK_VERSION >= (3, 0, 0):
++ menu_bar.set_margin_bottom(4)
++ vbox1.add(menu_bar)
++ else:
++ vbox1.pack_start(menu_bar, False, False, 2)
+ menu_bar.show()
+- menu_bar.append (root_menu)
++ menu_bar.append(root_menu)
+
+- hbox1 = Gtk.HBox(False, 1)
+- #hbox1.set_border_width(10)
++ if GTK_VERSION >= (3, 0, 0):
++ hbox1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=1)
++ else:
++ hbox1 = Gtk.HBox(spacing=1)
++ #hbox1.props.margin = 10
+ vbox1.add(hbox1)
+ hbox1.show()
+
+- table = Gtk.Table(3, 17, False)
+- table.set_border_width(5)
+- hbox1.add(table)
++ if GTK_VERSION >= (3, 10, 0):
++ grid = Gtk.Grid()
++ grid.props.margin = 5
++ else:
++ grid = Gtk.Table(n_rows=3, n_columns=17)
++ grid.set_border_width(5)
++ hbox1.add(grid)
+
+ # Preamp widget
+ global preampscale
+ global preampscalevalue
+- preampscale = Gtk.VScale()
++ if GTK_VERSION >= (3, 2, 0):
++ preampscale = Gtk.Scale(orientation=Gtk.Orientation.VERTICAL)
++ preampscale.set_hexpand(True)
++ preampscale.set_vexpand(True)
++ else:
++ preampscale = Gtk.VScale()
+ preampscale.set_draw_value(0)
+ preampscale.set_inverted(1)
+- preampscale.set_value_pos(Gtk.POS_BOTTOM)
++ preampscale.set_value_pos(Gtk.PositionType.BOTTOM)
+ preampscale.set_range(0.0, 2.0)
+ preampscale.set_increments(1, 0.1)
+ preampscale.set_digits(1)
+@@ -423,16 +447,25 @@ class Equalizer:
+ label.set_markup("Preamp")
+ preampscalevalue = Gtk.Label()
+ preampscalevalue.set_markup(str(preampscale.get_value()) + "x")
+- table.attach(label, 1, 2, 0, 1)
+- table.attach(preampscale, 1, 2, 1, 2)
+- table.attach(preampscalevalue, 1, 2, 2, 3)
++ if GTK_VERSION >= (3, 10, 0):
++ grid.attach(label, 1, 0, 1, 1)
++ grid.attach(preampscale, 1, 1, 1, 1)
++ grid.attach(preampscalevalue, 1, 2, 1, 1)
++ else:
++ grid.attach(label, 1, 2, 0, 1, yoptions=Gtk.AttachOptions.SHRINK)
++ grid.attach(preampscale, 1, 2, 1, 2, yoptions=(Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL))
++ grid.attach(preampscalevalue, 1, 2, 2, 3, yoptions=Gtk.AttachOptions.SHRINK)
+ #label.show()
+ #preampscale.show()
+ #preampscalevalue.show()
+
+ # Separator between preamp and bands
+- separator = Gtk.VSeparator()
+- table.attach(separator, 2, 3, 1, 2)
++ if GTK_VERSION >= (3, 10, 0):
++ separator = Gtk.Separator(orientation=Gtk.Orientation.VERTICAL)
++ grid.attach(separator, 2, 1, 1, 1)
++ else:
++ separator = Gtk.VSeparator()
++ grid.attach(separator, 2, 3, 1, 2)
+ #separator.show()
+
+ # Equalizer bands
+@@ -441,11 +474,16 @@ class Equalizer:
+ self.labels = {}
+ self.scalevalues = {}
+ for x in range(1,num_ladspa_controls+1):
+- scale = Gtk.VScale()
++ if GTK_VERSION >= (3, 2, 0):
++ scale = Gtk.Scale(orientation=Gtk.Orientation.VERTICAL)
++ scale.set_hexpand(True)
++ scale.set_vexpand(True)
++ else:
++ scale = Gtk.VScale()
+ self.scales[x] = scale
+ scale.set_draw_value(0)
+ scale.set_inverted(1)
+- scale.set_value_pos(Gtk.POS_BOTTOM)
++ scale.set_value_pos(Gtk.PositionType.BOTTOM)
+ scale.set_range(float(ranges[0]), float(ranges[1]))
+ scale.set_increments(1, 0.1)
+ scale.set_digits(1)
+@@ -459,67 +497,80 @@ class Equalizer:
+ scalevalue = Gtk.Label()
+ self.scalevalues[x] = scalevalue
+ scalevalue.set_markup("" + str(scale.get_value()) + "\ndB")
+- table.attach(label, x + 2, x + 3, 0, 1)
+- table.attach(scale, x + 2, x + 3, 1, 2)
+- table.attach(scalevalue, x + 2, x + 3, 2, 3)
++ if GTK_VERSION >= (3, 10, 0):
++ grid.attach(label, x + 2, 0, 1, 1)
++ grid.attach(scale, x + 2, 1, 1, 1)
++ grid.attach(scalevalue, x + 2, 2, 1, 1)
++ else:
++ grid.attach(label, x + 2, x + 3, 0, 1, yoptions=Gtk.AttachOptions.SHRINK)
++ grid.attach(scale, x + 2, x + 3, 1, 2, yoptions=(Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL))
++ grid.attach(scalevalue, x + 2, x + 3, 2, 3, yoptions=Gtk.AttachOptions.SHRINK)
+ label.show()
+ scale.show()
+ scalevalue.show()
+
+- table.show()
++ grid.show()
+
+- vbox2 = Gtk.VBox(True, 1)
+- vbox2.set_border_width(10)
+- hbox1.add(vbox2)
++ if GTK_VERSION >= (3, 0, 0):
++ vbox2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=True, spacing=1)
++ vbox2.props.margin = 10
++ hbox1.add(vbox2)
++ else:
++ vbox2 = Gtk.VBox(homogeneous=True, spacing=1)
++ vbox2.set_border_width(10)
++ hbox1.pack_start(vbox2, False, True, 0)
+ vbox2.show()
+
+ presetslabel = Gtk.Label()
+ presetslabel.set_markup("Preset:")
+- vbox2.pack_start(presetslabel, False, False, 0)
++ vbox2.add(presetslabel)
+ presetslabel.show()
+
+ global presetsbox
+- presetsbox = Gtk.combo_box_entry_new_text()
+- vbox2.pack_start(presetsbox, False, False, 0)
++ presetsbox = Gtk.ComboBoxText.new_with_entry()
++ vbox2.add(presetsbox)
+ presetsbox.get_child().set_text(preset)
+ for i in range(len(rawpresets)):
+ presetsbox.append_text(rawpresets[i])
+ presetsbox.connect("changed", self.on_presetsbox, x)
+ presetsbox.show()
+
+- savepreset = Gtk.Button("Save Preset")
+- vbox2.pack_start(savepreset, False, False, 0)
++ savepreset = Gtk.Button(label="Save Preset")
++ vbox2.add(savepreset)
+ savepreset.connect("clicked", self.on_savepreset)
+ savepreset.show()
+
+ global eqenabled
+- eqenabled = Gtk.CheckButton("EQ Enabled")
++ eqenabled = Gtk.CheckButton(label="EQ Enabled")
+ eqenabled.set_active(status)
+- eqenabled.unset_flags(Gtk.CAN_FOCUS)
++ eqenabled.set_can_focus(False)
+ eqenabled.connect("clicked", self.on_eqenabled)
+- vbox2.pack_start(eqenabled, False, False, 0)
++ vbox2.add(eqenabled)
+ eqenabled.show()
+
+ global keepsettings
+- keepsettings = Gtk.CheckButton("Keep Settings")
++ keepsettings = Gtk.CheckButton(label="Keep Settings")
+ keepsettings.set_active(persistence)
+- keepsettings.unset_flags(Gtk.CAN_FOCUS)
++ keepsettings.set_can_focus(False)
+ keepsettings.connect("clicked", self.on_keepsettings)
+- vbox2.pack_start(keepsettings, False, False, 0)
++ vbox2.add(keepsettings)
+ keepsettings.show()
+
+- applysettings = Gtk.Button("Apply Settings")
+- vbox2.pack_start(applysettings, False, False, 0)
++ applysettings = Gtk.Button(label="Apply Settings")
++ vbox2.add(applysettings)
+ applysettings.connect("clicked", self.on_applysettings)
+ applysettings.show()
+
+- quitbutton = Gtk.Button("Quit")
+- vbox2.pack_start(quitbutton, False, False, 0)
++ quitbutton = Gtk.Button(label="Quit")
++ vbox2.add(quitbutton)
+ quitbutton.connect("clicked", lambda w: Gtk.main_quit())
+ quitbutton.show()
+
+- separator = Gtk.HSeparator()
+- vbox2.pack_start(separator, False, False, 0)
++ if GTK_VERSION >= (3, 2, 0):
++ separator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL)
++ else:
++ separator = Gtk.HSeparator()
++ vbox2.add(separator)
+ separator.set_size_request(100, 10)
+ #separator.show()
+
diff --git a/0007-remove-all-preamp.patch b/0007-remove-all-preamp.patch
deleted file mode 100644
index 3182ed1..0000000
--- a/0007-remove-all-preamp.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: pulseaudio-equalizer-2.7.0.2/usr/bin/pulseaudio-equalizer
-===================================================================
---- pulseaudio-equalizer-2.7.0.2.orig/usr/bin/pulseaudio-equalizer
-+++ pulseaudio-equalizer-2.7.0.2/usr/bin/pulseaudio-equalizer
-@@ -290,7 +290,7 @@ if [ "$1" = "enable-config" ]; then
-
- # Set LADSPA sink as default sink & set appropriate master sink (preamp) volume
- echo "set-default-sink $PA_LADSPA_SINK" >>$HOME/.config/pulse/default.pa
-- echo "set-sink-volume $PA_MASTER_SINK $PA_REAL_PREAMP" >>$HOME/.config/pulse/default.pa
-+ #echo "set-sink-volume $PA_MASTER_SINK $PA_REAL_PREAMP" >>$HOME/.config/pulse/default.pa
- echo "set-sink-mute $PA_MASTER_SINK 0" >>$HOME/.config/pulse/default.pa
- echo "### END: Equalized audio configuration" >>$HOME/.config/pulse/default.pa
-
diff --git a/0008-fix-locale-issues.patch b/0008-fix-locale-issues.patch
index 2fb2471..192db5e 100644
--- a/0008-fix-locale-issues.patch
+++ b/0008-fix-locale-issues.patch
@@ -1,15 +1,14 @@
-diff -aur a/usr/bin/pulseaudio-equalizer b/usr/bin/pulseaudio-equalizer
--- a/usr/bin/pulseaudio-equalizer
+++ b/usr/bin/pulseaudio-equalizer
-@@ -18,6 +18,7 @@
+@@ -18,6 +18,7 @@ PA_CONTROL_MAX="30"
PA_PREAMP="1.0"
PA_CURRENT_PRESET=""
+LC_MESSAGES=C
- PRESET_DIR1=$HOME/.config/pulse/presets
- PRESET_DIR2=/usr/share/pulseaudio-equalizer/presets
- SCRIPT_NAME=pulseaudio-equalizer
-@@ -108,20 +109,20 @@
+ if [ -z "$XDG_CONFIG_HOME" ]; then
+ CONFIG_DIR="$HOME/.config/pulse"
+ else
+@@ -113,20 +114,20 @@ fi
# Get sink names and volumes
PA_LADSPA_SINK="ladspa_output.$PA_LADSPA_PLUGIN.$PA_LADSPA_LABEL"
@@ -35,7 +34,7 @@ diff -aur a/usr/bin/pulseaudio-equalizer b/usr/bin/pulseaudio-equalizer
fi
# Check if equalizer is set as persistent
-@@ -337,16 +338,16 @@
+@@ -342,16 +343,16 @@ if [ "$1" = "disable" -o "$1" = "enable"
# Unload & reload stream-restore module
echo "Unloading & reloading stream-restore module..."
@@ -55,7 +54,7 @@ diff -aur a/usr/bin/pulseaudio-equalizer b/usr/bin/pulseaudio-equalizer
# Transfer current mute/sink volume to ALSA sink
echo "Transferring current mute ($PA_CURRENT_MUTE) & volume ($PA_CURRENT_VOLUME%) to ALSA sink ($PA_MASTER_SINK)..."
-@@ -366,7 +367,7 @@
+@@ -371,7 +372,7 @@ if [ "$1" = "enable" ]; then
# Unload & reload stream-restore module with restore_device option disabled (to ensure that previously cached per-client sinks are not used)
echo "Unloading & reloading stream-restore module..."
@@ -64,7 +63,7 @@ diff -aur a/usr/bin/pulseaudio-equalizer b/usr/bin/pulseaudio-equalizer
echo >>/tmp/eqcommands.sh "load-module module-stream-restore restore_device=false"
# Load LADSPA sink module
-@@ -389,7 +390,7 @@
+@@ -394,7 +395,7 @@ if [ "$1" = "enable" ]; then
# Move currently active client sinks to LADSPA sink
echo "Moving active PulseAudio clients to LADSPA sink ($PA_LADSPA_SINK)..."
@@ -73,7 +72,7 @@ diff -aur a/usr/bin/pulseaudio-equalizer b/usr/bin/pulseaudio-equalizer
# Execute all queued commands (for potential speed benefit)...
pacmd /dev/null
-@@ -423,7 +424,7 @@
+@@ -428,7 +429,7 @@ if [ "$1" = "status" ]; then
fi
# Refresh current sink status and display equalizer information
diff --git a/0009-do-not-zero-volume.patch b/0009-do-not-zero-volume.patch
index 8c8fec5..a7a28d7 100644
--- a/0009-do-not-zero-volume.patch
+++ b/0009-do-not-zero-volume.patch
@@ -1,14 +1,13 @@
-diff -aur a/usr/bin/pulseaudio-equalizer b/usr/bin/pulseaudio-equalizer
--- a/usr/bin/pulseaudio-equalizer
+++ b/usr/bin/pulseaudio-equalizer
-@@ -110,8 +110,14 @@
+@@ -115,8 +115,14 @@ fi
# Get sink names and volumes
PA_LADSPA_SINK="ladspa_output.$PA_LADSPA_PLUGIN.$PA_LADSPA_LABEL"
PA_CURRENT_SINK=$(pacmd stat | sed -e '/Default sink name/!d;s/Default sink name: //g')
-PA_CURRENT_VOLUME=$(pacmd list | iconv -c -t ascii | grep -A20 "<$PA_CURRENT_SINK>" | grep -m1 'volume: 0:' | awk '{print $NF}' | sed 's/%//g')
-PA_REAL_VOLUME=$((PA_CURRENT_VOLUME*65536/100))
+if [ "$( (echo '4.0'; pulseaudio --version | awk '{print $2}') | sort -V | sed -n '2p' )" != '4.0' ]; then
-+ # Version of PulseAudio is superior than 4.0.
++ # The version of PulseAudio is higher than 4.0.
+ PA_CURRENT_VOLUME=$(pacmd list | iconv -c -t ascii | grep -A20 "<$PA_CURRENT_SINK>" | grep -m1 'volume: front-left:' | awk '{print $3}')
+ PA_REAL_VOLUME="$PA_CURRENT_VOLUME"
+else
diff --git a/pulseaudio-equalizer.changes b/pulseaudio-equalizer.changes
index 78b50b7..56e43cd 100644
--- a/pulseaudio-equalizer.changes
+++ b/pulseaudio-equalizer.changes
@@ -1,3 +1,16 @@
+-------------------------------------------------------------------
+Sun Feb 25 18:16:05 UTC 2018 - sor.alexei@meowr.ru
+
+- Add 0000-add-python3-compat.patch: Add Python3 compatibility.
+- Rebase and improve 0001-pulse-path.patch, 0005-window-icon.patch.
+- Squash 0007-remove-all-preamp.patch into 0002-remove-preamp.patch.
+- Rebase 0003-force-default-persistence-value.patch,
+ 0004-do-not-crash-on-missing-preset.patch,
+ 0008-fix-locale-issues.patch, 0009-do-not-zero-volume.patch.
+- Add 0007-pygobject3-port.patch: Port to PyGObject3 and GTK+3.
+- Do not use a wrapper for pulseaudio-equalizer-gtk.
+- Switch to Python3.
+
-------------------------------------------------------------------
Fri Sep 4 14:47:08 UTC 2015 - altesholz@gmail.com
diff --git a/pulseaudio-equalizer.spec b/pulseaudio-equalizer.spec
index 6533315..7879ac9 100644
--- a/pulseaudio-equalizer.spec
+++ b/pulseaudio-equalizer.spec
@@ -1,7 +1,7 @@
#
# spec file for package pulseaudio-equalizer
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,39 +20,45 @@ Name: pulseaudio-equalizer
Version: 2.7.0.2
Release: 0
Summary: PulseAudio's LADSPA plugin graphical user interface
-License: GPL-3.0+
+License: GPL-3.0-or-later
Group: Productivity/Multimedia/Sound/Mixers
-Url: http://ubuntuforums.org/showthread.php?t=1308838
-Source: http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu/pool/main/p/%{name}/%{name}_%{version}.orig.tar.gz
-# PATCH-FIX-UPSTREAM 0001-pulse-path.patch webupd8@gmail.com -- Update path to PulseAudio files to a new one.
-Patch0: 0001-pulse-path.patch
-# PATCH-FIX-UPSTREAM 0002-remove-preamp.patch webupd8@gmail.com -- Remove preamp.
-Patch1: 0002-remove-preamp.patch
+Url: https://ubuntuforums.org/showthread.php?t=1308838
+Source: https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8/+files/%{name}_%{version}.orig.tar.gz
+# PATCH-FIX-UPSTREAM 0000-add-python3-compat.patch sor.alexei@meowr.ru -- Add Python3 compatibility.
+Patch0: 0000-add-python3-compat.patch
+# PATCH-FIX-UPSTREAM 0001-pulse-path.patch webupd8@gmail.com -- Update path to PulseAudio files to the new one.
+Patch1: 0001-pulse-path.patch
+# PATCH-FIX-UPSTREAM 0002-remove-preamp.patch -- Remove preamp.
+Patch2: 0002-remove-preamp.patch
# PATCH-FIX-UPSTREAM 0003-force-default-persistence-value.patch webupd8@gmail.com -- Force default persistence value.
-Patch2: 0003-force-default-persistence-value.patch
+Patch3: 0003-force-default-persistence-value.patch
# PATCH-FIX-UPSTREAM 0004-do-not-crash-on-missing-preset.patch webupd8@gmail.com -- Do not crash on missing preset.
-Patch3: 0004-do-not-crash-on-missing-preset.patch
+Patch4: 0004-do-not-crash-on-missing-preset.patch
# PATCH-FIX-UPSTREAM 0005-window-icon.patch webupd8@gmail.com -- Correct way of setting window icon.
-Patch4: 0005-window-icon.patch
+Patch5: 0005-window-icon.patch
# PATCH-FIX-UPSTREAM 0006-fix-desktop.patch malcolmlewis@opensuse.org -- Fix .desktop file.
-Patch5: 0006-fix-desktop.patch
-# PATCH-FIX-UPSTREAM 0007-remove-all-preamp.patch alex@warwickvesztrocy.co.uk -- Remove all preamp.
-Patch6: 0007-remove-all-preamp.patch
+Patch6: 0006-fix-desktop.patch
+# PATCH-FIX-UPSTREAM 0007-pygobject3-port.patch sor.alexei@meowr.ru -- Port to PyGObject3 and GTK+3.
+Patch7: 0007-pygobject3-port.patch
# PATCH-FIX-UPSTREAM 0008-fix-locale-issues.patch sor.alexei@meowr.ru -- Fix issues on non-Latin systems.
-Patch7: 0008-fix-locale-issues.patch
+Patch8: 0008-fix-locale-issues.patch
# PATCH-FIX-UPSTREAM 0009-do-not-zero-volume.patch sor.alexei@meowr.ru -- Fix volume zeroing on fresh PulseAudio.
-Patch8: 0009-do-not-zero-volume.patch
+Patch9: 0009-do-not-zero-volume.patch
+BuildRequires: gobject-introspection-devel
BuildRequires: update-desktop-files
Requires: ladspa-swh-plugins
Requires: pulseaudio >= 4.0
Requires: pulseaudio-utils >= 4.0
-Requires: python-gnome
-Requires: python-gtk
+Requires: python3
+Requires: python3-gobject
BuildArch: noarch
+%if 0%{?suse_version} > 1320 || 0%{?sle_version} >= 120200
+Requires: python3-gobject-Gdk
+%endif
%description
GUI for PulseAudio's LADSPA interface using Steve Harris' Multiband EQ
-(mbeq_1197) plugin
+(mbeq_1197) plugin.
%prep
%setup -q -n %{name}
@@ -61,30 +67,34 @@ GUI for PulseAudio's LADSPA interface using Steve Harris' Multiband EQ
%patch2 -p1
%patch3 -p1
%patch4 -p1
-%patch5
-%patch6 -p1
+%patch5 -p1
+%patch6
%patch7 -p1
%patch8 -p1
+%patch9 -p1
+sed -i '/^#!/s|env python$|python3|' .%{_datadir}/%{name}/%{name}.py
%build
# Nothing to build.
%install
mkdir -p %{buildroot}%{_bindir}/ %{buildroot}%{_datadir}/%{name}/presets/
-install -Dm 0755 .%{_bindir}/%{name}* %{buildroot}%{_bindir}/
-install -Dm 0755 .%{_datadir}/%{name}/%{name}.py %{buildroot}%{_datadir}/%{name}/%{name}.py
-install -Dm 0644 .%{_datadir}/%{name}/presets/* %{buildroot}%{_datadir}/%{name}/presets/
-install -Dm 0644 .%{_datadir}/applications/%{name}.desktop %{buildroot}%{_datadir}/applications/%{name}.desktop
+install -Dpm 0755 .%{_bindir}/%{name}* %{buildroot}%{_bindir}/
+install -Dpm 0755 .%{_datadir}/%{name}/%{name}.py %{buildroot}%{_bindir}/%{name}-gtk
+install -Dpm 0644 .%{_datadir}/%{name}/presets/* %{buildroot}%{_datadir}/%{name}/presets/
+install -Dpm 0644 .%{_datadir}/applications/%{name}.desktop %{buildroot}%{_datadir}/applications/%{name}.desktop
+
%suse_update_desktop_file %{name}
+%if 0%{?suse_version} < 1500
%post
%desktop_database_post
%postun
%desktop_database_postun
+%endif
%files
-%defattr(-,root,root)
%{_bindir}/%{name}*
%{_datadir}/%{name}/
%{_datadir}/applications/%{name}.desktop