1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Italian translation: update

This commit is contained in:
Ansa89 2014-12-15 11:11:10 +01:00
commit 276c5ce828
49 changed files with 521 additions and 494 deletions

View File

@ -1,8 +1,8 @@
#Install Instructions #Install Instructions
- [Dependencies](#dependencies) - [Dependencies](#dependencies)
- [Windows](#windows)
- [Linux](#linux) - [Linux](#linux)
- [OS X](#osx) - [OS X](#osx)
- [Windows](#windows)
<a name="dependencies" /> <a name="dependencies" />
##Dependencies ##Dependencies
@ -15,6 +15,196 @@
| OpenCV | >= 2.4.9 | core, highgui, imgproc | | OpenCV | >= 2.4.9 | core, highgui, imgproc |
| OpenAL Soft | >= 1.16.0 | | | OpenAL Soft | >= 1.16.0 | |
<a name="linux" />
##Linux
###Simple install
Easy qTox install is provided for variety of distributions:
https://wiki.tox.im/Binaries#Apt.2FAptitude_.28Debian.2C_Ubuntu.2C_Mint.2C_etc..29
If your distribution is not listed, or you want/need to compile qTox, there are provided instructions.
**Please note that installing toxcore/qTox from AUR is not supported**, although installing other dependencies, provided that they met requirements, should be fine, unless you are installing cryptography library from AUR, which should rise red flags by itself…
----
Most of the dependencies should be available through your package manger. You may either follow the directions below, or simply run `./simple_make.sh` after cloning, which will attempt to automatically download dependencies followed by compilation.
###Cloning the Repository
In order to clone the qTox repository you need Git.
Arch Linux:
```bash
sudo pacman -S --needed git
```
Debian:
```bash
sudo apt-get install git
```
Fedora:
```bash
yum install git
```
Ubuntu:
```bash
sudo apt-get install git
```
Afterwards open a new Terminal, change to a directory of your choice and clone the repository:
```bash
cd /home/user/qTox
git clone https://github.com/tux3/qTox.git qTox
```
The following steps assumes that you cloned the repository at "/home/user/qTox". If you decided to choose another location, replace corresponding parts.
###GCC, Qt, OpenCV and OpanAL Soft
Arch Linux:
```bash
sudo pacman -S --needed base-devel qt5 opencv openal libxss
```
Debian:
```bash
sudo apt-get install build-essential qt5-qmake qt5-default libopenal-dev libopencv-dev libxss-dev
```
Fedora:
```bash
yum groupinstall "Development Tools"
yum install qt-devel qt-doc qt-creator opencv-devel openal-soft-devel libXScrnSaver-devel
```
Slackware:
You can grab slackbuilds of the needed dependencies here:
http://slackbuilds.org/repository/14.1/libraries/OpenAL/
http://slackbuilds.org/repository/14.1/libraries/qt5/
http://slackbuilds.org/repository/14.1/libraries/opencv/
Ubuntu:
```bash
sudo apt-get install build-essential qt5-qmake qt5-default qttools5-dev-tools libopenal-dev libopencv-dev libxss-dev
```
###Tox Core
First of all install the dependencies of Tox Core.
Arch Linux:
```bash
sudo pacman -S --needed opus vpx
```
```
Debian:
```bash
sudo apt-get install libtool autotools-dev automake checkinstall check libopus-dev libvpx-dev
```
Fedora:
```bash
yum install libtool autoconf automake check check-devel
```
Ubuntu:
```bash
sudo apt-get install libtool autotools-dev automake checkinstall check libopus-dev libvpx-dev
```
Now you can either follow the instructions at https://github.com/irungentoo/toxcore/blob/master/INSTALL.md#unix or use the "bootstrap.sh" script located at "/home/user/qTox".
The script will automatically download and install Tox Core and libsodium to "/home/user/qTox/libs":
```bash
cd /home/user/qTox
./bootstrap.sh # use -h or --help for more information
```
After all the dependencies are thus reeady to go, compiling should be as simple as
```bash
qmake
make
```
###Building packages
Alternately, qTox now has the experimental and probably-dodgy ability to package itself (in .deb
form natively, and .rpm form with <a href="http://joeyh.name/code/alien/">alien</a>).
After installing the required dependencies, run `bootstrap.sh` and then run the
`buildPackages.sh` script, found in the tools folder. It will automatically get the
packages necessary for building .debs, so be prepared to type your password for sudo.
<a name="osx" />
##OS X
###OSX Easy Install
Since https://github.com/ReDetection/homebrew-qtox you can easily install qtox with homebrew
```bash
brew install --HEAD ReDetection/qtox/qtox
```
###OSX Full Install Guide
This guide is intended for people who wish to use an existing or new ProjectTox-Core installation separate to the bundled installation with qTox, if you do not wish to use a separate installation you can skip to the section titled 'Final Steps'.
Installation on OSX, isn't quite straight forward, here is a quick guide on how to install;
Note that qTox now requires OpenCV and OpenAL for video and audio.
The first thing you need to do is install ProjectTox-Core with a/v support. Refer to the INSTALL guide in the PrjectTox-Core github repo.
Next you need to download QtTools (http://qt-project.org/downloads), at the time of writing this is at version .3.0.
Make sure you deselect all the unnecessary components from the 5.3 checkbox (iOS/Android libs) otherwise you will end up with a very large download.
Once that is installed you will most likely need to set the path for qmake. To do this, open up terminal and paste in the following;
```bash
export PATH=/location/to/qmake/binary:$PATH
```
For myself, the qmake binary was located in /Users/mouseym/Qt/5.3/clang_64/bin/.
This is not a permanent change, it will revert when you close the terminal window, to add it permanently you will need to add echo the above line to your .profile/.bash_profile.
Once this is installed, do the following;
```bash
git clone https://github.com/tux3/qTox
cd toxgui
qmake
```
Now, we need to create a symlink to /usr/local/lib/ and /usr/local/include/
```
mkdir -p $HOME/qTox/libs
sudo ln -s /usr/local/lib $HOME/qTox/libs/lib
sudo ln -s /usr/local/include $HOME/qTox/libs/include
```
####Final Steps
The final step is to run
```bash
make
```
in the qTox directory, or if you are using the bundled tox core installation, you can use
```bash
./bootstrap.sh
make
```
Assuming all went well you should now have a qTox.app file within the directory. Double click and it should open!
<a name="windows" /> <a name="windows" />
##Windows ##Windows
@ -74,168 +264,4 @@ As for OpenCV there are no prebuild packages of OpenAL Softe compiled with MinGW
make make
make install make install
``` ```
Copy the dll "OpenAL32.dll" located at "C:\qTox\libs\openal-build\install\bin" to "C:\qTox\libs\lib". Finally, copy the directory "AL" located at "C:\qTox\libs\openal-build\install\include" to "C:\qTox\libs\include". Unlike OpenCV you don't need to patch any files. Feel free to delete the directories "openal-soft-x.y.z" and "openal-build", but you don't need to. Copy the dll "OpenAL32.dll" located at "C:\qTox\libs\openal-build\install\bin" to "C:\qTox\libs\lib". Finally, copy the directory "AL" located at "C:\qTox\libs\openal-build\install\include" to "C:\qTox\libs\include". Unlike OpenCV you don't need to patch any files. Feel free to delete the directories "openal-soft-x.y.z" and "openal-build", but you don't need to.
<a name="linux" />
##Linux
Most of the dependencies should be available through your package manger. You may either follow the directions below, or simply run `./simple_make.sh` after cloning, which will attempt to automatically download dependencies followed by compilation.
###Cloning the Repository
In order to clone the qTox repository you need Git.
Debian:
```bash
sudo apt-get install git
```
Ubuntu:
```bash
sudo apt-get install git
```
Arch Linux:
```bash
sudo pacman -S --needed git
```
Fedora:
```bash
yum install git
```
Afterwards open a new Terminal, change to a directory of your choice and clone the repository:
```bash
cd /home/user/qTox
git clone https://github.com/tux3/qTox.git qTox
```
The following steps assumes that you cloned the repository at "/home/user/qTox". If you decided to choose another location, replace corresponding parts.
###GCC, Qt, OpenCV and OpanAL Soft
Debian:
```bash
sudo apt-get install build-essential qt5-qmake qt5-default libopenal-dev libopencv-dev libxss-dev
```
Ubuntu:
```bash
sudo apt-get install build-essential qt5-qmake qt5-default qttools5-dev-tools libopenal-dev libopencv-dev libxss-dev
```
Arch Linux:
```bash
sudo pacman -S --needed base-devel qt5 opencv openal libxss
```
Fedora:
```bash
yum groupinstall "Development Tools"
yum install qt-devel qt-doc qt-creator opencv-devel openal-soft-devel libXScrnSaver-devel
```
###Tox Core
First of all install the dependencies of Tox Core.
Debian:
```bash
sudo apt-get install libtool autotools-dev automake checkinstall check libopus-dev libvpx-dev
```
Ubuntu:
```bash
sudo apt-get install libtool autotools-dev automake checkinstall check libopus-dev libvpx-dev
```
Arch Linux: (Arch Linux provides the package "tox-git" in AUR)
```bash
sudo pacman -S --needed opus vpx
```
Fedora:
```bash
yum install libtool autoconf automake check check-devel
```
Now you can either follow the instructions at https://github.com/irungentoo/toxcore/blob/master/INSTALL.md#unix or use the "bootstrap.sh" script located at "/home/user/qTox".
The script will automatically download and install Tox Core and libsodium to "/home/user/qTox/libs":
```bash
cd /home/user/qTox
./bootstrap.sh # use -h or --help for more information
```
After all the dependencies are thus reeady to go, compiling should be as simple as
```bash
qmake
make
```
###Building packages
Alternately, qTox now has the experimental and probably-dodgy ability to package itself (in .deb
form natively, and .rpm form with <a href="http://joeyh.name/code/alien/">alien</a>).
After installing the required dependencies, run `bootstrap.sh` and then run the
`buildPackages.sh` script, found in the tools folder. It will automatically get the
packages necessary for building .debs, so be prepared to type your password for sudo.
<a name="osx" />
##OS X
###OSX Easy Install
Since https://github.com/ReDetection/homebrew-qtox you can easily install qtox with homebrew
```bash
brew install --HEAD ReDetection/qtox/qtox
```
###OSX Full Install Guide
This guide is intended for people who wish to use an existing or new ProjectTox-Core installation separate to the bundled installation with qTox, if you do not wish to use a separate installation you can skip to the section titled 'Final Steps'.
Installation on OSX, isn't quite straight forward, here is a quick guide on how to install;
Note that qTox now requires OpenCV and OpenAL for video and audio.
The first thing you need to do is install ProjectTox-Core with a/v support. Refer to the INSTALL guide in the PrjectTox-Core github repo.
Next you need to download QtTools (http://qt-project.org/downloads), at the time of writing this is at version .3.0.
Make sure you deselect all the unnecessary components from the 5.3 checkbox (iOS/Android libs) otherwise you will end up with a very large download.
Once that is installed you will most likely need to set the path for qmake. To do this, open up terminal and paste in the following;
```bash
export PATH=/location/to/qmake/binary:$PATH
```
For myself, the qmake binary was located in /Users/mouseym/Qt/5.3/clang_64/bin/.
This is not a permanent change, it will revert when you close the terminal window, to add it permanently you will need to add echo the above line to your .profile/.bash_profile.
Once this is installed, do the following;
```bash
git clone https://github.com/tux3/qTox
cd toxgui
qmake
```
Now, we need to create a symlink to /usr/local/lib/ and /usr/local/include/
```
mkdir -p $HOME/qTox/libs
sudo ln -s /usr/local/lib $HOME/qTox/libs/lib
sudo ln -s /usr/local/include $HOME/qTox/libs/include
```
####Final Steps
The final step is to run
```bash
make
```
in the qTox directory, or if you are using the bundled tox core installation, you can use
```bash
./bootstrap.sh
make
```
Assuming all went well you should now have a qTox.app file within the directory. Double click and it should open!

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

View File

@ -32,6 +32,41 @@ func fs_type(path string) int {
return -1 return -1
} }
func install(path string, pathlen int) int {
files, _ := ioutil.ReadDir(path)
for _, file := range files {
if fs_type(path+file.Name()) == 1 {
addpath := ""
if len(path) != pathlen {
addpath = path[pathlen:len(path)]
}
fmt.Print("Installing: ")
fmt.Println("/Applications/qtox.app/Contents/" + addpath + file.Name())
if _, err := os.Stat("/Applications/qtox.app/Contents/" + file.Name()); os.IsNotExist(err) {
newfile := exec.Command("/usr/libexec/authopen", "-c", "-x", "-m", "drwxrwxr-x+", "/Applications/qtox.app/Contents/"+addpath+file.Name())
newfile.Run()
}
cat := exec.Command("/bin/cat", path+file.Name())
auth := exec.Command("/usr/libexec/authopen", "-w", "/Applications/qtox.app/Contents/"+addpath+file.Name())
auth.Stdin, _ = cat.StdoutPipe()
auth.Stdout = os.Stdout
auth.Stderr = os.Stderr
_ = auth.Start()
_ = cat.Run()
_ = auth.Wait()
} else {
install(path+file.Name()+"/", pathlen)
}
}
return 0
}
func main() { func main() {
usr, e := user.Current() usr, e := user.Current()
if e != nil { if e != nil {
@ -45,51 +80,11 @@ func main() {
} }
fmt.Println("qTox Updater") fmt.Println("qTox Updater")
files, _ := ioutil.ReadDir(update_dir)
killqtox := exec.Command("/usr/bin/killall", "qtox") killqtox := exec.Command("/usr/bin/killall", "qtox")
_ = killqtox.Run() _ = killqtox.Run()
for _, file := range files { install(update_dir, len(update_dir))
if fs_type(update_dir+file.Name()) == 1 {
fmt.Print("Installing: ")
fmt.Println("/Applications/qtox.app/Contents/" + file.Name())
if _, err := os.Stat("/Applications/qtox.app/Contents/" + file.Name()); os.IsNotExist(err) {
newfile := exec.Command("/usr/libexec/authopen", "-c", "-x", "-m", "drwxrwxr-x+", "/Applications/qtox.app/Contents/"+file.Name())
newfile.Run()
}
cat := exec.Command("/bin/cat", update_dir+file.Name())
auth := exec.Command("/usr/libexec/authopen", "-w", "/Applications/qtox.app/Contents/"+file.Name())
auth.Stdin, _ = cat.StdoutPipe()
auth.Stdout = os.Stdout
auth.Stderr = os.Stderr
_ = auth.Start()
_ = cat.Run()
_ = auth.Wait()
} else {
files, _ := ioutil.ReadDir(update_dir + file.Name())
for _, file2 := range files {
fmt.Print("Installing: ")
fmt.Println("/Applications/qtox.app/Contents/" + file.Name() + "/" + file2.Name())
if _, err := os.Stat("/Applications/qtox.app/Contents/" + file.Name() + "/" + file2.Name()); os.IsNotExist(err) {
newfile := exec.Command("/usr/libexec/authopen", "-c", "-x", "-m", "drwxrwxr-x+", "/Applications/qtox.app/Contents/"+file.Name()+"/"+file2.Name())
newfile.Run()
}
cat := exec.Command("/bin/cat", update_dir+file.Name()+"/"+file2.Name())
auth := exec.Command("/usr/libexec/authopen", "-w", "/Applications/qtox.app/Contents/"+file.Name()+"/"+file2.Name())
auth.Stdin, _ = cat.StdoutPipe()
auth.Stdout = os.Stdout
auth.Stderr = os.Stderr
_ = auth.Start()
_ = cat.Run()
_ = auth.Wait()
}
}
}
os.RemoveAll(update_dir) os.RemoveAll(update_dir)
fmt.Println("Update metadata wiped, launching qTox") fmt.Println("Update metadata wiped, launching qTox")
launchqtox := exec.Command("/usr/bin/open", "-b", "im.tox.qtox") launchqtox := exec.Command("/usr/bin/open", "-b", "im.tox.qtox")

View File

@ -37,6 +37,14 @@
<file>img/status/dot_online.png</file> <file>img/status/dot_online.png</file>
<file>img/status/dot_online_2x.png</file> <file>img/status/dot_online_2x.png</file>
<file>img/status/dot_online_notification.png</file> <file>img/status/dot_online_notification.png</file>
<file>img/taskbar/dark/taskbar_online_2x.png</file>
<file>img/taskbar/dark/taskbar_idle_2x.png</file>
<file>img/taskbar/dark/taskbar_busy_2x.png</file>
<file>img/taskbar/dark/taskbar_offline_2x.png</file>
<file>img/taskbar/light/taskbar_online_2x.png</file>
<file>img/taskbar/light/taskbar_idle_2x.png</file>
<file>img/taskbar/light/taskbar_busy_2x.png</file>
<file>img/taskbar/light/taskbar_offline_2x.png</file>
<file>img/transfer.png</file> <file>img/transfer.png</file>
<file>smileys/cylgom/angel.png</file> <file>smileys/cylgom/angel.png</file>
<file>smileys/cylgom/angry.png</file> <file>smileys/cylgom/angry.png</file>

View File

@ -87,8 +87,6 @@ void Audio::openOutput(const QString& outDevDescr)
{ {
auto* tmp = alOutDev; auto* tmp = alOutDev;
alOutDev = nullptr; alOutDev = nullptr;
if (tmp)
alcCloseDevice(tmp);
if (outDevDescr.isEmpty()) if (outDevDescr.isEmpty())
alOutDev = alcOpenDevice(nullptr); alOutDev = alcOpenDevice(nullptr);
else else
@ -104,6 +102,8 @@ void Audio::openOutput(const QString& outDevDescr)
alcMakeContextCurrent(nullptr); alcMakeContextCurrent(nullptr);
alcDestroyContext(alContext); alcDestroyContext(alContext);
} }
if (tmp)
alcCloseDevice(tmp);
alContext=alcCreateContext(alOutDev,nullptr); alContext=alcCreateContext(alOutDev,nullptr);
if (!alcMakeContextCurrent(alContext)) if (!alcMakeContextCurrent(alContext))
{ {
@ -184,14 +184,14 @@ void Audio::playAudioBuffer(ALuint alSource, const int16_t *data, int samples, u
alGetSourcei(alSource, AL_BUFFERS_QUEUED, &queued); alGetSourcei(alSource, AL_BUFFERS_QUEUED, &queued);
alSourcei(alSource, AL_LOOPING, AL_FALSE); alSourcei(alSource, AL_LOOPING, AL_FALSE);
if(processed) if (processed)
{ {
ALuint bufids[processed]; ALuint bufids[processed];
alSourceUnqueueBuffers(alSource, processed, bufids); alSourceUnqueueBuffers(alSource, processed, bufids);
alDeleteBuffers(processed - 1, bufids + 1); alDeleteBuffers(processed - 1, bufids + 1);
bufid = bufids[0]; bufid = bufids[0];
} }
else if(queued < 16) else if (queued < 16)
{ {
alGenBuffers(1, &bufid); alGenBuffers(1, &bufid);
} }
@ -207,6 +207,6 @@ void Audio::playAudioBuffer(ALuint alSource, const int16_t *data, int samples, u
ALint state; ALint state;
alGetSourcei(alSource, AL_SOURCE_STATE, &state); alGetSourcei(alSource, AL_SOURCE_STATE, &state);
if(state != AL_PLAYING) if (state != AL_PLAYING)
alSourcePlay(alSource); alSourcePlay(alSource);
} }

View File

@ -728,7 +728,7 @@ void Core::requestFriendship(const QString& friendAddress, const QString& messag
{ {
const QString userId = friendAddress.mid(0, TOX_CLIENT_ID_SIZE * 2); const QString userId = friendAddress.mid(0, TOX_CLIENT_ID_SIZE * 2);
if(hasFriendWithAddress(friendAddress)) if (hasFriendWithAddress(friendAddress))
{ {
emit failedToAddFriend(userId, QString(tr("Friend is already added"))); emit failedToAddFriend(userId, QString(tr("Friend is already added")));
} }
@ -1677,7 +1677,7 @@ void Core::createGroup(uint8_t type)
bool Core::hasFriendWithAddress(const QString &addr) const bool Core::hasFriendWithAddress(const QString &addr) const
{ {
// Valid length check // Valid length check
if(addr.length() != (TOX_FRIEND_ADDRESS_SIZE * 2)) if (addr.length() != (TOX_FRIEND_ADDRESS_SIZE * 2))
{ {
return false; return false;
} }
@ -1689,7 +1689,7 @@ bool Core::hasFriendWithAddress(const QString &addr) const
bool Core::hasFriendWithPublicKey(const QString &pubkey) const bool Core::hasFriendWithPublicKey(const QString &pubkey) const
{ {
// Valid length check // Valid length check
if(pubkey.length() != (TOX_CLIENT_ID_SIZE * 2)) if (pubkey.length() != (TOX_CLIENT_ID_SIZE * 2))
{ {
return false; return false;
} }
@ -1706,7 +1706,7 @@ bool Core::hasFriendWithPublicKey(const QString &pubkey) const
QString addrOrId = getFriendAddress(ids[i]); QString addrOrId = getFriendAddress(ids[i]);
// Set true if found // Set true if found
if(addrOrId.toUpper().startsWith(pubkey.toUpper())) if (addrOrId.toUpper().startsWith(pubkey.toUpper()))
{ {
found = true; found = true;
break; break;

View File

@ -207,7 +207,7 @@ void Core::playCallAudio(void* toxav, int32_t callId, const int16_t *data, uint1
alGenSources(1, &calls[callId].alSource); alGenSources(1, &calls[callId].alSource);
ToxAvCSettings dest; ToxAvCSettings dest;
if(toxav_get_peer_csettings((ToxAv*)toxav, callId, 0, &dest) == 0) if (toxav_get_peer_csettings((ToxAv*)toxav, callId, 0, &dest) == 0)
playAudioBuffer(calls[callId].alSource, data, samples, dest.audio_channels, dest.audio_sample_rate); playAudioBuffer(calls[callId].alSource, data, samples, dest.audio_channels, dest.audio_sample_rate);
} }
@ -229,24 +229,24 @@ void Core::sendCallAudio(int callId, ToxAv* toxav)
bool frame = false; bool frame = false;
ALint samples; ALint samples;
alcGetIntegerv(Audio::alInDev, ALC_CAPTURE_SAMPLES, sizeof(samples), &samples); alcGetIntegerv(Audio::alInDev, ALC_CAPTURE_SAMPLES, sizeof(samples), &samples);
if(samples >= framesize) if (samples >= framesize)
{ {
memset(buf, 0, bufsize); // Avoid uninitialized values (Valgrind) memset(buf, 0, bufsize); // Avoid uninitialized values (Valgrind)
alcCaptureSamples(Audio::alInDev, buf, framesize); alcCaptureSamples(Audio::alInDev, buf, framesize);
frame = 1; frame = 1;
} }
if(frame) if (frame)
{ {
int r; int r;
if((r = toxav_prepare_audio_frame(toxav, callId, dest, framesize*2, (int16_t*)buf, framesize)) < 0) if ((r = toxav_prepare_audio_frame(toxav, callId, dest, framesize*2, (int16_t*)buf, framesize)) < 0)
{ {
qDebug() << "Core: toxav_prepare_audio_frame error"; qDebug() << "Core: toxav_prepare_audio_frame error";
calls[callId].sendAudioTimer->start(); calls[callId].sendAudioTimer->start();
return; return;
} }
if((r = toxav_send_audio(toxav, callId, dest, r)) < 0) if ((r = toxav_send_audio(toxav, callId, dest, r)) < 0)
qDebug() << "Core: toxav_send_audio error"; qDebug() << "Core: toxav_send_audio error";
} }
calls[callId].sendAudioTimer->start(); calls[callId].sendAudioTimer->start();
@ -271,7 +271,7 @@ void Core::sendCallVideo(int callId)
if (frame.w && frame.h) if (frame.w && frame.h)
{ {
int result; int result;
if((result = toxav_prepare_video_frame(toxav, callId, videobuf, videobufsize, &frame)) < 0) if ((result = toxav_prepare_video_frame(toxav, callId, videobuf, videobufsize, &frame)) < 0)
{ {
qDebug() << QString("Core: toxav_prepare_video_frame: error %1").arg(result); qDebug() << QString("Core: toxav_prepare_video_frame: error %1").arg(result);
vpx_img_free(&frame); vpx_img_free(&frame);
@ -279,7 +279,7 @@ void Core::sendCallVideo(int callId)
return; return;
} }
if((result = toxav_send_video(toxav, callId, (uint8_t*)videobuf, result)) < 0) if ((result = toxav_send_video(toxav, callId, (uint8_t*)videobuf, result)) < 0)
qDebug() << QString("Core: toxav_send_video error: %1").arg(result); qDebug() << QString("Core: toxav_send_video error: %1").arg(result);
vpx_img_free(&frame); vpx_img_free(&frame);
@ -540,7 +540,7 @@ void Core::onAvStart(void* _toxav, int32_t call_index, void* core)
// This function's logic was shamelessly stolen from uTox // This function's logic was shamelessly stolen from uTox
void Core::playAudioBuffer(ALuint alSource, const int16_t *data, int samples, unsigned channels, int sampleRate) void Core::playAudioBuffer(ALuint alSource, const int16_t *data, int samples, unsigned channels, int sampleRate)
{ {
if(!channels || channels > 2) if (!channels || channels > 2)
{ {
qWarning() << "Core::playAudioBuffer: trying to play on "<<channels<<" channels! Giving up."; qWarning() << "Core::playAudioBuffer: trying to play on "<<channels<<" channels! Giving up.";
return; return;
@ -552,14 +552,14 @@ void Core::playAudioBuffer(ALuint alSource, const int16_t *data, int samples, un
alGetSourcei(alSource, AL_BUFFERS_QUEUED, &queued); alGetSourcei(alSource, AL_BUFFERS_QUEUED, &queued);
alSourcei(alSource, AL_LOOPING, AL_FALSE); alSourcei(alSource, AL_LOOPING, AL_FALSE);
if(processed) if (processed)
{ {
ALuint bufids[processed]; ALuint bufids[processed];
alSourceUnqueueBuffers(alSource, processed, bufids); alSourceUnqueueBuffers(alSource, processed, bufids);
alDeleteBuffers(processed - 1, bufids + 1); alDeleteBuffers(processed - 1, bufids + 1);
bufid = bufids[0]; bufid = bufids[0];
} }
else if(queued < 32) else if (queued < 32)
{ {
alGenBuffers(1, &bufid); alGenBuffers(1, &bufid);
} }
@ -575,7 +575,7 @@ void Core::playAudioBuffer(ALuint alSource, const int16_t *data, int samples, un
ALint state; ALint state;
alGetSourcei(alSource, AL_SOURCE_STATE, &state); alGetSourcei(alSource, AL_SOURCE_STATE, &state);
if(state != AL_PLAYING) if (state != AL_PLAYING)
{ {
alSourcePlay(alSource); alSourcePlay(alSource);
//qDebug() << "Core: Starting audio source " << (int)alSource; //qDebug() << "Core: Starting audio source " << (int)alSource;
@ -643,17 +643,17 @@ void Core::sendGroupCallAudio(int groupId, ToxAv* toxav)
bool frame = false; bool frame = false;
ALint samples; ALint samples;
alcGetIntegerv(Audio::alInDev, ALC_CAPTURE_SAMPLES, sizeof(samples), &samples); alcGetIntegerv(Audio::alInDev, ALC_CAPTURE_SAMPLES, sizeof(samples), &samples);
if(samples >= framesize) if (samples >= framesize)
{ {
memset(buf, 0, bufsize); // Avoid uninitialized values (Valgrind) memset(buf, 0, bufsize); // Avoid uninitialized values (Valgrind)
alcCaptureSamples(Audio::alInDev, buf, framesize); alcCaptureSamples(Audio::alInDev, buf, framesize);
frame = 1; frame = 1;
} }
if(frame) if (frame)
{ {
int r; int r;
if((r = toxav_group_send_audio(toxav_get_tox(toxav), groupId, (int16_t*)buf, if ((r = toxav_group_send_audio(toxav_get_tox(toxav), groupId, (int16_t*)buf,
framesize, av_DefaultSettings.audio_channels, av_DefaultSettings.audio_sample_rate)) < 0) framesize, av_DefaultSettings.audio_channels, av_DefaultSettings.audio_sample_rate)) < 0)
{ {
qDebug() << "Core: toxav_group_send_audio error"; qDebug() << "Core: toxav_group_send_audio error";

View File

@ -70,7 +70,7 @@ int main(int argc, char *argv[])
parser.process(a); parser.process(a);
Settings::getInstance(); // Build our Settings singleton as soon as QApplication is ready, not before Settings::getInstance(); // Build our Settings singleton as soon as QApplication is ready, not before
if(parser.isSet("P")) if (parser.isSet("P"))
Settings::getInstance().setCurrentProfile(parser.value("P")); Settings::getInstance().setCurrentProfile(parser.value("P"));
sodium_init(); // For the auto-updater sodium_init(); // For the auto-updater
@ -156,7 +156,7 @@ int main(int argc, char *argv[])
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }
else if(!ipc.isCurrentOwner() && !parser.isSet("P")) else if (!ipc.isCurrentOwner() && !parser.isSet("P"))
{ {
time_t event = ipc.postEvent("$activate"); time_t event = ipc.postEvent("$activate");
ipc.waitUntilProcessed(event); ipc.waitUntilProcessed(event);

View File

@ -129,7 +129,6 @@ void Settings::load()
makeToxPortable = s.value("makeToxPortable", false).toBool(); makeToxPortable = s.value("makeToxPortable", false).toBool();
autostartInTray = s.value("autostartInTray", false).toBool(); autostartInTray = s.value("autostartInTray", false).toBool();
closeToTray = s.value("closeToTray", false).toBool(); closeToTray = s.value("closeToTray", false).toBool();
trayShowsUserStatus = s.value("trayShowsUserStatus", false).toBool();
forceTCP = s.value("forceTCP", false).toBool(); forceTCP = s.value("forceTCP", false).toBool();
useProxy = s.value("useProxy", false).toBool(); useProxy = s.value("useProxy", false).toBool();
proxyAddr = s.value("proxyAddr", "").toString(); proxyAddr = s.value("proxyAddr", "").toString();
@ -168,6 +167,7 @@ void Settings::load()
timestampFormat = s.value("timestampFormat", "hh:mm").toString(); timestampFormat = s.value("timestampFormat", "hh:mm").toString();
minimizeOnClose = s.value("minimizeOnClose", false).toBool(); minimizeOnClose = s.value("minimizeOnClose", false).toBool();
minimizeToTray = s.value("minimizeToTray", false).toBool(); minimizeToTray = s.value("minimizeToTray", false).toBool();
lightTrayIcon = s.value("lightTrayIcon", false).toBool();
useNativeStyle = s.value("nativeStyle", false).toBool(); useNativeStyle = s.value("nativeStyle", false).toBool();
useEmoticons = s.value("useEmoticons", true).toBool(); useEmoticons = s.value("useEmoticons", true).toBool();
statusChangeNotificationEnabled = s.value("statusChangeNotificationEnabled", false).toBool(); statusChangeNotificationEnabled = s.value("statusChangeNotificationEnabled", false).toBool();
@ -281,7 +281,6 @@ void Settings::save(QString path, bool writeFriends)
s.setValue("showSystemTray", showSystemTray); s.setValue("showSystemTray", showSystemTray);
s.setValue("autostartInTray",autostartInTray); s.setValue("autostartInTray",autostartInTray);
s.setValue("closeToTray", closeToTray); s.setValue("closeToTray", closeToTray);
s.setValue("trayShowsUserStatus", trayShowsUserStatus);
s.setValue("useProxy", useProxy); s.setValue("useProxy", useProxy);
s.setValue("forceTCP", forceTCP); s.setValue("forceTCP", forceTCP);
s.setValue("proxyAddr", proxyAddr); s.setValue("proxyAddr", proxyAddr);
@ -317,6 +316,7 @@ void Settings::save(QString path, bool writeFriends)
s.setValue("timestampFormat", timestampFormat); s.setValue("timestampFormat", timestampFormat);
s.setValue("minimizeOnClose", minimizeOnClose); s.setValue("minimizeOnClose", minimizeOnClose);
s.setValue("minimizeToTray", minimizeToTray); s.setValue("minimizeToTray", minimizeToTray);
s.setValue("lightTrayIcon", lightTrayIcon);
s.setValue("nativeStyle", useNativeStyle); s.setValue("nativeStyle", useNativeStyle);
s.setValue("useEmoticons", useEmoticons); s.setValue("useEmoticons", useEmoticons);
s.setValue("themeColor", themeColor); s.setValue("themeColor", themeColor);
@ -521,16 +521,6 @@ void Settings::setCloseToTray(bool newValue)
closeToTray = newValue; closeToTray = newValue;
} }
bool Settings::getTrayShowsUserStatus() const
{
return trayShowsUserStatus;
}
void Settings::setTrayShowsUserStatus(bool newValue)
{
trayShowsUserStatus = newValue;
}
bool Settings::getMinimizeToTray() const bool Settings::getMinimizeToTray() const
{ {
return minimizeToTray; return minimizeToTray;
@ -542,6 +532,16 @@ void Settings::setMinimizeToTray(bool newValue)
minimizeToTray = newValue; minimizeToTray = newValue;
} }
bool Settings::getLightTrayIcon() const
{
return lightTrayIcon;
}
void Settings::setLightTrayIcon(bool newValue)
{
lightTrayIcon = newValue;
}
bool Settings::getStatusChangeNotificationEnabled() const bool Settings::getStatusChangeNotificationEnabled() const
{ {
return statusChangeNotificationEnabled; return statusChangeNotificationEnabled;

View File

@ -58,12 +58,12 @@ public:
bool getCloseToTray() const; bool getCloseToTray() const;
void setCloseToTray(bool newValue); void setCloseToTray(bool newValue);
bool getTrayShowsUserStatus() const;
void setTrayShowsUserStatus(bool newValue);
bool getMinimizeToTray() const; bool getMinimizeToTray() const;
void setMinimizeToTray(bool newValue); void setMinimizeToTray(bool newValue);
bool getLightTrayIcon() const;
void setLightTrayIcon(bool newValue);
QString getStyle() const; QString getStyle() const;
void setStyle(const QString& newValue); void setStyle(const QString& newValue);
@ -247,7 +247,7 @@ private:
bool autostartInTray; bool autostartInTray;
bool closeToTray; bool closeToTray;
bool minimizeToTray; bool minimizeToTray;
bool trayShowsUserStatus; bool lightTrayIcon;
bool useEmoticons; bool useEmoticons;
bool checkUpdates; bool checkUpdates;
bool showInFront; bool showInFront;

View File

@ -69,9 +69,9 @@ QList<QPair<QString, QString> > SmileyPack::listSmileyPacks(const QStringList &p
if (relPath.leftRef(2) == "..") if (relPath.leftRef(2) == "..")
{ {
if(!smileyPacks.contains(QPair<QString, QString>(packageName, absPath))) if (!smileyPacks.contains(QPair<QString, QString>(packageName, absPath)))
smileyPacks << QPair<QString, QString>(packageName, absPath); smileyPacks << QPair<QString, QString>(packageName, absPath);
else if(!smileyPacks.contains(QPair<QString, QString>(packageName, relPath))) else if (!smileyPacks.contains(QPair<QString, QString>(packageName, relPath)))
smileyPacks << QPair<QString, QString>(packageName, relPath); // use relative path for subdirectories smileyPacks << QPair<QString, QString>(packageName, relPath); // use relative path for subdirectories
} }
} }
@ -97,7 +97,7 @@ bool SmileyPack::load(const QString& filename)
// open emoticons.xml // open emoticons.xml
QFile xmlFile(filename); QFile xmlFile(filename);
if(!xmlFile.open(QIODevice::ReadOnly)) if (!xmlFile.open(QIODevice::ReadOnly))
return false; // cannot open file return false; // cannot open file
/* parse the cfg file /* parse the cfg file
@ -138,14 +138,14 @@ bool SmileyPack::load(const QString& filename)
QPixmap pm; QPixmap pm;
pm.loadFromData(getCachedSmiley(emoticon), "PNG"); pm.loadFromData(getCachedSmiley(emoticon), "PNG");
if(pm.size().width() > 0) if (pm.size().width() > 0)
emoticonSet.push_back(emoticon); emoticonSet.push_back(emoticon);
stringElement = stringElement.nextSibling().toElement(); stringElement = stringElement.nextSibling().toElement();
} }
if(emoticonSet.size() > 0) if (emoticonSet.size() > 0)
emoticons.push_back(emoticonSet); emoticons.push_back(emoticonSet);
} }

View File

@ -17,14 +17,14 @@
#include <QDebug> #include <QDebug>
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
#include "src/platform/timer.h" #include "src/platform/timer.h"
#include <Windows.h> #include <windows.h>
uint32_t Platform::getIdleTime() uint32_t Platform::getIdleTime()
{ {
LASTINPUTINFO info = { 0 }; LASTINPUTINFO info = { 0 };
info.cbSize = sizeof(info); info.cbSize = sizeof(info);
if(GetLastInputInfo(&info)) if (GetLastInputInfo(&info))
return GetTickCount() - info.dwTime; return GetTickCount() - info.dwTime;
return 0; return 0;
} }

View File

@ -25,7 +25,7 @@ uint32_t Platform::getIdleTime()
uint32_t idleTime = 0; uint32_t idleTime = 0;
Display *display = XOpenDisplay(NULL); Display *display = XOpenDisplay(NULL);
if(!display) if (!display)
{ {
qDebug() << "XOpenDisplay(NULL) failed"; qDebug() << "XOpenDisplay(NULL) failed";
return 0; return 0;
@ -33,10 +33,10 @@ uint32_t Platform::getIdleTime()
int32_t x11event = 0, x11error = 0; int32_t x11event = 0, x11error = 0;
static int32_t hasExtension = XScreenSaverQueryExtension(display, &x11event, &x11error); static int32_t hasExtension = XScreenSaverQueryExtension(display, &x11event, &x11error);
if(hasExtension) if (hasExtension)
{ {
XScreenSaverInfo *info = XScreenSaverAllocInfo(); XScreenSaverInfo *info = XScreenSaverAllocInfo();
if(info) if (info)
{ {
XScreenSaverQueryInfo(display, DefaultRootWindow(display), info); XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
idleTime = info->idle; idleTime = info->idle;

View File

@ -129,7 +129,7 @@ void CameraWorker::applyProps()
if (!cam.isOpened()) if (!cam.isOpened())
return; return;
for(int prop : props.keys()) for (int prop : props.keys())
cam.set(prop, props.value(prop)); cam.set(prop, props.value(prop));
} }
@ -148,7 +148,7 @@ void CameraWorker::subscribe()
void CameraWorker::unsubscribe() void CameraWorker::unsubscribe()
{ {
if(--refCount <= 0) if (--refCount <= 0)
{ {
cam.release(); cam.release();
refCount = 0; refCount = 0;

View File

@ -87,6 +87,7 @@ void ChatAreaWidget::mouseReleaseEvent(QMouseEvent * event)
} }
} }
} }
emit onClick();
} }
void ChatAreaWidget::onAnchorClicked(const QUrl &url) void ChatAreaWidget::onAnchorClicked(const QUrl &url)

View File

@ -41,6 +41,7 @@ public slots:
signals: signals:
void onFileTranfertInterract(QString widgetName, QString buttonName); void onFileTranfertInterract(QString widgetName, QString buttonName);
void onClick();
protected: protected:
void mouseReleaseEvent(QMouseEvent * event); void mouseReleaseEvent(QMouseEvent * event);

View File

@ -673,7 +673,7 @@ void ChatForm::onFileSendFailed(int FriendId, const QString &fname)
if (FriendId != f->getFriendID()) if (FriendId != f->getFriendID())
return; return;
addSystemInfoMessage("File: \"" + fname + "\" failed to send.", "red", QDateTime::currentDateTime()); addSystemInfoMessage(tr("Failed to send file \"%1\"").arg(fname), "red", QDateTime::currentDateTime());
} }
void ChatForm::onAvatarChange(int FriendId, const QPixmap &pic) void ChatForm::onAvatarChange(int FriendId, const QPixmap &pic)
@ -793,7 +793,7 @@ void ChatForm::onLoadHistory()
void ChatForm::startCounter() void ChatForm::startCounter()
{ {
if(!timer) if (!timer)
{ {
timer = new QTimer(); timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(updateTime())); connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));
@ -805,7 +805,7 @@ void ChatForm::startCounter()
void ChatForm::stopCounter() void ChatForm::stopCounter()
{ {
if(timer) if (timer)
{ {
addSystemInfoMessage(tr("Call with %1 ended. %2").arg(f->getDisplayedName(), addSystemInfoMessage(tr("Call with %1 ended. %2").arg(f->getDisplayedName(),
secondsToDHMS(timeElapsed.elapsed()/1000)), secondsToDHMS(timeElapsed.elapsed()/1000)),
@ -834,10 +834,10 @@ QString ChatForm::secondsToDHMS(quint32 duration)
int hours = (int) (duration % 24); int hours = (int) (duration % 24);
int days = (int) (duration / 24); int days = (int) (duration / 24);
if(minutes == 0) if (minutes == 0)
return cD + res.sprintf("%02ds", seconds); return cD + res.sprintf("%02ds", seconds);
if(hours == 0 && days == 0) if (hours == 0 && days == 0)
return cD + res.sprintf("%02dm %02ds", minutes, seconds); return cD + res.sprintf("%02dm %02ds", minutes, seconds);
if (days == 0) if (days == 0)

View File

@ -152,6 +152,7 @@ GenericChatForm::GenericChatForm(QWidget *parent) :
connect(emoteButton, SIGNAL(clicked()), this, SLOT(onEmoteButtonClicked())); connect(emoteButton, SIGNAL(clicked()), this, SLOT(onEmoteButtonClicked()));
connect(chatWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onChatContextMenuRequested(QPoint))); connect(chatWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onChatContextMenuRequested(QPoint)));
connect(chatWidget, SIGNAL(onClick()), this, SLOT(onChatWidgetClicked()));
chatWidget->document()->setDefaultStyleSheet(Style::getStylesheet(":ui/chatArea/innerStyle.css")); chatWidget->document()->setDefaultStyleSheet(Style::getStylesheet(":ui/chatArea/innerStyle.css"));
chatWidget->setStyleSheet(Style::getStylesheet(":/ui/chatArea/chatArea.css")); chatWidget->setStyleSheet(Style::getStylesheet(":/ui/chatArea/chatArea.css"));
@ -252,6 +253,11 @@ void GenericChatForm::onEmoteButtonClicked()
} }
} }
void GenericChatForm::onChatWidgetClicked()
{
msgEdit->setFocus();
}
void GenericChatForm::onEmoteInsertRequested(QString str) void GenericChatForm::onEmoteInsertRequested(QString str)
{ {
// insert the emoticon // insert the emoticon

View File

@ -69,6 +69,7 @@ protected slots:
void onEmoteButtonClicked(); void onEmoteButtonClicked();
void onEmoteInsertRequested(QString str); void onEmoteInsertRequested(QString str);
void clearChatArea(bool); void clearChatArea(bool);
void onChatWidgetClicked();
protected: protected:
QString getElidedName(const QString& name); QString getElidedName(const QString& name);

View File

@ -209,11 +209,8 @@ void GroupChatForm::onCallClicked()
void GroupChatForm::keyPressEvent(QKeyEvent* ev) void GroupChatForm::keyPressEvent(QKeyEvent* ev)
{ {
if (msgEdit->hasFocus()) // Push to talk (CTRL+P)
return; if (ev->key() == Qt::Key_P && (ev->modifiers() & Qt::ControlModifier) && inCall)
// Push to talk
if (ev->key() == Qt::Key_P && inCall)
{ {
Core* core = Core::getInstance(); Core* core = Core::getInstance();
if (!core->isGroupCallMicEnabled(group->getGroupId())) if (!core->isGroupCallMicEnabled(group->getGroupId()))
@ -224,15 +221,15 @@ void GroupChatForm::keyPressEvent(QKeyEvent* ev)
Style::repolish(micButton); Style::repolish(micButton);
} }
} }
if (msgEdit->hasFocus())
return;
} }
void GroupChatForm::keyReleaseEvent(QKeyEvent* ev) void GroupChatForm::keyReleaseEvent(QKeyEvent* ev)
{ {
if (msgEdit->hasFocus()) // Push to talk (CTRL+P)
return; if (ev->key() == Qt::Key_P && (ev->modifiers() & Qt::ControlModifier) && inCall)
// Push to talk
if (ev->key() == Qt::Key_P && inCall)
{ {
Core* core = Core::getInstance(); Core* core = Core::getInstance();
if (core->isGroupCallMicEnabled(group->getGroupId())) if (core->isGroupCallMicEnabled(group->getGroupId()))
@ -243,4 +240,7 @@ void GroupChatForm::keyReleaseEvent(QKeyEvent* ev)
Style::repolish(micButton); Style::repolish(micButton);
} }
} }
if (msgEdit->hasFocus())
return;
} }

View File

@ -62,8 +62,8 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
bodyUI->closeToTray->setEnabled(showSystemTray); bodyUI->closeToTray->setEnabled(showSystemTray);
bodyUI->minimizeToTray->setChecked(Settings::getInstance().getMinimizeToTray()); bodyUI->minimizeToTray->setChecked(Settings::getInstance().getMinimizeToTray());
bodyUI->minimizeToTray->setEnabled(showSystemTray); bodyUI->minimizeToTray->setEnabled(showSystemTray);
bodyUI->trayShowsUserStatus->setChecked(Settings::getInstance().getTrayShowsUserStatus()); bodyUI->lightTrayIcon->setChecked(Settings::getInstance().getLightTrayIcon());
bodyUI->trayShowsUserStatus->setEnabled(showSystemTray); bodyUI->lightTrayIcon->setEnabled(showSystemTray);
bodyUI->statusChanges->setChecked(Settings::getInstance().getStatusChangeNotificationEnabled()); bodyUI->statusChanges->setChecked(Settings::getInstance().getStatusChangeNotificationEnabled());
bodyUI->useEmoticons->setChecked(Settings::getInstance().getUseEmoticons()); bodyUI->useEmoticons->setChecked(Settings::getInstance().getUseEmoticons());
bodyUI->autoacceptFiles->setChecked(Settings::getInstance().getAutoSaveEnabled()); bodyUI->autoacceptFiles->setChecked(Settings::getInstance().getAutoSaveEnabled());
@ -81,7 +81,7 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
bodyUI->styleBrowser->addItem(tr("None")); bodyUI->styleBrowser->addItem(tr("None"));
bodyUI->styleBrowser->addItems(QStyleFactory::keys()); bodyUI->styleBrowser->addItems(QStyleFactory::keys());
if(QStyleFactory::keys().contains(Settings::getInstance().getStyle())) if (QStyleFactory::keys().contains(Settings::getInstance().getStyle()))
bodyUI->styleBrowser->setCurrentText(Settings::getInstance().getStyle()); bodyUI->styleBrowser->setCurrentText(Settings::getInstance().getStyle());
else else
bodyUI->styleBrowser->setCurrentText(tr("None")); bodyUI->styleBrowser->setCurrentText(tr("None"));
@ -122,12 +122,12 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
connect(bodyUI->startInTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetAutostartInTray); connect(bodyUI->startInTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetAutostartInTray);
connect(bodyUI->closeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetCloseToTray); connect(bodyUI->closeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetCloseToTray);
connect(bodyUI->minimizeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetMinimizeToTray); connect(bodyUI->minimizeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetMinimizeToTray);
connect(bodyUI->trayShowsUserStatus, &QCheckBox::stateChanged, this, &GeneralForm::onSettrayShowsUserStatus); connect(bodyUI->lightTrayIcon, &QCheckBox::stateChanged, this, &GeneralForm::onSetLightTrayIcon);
connect(bodyUI->statusChanges, &QCheckBox::stateChanged, this, &GeneralForm::onSetStatusChange); connect(bodyUI->statusChanges, &QCheckBox::stateChanged, this, &GeneralForm::onSetStatusChange);
connect(bodyUI->autoAwaySpinBox, SIGNAL(editingFinished()), this, SLOT(onAutoAwayChanged())); connect(bodyUI->autoAwaySpinBox, SIGNAL(editingFinished()), this, SLOT(onAutoAwayChanged()));
connect(bodyUI->showInFront, &QCheckBox::stateChanged, this, &GeneralForm::onSetShowInFront); connect(bodyUI->showInFront, &QCheckBox::stateChanged, this, &GeneralForm::onSetShowInFront);
connect(bodyUI->autoacceptFiles, &QCheckBox::stateChanged, this, &GeneralForm::onAutoAcceptFileChange); connect(bodyUI->autoacceptFiles, &QCheckBox::stateChanged, this, &GeneralForm::onAutoAcceptFileChange);
if(bodyUI->autoacceptFiles->isChecked()) if (bodyUI->autoacceptFiles->isChecked())
connect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()), this, SLOT(onAutoSaveDirChange())); connect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()), this, SLOT(onAutoSaveDirChange()));
//theme //theme
connect(bodyUI->useEmoticons, &QCheckBox::stateChanged, this, &GeneralForm::onUseEmoticonsChange); connect(bodyUI->useEmoticons, &QCheckBox::stateChanged, this, &GeneralForm::onUseEmoticonsChange);
@ -188,20 +188,20 @@ void GeneralForm::onSetCloseToTray()
Settings::getInstance().setCloseToTray(bodyUI->closeToTray->isChecked()); Settings::getInstance().setCloseToTray(bodyUI->closeToTray->isChecked());
} }
void GeneralForm::onSetLightTrayIcon()
{
Settings::getInstance().setLightTrayIcon(bodyUI->lightTrayIcon->isChecked());
Widget::getInstance()->updateTrayIcon();
}
void GeneralForm::onSetMinimizeToTray() void GeneralForm::onSetMinimizeToTray()
{ {
Settings::getInstance().setMinimizeToTray(bodyUI->minimizeToTray->isChecked()); Settings::getInstance().setMinimizeToTray(bodyUI->minimizeToTray->isChecked());
} }
void GeneralForm::onSettrayShowsUserStatus()
{
Settings::getInstance().setTrayShowsUserStatus(bodyUI->trayShowsUserStatus->isChecked());
Widget::getInstance()->updateTrayIcon();
}
void GeneralForm::onStyleSelected(QString style) void GeneralForm::onStyleSelected(QString style)
{ {
if(bodyUI->styleBrowser->currentIndex() == 0) if (bodyUI->styleBrowser->currentIndex() == 0)
Settings::getInstance().setStyle("None"); Settings::getInstance().setStyle("None");
else else
Settings::getInstance().setStyle(style); Settings::getInstance().setStyle(style);
@ -230,7 +230,7 @@ void GeneralForm::onAutoAcceptFileChange()
{ {
Settings::getInstance().setAutoSaveEnabled(bodyUI->autoacceptFiles->isChecked()); Settings::getInstance().setAutoSaveEnabled(bodyUI->autoacceptFiles->isChecked());
if(bodyUI->autoacceptFiles->isChecked() == true) if (bodyUI->autoacceptFiles->isChecked() == true)
connect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()), this, SLOT(onAutoSaveDirChange())); connect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()), this, SLOT(onAutoSaveDirChange()));
else else
disconnect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()),this, SLOT(onAutoSaveDirChange())); disconnect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()),this, SLOT(onAutoSaveDirChange()));
@ -240,7 +240,7 @@ void GeneralForm::onAutoSaveDirChange()
{ {
QString previousDir = Settings::getInstance().getGlobalAutoAcceptDir(); QString previousDir = Settings::getInstance().getGlobalAutoAcceptDir();
QString directory = QFileDialog::getExistingDirectory(0, tr("Choose an auto accept directory","popup title")); QString directory = QFileDialog::getExistingDirectory(0, tr("Choose an auto accept directory","popup title"));
if(directory.isEmpty()) if (directory.isEmpty())
directory = previousDir; directory = previousDir;
Settings::getInstance().setGlobalAutoAcceptDir(directory); Settings::getInstance().setGlobalAutoAcceptDir(directory);
@ -308,7 +308,7 @@ void GeneralForm::reloadSmiles()
QStringList smiles; QStringList smiles;
smiles << ":)" << ";)" << ":p" << ":O" << ":["; //just in case... smiles << ":)" << ";)" << ":p" << ":O" << ":["; //just in case...
for(int i = 0; i < emoticons.size(); i++) for (int i = 0; i < emoticons.size(); i++)
smiles.push_front(emoticons.at(i).first()); smiles.push_front(emoticons.at(i).first());
int pixSize = 30; int pixSize = 30;

View File

@ -37,6 +37,7 @@ private slots:
void onSetShowSystemTray(); void onSetShowSystemTray();
void onSetAutostartInTray(); void onSetAutostartInTray();
void onSetCloseToTray(); void onSetCloseToTray();
void onSetLightTrayIcon();
void onSmileyBrowserIndexChanged(int index); void onSmileyBrowserIndexChanged(int index);
void onUDPUpdated(); void onUDPUpdated();
void onProxyAddrEdited(); void onProxyAddrEdited();
@ -49,7 +50,6 @@ private slots:
void onAutoAwayChanged(); void onAutoAwayChanged();
void onUseEmoticonsChange(); void onUseEmoticonsChange();
void onSetMinimizeToTray(); void onSetMinimizeToTray();
void onSettrayShowsUserStatus();
void onReconnectClicked(); void onReconnectClicked();
void onAutoAcceptFileChange(); void onAutoAcceptFileChange();
void onAutoSaveDirChange(); void onAutoSaveDirChange();

View File

@ -39,8 +39,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>509</width> <width>513</width>
<height>849</height> <height>819</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,0,1"> <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,0,1">
@ -109,7 +109,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0" colspan="2">
<layout class="QHBoxLayout" name="trayBehavior"> <layout class="QHBoxLayout" name="trayBehavior">
<item> <item>
<widget class="QCheckBox" name="startInTray"> <widget class="QCheckBox" name="startInTray">
@ -152,19 +152,10 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="2" column="0"> <item row="0" column="1">
<widget class="QCheckBox" name="trayShowsUserStatus"> <widget class="QCheckBox" name="lightTrayIcon">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Tray icon displays user status</string> <string>Light icon</string>
</property>
<property name="toolTip">
<string>This is a temporary work around until proper systray status icons are available.</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -607,21 +598,5 @@
</hint> </hint>
</hints> </hints>
</connection> </connection>
<connection>
<sender>showSystemTray</sender>
<signal>toggled(bool)</signal>
<receiver>trayShowsUserStatus</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>148</x>
<y>143</y>
</hint>
<hint type="destinationlabel">
<x>158</x>
<y>205</y>
</hint>
</hints>
</connection>
</connections> </connections>
</ui> </ui>

View File

@ -52,7 +52,7 @@ void TabCompleter::buildCompletionList()
// that section is then used as the completion regex // that section is then used as the completion regex
QRegExp regex(QString("^[-_\\[\\]{}|`^.\\\\]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive); QRegExp regex(QString("^[-_\\[\\]{}|`^.\\\\]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive);
for(auto name : group->getPeerList()) for (auto name : group->getPeerList())
if (regex.indexIn(name) > -1) if (regex.indexIn(name) > -1)
completionMap[name.toLower()] = name; completionMap[name.toLower()] = name;

View File

@ -130,6 +130,6 @@ void MaskablePixmapWidget::paintEvent(QPaintEvent *)
void MaskablePixmapWidget::mousePressEvent(QMouseEvent*) void MaskablePixmapWidget::mousePressEvent(QMouseEvent*)
{ {
if(clickable) if (clickable)
emit clicked(); emit clicked();
} }

View File

@ -29,7 +29,7 @@ MessageAction::MessageAction(const QString &author, const QString &message, cons
QString MessageAction::getMessage(QString div) QString MessageAction::getMessage(QString div)
{ {
QString message_; QString message_;
if(Settings::getInstance().getUseEmoticons()) if (Settings::getInstance().getUseEmoticons())
message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message)); message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message));
else else
message_ = toHtmlChars(message); message_ = toHtmlChars(message);

View File

@ -54,7 +54,7 @@
void toxActivateEventHandler(const QByteArray& data) void toxActivateEventHandler(const QByteArray& data)
{ {
if(data != "$activate") if (data != "$activate")
return; return;
Widget::getInstance()->show(); Widget::getInstance()->show();
Widget::getInstance()->activateWindow(); Widget::getInstance()->activateWindow();
@ -116,7 +116,7 @@ void Widget::init()
if (Settings::getInstance().getShowSystemTray()){ if (Settings::getInstance().getShowSystemTray()){
icon->show(); icon->show();
if(Settings::getInstance().getAutostartInTray() == false) if (Settings::getInstance().getAutostartInTray() == false)
this->show(); this->show();
} }
else else
@ -125,7 +125,8 @@ void Widget::init()
} }
else else
{ {
qWarning() << "No system tray detected!"; qWarning() << "Widget: No system tray detected!";
icon = nullptr;
this->show(); this->show();
} }
@ -148,7 +149,7 @@ void Widget::init()
ui->tooliconsZone->setStyleSheet(Style::resolve("QPushButton{background-color:@themeDark;border:none;}QPushButton:hover{background-color:@themeMediumDark;border:none;}")); ui->tooliconsZone->setStyleSheet(Style::resolve("QPushButton{background-color:@themeDark;border:none;}QPushButton:hover{background-color:@themeMediumDark;border:none;}"));
if(QStyleFactory::keys().contains(Settings::getInstance().getStyle()) if (QStyleFactory::keys().contains(Settings::getInstance().getStyle())
&& Settings::getInstance().getStyle() != "None") && Settings::getInstance().getStyle() != "None")
{ {
ui->mainHead->setStyle(QStyleFactory::create(Settings::getInstance().getStyle())); ui->mainHead->setStyle(QStyleFactory::create(Settings::getInstance().getStyle()));
@ -295,22 +296,20 @@ void Widget::setTranslation()
void Widget::updateTrayIcon() void Widget::updateTrayIcon()
{ {
if(Settings::getInstance().getTrayShowsUserStatus()) if (!icon)
{ return;
QString status = ui->statusButton->property("status").toString(); QString status = ui->statusButton->property("status").toString();
QString icon; QString pic;
if(status == "online") QString color = Settings::getInstance().getLightTrayIcon() ? "light" : "dark";
icon = ":img/status/dot_online_2x.png"; if (status == "online")
else if(status == "away") pic = ":img/taskbar/" + color + "/taskbar_online_2x.png";
icon = ":img/status/dot_idle_2x.png"; else if (status == "away")
else if(status == "busy") pic = ":img/taskbar/" + color + "/taskbar_idle_2x.png";
icon = ":img/status/dot_busy_2x.png"; else if (status == "busy")
else pic = ":img/taskbar/" + color + "/taskbar_busy_2x.png";
icon = ":img/status/dot_away_2x.png";
this->icon->setIcon(QIcon(icon));
}
else else
icon->setIcon(windowIcon()); pic = ":img/taskbar/" + color + "/taskbar_offline_2x.png";
icon->setIcon(QIcon(pic));
} }
Widget::~Widget() Widget::~Widget()
@ -350,7 +349,7 @@ QThread* Widget::getCoreThread()
void Widget::closeEvent(QCloseEvent *event) void Widget::closeEvent(QCloseEvent *event)
{ {
if(Settings::getInstance().getShowSystemTray() && Settings::getInstance().getCloseToTray() == true) if (Settings::getInstance().getShowSystemTray() && Settings::getInstance().getCloseToTray() == true)
{ {
event->ignore(); event->ignore();
this->hide(); this->hide();
@ -367,7 +366,7 @@ void Widget::changeEvent(QEvent *event)
{ {
if (event->type() == QEvent::WindowStateChange) if (event->type() == QEvent::WindowStateChange)
{ {
if(isMinimized() && Settings::getInstance().getMinimizeToTray()) if (isMinimized() && Settings::getInstance().getMinimizeToTray())
{ {
this->hide(); this->hide();
} }
@ -417,7 +416,7 @@ QList<QString> Widget::searchProfiles()
QDir dir(Settings::getSettingsDirPath()); QDir dir(Settings::getSettingsDirPath());
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot); dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
dir.setNameFilters(QStringList("*.tox")); dir.setNameFilters(QStringList("*.tox"));
for(QFileInfo file : dir.entryInfoList()) for (QFileInfo file : dir.entryInfoList())
out += file.completeBaseName(); out += file.completeBaseName();
return out; return out;
} }
@ -593,7 +592,7 @@ void Widget::onIconClick(QSystemTrayIcon::ActivationReason reason)
{ {
switch (reason) { switch (reason) {
case QSystemTrayIcon::Trigger: case QSystemTrayIcon::Trigger:
if(this->isHidden() == true) if (this->isHidden() == true)
{ {
this->show(); this->show();
this->activateWindow(); this->activateWindow();
@ -714,7 +713,7 @@ void Widget::addFriend(int friendId, const QString &userId)
void Widget::addFriendFailed(const QString&, const QString& errorInfo) void Widget::addFriendFailed(const QString&, const QString& errorInfo)
{ {
QString info = QString(tr("Couldn't request friendship")); QString info = QString(tr("Couldn't request friendship"));
if(!errorInfo.isEmpty()) { if (!errorInfo.isEmpty()) {
info = info + (QString(": ") + errorInfo); info = info + (QString(": ") + errorInfo);
} }
@ -735,7 +734,7 @@ void Widget::onFriendStatusChanged(int friendId, Status status)
f->getFriendWidget()->updateStatusLight(); f->getFriendWidget()->updateStatusLight();
//won't print the message if there were no messages before //won't print the message if there were no messages before
if(!f->getChatForm()->isEmpty() if (!f->getChatForm()->isEmpty()
&& Settings::getInstance().getStatusChangeNotificationEnabled()) && Settings::getInstance().getStatusChangeNotificationEnabled())
{ {
QString fStatus = ""; QString fStatus = "";

31
translations/de.ts vendored
View File

@ -36,6 +36,11 @@
<source>Capture device</source> <source>Capture device</source>
<translation>Aufnahmegerät</translation> <translation>Aufnahmegerät</translation>
</message> </message>
<message>
<location filename="../src/widget/form/settings/avsettings.ui" line="95"/>
<source>Rescan audio devices</source>
<translation>Erneut nach Audiogeräten suchen</translation>
</message>
<message> <message>
<location filename="../src/widget/form/settings/avsettings.ui" line="98"/> <location filename="../src/widget/form/settings/avsettings.ui" line="98"/>
<source>Video Settings</source> <source>Video Settings</source>
@ -252,6 +257,11 @@ Soll der Proxy ignoriert und eine direkte Internetverbindung genutzt werden?</tr
<source>Call rejected</source> <source>Call rejected</source>
<translation>Anruf abgewiesen</translation> <translation>Anruf abgewiesen</translation>
</message> </message>
<message>
<location filename="../src/widget/form/chatform.cpp" line="676"/>
<source>Failed to send file</source>
<translation>Fehler beim Senden der Datei</translation>
</message>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="804"/> <location filename="../src/widget/form/chatform.cpp" line="804"/>
<source>Call with %1 ended. %2</source> <source>Call with %1 ended. %2</source>
@ -594,29 +604,34 @@ Wollen Sie ein anderes probieren?</translation>
<translation>Mache Tox portabel</translation> <translation>Mache Tox portabel</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="101"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="99"/>
<source>Show system tray</source> <source>System tray integration</source>
<translation>Systemtray Integration</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="108"/>
<source>Show system tray icon</source>
<translation>Im Systemtray zeigen</translation> <translation>Im Systemtray zeigen</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="114"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="123"/>
<source>Start in tray</source> <source>Start in tray</source>
<translation>Ins Tray starten</translation> <translation>Ins Tray starten</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="127"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="136"/>
<source>Close to tray</source> <source>Close to tray</source>
<translation>Ins Tray schließen</translation> <translation>Ins Tray schließen</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="140"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="149"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Ins Tray minimieren</translation> <translation>Ins Tray minimieren</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="149"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="149"/>
<source>Show contacts&apos; status changes</source> <source>Show contacts&apos; status changes</source>
<translation>Zeige Statusänderungen der Kontakte</translation> <translation>Zeigt Statusänderungen der Kontakte</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="156"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="156"/>
@ -626,7 +641,7 @@ Wollen Sie ein anderes probieren?</translation>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="163"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="163"/>
<source>Focus qTox when a message is received</source> <source>Focus qTox when a message is received</source>
<translation>Bringe qTox in den Vordergrund, wenn eine Nachricht eintrifft</translation> <translation>Bringt qTox in den Vordergrund, wenn eine Nachricht eintrifft</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="170"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="170"/>
@ -1629,4 +1644,4 @@ Es wird beim Neustart von qTox installiert.</translation>
<translation>Senden der Nachricht fehlgeschlagen</translation> <translation>Senden der Nachricht fehlgeschlagen</translation>
</message> </message>
</context> </context>
</TS> </TS>

140
translations/fr.ts vendored
View File

@ -76,13 +76,13 @@
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="34"/> <location filename="../src/widget/form/addfriendform.cpp" line="34"/>
<source>Add Friends</source> <source>Add Friends</source>
<translation>Ajouter des amis</translation> <translation>Ajouter des contacts</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="37"/> <location filename="../src/widget/form/addfriendform.cpp" line="37"/>
<source>Tox ID</source> <source>Tox ID</source>
<comment>Tox ID of the person you&apos;re sending a friend request to</comment> <comment>Tox ID of the person you&apos;re sending a friend request to</comment>
<translation>ID Tox</translation> <translation>Tox ID</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="38"/> <location filename="../src/widget/form/addfriendform.cpp" line="38"/>
@ -93,25 +93,25 @@
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="39"/> <location filename="../src/widget/form/addfriendform.cpp" line="39"/>
<source>Send friend request</source> <source>Send friend request</source>
<translation>Envoyer la demande d&apos;ami</translation> <translation>Envoyer la demande de contact</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="40"/> <location filename="../src/widget/form/addfriendform.cpp" line="40"/>
<source>Tox me maybe?</source> <source>Tox me maybe?</source>
<comment>Default message in friend requests if the field is left blank. Write something appropriate!</comment> <comment>Default message in friend requests if the field is left blank. Write something appropriate!</comment>
<translation>Je souhaiterais vous ajouter à mes contacts</translation> <translation>Je souhaiterais vous ajouter à mes contacts.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="89"/> <location filename="../src/widget/form/addfriendform.cpp" line="89"/>
<source>Please fill in a valid Tox ID</source> <source>Please fill in a valid Tox ID</source>
<comment>Tox ID of the friend you&apos;re sending a friend request to</comment> <comment>Tox ID of the friend you&apos;re sending a friend request to</comment>
<translation>Merci de remplir un ID Tox valide</translation> <translation>Merci d&apos;entrer un Tox ID valide</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="92"/> <location filename="../src/widget/form/addfriendform.cpp" line="92"/>
<source>You can&apos;t add yourself as a friend!</source> <source>You can&apos;t add yourself as a friend!</source>
<comment>When trying to add your own Tox ID as friend</comment> <comment>When trying to add your own Tox ID as friend</comment>
<translation>Vous ne pouvez pas vous ajouter vous même en temps qu&apos;ami!</translation> <translation>Vous ne pouvez pas vous ajouter vous-même !</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="100"/> <location filename="../src/widget/form/addfriendform.cpp" line="100"/>
@ -123,19 +123,19 @@ Ignorer le proxy et se connecter directement à Internet ?</translation>
<message> <message>
<source>qTox needs to use the Tox DNS, but can&apos;t do it through a proxy <source>qTox needs to use the Tox DNS, but can&apos;t do it through a proxy
Ignore the proxy and connect to the Internet directly ?</source> Ignore the proxy and connect to the Internet directly ?</source>
<translation type="vanished">qTox as besoin d&apos;utiliser le DNS Tox, mais ne peut pas le faire avec un proxy <translation type="vanished">qTox a besoin d&apos;utiliser le DNS Tox, mais ne peut pas le faire avec un proxy
Ignorer le proxy et se connecter directement à Internet ?</translation> Ignorer le proxy et se connecter directement à Internet ?</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/addfriendform.cpp" line="110"/> <location filename="../src/widget/form/addfriendform.cpp" line="110"/>
<source>This Tox ID does not exist</source> <source>This Tox ID does not exist</source>
<comment>DNS error</comment> <comment>DNS error</comment>
<translation>Cet ID Tox n&apos;existe pas</translation> <translation>Ce Tox ID n&apos;existe pas</translation>
</message> </message>
<message> <message>
<source>This address does not exist</source> <source>This address does not exist</source>
<comment>The DNS gives the Tox ID associated to toxme.se addresses</comment> <comment>The DNS gives the Tox ID associated to toxme.se addresses</comment>
<translation type="vanished">Cette addresse n&apos;existe pas</translation> <translation type="vanished">Cette adresse n&apos;existe pas</translation>
</message> </message>
<message> <message>
<source>Error while looking up DNS</source> <source>Error while looking up DNS</source>
@ -178,22 +178,22 @@ Ignorer le proxy et se connecter directement à Internet ?</translation>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="148"/> <location filename="../src/widget/form/chatform.cpp" line="148"/>
<source>Bad Idea</source> <source>Bad Idea</source>
<translation>Mauvaise Idée</translation> <translation>Mauvaise idée</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="148"/> <location filename="../src/widget/form/chatform.cpp" line="148"/>
<source>You&apos;re trying to send a special (sequential) file, that&apos;s not going to work!</source> <source>You&apos;re trying to send a special (sequential) file, that&apos;s not going to work!</source>
<translation>Vous êtes en train d&apos;essayer d&apos;envoyer un fichier spécial (sequentiel), ça ne marchera pas!</translation> <translation>Vous êtes en train d&apos;essayer d&apos;envoyer un fichier spécial (sequentiel), ça ne fonctionnera pas !</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="254"/> <location filename="../src/widget/form/chatform.cpp" line="254"/>
<source>%1 calling</source> <source>%1 calling</source>
<translation>%1 appelle</translation> <translation>%1 appel</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="323"/> <location filename="../src/widget/form/chatform.cpp" line="323"/>
<source>%1 stopped calling</source> <source>%1 stopped calling</source>
<translation>%1a arreté l&apos;appel</translation> <translation>%1 a arreté l&apos;appel</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="379"/> <location filename="../src/widget/form/chatform.cpp" line="379"/>
@ -229,7 +229,7 @@ Ignorer le proxy et se connecter directement à Internet ?</translation>
<message> <message>
<location filename="../src/core.cpp" line="256"/> <location filename="../src/core.cpp" line="256"/>
<source>Toxing on qTox</source> <source>Toxing on qTox</source>
<translation>Toxer avec qTox</translation> <translation>Je Tox sur qTox</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="257"/> <location filename="../src/core.cpp" line="257"/>
@ -239,7 +239,7 @@ Ignorer le proxy et se connecter directement à Internet ?</translation>
<message> <message>
<location filename="../src/core.cpp" line="746"/> <location filename="../src/core.cpp" line="746"/>
<source>Friend is already added</source> <source>Friend is already added</source>
<translation>Cet ami est déjà dans cos contact</translation> <translation>Ce contact est déjà dans vos contacts</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1176"/> <location filename="../src/core.cpp" line="1176"/>
@ -249,7 +249,7 @@ Ignorer le proxy et se connecter directement à Internet ?</translation>
<message> <message>
<location filename="../src/core.cpp" line="1176"/> <location filename="../src/core.cpp" line="1176"/>
<source>The .tox file is encrypted, but encryption was not checked, continuing regardless.</source> <source>The .tox file is encrypted, but encryption was not checked, continuing regardless.</source>
<translation>Le fichier .tox est chiffré, mais l&apos;encryption n&apos;as pas été activée. Le problème sera ignoré.</translation> <translation>Le fichier .tox est chiffré, mais le chiffrement n&apos;a pas été activé. Le problème sera ignoré.</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1183"/> <location filename="../src/core.cpp" line="1183"/>
@ -261,14 +261,14 @@ Ignorer le proxy et se connecter directement à Internet ?</translation>
<location filename="../src/core.cpp" line="1197"/> <location filename="../src/core.cpp" line="1197"/>
<location filename="../src/core.cpp" line="1261"/> <location filename="../src/core.cpp" line="1261"/>
<source>Password error</source> <source>Password error</source>
<translation>Mod de passe invalide</translation> <translation>Mot de passe invalide</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1185"/> <location filename="../src/core.cpp" line="1185"/>
<location filename="../src/core.cpp" line="1261"/> <location filename="../src/core.cpp" line="1261"/>
<source>Failed to setup password. <source>Failed to setup password.
Empty password.</source> Empty password.</source>
<translation>Impossible de mettre ne place le mot de passe. <translation>Impossible de mettre en place le mot de passe.
Le mot de passe est vide.</translation> Le mot de passe est vide.</translation>
</message> </message>
<message> <message>
@ -289,7 +289,7 @@ Le mot de passe est vide.</translation>
<message> <message>
<location filename="../src/core.cpp" line="1198"/> <location filename="../src/core.cpp" line="1198"/>
<source>Wrong password has been entered</source> <source>Wrong password has been entered</source>
<translation>Un mauvais mot de passe à été entré</translation> <translation>Un mauvais mot de passe a été entré</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1259"/> <location filename="../src/core.cpp" line="1259"/>
@ -316,7 +316,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/core.cpp" line="1277"/> <location filename="../src/core.cpp" line="1277"/>
<source>Due to incorret password logging will be disabled</source> <source>Due to incorret password logging will be disabled</source>
<translation>À cause d&apos;un mauvais mot de passe, l&apos;historique sera désactivé</translation> <translation>Due à l&apos;utilisation d&apos;un mauvais mot de passe, l&apos;historique sera désactivé</translation>
</message> </message>
<message> <message>
<location filename="../src/core.cpp" line="1350"/> <location filename="../src/core.cpp" line="1350"/>
@ -326,7 +326,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/core.cpp" line="1350"/> <location filename="../src/core.cpp" line="1350"/>
<source>Will be saved without encryption!</source> <source>Will be saved without encryption!</source>
<translation>L&apos;historique sera sauvegardé sans être chiffré!</translation> <translation>L&apos;historique sera sauvegardé sans être chiffré !</translation>
</message> </message>
</context> </context>
<context> <context>
@ -380,12 +380,12 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/tool/friendrequestdialog.cpp" line="30"/> <location filename="../src/widget/tool/friendrequestdialog.cpp" line="30"/>
<source>Friend request</source> <source>Friend request</source>
<comment>Title of the window to aceept/deny a friend request</comment> <comment>Title of the window to aceept/deny a friend request</comment>
<translation>Demande d&apos;ami</translation> <translation>Demande de contact</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/tool/friendrequestdialog.cpp" line="32"/> <location filename="../src/widget/tool/friendrequestdialog.cpp" line="32"/>
<source>Someone wants to make friends with you</source> <source>Someone wants to make friends with you</source>
<translation>Quelqu&apos;un veut devenir votre ami</translation> <translation>Quelqu&apos;un vient de vous ajouter dans sa liste de contacts</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/tool/friendrequestdialog.cpp" line="33"/> <location filename="../src/widget/tool/friendrequestdialog.cpp" line="33"/>
@ -395,7 +395,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/tool/friendrequestdialog.cpp" line="37"/> <location filename="../src/widget/tool/friendrequestdialog.cpp" line="37"/>
<source>Friend request message:</source> <source>Friend request message:</source>
<translation>Message de demande d&apos;ami:</translation> <translation>Message au sujet de la demande:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/tool/friendrequestdialog.cpp" line="44"/> <location filename="../src/widget/tool/friendrequestdialog.cpp" line="44"/>
@ -422,7 +422,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/friendwidget.cpp" line="56"/> <location filename="../src/widget/friendwidget.cpp" line="56"/>
<source>Copy friend ID</source> <source>Copy friend ID</source>
<comment>Menu to copy the Tox ID of that friend</comment> <comment>Menu to copy the Tox ID of that friend</comment>
<translation>Copier l&apos;ID ami</translation> <translation>Copier l&apos;ID du contact</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="68"/> <location filename="../src/widget/friendwidget.cpp" line="68"/>
@ -458,7 +458,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<source>Disable global auto accept</source> <source>Disable global auto accept</source>
<comment>context menu entry</comment> <comment>context menu entry</comment>
<translation type="vanished">Désactiver l&apos;acceptation automatique de fichier</translation> <translation type="vanished">Désactiver le téléchargement automatique de fichiers</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/friendwidget.cpp" line="109"/> <location filename="../src/widget/friendwidget.cpp" line="109"/>
@ -470,7 +470,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/friendwidget.cpp" line="76"/> <location filename="../src/widget/friendwidget.cpp" line="76"/>
<source>Remove friend</source> <source>Remove friend</source>
<comment>Menu to remove the friend from our friendlist</comment> <comment>Menu to remove the friend from our friendlist</comment>
<translation>Supprimer ami</translation> <translation>Supprimer ce contact</translation>
</message> </message>
</context> </context>
<context> <context>
@ -502,7 +502,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/generalform.cpp" line="267"/> <location filename="../src/widget/form/settings/generalform.cpp" line="267"/>
<source>You can&apos;t disconnect while a call is active!</source> <source>You can&apos;t disconnect while a call is active!</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Vous ne pouvez pas vous déconnecter avec un appel en cours!</translation> <translation>Vous ne pouvez pas vous déconnecter avec un appel en cours !</translation>
</message> </message>
</context> </context>
<context> <context>
@ -520,7 +520,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/generalsettings.ui" line="64"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="64"/>
<location filename="../src/widget/form/settings/generalsettings.ui" line="80"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="80"/>
<source>The translation may not load until qTox restarts.</source> <source>The translation may not load until qTox restarts.</source>
<translation>La translation peut ne pas se charger jusqu&apos;à ce que qTox redémarre.</translation> <translation>La traduction peut ne pas prendre effet immédiatement. Redémarrez qTox si ce n&apos;est pas le cas.</translation>
</message> </message>
<message> <message>
<source>Translation:</source> <source>Translation:</source>
@ -550,7 +550,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="133"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="133"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Minimizer dans la barre d&apos;état</translation> <translation>Minimiser dans la barre d&apos;état</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="142"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="142"/>
@ -564,7 +564,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
</message> </message>
<message> <message>
<source>Auto away after (0 to disable):</source> <source>Auto away after (0 to disable):</source>
<translation type="vanished">Auto-absent après (0 pour désactiver):</translation> <translation type="vanished">Se rendre absent après (0 pour désactiver):</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="191"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="191"/>
@ -620,7 +620,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/generalsettings.ui" line="492"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="492"/>
<source>Reconnect</source> <source>Reconnect</source>
<comment>reconnect button</comment> <comment>reconnect button</comment>
<translation>Reconnection</translation> <translation>Se reconnecter</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="422"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="422"/>
@ -640,7 +640,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="156"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="156"/>
<source>Focus qTox when a message is received</source> <source>Focus qTox when a message is received</source>
<translation>Montrer qTox quand un message est reçu</translation> <translation>Montrer la fênetre qTox quand un message est reçu</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="163"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="163"/>
@ -713,7 +713,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source> <source>This allows, e.g., toxing over Tor. It adds load to the Tox network however, so use only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment> <extracomment>force tcp checkbox tooltip</extracomment>
<translation type="vanished">Permet par exemple d&apos;utiliser Tox à travers Tor, mais ce n&apos;est à utiliser que si nécessaire, car cela ralenti le réseau Tox.</translation> <translation type="vanished">Permet par exemple d&apos;utiliser Tox à travers Tor, mais ce n&apos;est à utiliser que si nécessaire car cela ralenti le réseau Tox.</translation>
</message> </message>
<message> <message>
<source>Disable UDP (not recommended)</source> <source>Disable UDP (not recommended)</source>
@ -748,7 +748,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="64"/> <location filename="../src/widget/form/genericchatform.cpp" line="64"/>
<source>Smileys</source> <source>Smileys</source>
<translation>Emoticones</translation> <translation>Émoticônes</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="68"/> <location filename="../src/widget/form/genericchatform.cpp" line="68"/>
@ -768,7 +768,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="77"/> <location filename="../src/widget/form/genericchatform.cpp" line="77"/>
<source>Toggle speakers volume</source> <source>Toggle speakers volume</source>
<translation>Couper les haut parleurs</translation> <translation>Couper les haut-parleurs</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="80"/> <location filename="../src/widget/form/genericchatform.cpp" line="80"/>
@ -818,7 +818,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/groupwidget.cpp" line="44"/> <location filename="../src/widget/groupwidget.cpp" line="44"/>
<location filename="../src/widget/groupwidget.cpp" line="66"/> <location filename="../src/widget/groupwidget.cpp" line="66"/>
<source>0 users in chat</source> <source>0 users in chat</source>
<translation>0 personnes</translation> <translation>Le groupe est vide</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/groupwidget.cpp" line="53"/> <location filename="../src/widget/groupwidget.cpp" line="53"/>
@ -844,7 +844,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/identityform.cpp" line="133"/> <location filename="../src/widget/form/settings/identityform.cpp" line="133"/>
<source>You can&apos;t switch profiles while a call is active!</source> <source>You can&apos;t switch profiles while a call is active!</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Vous ne pouvez pas changer de profil quand un appel est en cours!</translation> <translation>Vous ne pouvez pas changer de profil quand un appel est en cours !</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="143"/> <location filename="../src/widget/form/settings/identityform.cpp" line="143"/>
@ -894,7 +894,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="186"/> <location filename="../src/widget/form/settings/identityform.cpp" line="186"/>
<source>The file you chose could not be written to.</source> <source>The file you chose could not be written to.</source>
<translation>Le fichier que vous avez choisi n&apos;as pas pu être écrit.</translation> <translation>Le fichier que vous avez choisi n&apos;es pas disponible en écriture.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="194"/> <location filename="../src/widget/form/settings/identityform.cpp" line="194"/>
@ -912,7 +912,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/identityform.cpp" line="198"/> <location filename="../src/widget/form/settings/identityform.cpp" line="198"/>
<source>Deletion imminent!</source> <source>Deletion imminent!</source>
<comment>deletion confirmation title</comment> <comment>deletion confirmation title</comment>
<translation>Suppression imminente!</translation> <translation>Suppression imminente !</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="199"/> <location filename="../src/widget/form/settings/identityform.cpp" line="199"/>
@ -936,13 +936,13 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/identityform.cpp" line="223"/> <location filename="../src/widget/form/settings/identityform.cpp" line="223"/>
<source>Ignoring non-Tox file</source> <source>Ignoring non-Tox file</source>
<comment>popup title</comment> <comment>popup title</comment>
<translation>Fichier non-Tox ignoré</translation> <translation>Fichier incompatible avec Tox ignoré</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="224"/> <location filename="../src/widget/form/settings/identityform.cpp" line="224"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source> <source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Attention: Vous avez sélectionné un fichier qui n&apos;est pas une sauvegarde Tox: il sera ignoré.</translation> <translation>Attention: Vous avez sélectionné un fichier qui n&apos;est pas une sauvegarde Tox, il sera ignoré.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identityform.cpp" line="230"/> <location filename="../src/widget/form/settings/identityform.cpp" line="230"/>
@ -986,7 +986,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="88"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="88"/>
<source>Your Tox ID (click to copy)</source> <source>Your Tox ID (click to copy)</source>
<translation>Votre ID Tox (cliquez pour copier)</translation> <translation>Votre Tox ID (cliquez pour copier)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="98"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="98"/>
@ -1033,7 +1033,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/identitysettings.ui" line="151"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="151"/>
<source>This is useful to remain safe on public computers</source> <source>This is useful to remain safe on public computers</source>
<comment>delete profile button tooltip</comment> <comment>delete profile button tooltip</comment>
<translation>Util pour sécuriser sur un ordinateur public</translation> <translation>Utile pour rester en sécurité sur un ordinateur public</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/identitysettings.ui" line="165"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="165"/>
@ -1045,7 +1045,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<location filename="../src/widget/form/settings/identitysettings.ui" line="175"/> <location filename="../src/widget/form/settings/identitysettings.ui" line="175"/>
<source>New Tox ID</source> <source>New Tox ID</source>
<comment>new profile button</comment> <comment>new profile button</comment>
<translation>Nouvel ID Tox</translation> <translation>Nouvel Tox ID</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1093,12 +1093,12 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/mainwindow.ui" line="1101"/> <location filename="../src/mainwindow.ui" line="1101"/>
<source>Add friends</source> <source>Add friends</source>
<translation>Ajouter des amis</translation> <translation>Ajouter des contacts</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="1139"/> <location filename="../src/mainwindow.ui" line="1139"/>
<source>Create a group chat</source> <source>Create a group chat</source>
<translation>Creer un groupe</translation> <translation>Créer un groupe</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="1174"/> <location filename="../src/mainwindow.ui" line="1174"/>
@ -1125,7 +1125,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<message> <message>
<location filename="../src/widget/netcamview.cpp" line="28"/> <location filename="../src/widget/netcamview.cpp" line="28"/>
<source>Tox video</source> <source>Tox video</source>
<translation>Vidéo tox</translation> <translation>Vidéo Tox</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1145,7 +1145,7 @@ Voulez-vous essayer un mot de passe différent?</translation>
<source>You already have history log file encrypted with different password <source>You already have history log file encrypted with different password
Do you want to delete old history file?</source> Do you want to delete old history file?</source>
<translation>Vous avez déjà un historique chiffré avec un autre mot de passe <translation>Vous avez déjà un historique chiffré avec un autre mot de passe
Voulez vous supprimer l&apos;ancien historique?</translation> Voulez vous supprimer l&apos;ancien historique ?</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1192,7 +1192,7 @@ Voulez vous supprimer l&apos;ancien historique?</translation>
<location filename="../src/widget/toxsave.cpp" line="64"/> <location filename="../src/widget/toxsave.cpp" line="64"/>
<source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source> <source>Warning: you&apos;ve chosen a file that is not a Tox save file; ignoring.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Attention: Vous avez sélectionné un fichier qui n&apos;est pas une sauvegarde Tox: il sera ignoré.</translation> <translation>Attention: Vous avez sélectionné un fichier qui n&apos;est pas une sauvegarde Tox, il sera ignoré.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/toxsave.cpp" line="70"/> <location filename="../src/widget/toxsave.cpp" line="70"/>
@ -1233,12 +1233,12 @@ Voulez vous supprimer l&apos;ancien historique?</translation>
<source>An update is available, do you want to download it now ? <source>An update is available, do you want to download it now ?
It will be installed when qTox restarts.</source> It will be installed when qTox restarts.</source>
<translation>Une mise à jour est disponible, voulez vous la télécharger maintenant ? <translation>Une mise à jour est disponible, voulez vous la télécharger maintenant ?
Elle sera installée au prochain démarrage de qTox</translation> Elle sera installée au prochain démarrage de qTox.</translation>
</message> </message>
<message> <message>
<location filename="../src/main.cpp" line="68"/> <location filename="../src/main.cpp" line="68"/>
<source>Tox URI to parse</source> <source>Tox URI to parse</source>
<translation>URI Tox à utiliser</translation> <translation>URL Tox à utiliser</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1255,7 +1255,7 @@ Elle sera installée au prochain démarrage de qTox</translation>
<message> <message>
<location filename="../src/widget/form/setpassworddialog.ui" line="37"/> <location filename="../src/widget/form/setpassworddialog.ui" line="37"/>
<source>Repeat Password</source> <source>Repeat Password</source>
<translation>Répetez le mot de passe</translation> <translation>Retapez le mot de passe</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1270,13 +1270,13 @@ Elle sera installée au prochain démarrage de qTox</translation>
<location filename="../src/toxdns.cpp" line="70"/> <location filename="../src/toxdns.cpp" line="70"/>
<source>This address does not exist</source> <source>This address does not exist</source>
<comment>The DNS gives the Tox ID associated to toxme.se addresses</comment> <comment>The DNS gives the Tox ID associated to toxme.se addresses</comment>
<translation>Cette addresse n&apos;existe pas</translation> <translation>Cette adresse n&apos;existe pas</translation>
</message> </message>
<message> <message>
<location filename="../src/toxdns.cpp" line="75"/> <location filename="../src/toxdns.cpp" line="75"/>
<source>Error while looking up DNS</source> <source>Error while looking up DNS</source>
<comment>The DNS gives the Tox ID associated to toxme.se addresses</comment> <comment>The DNS gives the Tox ID associated to toxme.se addresses</comment>
<translation>Erreur en consultant le serveur DNS</translation> <translation>Une erreur s&apos;est produite en consultant le serveur DNS</translation>
</message> </message>
<message> <message>
<location filename="../src/toxdns.cpp" line="82"/> <location filename="../src/toxdns.cpp" line="82"/>
@ -1316,22 +1316,22 @@ Elle sera installée au prochain démarrage de qTox</translation>
<location filename="../src/widget/toxuri.cpp" line="80"/> <location filename="../src/widget/toxuri.cpp" line="80"/>
<source>Add a friend</source> <source>Add a friend</source>
<comment>Title of the window to add a friend through Tox URI</comment> <comment>Title of the window to add a friend through Tox URI</comment>
<translation>Ajouter un ami</translation> <translation>Ajouter un contact</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/toxuri.cpp" line="82"/> <location filename="../src/widget/toxuri.cpp" line="82"/>
<source>Do you want to add %1 as a friend ?</source> <source>Do you want to add %1 as a friend ?</source>
<translation>Voulez-vous ajouter %1 à vos amis ?</translation> <translation>Voulez-vous ajouter %1 à vos contacts ?</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/toxuri.cpp" line="83"/> <location filename="../src/widget/toxuri.cpp" line="83"/>
<source>User ID:</source> <source>User ID:</source>
<translation>ID utilisateur:</translation> <translation>ID d&apos;utilisateur:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/toxuri.cpp" line="87"/> <location filename="../src/widget/toxuri.cpp" line="87"/>
<source>Friend request message:</source> <source>Friend request message:</source>
<translation>Message de demande d&apos;ami:</translation> <translation>Associer un message à cette demande:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/toxuri.cpp" line="92"/> <location filename="../src/widget/toxuri.cpp" line="92"/>
@ -1354,7 +1354,7 @@ Elle sera installée au prochain démarrage de qTox</translation>
</message> </message>
<message> <message>
<source>away</source> <source>away</source>
<translation type="vanished">indisponnible</translation> <translation type="vanished">absent</translation>
</message> </message>
<message> <message>
<source>busy</source> <source>busy</source>
@ -1368,7 +1368,7 @@ Elle sera installée au prochain démarrage de qTox</translation>
<message> <message>
<location filename="../src/widget/widget.cpp" line="77"/> <location filename="../src/widget/widget.cpp" line="77"/>
<source>Away</source> <source>Away</source>
<translation>Indisponible</translation> <translation>Absent</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="80"/> <location filename="../src/widget/widget.cpp" line="80"/>
@ -1383,7 +1383,7 @@ Elle sera installée au prochain démarrage de qTox</translation>
<message> <message>
<location filename="../src/widget/widget.cpp" line="86"/> <location filename="../src/widget/widget.cpp" line="86"/>
<source>Change status to:</source> <source>Change status to:</source>
<translation>Changer le status en:</translation> <translation>Changer le status par:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="155"/> <location filename="../src/widget/widget.cpp" line="155"/>
@ -1395,7 +1395,7 @@ Elle sera installée au prochain démarrage de qTox</translation>
<location filename="../src/widget/widget.cpp" line="157"/> <location filename="../src/widget/widget.cpp" line="157"/>
<source>Away</source> <source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment> <comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Indisponible</translation> <translation>Absent</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="159"/> <location filename="../src/widget/widget.cpp" line="159"/>
@ -1443,18 +1443,18 @@ Elle sera installée au prochain démarrage de qTox</translation>
<message> <message>
<location filename="../src/widget/widget.cpp" line="477"/> <location filename="../src/widget/widget.cpp" line="477"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source> <source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Toxcore n&apos;as pas pu démarrer correctement, l&apos;application va quitter quand vous fermerez ce message.</translation> <translation>ToxCore n&apos;as pas pu démarrer correctement, l&apos;application va s&apos;arrêter quand vous fermerez cette alerte.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="486"/> <location filename="../src/widget/widget.cpp" line="486"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source> <source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Toxcore n&apos;as pas pu démarrer avec ces paramètres de proxy, qTox ne peut pas continuer; merci de modifier vos paramètres et redémarrer.</translation> <translation>ToxCore n&apos;as pas pu démarrer avec ces paramètres proxy. Merci de modifier ou désactiver vos paramètres et redémarrer l&apos;application.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="521"/> <location filename="../src/widget/widget.cpp" line="521"/>
<source>Add friend</source> <source>Add friend</source>
<translation>Ajouter un ami</translation> <translation>Ajouter un contact</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="533"/> <location filename="../src/widget/widget.cpp" line="533"/>
@ -1469,13 +1469,13 @@ Elle sera installée au prochain démarrage de qTox</translation>
<message> <message>
<location filename="../src/widget/widget.cpp" line="656"/> <location filename="../src/widget/widget.cpp" line="656"/>
<source>Couldn&apos;t request friendship</source> <source>Couldn&apos;t request friendship</source>
<translation>Impossible de demander en ami</translation> <translation>Impossible d&apos;envoyer la demande de contact</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="684"/> <location filename="../src/widget/widget.cpp" line="684"/>
<source>away</source> <source>away</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>indisponnible</translation> <translation>absent</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="686"/> <location filename="../src/widget/widget.cpp" line="686"/>
@ -1487,7 +1487,7 @@ Elle sera installée au prochain démarrage de qTox</translation>
<location filename="../src/widget/widget.cpp" line="688"/> <location filename="../src/widget/widget.cpp" line="688"/>
<source>offline</source> <source>offline</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>déconnecté</translation> <translation>hors ligne</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="690"/> <location filename="../src/widget/widget.cpp" line="690"/>
@ -1510,7 +1510,7 @@ Elle sera installée au prochain démarrage de qTox</translation>
<message> <message>
<location filename="../src/widget/widget.cpp" line="1091"/> <location filename="../src/widget/widget.cpp" line="1091"/>
<source>Message failed to send</source> <source>Message failed to send</source>
<translation>Le message n&apos;as pas pu être envoyé</translation> <translation>Le message n&apos;as pu être envoyé</translation>
</message> </message>
</context> </context>
</TS> </TS>

132
translations/it.ts vendored
View File

@ -226,6 +226,11 @@ Ignorare le impostazioni del proxy e connettersi direttamente alla rete Tox?</tr
<source>Calling to %1</source> <source>Calling to %1</source>
<translation>Stai chiamando %1</translation> <translation>Stai chiamando %1</translation>
</message> </message>
<message>
<location filename="../src/widget/form/chatform.cpp" line="676"/>
<source>Failed to send file &quot;%1&quot;</source>
<translation>Invio del file &quot;%1&quot; fallito</translation>
</message>
<message> <message>
<location filename="../src/widget/form/chatform.cpp" line="810"/> <location filename="../src/widget/form/chatform.cpp" line="810"/>
<source>Call with %1 ended. %2</source> <source>Call with %1 ended. %2</source>
@ -538,17 +543,22 @@ Soprannome:</translation>
<translation>Mostra icona nella traybar</translation> <translation>Mostra icona nella traybar</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="226"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="158"/>
<source>Light icon</source>
<translation>Icona brillante</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="217"/>
<source>Set to 0 to disable</source> <source>Set to 0 to disable</source>
<translation>Imposta 0 per disabilitare</translation> <translation>Imposta 0 per disabilitare</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="477"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="468"/>
<source>Connection Settings</source> <source>Connection Settings</source>
<translation>Impostazioni Connessione</translation> <translation>Impostazioni Connessione</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="489"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="480"/>
<source>Enable IPv6 (recommended)</source> <source>Enable IPv6 (recommended)</source>
<extracomment>Text on a checkbox to enable IPv6</extracomment> <extracomment>Text on a checkbox to enable IPv6</extracomment>
<translation>Abilita IPv6 (consigliato)</translation> <translation>Abilita IPv6 (consigliato)</translation>
@ -590,143 +600,133 @@ Soprannome:</translation>
<translation>Minimizza nella traybar</translation> <translation>Minimizza nella traybar</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="164"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="168"/>
<source>Tray icon displays user status</source>
<translation>Mostra lo stato nell&apos;icona della traybar</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="167"/>
<source>This is a temporary work around until proper systray status icons are available.</source>
<translation>Questo è un workaround temporaneo fino a quando non saranno disponibili icone di stato adeguate.</translation>
</message>
<message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="177"/>
<source>Show contacts&apos; status changes</source> <source>Show contacts&apos; status changes</source>
<translation>Mostra quando i contatti cambiano stato</translation> <translation>Mostra quando i contatti cambiano stato</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="184"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="175"/>
<source>Check for updates on startup (unstable)</source> <source>Check for updates on startup (unstable)</source>
<translation>Controlla aggiornamenti all&apos;avvio (unstable)</translation> <translation>Controlla aggiornamenti all&apos;avvio (unstable)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="191"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="182"/>
<source>Focus qTox when a message is received</source> <source>Focus qTox when a message is received</source>
<translation>Dai il focus a qTox quando arriva un messaggio</translation> <translation>Dai il focus a qTox quando arriva un messaggio</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="198"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="189"/>
<source>Faux offline messaging</source> <source>Faux offline messaging</source>
<translation>Falsi messaggi offline</translation> <translation>Falsi messaggi offline</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="207"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="198"/>
<source>Provided in minutes</source> <source>Provided in minutes</source>
<translation>Espresso in minuti</translation> <translation>Espresso in minuti</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="213"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="204"/>
<source>Auto away after (0 to disable)</source> <source>Auto away after (0 to disable)</source>
<translation>Imposta assenza dopo</translation> <translation>Imposta assenza dopo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="229"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="220"/>
<source> minutes</source> <source> minutes</source>
<translation> minuti</translation> <translation> minuti</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="249"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="240"/>
<source>You can set this on a per-friend basis by right clicking them.</source> <source>You can set this on a per-friend basis by right clicking them.</source>
<comment>autoaccept cb tooltip</comment> <comment>autoaccept cb tooltip</comment>
<translation>Puoi impostare questa preferenza per ogni singolo contatto usando il click destro sul suo nome.</translation> <translation>Puoi impostare questa preferenza per ogni singolo contatto usando il click destro sul suo nome.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="252"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="243"/>
<source>Autoaccept files</source> <source>Autoaccept files</source>
<translation>Accetta automaticamente i trasferimenti di files</translation> <translation>Accetta automaticamente i trasferimenti di files</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="261"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="252"/>
<source>Save files in</source> <source>Save files in</source>
<translation>Salva i files in</translation> <translation>Salva i files in</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="274"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="265"/>
<source>PushButton</source> <source>PushButton</source>
<translation>Sfoglia</translation> <translation>Sfoglia</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="294"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="285"/>
<source>Theme</source> <source>Theme</source>
<translation>Impostazioni Tema</translation> <translation>Impostazioni Tema</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="300"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="291"/>
<source>Use emoticons</source> <source>Use emoticons</source>
<translation>Usa emoticons</translation> <translation>Usa emoticons</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="315"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="306"/>
<source>Smiley Pack</source> <source>Smiley Pack</source>
<extracomment>Text on smiley pack label</extracomment> <extracomment>Text on smiley pack label</extracomment>
<translation>Emoticons</translation> <translation>Emoticons</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="332"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="323"/>
<source>Style</source> <source>Style</source>
<translation>Stile</translation> <translation>Stile</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="406"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="397"/>
<source>Theme color</source> <source>Theme color</source>
<translation>Colore</translation> <translation>Colore</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="423"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="414"/>
<source>Emoticon size</source> <source>Emoticon size</source>
<translation>Dimensione emoticons</translation> <translation>Dimensione emoticons</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="439"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="430"/>
<source> px</source> <source> px</source>
<translation> px</translation> <translation> px</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="455"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="446"/>
<source>Timestamp format</source> <source>Timestamp format</source>
<translation>Formato data/ora</translation> <translation>Formato data/ora</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="496"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="487"/>
<source>Disabling this allows, e.g., toxing over Tor. It adds load to the Tox network however, so uncheck only when necessary.</source> <source>Disabling this allows, e.g., toxing over Tor. It adds load to the Tox network however, so uncheck only when necessary.</source>
<extracomment>force tcp checkbox tooltip</extracomment> <extracomment>force tcp checkbox tooltip</extracomment>
<translation>Disabilitando questo sarà possibile usare qTox con Tor. Tuttavia verrà aggiunto carico alla rete Tox, quindi disabilitare solo se necessario.</translation> <translation>Disabilitando questo sarà possibile usare qTox con Tor. Tuttavia verrà aggiunto carico alla rete Tox, quindi disabilitare solo se necessario.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="499"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="490"/>
<source>Enable UDP (recommended)</source> <source>Enable UDP (recommended)</source>
<extracomment>Text on checkbox to disable UDP</extracomment> <extracomment>Text on checkbox to disable UDP</extracomment>
<translation>Abilita UDP (consigliato)</translation> <translation>Abilita UDP (consigliato)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="506"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="497"/>
<source>Use proxy (SOCKS5)</source> <source>Use proxy (SOCKS5)</source>
<translation>Usa proxy (SOCKS5)</translation> <translation>Usa proxy (SOCKS5)</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="518"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="509"/>
<source>Address</source> <source>Address</source>
<extracomment>Text on proxy addr label</extracomment> <extracomment>Text on proxy addr label</extracomment>
<translation>IP</translation> <translation>IP</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="528"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="519"/>
<source>Port</source> <source>Port</source>
<extracomment>Text on proxy port label</extracomment> <extracomment>Text on proxy port label</extracomment>
<translation>Porta</translation> <translation>Porta</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/settings/generalsettings.ui" line="547"/> <location filename="../src/widget/form/settings/generalsettings.ui" line="538"/>
<source>Reconnect</source> <source>Reconnect</source>
<comment>reconnect button</comment> <comment>reconnect button</comment>
<translation>Riconnetti</translation> <translation>Riconnetti</translation>
@ -771,7 +771,7 @@ Soprannome:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="149"/> <location filename="../src/widget/form/genericchatform.cpp" line="149"/>
<location filename="../src/widget/form/genericchatform.cpp" line="191"/> <location filename="../src/widget/form/genericchatform.cpp" line="192"/>
<source>Save chat log</source> <source>Save chat log</source>
<translation>Salva il log della chat</translation> <translation>Salva il log della chat</translation>
</message> </message>
@ -781,7 +781,7 @@ Soprannome:</translation>
<translation>Rimuovi messaggi visualizzati</translation> <translation>Rimuovi messaggi visualizzati</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/form/genericchatform.cpp" line="290"/> <location filename="../src/widget/form/genericchatform.cpp" line="296"/>
<source>Cleared</source> <source>Cleared</source>
<translation>Pulito</translation> <translation>Pulito</translation>
</message> </message>
@ -1417,134 +1417,134 @@ Verrà installata al riavvio del programma.</translation>
<translation>Cambia stato in:</translation> <translation>Cambia stato in:</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="173"/> <location filename="../src/widget/widget.cpp" line="174"/>
<source>Online</source> <source>Online</source>
<comment>Button to set your status to &apos;Online&apos;</comment> <comment>Button to set your status to &apos;Online&apos;</comment>
<translation>Online</translation> <translation>Online</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="175"/> <location filename="../src/widget/widget.cpp" line="176"/>
<source>Away</source> <source>Away</source>
<comment>Button to set your status to &apos;Away&apos;</comment> <comment>Button to set your status to &apos;Away&apos;</comment>
<translation>Assente</translation> <translation>Assente</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="177"/> <location filename="../src/widget/widget.cpp" line="178"/>
<source>Busy</source> <source>Busy</source>
<comment>Button to set your status to &apos;Busy&apos;</comment> <comment>Button to set your status to &apos;Busy&apos;</comment>
<translation>Occupato</translation> <translation>Occupato</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="431"/> <location filename="../src/widget/widget.cpp" line="430"/>
<source>Choose a profile</source> <source>Choose a profile</source>
<translation>Scegli un profilo</translation> <translation>Scegli un profilo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="432"/> <location filename="../src/widget/widget.cpp" line="431"/>
<source>Please choose which identity to use</source> <source>Please choose which identity to use</source>
<translation>Per favore scegli quale identità usare</translation> <translation>Per favore scegli quale identità usare</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="453"/> <location filename="../src/widget/widget.cpp" line="452"/>
<source>Choose a profile picture</source> <source>Choose a profile picture</source>
<translation>Scegli un&apos;immagine per il profilo</translation> <translation>Scegli un&apos;immagine per il profilo</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="460"/> <location filename="../src/widget/widget.cpp" line="459"/>
<location filename="../src/widget/widget.cpp" line="467"/> <location filename="../src/widget/widget.cpp" line="466"/>
<location filename="../src/widget/widget.cpp" line="488"/> <location filename="../src/widget/widget.cpp" line="487"/>
<source>Error</source> <source>Error</source>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="460"/> <location filename="../src/widget/widget.cpp" line="459"/>
<source>Unable to open this file</source> <source>Unable to open this file</source>
<translation>Impossibile aprire il file</translation> <translation>Impossibile aprire il file</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="467"/> <location filename="../src/widget/widget.cpp" line="466"/>
<source>Unable to read this image</source> <source>Unable to read this image</source>
<translation>Impossibile leggere l&apos;immagine</translation> <translation>Impossibile leggere l&apos;immagine</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="488"/> <location filename="../src/widget/widget.cpp" line="487"/>
<source>This image is too big</source> <source>This image is too big</source>
<translation>L&apos;immagine è troppo grande</translation> <translation>L&apos;immagine è troppo grande</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="528"/> <location filename="../src/widget/widget.cpp" line="527"/>
<source>Toxcore failed to start, the application will terminate after you close this message.</source> <source>Toxcore failed to start, the application will terminate after you close this message.</source>
<translation>Impossibile avviare Toxcore.\nqTox terminerà dopo che avrai chiuso questo messaggio.</translation> <translation>Impossibile avviare Toxcore.\nqTox terminerà dopo che avrai chiuso questo messaggio.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="537"/> <location filename="../src/widget/widget.cpp" line="536"/>
<source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source> <source>toxcore failed to start with your proxy settings. qTox cannot run; please modify your settings and restart.</source>
<comment>popup text</comment> <comment>popup text</comment>
<translation>Impossibile avviare Toxcore con le tue impostazione proxy.\nqTox non può funzionare correttamente, per favore modifica le impostazioni e riavvia il programma.</translation> <translation>Impossibile avviare Toxcore con le tue impostazione proxy.\nqTox non può funzionare correttamente, per favore modifica le impostazioni e riavvia il programma.</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="576"/> <location filename="../src/widget/widget.cpp" line="575"/>
<source>Add friend</source> <source>Add friend</source>
<translation>Aggiungi contatto</translation> <translation>Aggiungi contatto</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="588"/> <location filename="../src/widget/widget.cpp" line="587"/>
<source>File transfers</source> <source>File transfers</source>
<translation>Files trasferiti</translation> <translation>Files trasferiti</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="616"/> <location filename="../src/widget/widget.cpp" line="615"/>
<source>Settings</source> <source>Settings</source>
<translation>Impostazioni</translation> <translation>Impostazioni</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="716"/> <location filename="../src/widget/widget.cpp" line="715"/>
<source>Couldn&apos;t request friendship</source> <source>Couldn&apos;t request friendship</source>
<translation>Impossibile inviare la richiesta d&apos;amicizia</translation> <translation>Impossibile inviare la richiesta d&apos;amicizia</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="744"/> <location filename="../src/widget/widget.cpp" line="743"/>
<source>away</source> <source>away</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>assente</translation> <translation>assente</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="746"/> <location filename="../src/widget/widget.cpp" line="745"/>
<source>busy</source> <source>busy</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>occupato</translation> <translation>occupato</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="748"/> <location filename="../src/widget/widget.cpp" line="747"/>
<source>offline</source> <source>offline</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>offline</translation> <translation>offline</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="750"/> <location filename="../src/widget/widget.cpp" line="749"/>
<source>online</source> <source>online</source>
<comment>contact status</comment> <comment>contact status</comment>
<translation>online</translation> <translation>online</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="753"/> <location filename="../src/widget/widget.cpp" line="752"/>
<source>%1 is now %2</source> <source>%1 is now %2</source>
<comment>e.g. &quot;Dubslow is now online&quot;</comment> <comment>e.g. &quot;Dubslow is now online&quot;</comment>
<translation>%1 è ora %2</translation> <translation>%1 è ora %2</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="990"/> <location filename="../src/widget/widget.cpp" line="989"/>
<source>&lt;Unknown&gt;</source> <source>&lt;Unknown&gt;</source>
<comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment> <comment>Placeholder when we don&apos;t know someone&apos;s name in a group chat</comment>
<translation>&lt;Sconosciuto&gt;</translation> <translation>&lt;Sconosciuto&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="1015"/> <location filename="../src/widget/widget.cpp" line="1014"/>
<source>%1 has set the title to %2</source> <source>%1 has set the title to %2</source>
<translation>%1 ha impostato il titolo in %2</translation> <translation>%1 ha impostato il titolo in %2</translation>
</message> </message>
<message> <message>
<location filename="../src/widget/widget.cpp" line="1166"/> <location filename="../src/widget/widget.cpp" line="1165"/>
<source>Message failed to send</source> <source>Message failed to send</source>
<translation>Impossibile inviare il messaggio</translation> <translation>Impossibile inviare il messaggio</translation>
</message> </message>