@ -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 |