@ -0,0 +1,23 @@ | |||
# Maintainer: Sabart Otto - Seberm <seberm[at]gmail[dot].com | |||
pkgname=cr2fits | |||
pkgver=1 | |||
pkgrel=1 | |||
pkgdesc="A script to convert RAW images to FITS images." | |||
url=() | |||
arch=('any') | |||
license=('GPL') | |||
install='' | |||
source=(https://github.com/eaydin/cr2fits/blob/master/cr2fits.py) | |||
depends=('python2' 'python2-pyfits' 'dcraw' 'dolphin') | |||
optdepends=() | |||
conflicts=() | |||
provides='' | |||
makedepends=() | |||
package() { | |||
mkdir -p $pkgdir/usr/bin/ | |||
cp $srcdir/$pkgname.py $pkgdir/usr/bin/$pkgname.py | |||
chmod 755 $pkgdir/usr/bin/$pkgname.py | |||
} | |||
md5sums=('04924ee6fa2529d57e83603e73516984') |
@ -0,0 +1,369 @@ | |||
#!/usr/bin/python2 | |||
# -*- coding: utf-8 -*- | |||
# 3rd attempt | |||
# 15th Feb 2012, 09:38AM | |||
# http://eayd.in | |||
# http://github.com/eaydin/cr2fits | |||
### This script is redistributable in anyway. | |||
### But it includes netpbmfile.py which is NOT written by M. Emre Aydin. | |||
### It has its own copyright and it has been stated in the source code. | |||
### BUT, there's nothing to worry about usage, laws etc. | |||
### Enjoy. | |||
sourceweb = "http://github.com/eaydin/cr2fits" | |||
version = "1.0.3" | |||
try : | |||
from copy import deepcopy | |||
import numpy, pyfits, subprocess, sys, re, datetime, math | |||
except : | |||
print("ERROR : Missing some libraries!") | |||
print("Check if you have the following :\n\tnumpy\n\tpyfits\n\tdcraw") | |||
print("For details : %s" % sourceweb) | |||
raise SystemExit | |||
### --- NETPBMFILE SOURCE CODE --- ### | |||
# Copyright (c) 2011, Christoph Gohlke | |||
# Copyright (c) 2011, The Regents of the University of California | |||
# All rights reserved. | |||
# | |||
# Redistribution and use in source and binary forms, with or without | |||
# modification, are permitted provided that the following conditions are met: | |||
# | |||
# * Redistributions of source code must retain the above copyright | |||
# notice, this list of conditions and the following disclaimer. | |||
# * Redistributions in binary form must reproduce the above copyright | |||
# notice, this list of conditions and the following disclaimer in the | |||
# documentation and/or other materials provided with the distribution. | |||
# * Neither the name of the copyright holders nor the names of any | |||
# contributors may be used to endorse or promote products derived | |||
# from this software without specific prior written permission. | |||
# | |||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||
# POSSIBILITY OF SUCH DAMAGE. | |||
__all__ = ['NetpbmFile'] | |||
class NetpbmFile(object): | |||
"""Read and write Netpbm PAM, PBM, PGM, PPM, files.""" | |||
_types = {b'P1': b'BLACKANDWHITE', b'P2': b'GRAYSCALE', b'P3': b'RGB', | |||
b'P4': b'BLACKANDWHITE', b'P5': b'GRAYSCALE', b'P6': b'RGB', | |||
b'P7 332': b'RGB', b'P7': b'RGB_ALPHA'} | |||
def __init__(self, arg=None, **kwargs): | |||
"""Initialize instance from filename, open file, or numpy array.""" | |||
for attr in ('header', 'magicnum', 'width', 'height', 'maxval', | |||
'depth', 'tupltypes', '_filename', '_fileid', '_data'): | |||
setattr(self, attr, None) | |||
if arg is None: | |||
self._fromdata([], **kwargs) | |||
elif isinstance(arg, basestring): | |||
self._fileid = open(arg, 'rb') | |||
self._filename = arg | |||
self._fromfile(self._fileid, **kwargs) | |||
elif hasattr(arg, 'seek'): | |||
self._fromfile(arg, **kwargs) | |||
self._fileid = arg | |||
else: | |||
self._fromdata(arg, **kwargs) | |||
def asarray(self, copy=True, cache=False, **kwargs): | |||
"""Return image data from file as numpy array.""" | |||
data = self._data | |||
if data is None: | |||
data = self._read_data(self._fileid, **kwargs) | |||
if cache: | |||
self._data = data | |||
else: | |||
return data | |||
return deepcopy(data) if copy else data | |||
def write(self, arg, **kwargs): | |||
"""Write instance to file.""" | |||
if hasattr(arg, 'seek'): | |||
self._tofile(arg, **kwargs) | |||
else: | |||
with open(arg, 'wb') as fid: | |||
self._tofile(fid, **kwargs) | |||
def close(self): | |||
"""Close open file. Future asarray calls might fail.""" | |||
if self._filename and self._fileid: | |||
self._fileid.close() | |||
self._fileid = None | |||
def __del__(self): | |||
self.close() | |||
def _fromfile(self, fileid): | |||
"""Initialize instance from open file.""" | |||
fileid.seek(0) | |||
data = fileid.read(4096) | |||
if (len(data) < 7) or not (b'0' < data[1:2] < b'8'): | |||
raise ValueError("Not a Netpbm file:\n%s" % data[:32]) | |||
try: | |||
self._read_pam_header(data) | |||
except Exception: | |||
try: | |||
self._read_pnm_header(data) | |||
except Exception: | |||
raise ValueError("Not a Netpbm file:\n%s" % data[:32]) | |||
def _read_pam_header(self, data): | |||
"""Read PAM header and initialize instance.""" | |||
regroups = re.search( | |||
b"(^P7[\n\r]+(?:(?:[\n\r]+)|(?:#.*)|" | |||
b"(HEIGHT\s+\d+)|(WIDTH\s+\d+)|(DEPTH\s+\d+)|(MAXVAL\s+\d+)|" | |||
b"(?:TUPLTYPE\s+\w+))*ENDHDR\n)", data).groups() | |||
self.header = regroups[0] | |||
self.magicnum = b'P7' | |||
for group in regroups[1:]: | |||
key, value = group.split() | |||
setattr(self, unicode(key).lower(), int(value)) | |||
matches = re.findall(b"(TUPLTYPE\s+\w+)", self.header) | |||
self.tupltypes = [s.split(None, 1)[1] for s in matches] | |||
def _read_pnm_header(self, data): | |||
"""Read PNM header and initialize instance.""" | |||
bpm = data[1:2] in b"14" | |||
regroups = re.search(b"".join(( | |||
b"(^(P[123456]|P7 332)\s+(?:#.*[\r\n])*", | |||
b"\s*(\d+)\s+(?:#.*[\r\n])*", | |||
b"\s*(\d+)\s+(?:#.*[\r\n])*" * (not bpm), | |||
b"\s*(\d+)\s(?:\s*#.*[\r\n]\s)*)")), data).groups() + (1, ) * bpm | |||
self.header = regroups[0] | |||
self.magicnum = regroups[1] | |||
self.width = int(regroups[2]) | |||
self.height = int(regroups[3]) | |||
self.maxval = int(regroups[4]) | |||
self.depth = 3 if self.magicnum in b"P3P6P7 332" else 1 | |||
self.tupltypes = [self._types[self.magicnum]] | |||
def _read_data(self, fileid, byteorder='>'): | |||
"""Return image data from open file as numpy array.""" | |||
fileid.seek(len(self.header)) | |||
data = fileid.read() | |||
dtype = 'u1' if self.maxval < 256 else byteorder + 'u2' | |||
depth = 1 if self.magicnum == b"P7 332" else self.depth | |||
shape = [-1, self.height, self.width, depth] | |||
size = numpy.prod(shape[1:]) | |||
if self.magicnum in b"P1P2P3": | |||
data = numpy.array(data.split(None, size)[:size], dtype) | |||
data = data.reshape(shape) | |||
elif self.maxval == 1: | |||
shape[2] = int(math.ceil(self.width / 8)) | |||
data = numpy.frombuffer(data, dtype).reshape(shape) | |||
data = numpy.unpackbits(data, axis=-2)[:, :, :self.width, :] | |||
else: | |||
data = numpy.frombuffer(data, dtype) | |||
data = data[:size * (data.size // size)].reshape(shape) | |||
if data.shape[0] < 2: | |||
data = data.reshape(data.shape[1:]) | |||
if data.shape[-1] < 2: | |||
data = data.reshape(data.shape[:-1]) | |||
if self.magicnum == b"P7 332": | |||
rgb332 = numpy.array(list(numpy.ndindex(8, 8, 4)), numpy.uint8) | |||
rgb332 *= [36, 36, 85] | |||
data = numpy.take(rgb332, data, axis=0) | |||
return data | |||
def _fromdata(self, data, maxval=None): | |||
"""Initialize instance from numpy array.""" | |||
data = numpy.array(data, ndmin=2, copy=True) | |||
if data.dtype.kind not in "uib": | |||
raise ValueError("not an integer type: %s" % data.dtype) | |||
if data.dtype.kind == 'i' and numpy.min(data) < 0: | |||
raise ValueError("data out of range: %i" % numpy.min(data)) | |||
if maxval is None: | |||
maxval = numpy.max(data) | |||
maxval = 255 if maxval < 256 else 65535 | |||
if maxval < 0 or maxval > 65535: | |||
raise ValueError("data out of range: %i" % maxval) | |||
data = data.astype('u1' if maxval < 256 else '>u2') | |||
self._data = data | |||
if data.ndim > 2 and data.shape[-1] in (3, 4): | |||
self.depth = data.shape[-1] | |||
self.width = data.shape[-2] | |||
self.height = data.shape[-3] | |||
self.magicnum = b'P7' if self.depth == 4 else b'P6' | |||
else: | |||
self.depth = 1 | |||
self.width = data.shape[-1] | |||
self.height = data.shape[-2] | |||
self.magicnum = b'P5' if maxval > 1 else b'P4' | |||
self.maxval = maxval | |||
self.tupltypes = [self._types[self.magicnum]] | |||
self.header = self._header() | |||
def _tofile(self, fileid, pam=False): | |||
"""Write Netbm file.""" | |||
fileid.seek(0) | |||
fileid.write(self._header(pam)) | |||
data = self.asarray(copy=False) | |||
if self.maxval == 1: | |||
data = numpy.packbits(data, axis=-1) | |||
data.tofile(fileid) | |||
def _header(self, pam=False): | |||
"""Return file header as byte string.""" | |||
if pam or self.magicnum == b'P7': | |||
header = "\n".join(("P7", | |||
"HEIGHT %i" % self.height, | |||
"WIDTH %i" % self.width, | |||
"DEPTH %i" % self.depth, | |||
"MAXVAL %i" % self.maxval, | |||
"\n".join("TUPLTYPE %s" % unicode(i) for i in self.tupltypes), | |||
"ENDHDR\n")) | |||
elif self.maxval == 1: | |||
header = "P4 %i %i\n" % (self.width, self.height) | |||
elif self.depth == 1: | |||
header = "P5 %i %i %i\n" % (self.width, self.height, self.maxval) | |||
else: | |||
header = "P6 %i %i %i\n" % (self.width, self.height, self.maxval) | |||
if sys.version_info[0] > 2: | |||
header = bytes(header, 'ascii') | |||
return header | |||
def __str__(self): | |||
"""Return information about instance.""" | |||
return unicode(self.header) | |||
if sys.version_info[0] > 2: | |||
basestring = str | |||
unicode = lambda x: str(x, 'ascii') | |||
### --- END OF NETPBMFILE SOURCE CODE --- ### | |||
### CR2FITS SOURCE CODE ### | |||
try : | |||
cr2FileName = sys.argv[1] | |||
colorInput = int(sys.argv[2]) # 0=R 1=G 2=B | |||
except : | |||
print("ERROR : You probably don't know how to use it?") | |||
print("./cr2fits.py <cr2filename> <color-index>") | |||
print("The <color-index> can take 3 values:0,1,2 for R,G,B respectively.") | |||
print("Example :\n\t$ ./cr2fits.py myimage.cr2 1") | |||
print("The above example will create 2 outputs.") | |||
print("\tmyimage.ppm : The PPM, which you can delete.") | |||
print("\tmyimage-G.fits : The FITS image in the Green channel, which is the purpose!") | |||
print("For details : http://github.com/eaydin/cr2fits") | |||
print("Version : %s" % version) | |||
raise SystemExit | |||
colors = {0:"Red",1:"Green",2:"Blue"} | |||
colorState = any([True for i in colors.keys() if i == colorInput]) | |||
if colorState == False : | |||
print("ERROR : Color value can be set as 0:Red, 1:Green, 2:Blue.") | |||
raise SystemExit | |||
print("Reading file %s...") % cr2FileName | |||
try : | |||
#Converting the CR2 to PPM | |||
p = subprocess.Popen(["dcraw","-6","-j","-W",cr2FileName]).communicate()[0] | |||
#Getting the EXIF of CR2 with dcraw | |||
p = subprocess.Popen(["dcraw","-i","-v",cr2FileName],stdout=subprocess.PIPE) | |||
cr2header = p.communicate()[0] | |||
#Catching the Timestamp | |||
m = re.search('(?<=Timestamp:).*',cr2header) | |||
date1=m.group(0).split() | |||
months = { 'Jan' : 1, 'Feb' : 2, 'Mar' : 3, 'Apr' : 4, 'May' : 5, 'Jun' : 6, 'Jul' : 7, 'Aug' : 8, 'Sep' : 9, 'Oct' : 10, 'Nov' : 11, 'Dec' : 12 } | |||
date = datetime.datetime(int(date1[4]),months[date1[1]],int(date1[2]),int(date1[3].split(':')[0]),int(date1[3].split(':')[1]),int(date1[3].split(':')[2])) | |||
date ='{0:%Y-%m-%d %H:%M:%S}'.format(date) | |||
#Catching the Shutter Speed | |||
m = re.search('(?<=Shutter:).*(?=sec)',cr2header) | |||
shutter = m.group(0).strip() | |||
#Catching the Aperture | |||
m = re.search('(?<=Aperture: f/).*',cr2header) | |||
aperture = m.group(0).strip() | |||
#Catching the ISO Speed | |||
m = re.search('(?<=ISO speed:).*',cr2header) | |||
iso = m.group(0).strip() | |||
#Catching the Focal length | |||
m = re.search('(?<=Focal length: ).*(?=mm)',cr2header) | |||
focal = m.group(0).strip() | |||
#Catching the Original Filename of the cr2 | |||
m = re.search('(?<=Filename:).*',cr2header) | |||
original_file = m.group(0).strip() | |||
#Catching the Camera Type | |||
m = re.search('(?<=Camera:).*',cr2header) | |||
camera = m.group(0).strip() | |||
except : | |||
print("ERROR : Something went wrong with dcraw. Do you even have dcraw?") | |||
raise SystemExit | |||
print("Reading the PPM output...") | |||
try : | |||
#Reading the PPM | |||
ppm_name = cr2FileName.split('.')[0] + '.ppm' | |||
im_ppm = NetpbmFile(ppm_name).asarray() | |||
except : | |||
print("ERROR : Something went wrong while reading the PPM file.") | |||
raise SystemExit | |||
print("Extracting %s color channels... (may take a while)" % colors[colorInput]) | |||
try : | |||
#Extracting the Green Channel Only | |||
im_green = numpy.zeros((im_ppm.shape[0],im_ppm.shape[1]),dtype=numpy.uint16) | |||
for row in xrange(0,im_ppm.shape[0]) : | |||
for col in xrange(0,im_ppm.shape[1]) : | |||
im_green[row,col] = im_ppm[row,col][colorInput] | |||
except : | |||
print("ERROR : Something went wrong while extracting color channels.") | |||
raise SystemExit | |||
print("Creating the FITS file...") | |||
try : | |||
#Creating the FITS File | |||
hdu = pyfits.PrimaryHDU(im_green) | |||
hdu.header.set('OBSTIME',date) | |||
hdu.header.set('EXPTIME',shutter) | |||
hdu.header.set('APERTUR',aperture) | |||
hdu.header.set('ISO',iso) | |||
hdu.header.set('FOCAL',focal) | |||
hdu.header.set('ORIGIN',original_file) | |||
hdu.header.set('FILTER',colors[colorInput]) | |||
hdu.header.set('CAMERA',camera) | |||
hdu.header.add_comment('FITS File Created with cr2fits.py available at %s'%(sourceweb)) | |||
hdu.header.add_comment('cr2fits.py version %s'%(version)) | |||
hdu.header.add_comment('EXPTIME is in seconds.') | |||
hdu.header.add_comment('APERTUR is the ratio as in f/APERTUR') | |||
hdu.header.add_comment('FOCAL is in mm') | |||
except : | |||
print("ERROR : Something went wrong while creating the FITS file.") | |||
raise SystemExit | |||
print("Writing the FITS file...") | |||
try : | |||
hdu.writeto(cr2FileName.split('.')[0]+"-"+colors[colorInput][0]+'.fits') | |||
except : | |||
print("ERROR : Something went wrong while writing the FITS file. Maybe it already exists?") | |||
raise SystemExit | |||
print("Conversion successful!") |
@ -0,0 +1,19 @@ | |||
pkgname=cr2hdr | |||
pkgver=2014.05.07 | |||
pkgrel=1 | |||
pkgdesc="Dual ISO image processing tool for Canon DSLR's with Magic Lantern firmware." | |||
arch=('any') | |||
url='https://bitbucket.org/hudson/magic-lantern' | |||
license="GPL" | |||
depends=('perl-image-exiftool' 'dcraw') | |||
optdepends=('octave') | |||
makedepends=('wget' 'p7zip') | |||
source=(https://bitbucket.org/rufustfirefly/magic-lantern/downloads/cr2hdr-static.linux.x86.2014-06-19-f9a29c7c0685.7z) | |||
md5sums=('a526d2f700603003ade464e0521f8e23') | |||
package() | |||
{ | |||
mv $srcdir/cr2hdr-static.linux.x86.2014-06-19-f9a29c7c0685 $srcdir/cr2hdr | |||
mkdir -p "$pkgdir/usr/bin" | |||
cp -ar $srcdir/cr2hdr "$pkgdir/usr/bin" | |||
} |
@ -0,0 +1,72 @@ | |||
--- a/src/panels/information/phononwidget.cpp | |||
+++ b/src/panels/information/phononwidget.cpp | |||
@@ -30,6 +30,7 @@ | |||
#include <QHBoxLayout> | |||
#include <QShowEvent> | |||
#include <QToolButton> | |||
+#include <QCheckBox> | |||
#include <QDialog> | |||
#include <QIcon> | |||
#include <KIconLoader> | |||
@@ -69,6 +70,7 @@ | |||
m_topLayout(0), | |||
m_media(0), | |||
m_seekSlider(0), | |||
+ m_playAut(0), | |||
m_audioOutput(0), | |||
m_videoPlayer(0) | |||
{ | |||
@@ -79,6 +81,9 @@ | |||
if (m_url != url) { | |||
stop(); // emits playingStopped() signal | |||
m_url = url; | |||
+ if(m_playAut ->isChecked()){ | |||
+ play(); | |||
+ } | |||
} | |||
} | |||
@@ -115,6 +120,8 @@ | |||
controlsLayout->setMargin(0); | |||
controlsLayout->setSpacing(0); | |||
+ m_playAut = new QCheckBox(this); | |||
+ | |||
m_playButton = new QToolButton(this); | |||
m_stopButton = new QToolButton(this); | |||
m_seekSlider = new Phonon::SeekSlider(this); | |||
@@ -122,11 +129,15 @@ | |||
controlsLayout->addWidget(m_playButton); | |||
controlsLayout->addWidget(m_stopButton); | |||
controlsLayout->addWidget(m_seekSlider); | |||
+ controlsLayout->addWidget(m_playAut); | |||
m_topLayout->addLayout(controlsLayout); | |||
const int smallIconSize = IconSize(KIconLoader::Small); | |||
const QSize buttonSize(smallIconSize, smallIconSize); | |||
+ | |||
+ m_playAut->setToolTip(i18n("play automatically")); | |||
+ m_playAut->setIconSize(buttonSize); | |||
m_playButton->setToolTip(i18n("play")); | |||
m_playButton->setIconSize(buttonSize); | |||
--- a/src/panels/information/phononwidget.h | |||
+++ b/src/panels/information/phononwidget.h | |||
@@ -38,6 +38,7 @@ | |||
class EmbeddedVideoPlayer; | |||
class QToolButton; | |||
class QVBoxLayout; | |||
+class QCheckBox; | |||
class PhononWidget : public QWidget | |||
{ | |||
@@ -81,6 +82,7 @@ | |||
QToolButton *m_playButton; | |||
QToolButton *m_stopButton; | |||
+ QCheckBox *m_playAut; | |||
QVBoxLayout *m_topLayout; | |||
Phonon::MediaObject *m_media; |
@ -0,0 +1,25 @@ | |||
# Maintainer: Sabart Otto - Seberm <seberm[at]gmail[dot].com | |||
pkgname=kde-servicemenus-cr2fits | |||
pkgver=1 | |||
pkgrel=1 | |||
pkgdesc="Convert RAW images to FITS format (KDE5 Dolphin action)" | |||
url=() | |||
arch=('any') | |||
license=('GPL') | |||
install='' | |||
source=(cr2fits.desktop | |||
cr2fits.sh) | |||
depends=('cr2fits' 'dolphin') | |||
optdepends=() | |||
conflicts=() | |||
provides='' | |||
makedepends=() | |||
package() { | |||
mkdir -p $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
cp $srcdir/{ale_stack.desktop,ale_stack.sh} $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
chmod 755 $pkgdir/usr/share/kservices5/ServiceMenus/* | |||
} | |||
md5sums=('bfbce728d7abea9b6446c932bf7f31e7' | |||
'e4448d942b57641df540737ab2c1fec9') |
@ -0,0 +1,23 @@ | |||
# Maintainer: Sabart Otto - Seberm <seberm[at]gmail[dot].com | |||
pkgname=kde-servicemenus-dualiso | |||
pkgver=1 | |||
pkgrel=1 | |||
pkgdesc="Process Dual ISO RAW images (KDE5 Dolphin action)" | |||
url=() | |||
arch=('any') | |||
license=('GPL') | |||
install='' | |||
source=(dualiso.desktop) | |||
depends=('cr2hdr' 'dolphin') | |||
optdepends=() | |||
conflicts=() | |||
#provides='' | |||
makedepends=() | |||
package() { | |||
mkdir -p $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
cp $srcdir/dualiso.desktop $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
chmod 755 $pkgdir/usr/share/kservices5/ServiceMenus/dualiso.desktop | |||
} | |||
md5sums=('c2c579853f914d156656ac6981319833') |
@ -0,0 +1,14 @@ | |||
[Desktop Entry] | |||
Type=Service | |||
ServiceTypes=KonqPopupMenu/Plugin | |||
MimeType=image/x-canon-cr2;image/x-adobe-dng; | |||
Icon=application-x-theme | |||
Actions=dualiso; | |||
X-KDE-StartupNotify=false | |||
X-KDE-Priority=TopLevel | |||
TryExec=cr2hdr | |||
[Desktop Action dualiso] | |||
Name=Convert Dual ISO RAW image | |||
Icon=application-x-theme | |||
Exec=mkdir -p converted-dual-iso && cr2hdr %U && mv *.DNG ./converted-dual-iso |
@ -0,0 +1,30 @@ | |||
# Maintainer: Sabart Otto - Seberm <seberm[at]gmail[dot].com | |||
pkgname=kde-servicemenus-hexstrings | |||
pkgver=1 | |||
pkgrel=1 | |||
pkgdesc="Extract all readable strings from a file using Dolphin or Konqueror (KDE5 Dolphin action)" | |||
url=() | |||
arch=('any') | |||
license=('BSD') | |||
install='' | |||
source=(hexstrings.patch) | |||
depends=('binutils' 'dolphin') | |||
optdepends=() | |||
conflicts=() | |||
#provides='' | |||
makedepends=() | |||
prepare() { | |||
mkdir $pkgname-$pkgver | |||
cd $srcdir/$pkgname-$pkgver | |||
touch hexstrings.sh hexstrings.desktop | |||
patch -Np1 -i "$srcdir/hexstrings.patch" | |||
} | |||
package() { | |||
mkdir -p $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
cp $srcdir/$pkgname-$pkgver/{hexstrings.desktop,hexstrings.sh} $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
chmod 755 $pkgdir/usr/share/kservices5/ServiceMenus/{hexstrings.desktop,hexstrings.sh} | |||
} | |||
md5sums=('501cf2c12fa9c8e7f88012b9e6a77d21') |
@ -0,0 +1,32 @@ | |||
--- a/hexstrings.sh | |||
+++ b/hexstrings.sh | |||
@@ -0,0 +1,8 @@ | |||
+#!/bin/bash | |||
+ | |||
+while [ $# -gt 0 ]; do | |||
+ HEXFILE=$1 | |||
+ HEXFILE_STRINGS=$(echo "$HEXFILE" | sed 's/\.\w*$/_strings.txt/') | |||
+ strings "$HEXFILE" | sort > "$HEXFILE_STRINGS" #Export strings from a hex file and sort them alphabetically. | |||
+ shift | |||
+done | |||
--- a/hexstrings.desktop | |||
+++ b/hexstrings.desktop | |||
@@ -0,0 +1,17 @@ | |||
+[Desktop Action hexstrings] | |||
+Exec=/usr/share/kservices5/ServiceMenus/hexstrings.sh | |||
+Icon=text-x-script | |||
+Name=Export readable strings from this file | |||
+Name[fi]=Hae luettavissa olevat tekstit tästä tiedostosta | |||
+ | |||
+[Desktop Entry] | |||
+Actions=hexstrings; | |||
+Icon=text-richtext | |||
+MimeType= | |||
+ServiceTypes= | |||
+TryExec=strings | |||
+Type=Service | |||
+X-KDE-Priority=TopLevel | |||
+X-KDE-ServiceTypes=KonqPopupMenu/Plugin,all/allfiles | |||
+X-KDE-StartupNotify=false | |||
+X-KDE-Submenu= |
@ -0,0 +1,26 @@ | |||
#installation | |||
#copy this on $HOME/.kde/share/kde4/services | |||
# | |||
#license gpl | |||
#author nowardevteam 2010 | |||
#version 0.3 | |||
[Desktop Entry] | |||
Actions=mencoderMediainfo;mediainfo | |||
Icon=dialog-information | |||
ServiceTypes=KonqPopupMenu/Plugin,video/.*,audio/.* | |||
Type=Service | |||
X-KDE-Priority=TopLevel | |||
[Desktop Action mediainfo] | |||
Exec=kdialog --msgbox "$(ffmpeg -i %u 2>&1 |grep -E '(Duration)|(Stream)' )" | |||
Icon=dialog-information | |||
Name=info about the media | |||
Name[it]=informazioni sul file multimediale | |||
Name[ru]=Информация о медиафайле ffmpeg | |||
[Desktop Action mencoderMediainfo] | |||
Exec=kdialog --msgbox "$(mplayer -identify %u -ao null -vo null -frames 0 2>/dev/null | grep ^ID_ )" | |||
Icon=dialog-information | |||
Name=info about the media Mencoder | |||
Name[it]=informazioni sul file Mencoder | |||
Name[ru]=Информация о медиафайле mencoder |
@ -0,0 +1,27 @@ | |||
pkgname=kde-servicemenus-mediainfo | |||
pkgver=1 | |||
pkgrel=1 | |||
pkgdesc="A KDE service menus for media information (KDE5 Dolphin action)" | |||
arch=('any') | |||
url="https://store.kde.org/p/998430" | |||
license=('GPL') | |||
depends=('ffmpeg' 'dolphin' 'kdialog') | |||
source=(https://dl.opendesktop.org/api/files/download/id/1460731765/107335-AudioVideoinfo-qt.desktop | |||
program-cleanup.patch) | |||
md5sums=('bf395c70ce7a6f69352ce21ab6cd168e' | |||
'10c6e8c32362917b96e57247219af126') | |||
prepare() | |||
{ | |||
mkdir -p $srcdir/$pkgname | |||
cp $srcdir/107335-AudioVideoinfo-qt.desktop $srcdir/$pkgname | |||
cd $srcdir/$pkgname | |||
patch -Np1 -i "$srcdir/program-cleanup.patch" | |||
} | |||
package() | |||
{ | |||
mv $srcdir/$pkgname/107335-AudioVideoinfo-qt.desktop $srcdir/$pkgname/mediainfo-qt.desktop | |||
mkdir -p $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
install -m 644 $srcdir/$pkgname/*.desktop $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
} |
@ -0,0 +1,32 @@ | |||
--- a/107335-AudioVideoinfo-qt.desktop | |||
+++ b/107335-AudioVideoinfo-qt.desktop | |||
@@ -1,26 +1,12 @@ | |||
-#installation | |||
-#copy this on $HOME/.kde/share/kde4/services | |||
-# | |||
-#license gpl | |||
-#author nowardevteam 2010 | |||
-#version 0.3 | |||
[Desktop Entry] | |||
-Actions=mencoderMediainfo;mediainfo | |||
+Actions=mediainfo; | |||
Icon=dialog-information | |||
ServiceTypes=KonqPopupMenu/Plugin,video/.*,audio/.* | |||
+MimeType=audio/*;video/*; | |||
Type=Service | |||
X-KDE-Priority=TopLevel | |||
[Desktop Action mediainfo] | |||
Exec=kdialog --msgbox "$(ffmpeg -i %u 2>&1 |grep -E '(Duration)|(Stream)' )" | |||
Icon=dialog-information | |||
-Name=info about the media | |||
-Name[it]=informazioni sul file multimediale | |||
-Name[ru]=Информация о медиафайле ffmpeg | |||
- | |||
-[Desktop Action mencoderMediainfo] | |||
-Exec=kdialog --msgbox "$(mplayer -identify %u -ao null -vo null -frames 0 2>/dev/null | grep ^ID_ )" | |||
-Icon=dialog-information | |||
-Name=info about the media Mencoder | |||
-Name[it]=informazioni sul file Mencoder | |||
-Name[ru]=Информация о медиафайле mencoder | |||
+Name=Media information |
@ -0,0 +1,20 @@ | |||
pkgname=kde-servicemenus-multimediatools | |||
pkgver=1 | |||
pkgrel=1 | |||
pkgdesc="A KDE service menus for media conversions (KDE5 Dolphin action)" | |||
arch=('any') | |||
url="https://store.kde.org/p/998464" | |||
license=('GPL') | |||
depends=('ffmpeg' 'dolphin' 'kdialog') | |||
source=('ffmpeg-fileconversion-audio.sh' | |||
'ffmpeg-fileconversion-video.sh' | |||
'ffmpeg-fileconversion.desktop') | |||
md5sums=('badf342f35cf21f15131859b49dd9308' | |||
'ab997eca4ca58a8b398b352019a45d18' | |||
'045a6657a8e83e1e1a909f6d0f2f8cb0') | |||
package() { | |||
mkdir -p $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
cp $srcdir/{ffmpeg-fileconversion.desktop,ffmpeg-fileconversion-audio.sh,ffmpeg-fileconversion-video.sh} $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
chmod 755 $pkgdir/usr/share/kservices5/ServiceMenus/{ffmpeg-fileconversion.desktop,ffmpeg-fileconversion-audio.sh,ffmpeg-fileconversion-video.sh} | |||
} |
@ -0,0 +1,67 @@ | |||
#!/bin/bash | |||
#input file format: flac, mp3, ogg, opus, f4a, m4a, wma, wav |||||| f4v, m4v, mp4, mpg, mpeg, vob, ts, m2v, ogv, mov, webm, flv, mkv, wmv, avi | |||
#output file format: <exclude input file format>, <exclude flac>, mp3, ogg, opus, f4a, m4a, wma, wav | |||
#--caption="Select Format" --icon=system-search disabled, since not supported by KDE5 kdialog | |||
CHOICE=$(kdialog --icon=system-search --radiolist "Convert file(s) to" \ | |||
1 "aac (default)" on \ | |||
2 "ac3 (192 kbps)" off \ | |||
3 "mp3 (192 kbps)" off \ | |||
4 "ogg (192 kbps)" off \ | |||
5 "opus (default)" off \ | |||
6 "wav (default)" off \ | |||
7 "wma (192 kbps)" off \ | |||
); | |||
if [ "$?" = 0 ]; then | |||
if [ "$CHOICE" = 1 ]; then | |||
OUTPUT_FILEFORMAT='aac' | |||
OUTPUT_FILECODEC='aac' | |||
EXTRA_PARAMS='-strict -2' #Required by acc codec | |||
elif [ "$CHOICE" = 2 ]; then | |||
OUTPUT_FILEFORMAT='ac3' | |||
OUTPUT_FILECODEC='ac3' | |||
EXTRA_PARAMS='-ab 192k' #Bitrate 192kbps | |||
elif [ "$CHOICE" = 3 ]; then | |||
OUTPUT_FILEFORMAT='mp3' | |||
OUTPUT_FILECODEC='libmp3lame' | |||
EXTRA_PARAMS='-ab 192k' #Bitrate 192kbps | |||
elif [ "$CHOICE" = 4 ]; then | |||
OUTPUT_FILEFORMAT='ogg' | |||
OUTPUT_FILECODEC='libvorbis' | |||
EXTRA_PARAMS='-ab 192k' #Bitrate 192kbps | |||
elif [ "$CHOICE" = 5 ]; then | |||
OUTPUT_FILEFORMAT='opus' | |||
OUTPUT_FILECODEC='libopus' | |||
EXTRA_PARAMS='' | |||
elif [ "$CHOICE" = 6 ]; then | |||
OUTPUT_FILEFORMAT='wav' | |||
OUTPUT_FILECODEC='adpcm_ima_wav' | |||
EXTRA_PARAMS='' | |||
elif [ "$CHOICE" = 7 ]; then | |||
OUTPUT_FILEFORMAT='wma' | |||
OUTPUT_FILECODEC='wmav2' | |||
EXTRA_PARAMS='-ab 192k' #Bitrate 192kbps | |||
else | |||
exit 1 | |||
fi | |||
else | |||
exit 1 | |||
fi | |||
while [ $# -gt 0 ]; do | |||
INPUT_FILE=$1 | |||
OUTPUT_FILE=$(echo "$INPUT_FILE" | sed "s/\.\w*$/.$OUTPUT_FILEFORMAT/") | |||
ffmpeg -i "$INPUT_FILE" -vn -acodec $OUTPUT_FILECODEC $EXTRA_PARAMS -y "$OUTPUT_FILE" | |||
shift | |||
done | |||
exit 0 | |||
###ffmpeg command parameters explained | |||
#i = Input <file> | |||
#vn = Disable video | |||
#acodec = Used Audio Codec | |||
#y = Overwrite output files |
@ -0,0 +1,92 @@ | |||
#!/bin/bash | |||
#input file format: flac, mp3, ogg, opus, f4a, m4a, wma, wav |||||| f4v, m4v, mp4, mpg, mpeg, vob, ts, m2v, ogv, mov, webm, flv, mkv, wmv, avi | |||
#output file format: <exclude input file format>, <exclude flac>, mp3, ogg, opus, f4a, m4a, wma, wav | |||
#--caption="Select Format" --icon=system-search disabled, since not supported by KDE5 kdialog | |||
CHOICE=$(kdialog --radiolist "Convert file(s) to" \ | |||
1 "avi (192 kbps audio, 48000 Hz)" on \ | |||
2 "flv (copy audio codec)" off \ | |||
3 "m4v" off \ | |||
4 "mkv" off \ | |||
5 "mov (192 kpbs audio)" off \ | |||
6 "mp4" off \ | |||
7 "mpg (192 kpbs audio)" off \ | |||
8 "ogv" off \ | |||
9 "webm" off \ | |||
10 "wmv" off \ | |||
); | |||
if [ "$?" = 0 ]; then | |||
if [ "$CHOICE" = 1 ]; then | |||
OUTPUT_FILEFORMAT='avi' | |||
OUTPUT_FILECODEC_VIDEO='mpeg4' | |||
OUTPUT_FILECODEC_AUDIO='ac3' | |||
EXTRA_PARAMS='-ar 48000 -ab 192k' | |||
elif [ "$CHOICE" = 2 ]; then | |||
OUTPUT_FILEFORMAT='flv' | |||
OUTPUT_FILECODEC_VIDEO='libx264' | |||
OUTPUT_FILECODEC_AUDIO='copy' | |||
EXTRA_PARAMS='' | |||
elif [ "$CHOICE" = 3 ]; then | |||
OUTPUT_FILEFORMAT='m4v' | |||
OUTPUT_FILECODEC_VIDEO='mpeg4' | |||
OUTPUT_FILECODEC_AUDIO='aac' | |||
EXTRA_PARAMS='-strict -2' #Required by acc codec | |||
elif [ "$CHOICE" = 4 ]; then | |||
OUTPUT_FILEFORMAT='mkv' | |||
OUTPUT_FILECODEC_VIDEO='ffv1' | |||
OUTPUT_FILECODEC_AUDIO='pcm_s16le' | |||
EXTRA_PARAMS='' | |||
elif [ "$CHOICE" = 5 ]; then | |||
OUTPUT_FILEFORMAT='mov' | |||
OUTPUT_FILECODEC_VIDEO='prores' | |||
OUTPUT_FILECODEC_AUDIO='libmp3lame' | |||
EXTRA_PARAMS='-ab 192k' | |||
elif [ "$CHOICE" = 6 ]; then | |||
OUTPUT_FILEFORMAT='mp4' | |||
OUTPUT_FILECODEC_VIDEO='libx264' | |||
OUTPUT_FILECODEC_AUDIO='aac' | |||
EXTRA_PARAMS='-strict -2' #Required by acc codec | |||
elif [ "$CHOICE" = 7 ]; then | |||
OUTPUT_FILEFORMAT='mpg' | |||
OUTPUT_FILECODEC_VIDEO='mpeg2video' | |||
OUTPUT_FILECODEC_AUDIO='libmp3lame' | |||
EXTRA_PARAMS='-ab 192k' | |||
elif [ "$CHOICE" = 8 ]; then | |||
OUTPUT_FILEFORMAT='ogv' | |||
OUTPUT_FILECODEC_VIDEO='libtheora' | |||
OUTPUT_FILECODEC_AUDIO='libvorbis' | |||
EXTRA_PARAMS='' | |||
elif [ "$CHOICE" = 9 ]; then | |||
OUTPUT_FILEFORMAT='webm' | |||
OUTPUT_FILECODEC_VIDEO='libvpx' | |||
OUTPUT_FILECODEC_AUDIO='libvorbis' | |||
EXTRA_PARAMS='' | |||
elif [ "$CHOICE" = 10 ]; then | |||
OUTPUT_FILEFORMAT='wmv' | |||
OUTPUT_FILECODEC_VIDEO='msmpeg4' | |||
OUTPUT_FILECODEC_AUDIO='wmav2' | |||
EXTRA_PARAMS='' | |||
else | |||
exit 1 | |||
fi | |||
else | |||
exit 1 | |||
fi | |||
while [ $# -gt 0 ]; do | |||
INPUT_FILE=$1 | |||
OUTPUT_FILE=$(echo "$INPUT_FILE" | sed "s/\.\w*$/.$OUTPUT_FILEFORMAT/") | |||
ffmpeg -i "$INPUT_FILE" -acodec $OUTPUT_FILECODEC_AUDIO -vcodec $OUTPUT_FILECODEC_VIDEO $EXTRA_PARAMS -y "$OUTPUT_FILE" | |||
shift | |||
done | |||
exit 0 | |||
###ffmpeg command parameters explained | |||
#i = Input <file> | |||
#vn = Disable video | |||
#acodec = Used Audio Codec | |||
#y = Overwrite output files |
@ -0,0 +1,22 @@ | |||
[Desktop Entry] | |||
Type=Service | |||
ServiceTypes=KonqPopupMenu/Plugin | |||
X-KDE-ServiceTypes=KonqPopupMenu/Plugin,video/.*,audio/.* | |||
Icon=application-x-theme | |||
MimeType=audio/*;video/*; | |||
Actions=ffmpeg_fileconversion_audio;ffmpeg_fileconversion_video; | |||
X-KDE-StartupNotify=false | |||
X-KDE-Priority=TopLevel | |||
TryExec=ffmpeg | |||
[Desktop Action ffmpeg_fileconversion_audio] | |||
Name=Convert to [audio format] | |||
Icon=application-x-theme | |||
Exec=/usr/share/kservices5/ServiceMenus/ffmpeg-fileconversion-audio.sh | |||
[Desktop Action ffmpeg_fileconversion_video] | |||
Name=Convert to [video format] | |||
Icon=application-x-theme | |||
Exec=/usr/share/kservices5/ServiceMenus/ffmpeg-fileconversion-video.sh | |||
#TODO: Lisää <leikkaa valittu mediatiedosto> <<alkaen>> <<päättyen>> |
@ -0,0 +1,73 @@ | |||
#!/bin/bash | |||
#<get_videofile_length> | |||
#ffmpeg -- get mediafile length | |||
#ffmpeg -- get start time | |||
#ffmpeg -- get end time | |||
#end time = | |||
###GET FILE LENGTH | |||
DURATION_FORMATTED='-sexagesimal' | |||
DURATION_LENGTH=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $DURATION_FORMATTED) | |||
DURATION=$($DURATION_LENGTH $INPUT_FILE) | |||
##PRINT FILE LENGTH | |||
implement to kdialog | |||
kdialog --msgbox "$(ffmpeg -i %u 2>&1 |grep -E '(Duration)|(Stream)' )" | |||
echo -e $DURATION #Show media file duration in hours:minutes:seconds.microseconds | |||
$DURATION_FORMATTED='' | |||
echo -e $DURATION #Show media file duration in seconds | |||
#USER INPUT - DESIRED CUT (IN SECONDS) | |||
$START_TIME=<desired media start time in seconds (set 0 to default value)> | |||
$END_TIME=<desired media end time in seconds (get video end time and use it as default value)> | |||
$INPUT_FILEFORMAT=<get input fileformat (suffix)> | |||
+STRING=$(kdialog --icon=system-search --caption='Search string' --inputbox='Enter String to Search' 2> /dev/null) | |||
+ | |||
+if [ "$?" != "0" ]; then | |||
+ exit 1 | |||
+fi | |||
#0:03:14.921000 | |||
#tunti :: minuutti :: sekunti :: millisekunti | |||
#outputtaa näin: | |||
#if 0 hours, dont show the field if <value number before the first : is zero, replace with '' with sed> | |||
#if 0 minutes, don't show the field if <value number between the first and the second : is zero, replace with '' with sed> | |||
#if 0 seconds, don't show the field if <value number between the second : and the third . is zero, replace with '' with sed> | |||
#if 0 milliseconds, don't show the field if <value number between the third and the fourth : is zero, replace with '' with sed> | |||
#but final output can now be like | |||
#and >>> final output | |||
#ffmpeg -i <mediafile> -ss <start_time> -to <end_time> <mediafile_cut (get original format)> | |||
while [ $# -gt 0 ]; do | |||
INPUT_FILE=$1 | |||
OUTPUT_FILE=$(echo "$INPUT_FILE" | sed "s/\.\w*$/_cut.$INPUT_FILEFORMAT/") | |||
ffmpeg -i "$INPUT_FILE" -ss $START_TIME -to $END_TIME -y "$OUTPUT_FILE" | |||
shift | |||
done | |||
exit 0 |
@ -0,0 +1,30 @@ | |||
# Maintainer: Sabart Otto - Seberm <seberm[at]gmail[dot].com | |||
pkgname=kde-servicemenus-unlockpdf | |||
pkgver=1 | |||
pkgrel=1 | |||
pkgdesc="Unlock PDF files using Dolphin or Konqueror (KDE5 Dolphin action)" | |||
url=() | |||
arch=('any') | |||
license=('BSD') | |||
install='' | |||
source=(pdfunlock.patch) | |||
depends=('ghostscript' 'dolphin') | |||
optdepends=() | |||
conflicts=() | |||
#provides='' | |||
makedepends=() | |||
prepare() { | |||
mkdir $pkgname-$pkgver | |||
cd $srcdir/$pkgname-$pkgver | |||
touch pdfunlock.sh pdfunlock.desktop | |||
patch -Np1 -i "$srcdir/pdfunlock.patch" | |||
} | |||
package() { | |||
mkdir -p $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
cp $srcdir/$pkgname-$pkgver/{pdfunlock.desktop,pdfunlock.sh} $pkgdir/usr/share/kservices5/ServiceMenus/ | |||
chmod 755 $pkgdir/usr/share/kservices5/ServiceMenus/{pdfunlock.desktop,pdfunlock.sh} | |||
} | |||
md5sums=('a1880f1e3b2f0d4b8f90c34a2ea09cef') |
@ -0,0 +1,31 @@ | |||
--- a/pdfunlock.sh | |||
+++ b/pdfunlock.sh | |||
@@ -0,0 +1,9 @@ | |||
+#!/bin/bash | |||
+ | |||
+while [ $# -gt 0 ]; do | |||
+ ENCRYP=$1 | |||
+ DECRYP=$(echo "$ENCRYP" | sed 's/\.\w*$/_unlocked.pdf/') | |||
+ #qpdf --decrypt "$ENCRYP" "$DECRYP" | |||
+ gs -sPDFPassword=$PASS -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%stdout% -c .setpdfwrite -f "$ENCRYP" > "$DECRYP" | |||
+ shift | |||
+done | |||
\ No newline at end of file | |||
--- a/pdfunlock.desktop | |||
+++ b/pdfunlock.desktop | |||
@@ -0,0 +1,15 @@ | |||
+[Desktop Entry] | |||
+Type=Service | |||
+ServiceTypes=KonqPopupMenu/Plugin | |||
+MimeType=application/pdf | |||
+Icon=application-pdf | |||
+Actions=pdfunlock; | |||
+X-KDE-StartupNotify=false | |||
+X-KDE-Priority=TopLevel | |||
+TryExec=gs | |||
+ | |||
+[Desktop Action pdfunlock] | |||
+Name=Unlock this PDF file | |||
+Name[fi]=Poista PDF-tiedoston suojaukset | |||
+Icon=application-pdf | |||
+Exec=/usr/share/kservices5/ServiceMenus/pdfunlock.sh |
@ -0,0 +1,17 @@ | |||
pkgname=mlv2dng | |||
pkgver=2013.09.02 | |||
pkgrel=1 | |||
pkgdesc="Magic Lantern Raw file conversion tool." | |||
arch=('any') | |||
url='https://www.bitbucket.org/gnarr/mlv2dng' | |||
license="GPL" | |||
depends=() | |||
makedepends=('wget') | |||
source=(https://dl.dropboxusercontent.com/u/3181048/mlv2dng_linux.zip) | |||
md5sums=('8722547d51a3fe81ae38a3bf3da9c6dc') | |||
package() | |||
{ | |||
mkdir -p "$pkgdir/usr/bin" | |||
install -m755 $srcdir/mlv2dng "$pkgdir/usr/bin" | |||
} |
@ -0,0 +1,19 @@ | |||
pkgname=mlvdump | |||
pkgver=2016.03.24 | |||
pkgrel=1 | |||
pkgdesc="Magic Lantern Raw file conversion tool." | |||
arch=('any') | |||
url='http://www.magiclantern.fm/modules/modules/mlv_dump.zip/' | |||
license="GPL" | |||
depends=() | |||
makedepends=('wget') | |||
source=(http://www.magiclantern.fm/modules/modules/mlv_dump.zip/mlv_dump.zip) | |||
md5sums=('197ec9d2d66df8e5820fe4afc9f93301') | |||
package() | |||
{ | |||
mkdir -p "$pkgdir/usr/bin" | |||
#cp $srcdir/mlv_dump.linux "$pkgdir/usr/bin/mlvdump" | |||
#chmod 755 "$pkgdir/usr/bin/mlvdump" | |||
install -m755 $srcdir/mlv_dump.linux "$pkgdir/usr/bin/mlvdump" #Filesize differs!!! | |||
} |
@ -0,0 +1,16 @@ | |||
pkgbase = pano2vr | |||
pkgdesc = Converts panoramic images into QuickTime VR or Macromedia Flash formats. | |||
pkgver = 4.5.1 | |||
pkgrel = 1 | |||
url = http://gardengnomesoftware.com/pano2vr.php | |||
arch = x86_64 | |||
license = Pano2VR | |||
depends = libgl | |||
depends = qt4 | |||
depends = qtwebkit | |||
source = http://gardengnomesoftware.com/download/pano2vr/pano2vr_linux64_4_5_1.tar.gz | |||
source = changedir.patch | |||
source = pano2vr.desktop | |||
pkgname = pano2vr | |||
@ -0,0 +1,38 @@ | |||
# Contributor: Ismael Barros (RazZziel) <razielmine@gmail.com> | |||
# Maintainer: Luigi Ranghetti <ggranga@gmail.com> | |||
pkgname=pano2vr | |||
pkgver=4.5.2 | |||
_pkgver2=`echo $pkgver | tr '.' '_'` | |||
pkgrel=1 | |||
pkgdesc="Converts panoramic images into QuickTime VR or Macromedia Flash formats." | |||
url="http://gardengnomesoftware.com/pano2vr.php" | |||
license=('Pano2VR') | |||
arch=(x86_64) | |||
depends=('libgl' 'qt4' 'qtwebkit') | |||
source=(http://gardengnomesoftware.com/download/${pkgname}/${pkgname}_linux64_${_pkgver2}.tar.gz | |||
'changedir.patch' | |||
'pano2vr.desktop') | |||
md5sums=('09f6bd0157f07c9ea41edf86b00066df' | |||
'0fd71d2d76982a5146dd23fce94ec942' | |||
'55617407038824cbc0fbeb01bff2ea0c') | |||
prepare() { | |||
cd "$srcdir" | |||
patch -p1 -i "$srcdir/changedir.patch" | |||
} | |||
package() { | |||
install -d $pkgdir/opt/ | |||
cp -r $srcdir $pkgdir/opt/ | |||
mv $pkgdir/opt/src $pkgdir/opt/$pkgname | |||
install -d $pkgdir/usr/local/bin/ | |||
ln -s $pkgdir/opt/$pkgname/$pkgname.sh $pkgdir/usr/local/bin/$pkgname | |||
install -d $pkgdir/usr/share/licenses/common/Pano2VR/ | |||
install -m644 $srcdir/license.txt $pkgdir/usr/share/licenses/common/Pano2VR/ | |||
install -D -m644 $srcdir/${pkgname}_icon.png $pkgdir/usr/share/pixmaps/${pkgname}.png | |||
install -D -m644 $srcdir/${pkgname}.desktop $pkgdir/usr/share/applications/${pkgname}.desktop | |||
} |
@ -0,0 +1,11 @@ | |||
--- a/pano2vr.sh 2014-07-28 11:27:33.911207314 +0200 | |||
+++ b/pano2vr.sh 2014-07-28 11:33:30.961219971 +0200 | |||
@@ -1,6 +1,6 @@ | |||
#!/bin/sh | |||
appname=pano2vr | |||
-dirname="`dirname $0`" | |||
+dirname="/opt/$appname" | |||
unset QT_PLUGIN_PATH | |||
export LD_LIBRARY_PATH="$dirname/qtlib" | |||
"$dirname/bin/$appname" "$@" | |||
\ No newline at end of file |
@ -0,0 +1,8 @@ | |||
[Desktop Entry] | |||
Name=pano2vr | |||
Comment=Converts panoramic images into QuickTime VR or Macromedia Flash formats | |||
Exec=pano2vr | |||
Icon=pano2vr.png | |||
Terminal=0 | |||
Type=Application | |||
Categories=Graphics; |
@ -0,0 +1,29 @@ | |||
# Contributor: Fincer <fincer89 at hotmail dot com> | |||
pkgname=panotour | |||
pkgver=2.5.7 | |||
_pkgver=257_2017_02_23 | |||
_pkgname=Panotour | |||
pkgrel=1 | |||
pkgdesc='Create quality virtual tours (trial version).' | |||
arch=('x86_64') | |||
url='http://kolor.com/' | |||
license=('custom: "commercial"') | |||
depends=("qt4>=4") | |||
install=$pkgname.install | |||
source=("Panotour_Linux64_$_pkgver.tar.gz::http://download.kolor.com/pt/stable/linux64tar" | |||
"$pkgname" "$pkgname.desktop" "$pkgname.png") | |||
md5sums=('c193b0b44bb6fa5628e7411b93d258a7' | |||
'451d82df36b338942989a89125e5c51d' | |||
'042e7af9eed7f0c58783b330e26cea0d' | |||
'd6447677a8040c96465b58f27de972aa') | |||
package(){ | |||
cd "$srcdir/$_pkgname" || return 1 | |||
install -dm755 $pkgdir/opt/$pkgname || return 1 | |||
tar -c ./ | tar -x -C $pkgdir/opt/$pkgname || return 1 | |||
install -Dm755 $srcdir/$pkgname $pkgdir/usr/bin/$pkgname || return 1 | |||
install -Dm644 "$srcdir/$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop" | |||
install -Dm644 "$srcdir/$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png" | |||
} | |||
@ -0,0 +1,4 @@ | |||
#!/bin/bash | |||
cd /opt/panotour | |||
./Panotour.sh $@ |
@ -0,0 +1,10 @@ | |||
[Desktop Entry] | |||
Encoding=UTF-8 | |||
Name=Kolor Panotour | |||
Comment=Create quality virtual tours | |||
Exec=panotour | |||
Icon=/usr/share/pixmaps/panotour.png | |||
Terminal=false | |||
Type=Application | |||
Categories=Application;Graphics; | |||
StartupNotify=true |
@ -0,0 +1,11 @@ | |||
post_install() { | |||
update-desktop-database -q | |||
} | |||
post_upgrade() { | |||
update-desktop-database -q | |||
} | |||
post_remove() { | |||
update-desktop-database -q | |||
} |
@ -0,0 +1,29 @@ | |||
# Contributor: Fincer <fincer89 at hotmail dot com> | |||
pkgname=panotourpro | |||
pkgver=2.5.7 | |||
_pkgver=257_2017_02_23 | |||
_pkgname=PanotourPro | |||
pkgrel=1 | |||
pkgdesc='Create pro-quality virtual tours (trial version).' | |||
arch=('x86_64') | |||
url='http://kolor.com/' | |||
license=('custom: "commercial"') | |||
depends=('qt5-base') | |||
install=$pkgname.install | |||
source=("PanotourPro_Linux64_$_pkgver.tar.gz::http://download.kolor.com/ptp/stable/linux64tar" | |||
"$pkgname" "$pkgname.desktop" "$pkgname.png") | |||
md5sums=('30cbd64c7e88774ef45b1757cbad2ccc' | |||
'2fb0de89c4749a8a50c7a8fe14555d98' | |||
'361fb305589d79e1047f57c8809a6a30' | |||
'38a6cdebc5175c97a5cd0a8cac4b1b11') | |||
package(){ | |||
cd "$srcdir/$_pkgname" || return 1 | |||
install -dm755 $pkgdir/opt/$pkgname || return 1 | |||
tar -c ./ | tar -x -C $pkgdir/opt/$pkgname || return 1 | |||
install -Dm755 $srcdir/$pkgname $pkgdir/usr/bin/$pkgname || return 1 | |||
install -Dm644 "$srcdir/$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop" | |||
install -Dm644 "$srcdir/$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png" | |||
} | |||
@ -0,0 +1,4 @@ | |||
#!/bin/bash | |||
cd /opt/panotourpro | |||
./PanotourPro.sh $@ |
@ -0,0 +1,11 @@ | |||
[Desktop Entry] | |||
Encoding=UTF-8 | |||
Name=Kolor Panotour Pro | |||
Comment=Create pro-quality virtual tours | |||
Exec=panotourpro | |||
Icon=/usr/share/pixmaps/panotourpro.png | |||
Terminal=false | |||
Type=Application | |||
Categories=Application;Graphics; | |||
StartupNotify=true | |||
Name[en_US]=Kolor Panotour Pro |
@ -0,0 +1,11 @@ | |||
post_install() { | |||
update-desktop-database -q | |||
} | |||
post_upgrade() { | |||
update-desktop-database -q | |||
} | |||
post_remove() { | |||
update-desktop-database -q | |||
} |
@ -0,0 +1,33 @@ | |||
# Maintainer: Fincer <fincer89 at hotmail dot com> | |||
pkgname=photoscan-pro | |||
pkgver=1.3.0 | |||
ver=1_3_0 | |||
pkgrel=1 | |||
pkgdesc='Generate high resolution georeferenced orthophotos and textured polygonal models (trial version).' | |||
arch=('x86_64') | |||
url='http://www.agisoft.com/' | |||
license=('custom: "commercial"') | |||
depends=('libpng12' 'qt5-svg' 'qt5-base' 'python') | |||
install=photoscan-pro.install | |||
architecture=_amd64 | |||
source=("http://download.agisoft.com/photoscan-pro_$ver$_$architecture.tar.gz" "$pkgname.runtime" "$pkgname.png" "$pkgname.desktop" | |||
qtfix.patch) | |||
md5sums=('82aaed64f623dc91d6129014412c8c7a' | |||
'2f29afffc98fa39ae0f5c47fe7195833' | |||
'9ffa07f3059edce837d43de8c2a50e1b' | |||
'72403a878fd2f555ce5d3bef507740e6' | |||
'4cb2792c78ac526aaf1fa5c233a74fb0') | |||
prepare(){ | |||
cd "$srcdir/$pkgname" | |||
patch -Np1 -i $srcdir/qtfix.patch #qtfix126.patch is for Photoscan Pro version 1.2.6 (Linux AMD64) | |||
} | |||
package(){ | |||
install -dm755 $pkgdir/opt/ | |||
cp -r $srcdir/$pkgname $pkgdir/opt/$pkgname | |||
install -Dm755 $srcdir/$pkgname.runtime $pkgdir/usr/bin/photoscanpro | |||
install -Dm644 "$srcdir/$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop" | |||
install -Dm644 "$srcdir/$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png" | |||
chmod 755 -R $pkgdir/opt/$pkgname | |||
} |
@ -0,0 +1,10 @@ | |||
[Desktop Entry] | |||
Encoding=UTF-8 | |||
Name=Agisoft PhotoScan Pro | |||
Comment=Generate high resolution georeferenced orthophotos and textured polygonal models | |||
Exec=photoscanpro | |||
Icon=/usr/share/pixmaps/photoscan-pro.png | |||
Terminal=false | |||
Type=Application | |||
Categories=Application;Graphics; | |||
Name[en_US]=Agisoft PhotoScan Pro |
@ -0,0 +1,11 @@ | |||
post_install() { | |||
update-desktop-database -q | |||
} | |||
post_upgrade() { | |||
update-desktop-database -q | |||
} | |||
post_remove() { | |||
update-desktop-database -q | |||
} |
@ -0,0 +1,4 @@ | |||
#!/bin/bash | |||
cd /opt/photoscan-pro/ | |||
./photoscan.sh $@ |
@ -0,0 +1,11 @@ | |||
--- a/photoscan.sh | |||
+++ b/photoscan.sh | |||
@@ -7,7 +7,7 @@ | |||
if [ "${dirname%$tmp}" != "/" ]; then | |||
dirname=$PWD/$dirname | |||
fi | |||
- | |||
+unset QT_PLUGIN_PATH | |||
TCL_LIBRARY=$dirname/python/lib/tcl8.5 | |||
TK_LIBRARY=$dirname/python/lib/tk8.5 | |||
export TCL_LIBRARY |
@ -0,0 +1,10 @@ | |||
--- a/photoscan.sh | |||
+++ b/photoscan.sh | |||
@@ -7,6 +7,7 @@ | |||
if [ "${dirname%$tmp}" != "/" ]; then | |||
dirname=$PWD/$dirname | |||
fi | |||
+unset QT_PLUGIN_PATH | |||
LD_LIBRARY_PATH=$dirname | |||
export LD_LIBRARY_PATH | |||
"$dirname/$appname" "$@" |
@ -0,0 +1,26 @@ | |||
# Maintainer: Fincer <fincer89 at hotmail dot com> | |||
pkgname=photoscan | |||
pkgver=1.3.0 | |||
ver=1_3_0 | |||
pkgrel=1 | |||
pkgdesc='Build professional quality textured 3D models from still images (trial version).' | |||
arch=('x86_64') | |||
url='http://www.agisoft.com/' | |||
license=('custom: "commercial"') | |||
depends=("libpng12") | |||
install=photoscan.install | |||
architecture=_amd64 | |||
source=("http://download.agisoft.com/photoscan_$ver$_$architecture.tar.gz" "$pkgname.runtime" "$pkgname.png" "$pkgname.desktop") | |||
md5sums=('a6ee33a1500a5ea0faebc37798bba6cd' | |||
'abb5083f4b13ed9ed57b2966b2cace35' | |||
'9ffa07f3059edce837d43de8c2a50e1b' | |||
'22918632e8683049cd06e6d70b7e2ff8') | |||
package(){ | |||
cd "$srcdir/$_pkgname" | |||
install -dm755 $pkgdir/opt/ | |||
cp -r $srcdir/$pkgname $pkgdir/opt/$pkgname | |||
install -Dm755 $srcdir/$pkgname.runtime $pkgdir/usr/bin/photoscan | |||
install -Dm644 "$srcdir/$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop" | |||
install -Dm644 "$srcdir/$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png" | |||
} |
@ -0,0 +1,10 @@ | |||
[Desktop Entry] | |||
Encoding=UTF-8 | |||
Name=Agisoft PhotoScan Standard | |||
Comment=Build professional quality textured 3D models from still images | |||
Exec=photoscan | |||
Icon=/usr/share/pixmaps/photoscan.png | |||
Terminal=false | |||
Type=Application | |||
Categories=Application;Graphics; | |||
Name[en_US]=Agisoft PhotoScan Standard |
@ -0,0 +1,11 @@ | |||
post_install() { | |||
update-desktop-database -q | |||
} | |||
post_upgrade() { | |||
update-desktop-database -q | |||
} | |||
post_remove() { | |||
update-desktop-database -q | |||
} |
@ -0,0 +1,4 @@ | |||
#!/bin/bash | |||
cd /opt/photoscan/ | |||
./photoscan.sh $@ |
@ -0,0 +1,43 @@ | |||
--- a/python/mainwindow.py | |||
+++ b/python/mainwindow.py | |||
@@ -239,11 +239,11 @@ | |||
self.Bind(wx.EVT_MENU, self.Options, prefItem) | |||
### File menu | |||
- self.filemenu.Append(wx.ID_OPEN, _("Run")) | |||
- self.filemenu.Append(wx.ID_ADD, _("Install")) | |||
- self.filemenu.Append(wx.ID_DELETE, _("Remove")) | |||
- self.filemenu.AppendSeparator() | |||
- self.filemenu.Append(216, _("Donate")) | |||
+ #self.filemenu.Append(wx.ID_OPEN, _("Run")) | |||
+ #self.filemenu.Append(wx.ID_ADD, _("Install")) | |||
+ #self.filemenu.Append(wx.ID_DELETE, _("Remove")) | |||
+ #self.filemenu.AppendSeparator() | |||
+ #self.filemenu.Append(216, _("Donate")) | |||
self.filemenu.Append(wx.ID_EXIT, _("Exit")) | |||
### Display menu | |||
@@ -286,7 +286,7 @@ | |||
self.optionmenu.Append(221, _("Internet")) | |||
self.optionmenu.Append(212, _("File associations")) | |||
- self.optionmenu.Append(214, _("Plugin manager")) | |||
+ #self.optionmenu.Append(214, _("Plugin manager")) | |||
self.supportmenu = wx.Menu() | |||
@@ -295,10 +295,10 @@ | |||
self.supportmenu.Append(402, _("Documentation")) | |||
self.supportmenu.Append(403, _("Forums")) | |||
self.supportmenu.Append(404, _("Bugs")) | |||
- self.supportmenu.AppendSeparator() | |||
- self.supportmenu.Append(405, _("Twitter")) | |||
- self.supportmenu.Append(406, _("Google+")) | |||
- self.supportmenu.Append(407, _("Facebook")) | |||
+ #self.supportmenu.AppendSeparator() | |||
+ #self.supportmenu.Append(405, _("Twitter")) | |||
+ #self.supportmenu.Append(406, _("Google+")) | |||
+ #self.supportmenu.Append(407, _("Facebook")) | |||
self.help_menu = wx.Menu() |
@ -0,0 +1,185 @@ | |||
--- /dev/null | |||
+++ b/bash/winexec | |||
@@ -0,0 +1,27 @@ | |||
+#!/bin/bash | |||
+ | |||
+allargs=("$@") | |||
+ | |||
+fixpath=0 | |||
+for idx in "${!allargs[@]}"; do | |||
+ arg="${allargs[$idx]}" | |||
+ | |||
+ if [[ $fixpath -eq 0 ]]; then | |||
+ # fix file paths only after the first executable is found in arg | |||
+ if [[ "$arg" == *.exe ]]; then | |||
+ fixpath=1 | |||
+ fi | |||
+ if [[ "$arg" == *.EXE ]]; then | |||
+ fixpath=1 | |||
+ fi | |||
+ continue | |||
+ elif [[ $fixpath -eq 1 ]]; then | |||
+ # if arg starts with '/' and it's a path that exists on host | |||
+ # precede the path with drive 'Z:' | |||
+ if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then | |||
+ allargs[$idx]="z:${arg//\//\\}" | |||
+ fi | |||
+ fi | |||
+done | |||
+ | |||
+exec env "${allargs[@]}" | |||
--- /dev/null | |||
+++ b/bash/remove_shortcut | |||
@@ -0,0 +1,41 @@ | |||
+#!/usr/bin/env bash | |||
+ | |||
+# Copyright (C) 2011 Pâris Quentin | |||
+ | |||
+ | |||
+# This program is free software; you can redistribute it and/or modify | |||
+# it under the terms of the GNU General Public License as published by | |||
+# the Free Software Foundation; either version 2 of the License, or | |||
+# (at your option) any later version. | |||
+ | |||
+# This program is distributed in the hope that it will be useful, | |||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
+# GNU General Public License for more details. | |||
+ | |||
+# You should have received a copy of the GNU General Public License along | |||
+# with this program; if not, write to the Free Software Foundation, Inc., | |||
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |||
+ | |||
+# This script makes shortcut of programs | |||
+ | |||
+[ "$PLAYONLINUX" = "" ] && exit 0 | |||
+source "$PLAYONLINUX/lib/sources" | |||
+ | |||
+ | |||
+TITLE="$(eval_gettext '$APPLICATION_TITLE shortcut remover')" | |||
+ | |||
+if [ "$1" ]; then | |||
+ PACKAGE="$1" | |||
+else | |||
+ POL_SetupWindow_games "$(eval_gettext "Please choose a software to package")" "$TITLE" | |||
+ PACKAGE="$APP_ANSWER" | |||
+fi | |||
+ | |||
+POL_SetupWindow_Init | |||
+POL_SetupWindow_wait_next_signal "$(eval_gettext "Removing shortcut...")" "$TITLE" | |||
+POL_Shortcut_RemoveDesktopShortcut "$PACKAGE" | |||
+POL_SetupWindow_message "$(eval_gettext "The shortcut has been removed from $HOME.local/share/applications/ and your desktop")" "$TITLE" | |||
+POL_SetupWindow_Close | |||
+ | |||
+exit 0 | |||
--- a/python/mainwindow.py | |||
+++ b/python/mainwindow.py | |||
@@ -784,7 +784,9 @@ | |||
i+=1 | |||
self.menuGaucheAddLink("pol_prgm_configure", _("Configure"), i,Variables.playonlinux_env+"/resources/images/menu/run.png",self.Configure) | |||
i+=1 | |||
- self.menuGaucheAddLink("pol_prgm_shortcut", _("Create a shortcut"), i,Variables.playonlinux_env+"/resources/images/menu/shortcut.png",self.Package) | |||
+ self.menuGaucheAddLink("pol_prgm_shortcut", _("Create desktop shortcut"), i,Variables.playonlinux_env+"/resources/images/menu/shortcut.png",self.Package) | |||
+ i+=1 | |||
+ self.menuGaucheAddLink("pol_prgm_shortcut_rem", _("Remove desktop shortcut"), i,Variables.playonlinux_env+"/resources/images/menu/shortcut.png",self.RemShortcut) | |||
i+=1 | |||
self.menuGaucheAddLink("pol_prgm_adddir", _("Open the directory"), i,Variables.playonlinux_env+"/resources/images/menu/folder-wine.png",self.GoToAppDir) | |||
@@ -980,6 +982,10 @@ | |||
def Package(self, event): | |||
game_exec = self.GetSelectedProgram() | |||
subprocess.Popen(["bash", Variables.playonlinux_env+"/bash/make_shortcut", game_exec]) | |||
+ | |||
+ def RemShortcut(self, event): | |||
+ game_exec = self.GetSelectedProgram() | |||
+ subprocess.Popen(["bash", Variables.playonlinux_env+"/bash/remove_shortcut", game_exec]) | |||
def UninstallGame(self, event): | |||
game_exec = self.GetSelectedProgram() | |||
--- a/lib/scripts.lib | |||
+++ b/lib/scripts.lib | |||
@@ -384,7 +384,7 @@ | |||
# Do nothing on Mac OS | |||
if [ -n "$Categories" -a "$POL_OS" = "Linux" ] || [ -n "$Categories" -a "$POL_OS" = "BSD" ]; then | |||
LOCALAPPS="$HOME/.local/share/applications" | |||
- make_desktop_shortcut "$iconPath" "$ICON_FILENAME" "$LOCALAPPS" "$PLAYONLINUX/playonlinux --run \"$ICON_FILENAME\"" "$binary_name" "$Categories" "playonlinux-" | |||
+ make_desktop_shortcut "$iconPath" "$ICON_FILENAME" "$LOCALAPPS" "$PLAYONLINUX/bash/winexec $PLAYONLINUX/playonlinux --run \"$ICON_FILENAME\"" "$binary_name" "$Categories" "playonlinux-" | |||
fi | |||
fi | |||
@@ -394,7 +394,7 @@ | |||
if [ "$POL_OS" = "Mac" ]; then | |||
POL_SetupWindow_AutoApp "$ICON_FILENAME" | |||
else | |||
- make_desktop_shortcut "$iconPath" "$ICON_FILENAME" "$DESKTOP" "$PLAYONLINUX/playonlinux --run \"$ICON_FILENAME\"" "$binary_name" "$Categories" | |||
+ make_desktop_shortcut "$iconPath" "$ICON_FILENAME" "$DESKTOP" "$PLAYONLINUX/bash/winexec $PLAYONLINUX/playonlinux --run \"$ICON_FILENAME\"" "$binary_name" "$Categories" | |||
fi | |||
fi | |||
fi | |||
@@ -1039,13 +1039,33 @@ | |||
# http://stackoverflow.com/questions/8939580/bash-split-a-string-exactly-like-readline-would-split-it | |||
eval set -- $(grep '^POL_Wine ' "$POL_USER_ROOT/shortcuts/$PACKAGE"|tail -n 1) | |||
local binary="$2" | |||
- make_desktop_shortcut "$iconPath" "$PACKAGE" "$DESKTOP" "$PLAYONLINUX/playonlinux --run \"$PACKAGE\"" "$binary" "" | |||
+ LOCALAPPS="$HOME/.local/share/applications" | |||
+ make_desktop_shortcut "$iconPath" "$PACKAGE" "$LOCALAPPS" "$DESKTOP" "$PLAYONLINUX/bash/winexec $PLAYONLINUX/playonlinux --run \"$PACKAGE\"" "$binary" "" | |||
+ ln -s "$PLACE/$PACKAGE.desktop" "$DESKTOP" | |||
;; | |||
*) | |||
POL_Debug_Warning "POL_Shortcut_MakeDesktopShortcut: not supported OS: $POL_OS" | |||
esac | |||
} | |||
+ | |||
+POL_Shortcut_RemoveDesktopShortcut() | |||
+{ | |||
+ PACKAGE="$1" | |||
+ if [ "$POL_OS" = "Mac" ]; then | |||
+ if [ -f "$HOME/Desktop/$PACKAGE.app" ]; then | |||
+ rm "$HOME/Desktop/$PACKAGE.app" | |||
+ fi | |||
+ fi | |||
+ if [ "$POL_OS" = "Linux" ] || [ "$POL_OS" == "FreeBSD" ]; then | |||
+ LOCALAPPS="$HOME/.local/share/applications" | |||
+ if [ -f "$LOCALAPPS/$PACKAGE.desktop" ];then | |||
+ rm "$DESKTOP/$PACKAGE.desktop" | |||
+ rm "$LOCALAPPS/$PACKAGE.desktop" | |||
+ fi | |||
+ fi | |||
+} | |||
+ | |||
POL_System_is32bit() | |||
{ | |||
# Check if the file (1) is a 32bit executable | |||
--- a/lib/playonlinux.lib | |||
+++ b/lib/playonlinux.lib | |||
@@ -670,12 +670,12 @@ | |||
(echo "[Desktop Entry]" | |||
echo "Encoding=UTF-8" | |||
echo "Name=$ICON_NAME" | |||
- echo "Comment=PlayOnLinux" | |||
echo "Type=Application" | |||
- echo "Exec=$EXECUTABLE %F" | |||
+ echo "Exec=$EXECUTABLE" | |||
echo "Icon=$ICON" | |||
- echo "Name[fr_FR]=$ICON_NAME" | |||
echo "StartupWMClass=$WMCLASS" | |||
+ echo "StartupNotify=true" | |||
+ echo "Comment=" | |||
echo "Categories=$CATEGORIES") > "${SHORT_NAME}.desktop" | |||
chmod +x "${SHORT_NAME}.desktop" | |||
} | |||
--- a/bash/make_shortcut | |||
+++ b/bash/make_shortcut | |||
@@ -34,7 +34,7 @@ | |||
POL_SetupWindow_Init | |||
POL_SetupWindow_wait_next_signal "$(eval_gettext "Creating shortcut...")" "$TITLE" | |||
POL_Shortcut_MakeDesktopShortcut "$PACKAGE" | |||
-POL_SetupWindow_message "$(eval_gettext "The shortcut has been placed on your desktop")" "$TITLE" | |||
+POL_SetupWindow_message "$(eval_gettext "The shortcut has been placed on $HOME.local/share/applications/ and linked to your desktop")" "$TITLE" | |||
POL_SetupWindow_Close |
@ -0,0 +1,94 @@ | |||
--- a/lib/wine.lib | |||
+++ b/lib/wine.lib | |||
@@ -1101,6 +1101,7 @@ | |||
cname="$(POL_Wine_exename "$@")" | |||
[ "$cname" = "winecfg" ] && cname="Configure wine" | |||
[ "$cname" = "regedit" ] && cname="Registry Editor" | |||
+ [ "$cname" = "uninstaller" ] && cname="Add/Remove Programs Menu" | |||
[ "$cname" = "wineboot" ] && cname="Virtual drive creation" | |||
echo "$cname" | |||
} | |||
--- a/python/mainwindow.py | |||
+++ b/python/mainwindow.py | |||
@@ -471,6 +471,7 @@ | |||
wx.EVT_TREE_ITEM_MENU(self, 105, self.RMBInGameList) | |||
wx.EVT_MENU(self, 230, self.RWineConfigurator) | |||
wx.EVT_MENU(self, 231, self.RRegistryEditor) | |||
+ wx.EVT_MENU(self, 237, self.RWineUninstaller) | |||
wx.EVT_MENU(self, 232, self.GoToAppDir) | |||
wx.EVT_MENU(self, 233, self.ChangeIcon) | |||
wx.EVT_MENU(self, 234, self.UninstallGame) | |||
@@ -588,6 +589,10 @@ | |||
self.RegistryEditor = wx.MenuItem(self.GameListPopUpMenu, 231, _("Registry Editor")) | |||
self.RegistryEditor.SetBitmap(wx.Bitmap(Variables.playonlinux_env+"/resources/images/menu/regedit.png")) | |||
self.GameListPopUpMenu.AppendItem(self.RegistryEditor) | |||
+ | |||
+ self.WineUninstaller = wx.MenuItem(self.GameListPopUpMenu, 237, _("Add/Remove Programs Menu")) | |||
+ self.WineUninstaller.SetBitmap(wx.Bitmap(Variables.playonlinux_env+"/resources/images/menu/wine-uninstaller.png")) | |||
+ self.GameListPopUpMenu.AppendItem(self.WineUninstaller) | |||
self.GotoAppDir = wx.MenuItem(self.GameListPopUpMenu, 232, _("Open the application's directory")) | |||
self.GotoAppDir.SetBitmap(wx.Bitmap(Variables.playonlinux_env+"/resources/images/menu/folder-wine.png")) | |||
@@ -628,6 +633,9 @@ | |||
def RRegistryEditor(self, event): | |||
self.RConfigure("regedit") | |||
+ def RWineUninstaller(self, event): | |||
+ self.RConfigure("uninstaller") | |||
+ | |||
def run_plugin(self, event): | |||
game_exec = self.GetSelectedProgram() | |||
plugin=self.plugin_list[event.GetId()-300] | |||
@@ -796,7 +804,7 @@ | |||
self.menuGaucheAddLink("pol_prgm_readme", _("Read the manual"), i,Variables.playonlinux_env+"/resources/images/menu/manual.png",self.ReadMe) | |||
i+=1 | |||
- self.menuGaucheAddLink("pol_prgm_uninstall", _("Uninstall"), i,Variables.playonlinux_env+"/resources/images/menu/window-close.png",self.UninstallGame) | |||
+ self.menuGaucheAddLink("pol_prgm_uninstall", _("Remove"), i,Variables.playonlinux_env+"/resources/images/menu/window-close.png",self.UninstallGame) | |||
self.linksfile = os.environ["POL_USER_ROOT"]+"/configurations/links/"+shortcut | |||
--- a/bash/polconfigurator | |||
+++ b/bash/polconfigurator | |||
@@ -51,6 +51,14 @@ | |||
wineserver -k | |||
POL_Wine regedit | |||
} | |||
+polconfigurator_uninstaller() | |||
+{ | |||
+ POL_Wine_AutoSetVersionEnv | |||
+ wineserver -k | |||
+ export POL_IgnoreWineErrors=True | |||
+ POL_Wine uninstaller | |||
+ export POL_IgnoreWineErrors=False | |||
+} | |||
polconfigurator_wineboot() | |||
{ | |||
POL_Wine_AutoSetVersionEnv | |||
@@ -104,6 +112,7 @@ | |||
{ | |||
local LNG_CONFIGURE=$(eval_gettext "Configure Wine") | |||
local LNG_REGISTRY=$(eval_gettext "Registry Editor") | |||
+ local LNG_UNINSTALLER=$(eval_gettext "Add/Remove Programs Menu") | |||
local LNG_KPROCESS=$(eval_gettext "Kill all prefix processes") | |||
local LNG_UPDATEPREFIX=$(eval_gettext "Update wineprefix") | |||
local LNG_WINDOWS_REBOOT=$(eval_gettext "Simulate Windows reboot") | |||
@@ -114,7 +123,7 @@ | |||
local LNG_WINETRICKS=$(eval_gettext "Use WineTricks") | |||
# ~$LNG_UPDATEPREFIX | |||
- local ITEMS="$LNG_CONFIGURE~$LNG_REGISTRY~$LNG_KPROCESS~$LNG_WINDOWS_REBOOT~$LNG_CHANGEICON" | |||
+ local ITEMS="$LNG_CONFIGURE~$LNG_REGISTRY~$LNG_UNINSTALLER~$LNG_KPROCESS~$LNG_WINDOWS_REBOOT~$LNG_CHANGEICON" | |||
if [ -e "$POL_USER_ROOT/plugins/Advanced Wine Configuration" ] | |||
then | |||
ITEMS+="~$LNG_APLUGIN" | |||
@@ -134,6 +143,7 @@ | |||
POL_SetupWindow_menu "$(eval_gettext "Please choose an action to perform")" "$TITLE" "$ITEMS" "~" | |||
[ "$APP_ANSWER" = "$LNG_CONFIGURE" ] && funct=winecfg | |||
[ "$APP_ANSWER" = "$LNG_REGISTRY" ] && funct=regedit | |||
+ [ "$APP_ANSWER" = "$LNG_UNINSTALLER" ] && funct=uninstaller | |||
[ "$APP_ANSWER" = "$LNG_KPROCESS" ] && funct=kprocess | |||
# [ "$APP_ANSWER" = "$LNG_UPDATEPREFIX" ] && funct="??" | |||
[ "$APP_ANSWER" = "$LNG_WINDOWS_REBOOT" ] && funct=wineboot |
@ -0,0 +1,46 @@ | |||
--- a/python/wine_versions.py | |||
+++ b/python/wine_versions.py | |||
@@ -356,6 +356,18 @@ | |||
if(arch == "amd64"): | |||
self.download64.thread_message = "get" | |||
+ def checkVersionUse(self, arch): # Check the wine version use by wineprefix | |||
+ used_versions = [] | |||
+ file_to_check = os.listdir(Variables.playonlinux_rep+"/wineprefix/") # List of wineprefix | |||
+ file_to_check.remove('default') # Remove 'default' (no wine version use by it) | |||
+ for i in range(len(file_to_check)): | |||
+ tmp = open(Variables.playonlinux_rep+"/wineprefix/"+file_to_check[i]+"/playonlinux.cfg","r") | |||
+ if "ARCH="+arch in tmp.readline(): # Check if the wineprefix use a wine arch equal to 'arch' | |||
+ line = tmp.readline().split("\n")[0] # Remove the '\n' | |||
+ if "VERSION=" in line and line.split("=")[1] not in used_versions: # Fix wine system problem (no VERSION= if system is used) | |||
+ used_versions.append(line.split("=")[1]) # Keep de wine version only | |||
+ tmp.close() | |||
+ return(used_versions) | |||
def WriteVersion(self, arch="x86"): | |||
self.onglets.imagesapps[arch].RemoveAll() | |||
@@ -378,6 +390,8 @@ | |||
root2 = self.onglets.list_ver_installed[arch].AddRoot("") | |||
wfolder = os_pref+"-"+arch | |||
+ | |||
+ used_version = self.checkVersionUse(arch) # Get the list of wine version used by wineprefix | |||
installed_versions = os.listdir(Variables.playonlinux_rep+"/wine/"+wfolder) | |||
installed_versions.sort(key=keynat) | |||
@@ -386,11 +400,14 @@ | |||
self.j = 0 | |||
while(self.i < len(installed_versions)): | |||
if(os.path.isdir(Variables.playonlinux_rep+"/wine/"+wfolder+"/"+installed_versions[self.i])): | |||
+ itemId = self.onglets.list_ver_installed[arch].AppendItem(root2,installed_versions[self.i],self.j) | |||
if(len(os.listdir(Variables.playonlinux_rep+"/wine/"+wfolder+"/"+installed_versions[self.i])) == 0): | |||
self.onglets.imagesapps_i[arch].Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/wine-warning.png")) | |||
+ elif installed_versions[self.i] not in used_version: # Clearly shows the unused wine version | |||
+ self.onglets.imagesapps_i[arch].Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/wine-unused.png")) | |||
+ self.onglets.list_ver_installed[arch].SetItemTextColour(itemId, (191,191,191)) | |||
else: | |||
self.onglets.imagesapps_i[arch].Add(wx.Bitmap(Variables.playonlinux_env+"/etc/install/wine.png")) | |||
- self.onglets.list_ver_installed[arch].AppendItem(root2,installed_versions[self.i],self.j) | |||
self.j += 1 | |||
self.i += 1 | |||
try : |
@ -0,0 +1,68 @@ | |||
--- a/python/configure.py | |||
+++ b/python/configure.py | |||
@@ -361,6 +361,12 @@ | |||
else: | |||
subprocess.Popen(["bash", Variables.playonlinux_env+"/bash/POL_Command", "--prefix", self.s_prefix.encode('utf-8','replace'), "POL_Wine_DirectInput", param, self.display_elements[param].GetValue().encode('utf-8','replace')]) | |||
+ def change_Optimus_settings(self, param): | |||
+ if(self.s_isPrefix == False): | |||
+ subprocess.Popen(["bash", Variables.playonlinux_env+"/bash/POL_Command", self.s_title.encode('utf-8','replace'), "POL_Optimus_Support", param, self.display_elements[param].GetValue().encode('utf-8','replace')]) | |||
+ else: | |||
+ subprocess.Popen(["bash", Variables.playonlinux_env+"/bash/POL_Command", "--prefix", self.s_prefix.encode('utf-8','replace'), "POL_Optimus_Support", param, self.display_elements[param].GetValue().encode('utf-8','replace')]) | |||
+ | |||
def get_current_settings(self, param): | |||
self.display_elements[param].SetValue(self.settings[param]) | |||
@@ -425,7 +431,7 @@ | |||
self.display_elements["pre_run_text"].Hide() | |||
self.Refresh() | |||
- self.elements = ["UseGLSL","DirectDrawRenderer","VideoMemorySize","OffscreenRenderingMode","RenderTargetModeLock","Multisampling","StrictDrawOrdering","MouseWarpOverride"] | |||
+ self.elements = ["UseGLSL","DirectDrawRenderer","VideoMemorySize","OffscreenRenderingMode","RenderTargetModeLock","Multisampling","StrictDrawOrdering","OptimusSupport","MouseWarpOverride"] | |||
self.settings = wine.LoadRegValues(self.s_prefix,self.elements) | |||
#print self.settings | |||
self.get_current_settings("UseGLSL") | |||
@@ -435,6 +441,7 @@ | |||
self.get_current_settings("RenderTargetModeLock") | |||
self.get_current_settings("Multisampling") | |||
self.get_current_settings("StrictDrawOrdering") | |||
+ self.get_current_settings("OptimusSupport") | |||
self.get_current_settings("MouseWarpOverride") | |||
self.arch = playonlinux.GetSettings('ARCH',self.s_prefix) | |||
@@ -465,6 +472,8 @@ | |||
self.change_Direct3D_settings("Multisampling") | |||
if(param == 307): | |||
self.change_Direct3D_settings("StrictDrawOrdering") | |||
+ if(param == 308): | |||
+ self.change_Direct3D_settings("OptimusSupport") | |||
if(param == 401): | |||
self.change_DirectInput_settings("MouseWarpOverride") | |||
@@ -569,7 +578,7 @@ | |||
self.AddDisplayElement(_("Render target mode lock"),"RenderTargetModeLock",["disabeld","readdraw","readtex"],["disabled","readdraw","readtex"],5) | |||
self.AddDisplayElement(_("Multisampling"),"Multisampling",["Enabled","Disabled"],["enabled","disabled"],6) | |||
self.AddDisplayElement(_("Strict Draw Ordering"),"StrictDrawOrdering",["enabled","disabled"],["enabled","disabled"],7) | |||
- | |||
+ self.AddDisplayElement(_("Optimus Support"),"OptimusSupport",["enabled","disabled"],["enabled","disabled"],8) | |||
def Miscellaneous(self, nom): | |||
self.misc_elements = {} | |||
--- a/lib/wine.lib | |||
+++ b/lib/wine.lib | |||
@@ -543,6 +543,14 @@ | |||
return $errors | |||
} | |||
+POL_Optimus_Support () | |||
+{ | |||
+# POL_Wine_AutoSetVersionEnv | |||
+# wineserver -k | |||
+ "$(POL_Config_Write PRE_WINE 'optirun')" | |||
+# wineserver -k | |||
+} | |||
+ | |||
POL_Wine_SelectPrefix() | |||
{ | |||
# Select a wineprefix and remove unexpected chars |
@ -0,0 +1,27 @@ | |||
--- a/python/mainwindow.py | |||
+++ a/python/mainwindow.py | |||
@@ -88,15 +88,15 @@ | |||
pass | |||
self.updating = False | |||
- if(playonlinux.VersionLower(os.environ["VERSION"],self.WebVersion)): | |||
- self.sendToStatusBar(_('An updated version of {0} is available').format(os.environ["APPLICATION_TITLE"])+" ("+self.WebVersion+")",False) | |||
- if(os.environ["DEBIAN_PACKAGE"] == "FALSE"): | |||
- self.sendAlert(_('An updated version of {0} is available').format(os.environ["APPLICATION_TITLE"])+" ("+self.WebVersion+")") | |||
- os.environ["POL_UPTODATE"] = "FALSE" | |||
- else: | |||
- self.Show = False | |||
- self.perc = -1 | |||
- os.environ["POL_UPTODATE"] = "TRUE" | |||
+# if(playonlinux.VersionLower(os.environ["VERSION"],self.WebVersion)): | |||
+# self.sendToStatusBar(_('An updated version of {0} is available').format(os.environ["APPLICATION_TITLE"])+" ("+self.WebVersion+")",False) | |||
+# if(os.environ["DEBIAN_PACKAGE"] == "FALSE"): | |||
+# self.sendAlert(_('An updated version of {0} is available').format(os.environ["APPLICATION_TITLE"])+" ("+self.WebVersion+")") | |||
+# os.environ["POL_UPTODATE"] = "FALSE" | |||
+# else: | |||
+# self.Show = False | |||
+# self.perc = -1 | |||
+# os.environ["POL_UPTODATE"] = "TRUE" | |||
self.wantcheck = False | |||
@ -0,0 +1,42 @@ | |||
--- a/python/mainwindow.py | |||
+++ a/python/mainwindow.py | |||
@@ -1098,19 +1098,21 @@ | |||
pid_exists = False | |||
print "Registered PID: %d (%s)" % (pid, 'Present' if pid_exists else 'Missing') | |||
self.registeredPid = pids | |||
+ self._mgr.Destroy() | |||
+ self.POLDie() | |||
- if(playonlinux.GetSettings("DONT_ASK_BEFORE_CLOSING") == "TRUE" or self.registeredPid == [] or wx.YES == wx.MessageBox(_('Are you sure you want to close all {0} windows?').format(os.environ["APPLICATION_TITLE"]).decode("utf-8","replace"),os.environ["APPLICATION_TITLE"], style=wx.YES_NO | wx.ICON_QUESTION)): | |||
- self.SizeToSave = self.GetSize(); | |||
- self.PositionToSave = self.GetPosition(); | |||
+# if(playonlinux.GetSettings("DONT_ASK_BEFORE_CLOSING") == "TRUE" or self.registeredPid == [] or wx.YES == wx.MessageBox(_('Are you sure you want to close all {0} windows?').format(os.environ["APPLICATION_TITLE"]).decode("utf-8","replace"),os.environ["APPLICATION_TITLE"], style=wx.YES_NO | wx.ICON_QUESTION)): | |||
+# self.SizeToSave = self.GetSize(); | |||
+# self.PositionToSave = self.GetPosition(); | |||
# Save size and position | |||
- playonlinux.SetSettings("MAINWINDOW_WIDTH",str(self.SizeToSave[0])) | |||
- playonlinux.SetSettings("MAINWINDOW_HEIGHT",str(self.SizeToSave[1]-Variables.windows_add_playonmac*56)) | |||
- playonlinux.SetSettings("MAINWINDOW_X",str(self.PositionToSave[0])) | |||
- playonlinux.SetSettings("MAINWINDOW_Y",str(self.PositionToSave[1])) | |||
+# playonlinux.SetSettings("MAINWINDOW_WIDTH",str(self.SizeToSave[0])) | |||
+# playonlinux.SetSettings("MAINWINDOW_HEIGHT",str(self.SizeToSave[1]-Variables.windows_add_playonmac*56)) | |||
+# playonlinux.SetSettings("MAINWINDOW_X",str(self.PositionToSave[0])) | |||
+# playonlinux.SetSettings("MAINWINDOW_Y",str(self.PositionToSave[1])) | |||
- self._mgr.Destroy() | |||
+# self._mgr.Destroy() | |||
- self.POLDie() | |||
+# self.POLDie() | |||
return None | |||
def About(self, event): | |||
@@ -1271,7 +1273,7 @@ | |||
self.singleCheck("gettext.sh", package="gettext") # gettext-base on Debian | |||
self.singleCheck("icotool", package="icoutils") | |||
self.singleCheck("wrestool", package="icoutils") | |||
- self.singleCheck("wine", package="Wine") | |||
+# self.singleCheck("wine", package="Wine") | |||
self.singleCheck("unzip", package="InfoZIP") | |||
self.singleCheck("7z", package="P7ZIP full") # p7zip-full on Debian | |||
if(os.environ["POL_OS"] == "FreeBSD"): |
@ -0,0 +1,53 @@ | |||
--- a/CMakeLists.txt | |||
+++ b/CMakeLists.txt | |||
@@ -36,12 +36,16 @@ | |||
ENDIF(WIN32) | |||
FIND_PACKAGE( OpenCV REQUIRED core highgui imgproc ) | |||
-FIND_PACKAGE(Qt4 REQUIRED) | |||
-FIND_PACKAGE(GIF REQUIRED) | |||
+FIND_PACKAGE(Qt5Core REQUIRED) | |||
+ | |||
+FIND_LIBRARY(GIF REQUIRED) | |||
+#FIND_LIBRARY(GIF 4 EXACT REQUIRED HINTS /usr/lib/giflib4) | |||
-INCLUDE(${QT_USE_FILE}) | |||
ADD_DEFINITIONS(${QT_DEFINITIONS}) | |||
+FIND_PACKAGE(Qt5Widgets) | |||
+INCLUDE_DIRECTORIES(${Qt5Widgets_INCLUDE_DIRS}) | |||
+ | |||
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wall -Wno-reorder -Wno-sign-compare" ) | |||
SET(WINDOWS_EXEC ) | |||
@@ -143,9 +147,9 @@ | |||
ui/interpolationdialog.ui | |||
) | |||
-QT4_WRAP_CPP(HEADERS_MOC ${QT_HEADERS}) | |||
-QT4_WRAP_UI(FORMS_HEADERS ${FORMS}) | |||
-QT4_ADD_RESOURCES(RESOURCES_RCC ${RESOURCES}) | |||
+qt5_wrap_cpp(HEADERS_MOC ${QT_HEADERS}) | |||
+qt5_wrap_ui(FORMS_HEADERS ${FORMS}) | |||
+qt5_add_resources(RESOURCES_RCC ${RESOURCES}) | |||
IF(WIN32) | |||
SET( OPENCV_LIBS "-lopencv_core244 -lopencv_highgui244 -lopencv_imgproc244" ) | |||
@@ -154,6 +158,7 @@ | |||
ENDIF(WIN32) | |||
SET( GIF_LIBS "-lgif" ) | |||
+#SET( GIF_LIBS /usr/lib/giflib4/libgif.so "-lgif" ) | |||
set(RES_FILES "") | |||
if(MINGW) | |||
@@ -165,7 +170,8 @@ | |||
endif(MINGW) | |||
ADD_EXECUTABLE(${TARGET_NAME} ${WINDOWS_EXEC} ${SOURCES} ${HEADERS_MOC} ${FORMS_HEADERS} ${RESOURCES_RCC} ${RES_FILES}) | |||
-TARGET_LINK_LIBRARIES(${TARGET_NAME} ${QT_LIBRARIES} ${OPENCV_LIBS} ${GIF_LIBS}) | |||
+TARGET_LINK_LIBRARIES(${TARGET_NAME} ${OPENCV_LIBS} ${GIF_LIBS}) | |||
+TARGET_LINK_LIBRARIES(${TARGET_NAME} Qt5::Widgets) | |||
IF(UNIX) | |||
INSTALL(TARGETS ${TARGET_NAME} DESTINATION ${BIN_INSTALL_DIR}) |
@ -0,0 +1,72 @@ | |||
--- a/src/gifcreator.cpp | |||
+++ b/src/gifcreator.cpp | |||
@@ -55,7 +55,7 @@ | |||
GifFileType *GifFile = EGifOpenFileName(filename, FALSE); | |||
if (!GifFile){ | |||
- PrintGifError(); | |||
+ GifError(); | |||
return false; | |||
} | |||
@@ -63,7 +63,7 @@ | |||
GifFile, | |||
w, h, colorRes, 0, cmaps.size() > 1 ? NULL : cmaps.at(0) | |||
) == GIF_ERROR){ | |||
- PrintGifError(); | |||
+ GifError(); | |||
return false; | |||
} | |||
@@ -75,7 +75,7 @@ | |||
char nsle[12] = "NETSCAPE2.0"; | |||
char subblock[3]; | |||
if (EGifPutExtensionFirst(GifFile, APPLICATION_EXT_FUNC_CODE, 11, nsle) == GIF_ERROR) { | |||
- PrintGifError(); | |||
+ GifError(); | |||
return false; | |||
} | |||
subblock[0] = 1; | |||
@@ -83,7 +83,7 @@ | |||
subblock[1] = loop_count / 256; | |||
if (EGifPutExtensionLast(GifFile, APPLICATION_EXT_FUNC_CODE, 3, subblock) == GIF_ERROR) { | |||
- PrintGifError(); | |||
+ GifError(); | |||
return false; | |||
} | |||
@@ -113,7 +113,7 @@ | |||
GifFile, | |||
0, 0, w, h, FALSE, cmaps.size() > ni ? cmaps.at(ni) : cmaps.at(cmaps.size()-1) | |||
) == GIF_ERROR) { | |||
- PrintGifError(); | |||
+ GifError(); | |||
endProgress(); | |||
return false; | |||
} | |||
@@ -121,7 +121,7 @@ | |||
for (int y = 0, j=(h-1)*w; y < h; y++, j-=w) { | |||
if (EGifPutLine(GifFile, &(frames[ni][j]), w) == GIF_ERROR){ | |||
- PrintGifError(); | |||
+ GifError(); | |||
endProgress(); | |||
return false; | |||
} | |||
@@ -130,13 +130,13 @@ | |||
//comment | |||
if(EGifPutComment(GifFile,"This GIF file was created using QGifer") == GIF_ERROR){ | |||
- PrintGifError(); | |||
+ GifError(); | |||
endProgress(); | |||
return false; | |||
} | |||
if (EGifCloseFile(GifFile) == GIF_ERROR) { | |||
- PrintGifError(); | |||
+ GifError(); | |||
endProgress(); | |||
return false; | |||
} |
@ -0,0 +1,38 @@ | |||
--- a/src/frameplayer.cpp | |||
+++ b/src/frameplayer.cpp | |||
@@ -55,7 +55,7 @@ | |||
qDebug() << "FramePlayer::openSource new video loaded: " << src; | |||
#if defined(Q_WS_X11) | |||
QString codec = codecName(); | |||
- raw = (codec == "MJPG" || codec == "I420" || codec == "YUV4"); | |||
+ raw = (codec == "MJPG" || codec == "I420" || codec == "YUV4" || codec == "YUV4" || codec == "LIBX264" || codec == "MPEG4" || codec == "MSMPEG4" || codec == "LIBVPX" || codec == "MPEG2VIDEO" || codec == "FFV1"); | |||
qDebug() << "codec name: " << codecName(); | |||
#endif | |||
@@ -63,14 +63,6 @@ | |||
frames = vcap.get(CV_CAP_PROP_FRAME_COUNT); | |||
qDebug() << "total frames: " << frames; | |||
-#if defined(Q_WS_X11) | |||
- if(frames > FRAME_LIMIT && !raw) | |||
- { | |||
- QMessageBox::critical(this, tr("Error"),tr("This file is coded with \"")+codec+tr("\" codec and contains more than ")+QString::number(FRAME_LIMIT)+tr(" frames. This codec is not supported for full-length videos yet, please cut your video or use other codec like motion JPEG or YUV4.")); | |||
- close(); | |||
- return false; | |||
- } | |||
-#endif | |||
interval = estimateInterval(); | |||
if(!interval) | |||
interval = 40; | |||
--- a/src/frameplayer.h | |||
+++ b/src/frameplayer.h | |||
@@ -32,8 +32,6 @@ | |||
#include "workspace.h" | |||
#include "ui_frameplayer.h" | |||
-#define FRAME_LIMIT 1800 | |||
- | |||
using namespace cv; | |||
class FramePlayer : public QWidget, public Ui::FramePlayerForm |
@ -0,0 +1,157 @@ | |||
Port qgifer to giflib 5 API. | |||
See also: https://bugs.gentoo.org/show_bug.cgi?id=536634 | |||
--- a/src/gifcreator.cpp | |||
+++ b/src/gifcreator.cpp | |||
@@ -38,7 +38,7 @@ | |||
j--; | |||
} | |||
for(int i=0;i<cmaps.size();i++) | |||
- FreeMapObject(cmaps[i]); | |||
+ GifFreeMapObject(cmaps[i]); | |||
} | |||
@@ -52,7 +52,7 @@ | |||
} | |||
- GifFileType *GifFile = EGifOpenFileName(filename, FALSE); | |||
+ GifFileType *GifFile = EGifOpenFileName(filename, 0, NULL); | |||
if (!GifFile){ | |||
PrintGifError(); | |||
@@ -74,7 +74,7 @@ | |||
{ | |||
char nsle[12] = "NETSCAPE2.0"; | |||
char subblock[3]; | |||
- if (EGifPutExtensionFirst(GifFile, APPLICATION_EXT_FUNC_CODE, 11, nsle) == GIF_ERROR) { | |||
+ if (EGifPutExtension(GifFile, APPLICATION_EXT_FUNC_CODE, 11, nsle) == GIF_ERROR) { | |||
PrintGifError(); | |||
return false; | |||
} | |||
@@ -82,7 +82,7 @@ | |||
subblock[2] = loop_count % 256; | |||
subblock[1] = loop_count / 256; | |||
- if (EGifPutExtensionLast(GifFile, APPLICATION_EXT_FUNC_CODE, 3, subblock) == GIF_ERROR) { | |||
+ if (EGifPutExtension(GifFile, APPLICATION_EXT_FUNC_CODE, 3, subblock) == GIF_ERROR) { | |||
PrintGifError(); | |||
return false; | |||
} | |||
@@ -111,7 +111,7 @@ | |||
if (EGifPutImageDesc( | |||
GifFile, | |||
- 0, 0, w, h, FALSE, cmaps.size() > ni ? cmaps.at(ni) : cmaps.at(cmaps.size()-1) | |||
+ 0, 0, w, h, 0, cmaps.size() > ni ? cmaps.at(ni) : cmaps.at(cmaps.size()-1) | |||
) == GIF_ERROR) { | |||
PrintGifError(); | |||
endProgress(); | |||
@@ -135,7 +135,7 @@ | |||
return false; | |||
} | |||
- if (EGifCloseFile(GifFile) == GIF_ERROR) { | |||
+ if (EGifCloseFile(GifFile, NULL) == GIF_ERROR) { | |||
PrintGifError(); | |||
endProgress(); | |||
return false; | |||
--- a/src/gifcreator.h | |||
+++ b/src/gifcreator.h | |||
@@ -31,6 +31,12 @@ | |||
typedef vector<GifByteType> Frame; | |||
typedef unsigned char Byte; | |||
+static inline void | |||
+PrintGifError() | |||
+{ | |||
+ fprintf(stderr, "\nGIF-LIB error: %s.\n", GifErrorString(GIF_ERROR)); | |||
+} | |||
+ | |||
class GifCreator | |||
{ | |||
--- a/src/palettewidget.cpp | |||
+++ b/src/palettewidget.cpp | |||
@@ -34,7 +34,7 @@ | |||
PaletteWidget::~PaletteWidget() | |||
{ | |||
- FreeMapObject(palette); | |||
+ GifFreeMapObject(palette); | |||
} | |||
void PaletteWidget::paintEvent(QPaintEvent*) | |||
@@ -117,7 +117,7 @@ | |||
if(palette && mindiff > 1) | |||
{ | |||
qDebug() << "deleting old palette, size: " << size << ", colors: " << palette->ColorCount; | |||
- FreeMapObject(palette); | |||
+ GifFreeMapObject(palette); | |||
qDebug() << "done"; | |||
palette = NULL; | |||
} | |||
@@ -157,7 +157,7 @@ | |||
} | |||
ColorMapObject* previous = palette; | |||
- palette = MakeMapObject(size, NULL); | |||
+ palette = GifMakeMapObject(size, NULL); | |||
if (!palette) | |||
{ | |||
qDebug() << "NULL palette!"; | |||
@@ -165,7 +165,7 @@ | |||
} | |||
- if (QuantizeBuffer(fimg.width(), fimg.height(), &size, | |||
+ if (GifQuantizeBuffer(fimg.width(), fimg.height(), &size, | |||
&(r[0]),&(g[0]),&(b[0]), &(output[0]), | |||
palette->Colors) == GIF_ERROR) | |||
{ | |||
@@ -178,11 +178,11 @@ | |||
//qDebug() << "difference: " << df; | |||
if(previous && df < mindiff) | |||
{ | |||
- FreeMapObject(palette); | |||
+ GifFreeMapObject(palette); | |||
palette = previous; | |||
} | |||
else if(df >= mindiff) | |||
- FreeMapObject(previous); | |||
+ GifFreeMapObject(previous); | |||
// qDebug() << "palette (" << palette->ColorCount << ") :"; | |||
// for(int i=0;i<size;i++) | |||
@@ -230,8 +230,8 @@ | |||
{ | |||
QStringList rgb = QString(str).split(";", QString::SkipEmptyParts); | |||
if(palette) | |||
- FreeMapObject(palette); | |||
- palette = MakeMapObject(rgb.size(), NULL); | |||
+ GifFreeMapObject(palette); | |||
+ palette = GifMakeMapObject(rgb.size(), NULL); | |||
if(!palette) | |||
return false; | |||
size = rgb.size(); | |||
--- a/src/palettewidget.h | |||
+++ b/src/palettewidget.h | |||
@@ -30,7 +30,7 @@ | |||
PaletteWidget(QWidget* parent=0, Qt::WindowFlags f=0); | |||
virtual ~PaletteWidget(); | |||
ColorMapObject* map() {return palette;} | |||
- ColorMapObject* mapCopy() {return MakeMapObject(palette->ColorCount, palette->Colors);} | |||
+ ColorMapObject* mapCopy() {return GifMakeMapObject(palette->ColorCount, palette->Colors);} | |||
bool fromImage(const QImage& img, int palette_size, float mindiff = 2); | |||
void setColumnCount(int cc){cols = cc;} | |||
bool toFile(const QString& path); | |||
@@ -38,7 +38,7 @@ | |||
QString toString(); | |||
bool fromString(const QString& str); | |||
int getSize() const {return size;} | |||
- void clear() {if(palette) FreeMapObject(palette); palette = NULL; update();} | |||
+ void clear() {if(palette) GifFreeMapObject(palette); palette = NULL; update();} | |||
private: | |||
int size; | |||
int cols; |
@ -0,0 +1,53 @@ | |||
--- a/src/main.cpp | |||
+++ b/src/main.cpp | |||
@@ -28,8 +28,6 @@ | |||
int main(int argc, char* argv[]) | |||
{ | |||
QApplication* app = new QApplication(argc,argv); | |||
- QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); | |||
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); | |||
QString pro = ""; | |||
if(argc == 2 && QFile::exists(QString(argv[1]))) | |||
pro = argv[1]; | |||
--- a/src/optimizerdialog.cpp | |||
+++ b/src/optimizerdialog.cpp | |||
@@ -32,9 +32,9 @@ | |||
showBox->setChecked(set->value("show_optimizer",false).toBool()); | |||
proc = new QProcess(this); | |||
- if(set->value("convert_exec","").toString().isEmpty()) | |||
+/* if(set->value("convert_exec","").toString().isEmpty()) | |||
set->setValue("convert_exec",findConvert()); | |||
- checkIM(); | |||
+ checkIM();*/ | |||
connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); | |||
connect(srcButton, SIGNAL(clicked()), this, SLOT(setSrc())); | |||
@@ -179,7 +179,7 @@ | |||
return s.split(";",QString::SkipEmptyParts); | |||
#endif | |||
} | |||
- | |||
+/* | |||
QString OptimizerDialog::findConvert() | |||
{ | |||
QString exec = | |||
@@ -197,4 +197,4 @@ | |||
return env.at(i)+exec; | |||
} | |||
return ""; | |||
-} | |||
+}*/ | |||
--- a/src/optimizerdialog.h | |||
+++ b/src/optimizerdialog.h | |||
@@ -37,7 +37,7 @@ | |||
bool convertAvailable(); | |||
void checkIM(); | |||
QStringList sysEnv(); | |||
- QString findConvert(); | |||
+// QString findConvert(); | |||
QProcess* proc; | |||
QSettings* set; | |||
private slots: |
@ -0,0 +1,19 @@ | |||
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c | |||
--- a/dlls/wined3d/glsl_shader.c | |||
+++ b/dlls/wined3d/glsl_shader.c | |||
@@ -2457,9 +2457,13 @@ | |||
rel_param0.param_str, reg->idx[0].offset, shader->limits->constant_float, | |||
prefix, rel_param0.param_str, reg->idx[0].offset); | |||
else if (reg->idx[0].offset) | |||
- sprintf(register_name, "%s_c[%s + %u]", prefix, rel_param0.param_str, reg->idx[0].offset); | |||
+ sprintf(register_name, "(%s + %u >= 0 && %s + %u < %u ? %s_c[%s + %u] : vec4(0.0))", | |||
+ rel_param0.param_str, reg->idx[0].offset, rel_param0.param_str, reg->idx[0].offset, | |||
+ shader->limits->constant_float, prefix, rel_param0.param_str, reg->idx[0].offset); | |||
else | |||
- sprintf(register_name, "%s_c[%s]", prefix, rel_param0.param_str); | |||
+ sprintf(register_name, "(%s >= 0 && %s < %u ? %s_c[%s] : vec4(0.0))", | |||
+ rel_param0.param_str, rel_param0.param_str, shader->limits->constant_float, | |||
+ prefix, rel_param0.param_str); | |||
} | |||
else | |||
{ |
@ -0,0 +1,80 @@ | |||
--- a/dlls/msi/action.c | |||
+++ a/dlls/msi/action.c | |||
@@ -7862,6 +7862,59 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq) | |||
return rc; | |||
} | |||
+/* Dummy thread just to initialize an MTA for the benefit of custom action DLLs */ | |||
+static HANDLE dummy_thread_sync_event = NULL; | |||
+static HANDLE dummy_thread_stop_event = NULL; | |||
+static HANDLE dummy_thread_handle = NULL; | |||
+ | |||
+DWORD WINAPI dummy_thread_proc(void *arg) | |||
+{ | |||
+ HRESULT hr; | |||
+ DWORD dwWaitResult; | |||
+ | |||
+ hr = CoInitializeEx(0, COINIT_MULTITHREADED); | |||
+ if (FAILED(hr)) | |||
+ WARN("CoInitializeEx failed %u\n", hr); | |||
+ | |||
+ SetEvent(dummy_thread_sync_event); | |||
+ dwWaitResult = WaitForSingleObject(dummy_thread_stop_event, INFINITE); | |||
+ | |||
+ if (dwWaitResult != WAIT_OBJECT_0) | |||
+ ERR("WaitForSingleObject failed?\n"); | |||
+ | |||
+ CoUninitialize(); | |||
+ return 0; | |||
+} | |||
+ | |||
+static void start_dummy_thread(void) | |||
+{ | |||
+ if (dummy_thread_handle) return; | |||
+ | |||
+ dummy_thread_sync_event = CreateEventA(NULL, TRUE, FALSE, "DummyThreadUpAndRunning"); | |||
+ if (dummy_thread_sync_event == NULL) | |||
+ ERR("Can't create dummy thread sync event\n"); | |||
+ dummy_thread_stop_event = CreateEventA(NULL, TRUE, FALSE, "DummyThreadStop"); | |||
+ if (dummy_thread_stop_event == NULL) | |||
+ ERR("Can't create dummy thread stop event\n"); | |||
+ dummy_thread_handle = CreateThread(NULL, 0, dummy_thread_proc, NULL, 0, NULL); | |||
+ if (dummy_thread_handle == NULL) | |||
+ ERR("Can't create dummy thread\n"); | |||
+ | |||
+ WaitForSingleObject(dummy_thread_sync_event, INFINITE); | |||
+} | |||
+ | |||
+static void end_dummy_thread(void) | |||
+{ | |||
+ SetEvent(dummy_thread_stop_event); | |||
+ WaitForSingleObject(dummy_thread_handle, INFINITE); | |||
+ | |||
+ CloseHandle(dummy_thread_sync_event); | |||
+ CloseHandle(dummy_thread_stop_event); | |||
+ CloseHandle(dummy_thread_handle); | |||
+ | |||
+ dummy_thread_handle = NULL; | |||
+} | |||
+ | |||
/**************************************************** | |||
* TOP level entry points | |||
*****************************************************/ | |||
@@ -7938,6 +7991,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, | |||
msi_adjust_privilege_properties( package ); | |||
msi_set_context( package ); | |||
+ start_dummy_thread(); | |||
+ | |||
productcode = msi_dup_property( package->db, szProductCode ); | |||
if (strcmpiW( productcode, package->ProductCode )) | |||
{ | |||
@@ -7985,6 +8040,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, | |||
/* finish up running custom actions */ | |||
ACTION_FinishCustomActions(package); | |||
+ | |||
+ end_dummy_thread(); | |||
if (package->need_rollback && !reinstall) | |||
{ |
@ -0,0 +1,11 @@ | |||
--- a/dlls/user32/input.c | |||
+++ b/dlls/user32/input.c | |||
@@ -382,7 +382,7 @@ | |||
if (key_state_info && | |||
!(key_state_info->state[key] & 0xc0) && | |||
key_state_info->counter == counter && | |||
- GetTickCount() - key_state_info->time < 50) | |||
+ GetTickCount() - key_state_info->time < 5) | |||
{ | |||
/* use cached value */ | |||
return 0; |
@ -0,0 +1,66 @@ | |||
--- a/dlls/user32/message.c | |||
+++ b/dlls/user32/message.c | |||
@@ -22,6 +22,7 @@ | |||
#include "config.h" | |||
#include "wine/port.h" | |||
+#include <stdio.h> | |||
#include <assert.h> | |||
#include <stdarg.h> | |||
@@ -46,6 +47,7 @@ | |||
#include "controls.h" | |||
#include "wine/debug.h" | |||
#include "wine/exception.h" | |||
+#include <commctrl.h> | |||
WINE_DEFAULT_DEBUG_CHANNEL(msg); | |||
WINE_DECLARE_DEBUG_CHANNEL(relay); | |||
@@ -3463,7 +3465,23 @@ | |||
info.flags = SMTO_NORMAL; | |||
info.timeout = 0; | |||
- send_message( &info, &res, TRUE ); | |||
+ send_message( &info, &res, TRUE ); | |||
+ | |||
+ if ( msg == TTM_TRACKACTIVATE ) | |||
+ { | |||
+ | |||
+ if ( wparam == TRUE ) | |||
+ { | |||
+ ShowWindow( hwnd, 1 ); | |||
+ } | |||
+ else | |||
+ if ( wparam == FALSE ) | |||
+ { | |||
+ ShowWindow( hwnd, 0 ); | |||
+ } | |||
+ | |||
+ } | |||
+ | |||
return res; | |||
} | |||
@@ -3486,6 +3504,22 @@ | |||
info.wm_char = WMCHAR_MAP_SENDMESSAGE; | |||
send_message( &info, &res, FALSE ); | |||
+ | |||
+ if ( msg == TTM_TRACKACTIVATE ) | |||
+ { | |||
+ | |||
+ if ( wparam == TRUE ) | |||
+ { | |||
+ ShowWindow( hwnd, 1 ); | |||
+ } | |||
+ else | |||
+ if ( wparam == FALSE ) | |||
+ { | |||
+ ShowWindow( hwnd, 0 ); | |||
+ } | |||
+ | |||
+ } | |||
+ | |||
return res; | |||
} | |||
@ -0,0 +1,30 @@ | |||
--- a/dlls/user32/win.c | |||
+++ b/dlls/user32/win.c | |||
@@ -25,6 +25,7 @@ | |||
#include <stdarg.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
+#include <stdio.h> | |||
#include "windef.h" | |||
#include "winbase.h" | |||
@@ -37,6 +38,7 @@ | |||
#include "winerror.h" | |||
#include "wine/gdi_driver.h" | |||
#include "wine/debug.h" | |||
+#include "commctrl.h" | |||
WINE_DEFAULT_DEBUG_CHANNEL(win); | |||
@@ -1337,6 +1339,11 @@ | |||
MDICREATESTRUCTW mdi_cs; | |||
CBT_CREATEWNDW cbtc; | |||
CREATESTRUCTW cbcs; | |||
+ | |||
+ if (strcmp ( debugstr_w(className) , debugstr_w(TOOLTIPS_CLASSW) ) == 0 ) | |||
+ { | |||
+ cs->style |= WS_POPUP; | |||
+ } | |||
TRACE("%s %s ex=%08x style=%08x %d,%d %dx%d parent=%p menu=%p inst=%p params=%p\n", | |||
unicode ? debugstr_w(cs->lpszName) : debugstr_a((LPCSTR)cs->lpszName), |
@ -0,0 +1,57 @@ | |||
# Maintainer: jsteel <mail at jsteel dot org> | |||
# Contributor: Frozen Fox <frozenfoxz@gmail.com> | |||
# Contributor: Aurelien Foret <orelien@chez.com> | |||
pkgname=zsnes | |||
_pkgname=zsnes | |||
pkgver=1.42 | |||
pkgrel=3 | |||
pkgdesc="Super Nintendo emulator (latest version supporting netplay)" | |||
url="http://zsnes.com" | |||
arch=('i686' 'x86_64') | |||
license=('GPL') | |||
options=(!buildflags) | |||
if [[ $CARCH == "x86_64" ]]; then | |||
depends=('gcc-libs-multilib' 'lib32-sdl' 'lib32-libpng>=1.5.0' | |||
'lib32-libgl' 'lib32-ncurses' 'lib32-mesa') | |||
makedepends=('nasm' 'gcc-multilib') | |||
else | |||
depends=('sdl' 'libpng>=1.5.0' 'mesa') | |||
makedepends=('nasm' 'gcc') | |||
fi | |||
source=(zsnesnet.tar.gz | |||
# custompath.patch | |||
libpng.patch | |||
$pkgname.desktop) | |||
md5sums=('325c22d392fb33f720c6c05625884428' | |||
'f7366961f21ed63d0844a3a6d4780bcf' | |||
'5fb4df4bc32e1d6b1cffb16d9af6563f') | |||
build() { | |||
cd "$srcdir" | |||
# patch -Np1 -i "$srcdir"/custompath.patch | |||
patch -Np1 -i "$srcdir"/libpng.patch | |||
if [ $CARCH == "x86_64" ]; then | |||
export CC="gcc -m32" | |||
export CXX="g++ -m32" | |||
fi | |||
chmod +x autogen.sh | |||
./autogen.sh --prefix=/usr x_libraries=/usr/lib force_arch=i686 \ | |||
--enable-release --enable-debug | |||
make | |||
} | |||
package() { | |||
cd "$srcdir" | |||
make DESTDIR="$pkgdir" install | |||
install -Dm644 "$srcdir"/$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop | |||
install -Dm644 "$srcdir"/icons/48x48x32.png "$pkgdir"/usr/share/pixmaps/$pkgname.png | |||
} |
@ -0,0 +1,38 @@ | |||
diff -ur src.orig/configure.in src/configure.in | |||
--- src.orig/configure.in 2012-10-01 20:59:22.712987576 +0100 | |||
+++ src/configure.in 2012-10-01 21:00:29.374018431 +0100 | |||
@@ -116,7 +116,7 @@ | |||
CFLAGS="$CFLAGS -DDEBUG -O0 -fno-omit-frame-pointer -ggdb3" | |||
NFLAGS="$NFLAGS -DDEBUG -g -s -O0" dnl it works now | |||
- ZSNESEXE="zsnesd" | |||
+ ZSNESEXE="zsnes-netplay" | |||
else | |||
AC_MSG_RESULT(no) | |||
diff -ur src.orig/linux/zfilew.c src/linux/zfilew.c | |||
--- src.orig/linux/zfilew.c 2012-10-01 20:59:22.712987576 +0100 | |||
+++ src/linux/zfilew.c 2012-10-01 20:59:42.296623751 +0100 | |||
@@ -464,7 +464,7 @@ | |||
#ifdef __LINUX__ | |||
char zcfgdir[1024]; | |||
-#define ZCFG_DIR "/.zsnes" | |||
+#define ZCFG_DIR "/.zsnes-netplay" | |||
#define ZCFG_DIR_LEN (1023-strlen(ZCFG_DIR)) | |||
void obtaindir() | |||
diff -ur src.orig/Makefile.in src/Makefile.in | |||
--- src.orig/Makefile.in 2012-10-01 20:59:22.712987576 +0100 | |||
+++ src/Makefile.in 2012-10-01 20:59:42.296623751 +0100 | |||
@@ -225,8 +225,8 @@ | |||
install: | |||
@INSTALL@ -d -m 0755 ${DESTDIR}/@prefix@/bin | |||
@INSTALL@ -m 0755 @ZSNESEXE@ ${DESTDIR}/@prefix@/bin | |||
- @INSTALL@ -d -m 0755 ${DESTDIR}/@prefix@/man/man1 | |||
- @INSTALL@ -m 0644 linux/zsnes.1 ${DESTDIR}/@prefix@/man/man1 | |||
+ @INSTALL@ -d -m 0755 ${DESTDIR}/@prefix@/share/man/man1 | |||
+ @INSTALL@ -m 0644 linux/zsnes.1 ${DESTDIR}/@prefix@/share/man/man1/zsnes-netplay.1 | |||
uninstall: | |||
rm -f @prefix@/bin/$(notdir @ZSNESEXE@) @prefix@/man/man5/zsnes.5 |
@ -0,0 +1,24 @@ | |||
*** src/zip/zpng.c 2012-05-29 18:44:36.888974112 +0200 | |||
--- src/zip/zpng.c 2012-05-29 18:59:19.292452834 +0200 | |||
*************** | |||
*** 80,89 **** | |||
/*set a lot of image info (code adapted from libpng documentation!)*/ | |||
png_set_IHDR(png_ptr, info_ptr, width, height, | |||
! 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, | |||
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); | |||
- info_ptr->color_type=PNG_COLOR_TYPE_RGB_ALPHA; | |||
/*Allocate an array of scanline pointers*/ | |||
row_pointers=(png_bytep*)malloc(height*sizeof(png_bytep)); | |||
--- 80,88 ---- | |||
/*set a lot of image info (code adapted from libpng documentation!)*/ | |||
png_set_IHDR(png_ptr, info_ptr, width, height, | |||
! 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, | |||
PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); | |||
/*Allocate an array of scanline pointers*/ | |||
row_pointers=(png_bytep*)malloc(height*sizeof(png_bytep)); |
@ -0,0 +1,10 @@ | |||
[Desktop Entry] | |||
Categories=Application;Game | |||
Comment=Super Nintendo emulator | |||
Exec=env SDL_AUDIODRIVER="alsa" /usr/bin/zsnesd | |||
Hidden=false | |||
Icon=/usr/share/pixmaps/zsnes.png | |||
Name=Zsnes | |||
StartupNotify=false | |||
Terminal=false | |||
Type=Application |