summaryrefslogtreecommitdiff
path: root/media-libs/libffado/files/libffado-2.4.0-py3-pyqt5-fixes.patch
blob: f0937559b8e9dfba1f119d42b61677e9d0524909 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
------------------------------------------------------------------------
r2726 | jwoithe | 2018-01-05 18:56:40 +0900 (Fri, 05 Jan 2018) | 13 lines

Further Python3/PyQt5 compatibility fixes, enhance "About" dialog box.

This patch was prepared by Orcan Ogetbil on Fedora and tested on that
distribution with PyQt4-4.12.1 and PyQt5-5.9.1.  It is primarily concerned
with additional compatibility between Python2/3 and PyQt4/5.  It has also
been tested under python 2 with pyqt 4.11.4.  Further testing under
different python/pyqt environments would be welcomed.

An enhancement to the "About" dialog is also included which adds version
strings and updates the copyright year range.

The patch was submitted to the ffado-devel mailing list.


Index: support/mixer-qt4/ffado/ffadowindow.py
===================================================================
--- a/support/mixer-qt4/ffado/ffadowindow.py	(revision 2725)
+++ b/support/mixer-qt4/ffado/ffadowindow.py	(revision 2726)
@@ -22,6 +22,8 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+import ctypes
+import datetime
 import os
 
 from ffado.config import *
@@ -92,7 +94,8 @@
             self.menuTheme[theme].setCheckable(True)
 
             if (ffado_python3 and (self.style().objectName().lower() == theme.lower()) or
-                    not(ffado_python3) and (self.style().objectName().toLower() == theme.toLower())):
+                    not(ffado_python3) and (self.style().objectName().toLower() == theme.toLower() if ffado_pyqt_version == 4 else
+                                            self.style().objectName().lower() == theme.lower())):
                 self.menuTheme[theme].setDisabled(True)
                 self.menuTheme[theme].setChecked(True)
             self.menuTheme[theme].triggered.connect(self.switchTheme )
@@ -174,9 +177,11 @@
         QMessageBox.about( self, "About FFADO", """
 <h1>ffado.org</h1>
 
+<p>{ffado_version}</p>
+
 <p>FFADO is the new approach to have firewire audio on linux.</p>
 
-<p>&copy; 2006-2014 by the FFADO developers<br />ffado is licensed under the GPLv3, for the full license text see <a href="http://www.gnu.org/licenses/">www.gnu.org/licenses</a> or the LICENSE.* files shipped with ffado.</p>
+        <p>&copy; 2006-2018 by the FFADO developers<br />ffado is licensed under the GPLv3, for the full license text see <a href="http://www.gnu.org/licenses/">www.gnu.org/licenses</a> or the LICENSE.* files shipped with ffado.</p>
 
 <p>FFADO developers are:<ul>
 <li>Pieter Palmers
@@ -191,8 +196,17 @@
 <li>Stefan Richter
 <li>Jano Svitok
 </ul>
-""" )
+        """.format(ffado_version=get_ffado_version(), thisyear=datetime.datetime.now().year))
 
+def get_ffado_version():
+    try:
+        # call the C function ffado_get_version() to figure out the version
+        lib = ctypes.cdll.LoadLibrary('libffado.so')
+        func = ctypes.CFUNCTYPE(ctypes.c_char_p)
+        ffado_get_version = func(('ffado_get_version', lib))
+        return ffado_get_version()
+    except:
+        return "libffado"
 
 def get_lock(process_name):
     import socket
@@ -252,6 +266,7 @@
     logging.getLogger('global').setLevel(debug_level)
 
     log = logging.getLogger('main')
+    log.debug("Using %s with Qt: %s PyQt: %s" % (get_ffado_version(), QtCore.QT_VERSION_STR, QtCore.PYQT_VERSION_STR))
 
     app = QApplication(args)
     app.setWindowIcon( QIcon( SHAREDIR + "/icons/hi64-apps-ffado.png" ) )
Index: support/mixer-qt4/ffado/logginghandler.py
===================================================================
--- a/support/mixer-qt4/ffado/logginghandler.py	(revision 2725)
+++ b/support/mixer-qt4/ffado/logginghandler.py	(revision 2726)
@@ -28,7 +28,7 @@
 log = logging.getLogger('logginghandler')
 
 class QStatusLogger( QObject, logging.Handler ):
-    log = pyqtSignal(QString, int, name='log')
+    log = pyqtSignal(QString if ffado_pyqt_version == 4 else str, int, name='log')
     def __init__( self, parent, statusbar, level=logging.NOTSET ):
         QObject.__init__( self, parent )
         logging.Handler.__init__( self, level )
Index: support/mixer-qt4/ffado/panelmanager.py
===================================================================
--- a/support/mixer-qt4/ffado/panelmanager.py	(revision 2725)
+++ b/support/mixer-qt4/ffado/panelmanager.py	(revision 2726)
@@ -378,7 +378,7 @@
         action = self.sender()
         # Extract the action data and store as a dbus.String type so 
         # it is usable as a key into self.panels[].
-        panel_key = dbus.String(action.data().toString())
+        panel_key = dbus.String(action.data().toString() if ffado_pyqt_version == 4 else action.data())
         self.tabs.setCurrentIndex(self.tabs.indexOf(self.panels[panel_key]))
 
     def displayPanels(self):
@@ -515,6 +515,8 @@
           saveString.append('</device>\n')
         # file saving
         savefilename = QFileDialog.getSaveFileName(self, 'Save File', os.getenv('HOME'))
+        if isinstance(savefilename, tuple): # newer PyQt5
+            savefilename = savefilename[0]
         try:
           f = open(savefilename, 'w')
         except IOError:
@@ -526,6 +528,8 @@
 
     def readSettings(self):
         readfilename = QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
+        if isinstance(readfilename, tuple): # newer PyQt5
+            readfilename = readfilename[0]
         try:
           f = open(readfilename, 'r')
         except IOError:
Index: support/mixer-qt4/ffado/widgets/crossbarrouter.py
===================================================================
--- a/support/mixer-qt4/ffado/widgets/crossbarrouter.py	(revision 2725)
+++ b/support/mixer-qt4/ffado/widgets/crossbarrouter.py	(revision 2726)
@@ -168,7 +168,10 @@
         self.timer.setInterval(200)
         self.timer.timeout.connect(self.updateLevels)
 
-        self.vubtn.setChecked(self.settings.value("crossbarrouter/runvu", False).toBool())
+        if ffado_pyqt_version == 4:
+            self.vubtn.setChecked(self.settings.value("crossbarrouter/runvu", False).toBool())
+        else:
+            self.vubtn.setChecked(self.settings.value("crossbarrouter/runvu", False) == u'true')
 
     def __del__(self):
         print( "CrossbarRouter.__del__()" )
Index: support/mixer-qt4/ffado/widgets/matrixmixer.py
===================================================================
--- a/support/mixer-qt4/ffado/widgets/matrixmixer.py	(revision 2725)
+++ b/support/mixer-qt4/ffado/widgets/matrixmixer.py	(revision 2726)
@@ -200,7 +200,7 @@
 
     def mousePressEvent(self, ev):
         if ev.buttons() & Qt.LeftButton:
-            self.pos = ev.posF()
+            self.pos = ev.posF() if ffado_pyqt_version == 4 else ev.localPos()
             self.tmpvalue = self.value()
             ev.accept()
             #log.debug("MixerNode.mousePressEvent() %s" % str(self.pos))
@@ -207,7 +207,7 @@
 
     def mouseMoveEvent(self, ev):
         if hasattr(self, "tmpvalue") and self.pos is not QtCore.QPointF(0, 0):
-            newpos = ev.posF()
+            newpos = ev.posF() if ffado_pyqt_version == 4 else ev.localPos()
             change = newpos.y() - self.pos.y()
             #log.debug("MixerNode.mouseReleaseEvent() change %s" % (str(change)))
             self.setValue( self.tmpvalue - math.copysign(pow(abs(change), 2), change) )
@@ -215,7 +215,7 @@
 
     def mouseReleaseEvent(self, ev):
         if hasattr(self, "tmpvalue") and self.pos is not QtCore.QPointF(0, 0):
-            newpos = ev.posF()
+            newpos = ev.posF() if ffado_pyqt_version == 4 else ev.localPos()
             change = newpos.y() - self.pos.y()
             #log.debug("MixerNode.mouseReleaseEvent() change %s" % (str(change)))
             self.setValue( self.tmpvalue - math.copysign(pow(abs(change), 2), change) )
@@ -257,19 +257,19 @@
         if v == 0:
             symb_inf = u"\u221E"
             text = "-" + symb_inf + " dB"
-        if ffado_python3:
+        if ffado_python3 or ffado_pyqt_version == 5:
             # Python3 uses native python UTF strings rather than QString.
             # This therefore appears to be the correct way to display this
             # UTF8 string, but testing may prove otherwise.
             p.drawText(rect, Qt.AlignCenter, text)
         else:
-            p.drawText(rect, Qt.AlignCenter, QtCore.QString.fromUtf8(text))
+            p.drawText(rect, Qt.AlignCenter, QString.fromUtf8(text))
         if (self.inv_action!=None and self.inv_action.isChecked()):
-            if ffado_python3:
+            if ffado_python3 or ffado_pyqt_version == 5:
                 # Refer to the comment about about Python UTF8 strings.
                 p.drawText(rect, Qt.AlignLeft|Qt.AlignTop, " ϕ")
             else:
-                p.drawText(rect, Qt.AlignLeft|Qt.AlignTop, QtCore.QString.fromUtf8(" ϕ"))
+                p.drawText(rect, Qt.AlignLeft|Qt.AlignTop, QString.fromUtf8(" ϕ"))
 
     def internalValueChanged(self, value):
         #log.debug("MixerNode.internalValueChanged( %i )" % value)

------------------------------------------------------------------------