diff --git a/INSTALL.md b/INSTALL.md
index e94510b1a..63cefe8a1 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,8 +1,8 @@
#Install Instructions
- [Dependencies](#dependencies)
-- [Windows](#windows)
- [Linux](#linux)
- [OS X](#osx)
+- [Windows](#windows)
##Dependencies
@@ -15,6 +15,196 @@
| OpenCV | >= 2.4.9 | core, highgui, imgproc |
| OpenAL Soft | >= 1.16.0 | |
+
+
+##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 alien).
+
+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.
+
+
+
+##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!
+
+
##Windows
@@ -74,168 +264,4 @@ As for OpenCV there are no prebuild packages of OpenAL Softe compiled with MinGW
make
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.
-
-
-##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 alien).
-
-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.
-
-
-##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!
+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.
\ No newline at end of file
diff --git a/img/taskbar/dark/taskbar_busy.png b/img/taskbar/dark/taskbar_busy.png
new file mode 100644
index 000000000..451b4b4ef
Binary files /dev/null and b/img/taskbar/dark/taskbar_busy.png differ
diff --git a/img/taskbar/dark/taskbar_busy_2x.png b/img/taskbar/dark/taskbar_busy_2x.png
new file mode 100644
index 000000000..274bf330d
Binary files /dev/null and b/img/taskbar/dark/taskbar_busy_2x.png differ
diff --git a/img/taskbar/dark/taskbar_idle.png b/img/taskbar/dark/taskbar_idle.png
new file mode 100644
index 000000000..21c9eabc6
Binary files /dev/null and b/img/taskbar/dark/taskbar_idle.png differ
diff --git a/img/taskbar/dark/taskbar_idle_2x.png b/img/taskbar/dark/taskbar_idle_2x.png
new file mode 100644
index 000000000..118826fcc
Binary files /dev/null and b/img/taskbar/dark/taskbar_idle_2x.png differ
diff --git a/img/taskbar/dark/taskbar_invisible.png b/img/taskbar/dark/taskbar_invisible.png
new file mode 100644
index 000000000..81b07550b
Binary files /dev/null and b/img/taskbar/dark/taskbar_invisible.png differ
diff --git a/img/taskbar/dark/taskbar_invisible_2x.png b/img/taskbar/dark/taskbar_invisible_2x.png
new file mode 100644
index 000000000..f02f7e047
Binary files /dev/null and b/img/taskbar/dark/taskbar_invisible_2x.png differ
diff --git a/img/taskbar/dark/taskbar_offline.png b/img/taskbar/dark/taskbar_offline.png
new file mode 100644
index 000000000..e3a2cece5
Binary files /dev/null and b/img/taskbar/dark/taskbar_offline.png differ
diff --git a/img/taskbar/dark/taskbar_offline_2x.png b/img/taskbar/dark/taskbar_offline_2x.png
new file mode 100644
index 000000000..6c39ec350
Binary files /dev/null and b/img/taskbar/dark/taskbar_offline_2x.png differ
diff --git a/img/taskbar/dark/taskbar_online.png b/img/taskbar/dark/taskbar_online.png
new file mode 100644
index 000000000..24b9a8d4b
Binary files /dev/null and b/img/taskbar/dark/taskbar_online.png differ
diff --git a/img/taskbar/dark/taskbar_online_2x.png b/img/taskbar/dark/taskbar_online_2x.png
new file mode 100644
index 000000000..44e6013b7
Binary files /dev/null and b/img/taskbar/dark/taskbar_online_2x.png differ
diff --git a/img/taskbar/light/taskbar_busy.png b/img/taskbar/light/taskbar_busy.png
new file mode 100644
index 000000000..6408db92a
Binary files /dev/null and b/img/taskbar/light/taskbar_busy.png differ
diff --git a/img/taskbar/light/taskbar_busy_2x.png b/img/taskbar/light/taskbar_busy_2x.png
new file mode 100644
index 000000000..248e05860
Binary files /dev/null and b/img/taskbar/light/taskbar_busy_2x.png differ
diff --git a/img/taskbar/light/taskbar_idle.png b/img/taskbar/light/taskbar_idle.png
new file mode 100644
index 000000000..fae60333e
Binary files /dev/null and b/img/taskbar/light/taskbar_idle.png differ
diff --git a/img/taskbar/light/taskbar_idle_2x.png b/img/taskbar/light/taskbar_idle_2x.png
new file mode 100644
index 000000000..93b33eba4
Binary files /dev/null and b/img/taskbar/light/taskbar_idle_2x.png differ
diff --git a/img/taskbar/light/taskbar_invisible.png b/img/taskbar/light/taskbar_invisible.png
new file mode 100644
index 000000000..cc45ab1f4
Binary files /dev/null and b/img/taskbar/light/taskbar_invisible.png differ
diff --git a/img/taskbar/light/taskbar_invisible_2x.png b/img/taskbar/light/taskbar_invisible_2x.png
new file mode 100644
index 000000000..19a736b3b
Binary files /dev/null and b/img/taskbar/light/taskbar_invisible_2x.png differ
diff --git a/img/taskbar/light/taskbar_offline.png b/img/taskbar/light/taskbar_offline.png
new file mode 100644
index 000000000..61c18265e
Binary files /dev/null and b/img/taskbar/light/taskbar_offline.png differ
diff --git a/img/taskbar/light/taskbar_offline_2x.png b/img/taskbar/light/taskbar_offline_2x.png
new file mode 100644
index 000000000..db79070bb
Binary files /dev/null and b/img/taskbar/light/taskbar_offline_2x.png differ
diff --git a/img/taskbar/light/taskbar_online.png b/img/taskbar/light/taskbar_online.png
new file mode 100644
index 000000000..007f0d1c9
Binary files /dev/null and b/img/taskbar/light/taskbar_online.png differ
diff --git a/img/taskbar/light/taskbar_online_2x.png b/img/taskbar/light/taskbar_online_2x.png
new file mode 100644
index 000000000..247e2b217
Binary files /dev/null and b/img/taskbar/light/taskbar_online_2x.png differ
diff --git a/osx/updater.go b/osx/updater.go
index 45232536f..b063a251d 100644
--- a/osx/updater.go
+++ b/osx/updater.go
@@ -32,6 +32,41 @@ func fs_type(path string) int {
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() {
usr, e := user.Current()
if e != nil {
@@ -45,51 +80,11 @@ func main() {
}
fmt.Println("qTox Updater")
- files, _ := ioutil.ReadDir(update_dir)
killqtox := exec.Command("/usr/bin/killall", "qtox")
_ = killqtox.Run()
- for _, file := range files {
- 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()
- }
+ install(update_dir, len(update_dir))
- 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)
fmt.Println("Update metadata wiped, launching qTox")
launchqtox := exec.Command("/usr/bin/open", "-b", "im.tox.qtox")
diff --git a/res.qrc b/res.qrc
index d58cef6c7..5db98f01e 100644
--- a/res.qrc
+++ b/res.qrc
@@ -37,6 +37,14 @@
img/status/dot_online.pngimg/status/dot_online_2x.pngimg/status/dot_online_notification.png
+ img/taskbar/dark/taskbar_online_2x.png
+ img/taskbar/dark/taskbar_idle_2x.png
+ img/taskbar/dark/taskbar_busy_2x.png
+ img/taskbar/dark/taskbar_offline_2x.png
+ img/taskbar/light/taskbar_online_2x.png
+ img/taskbar/light/taskbar_idle_2x.png
+ img/taskbar/light/taskbar_busy_2x.png
+ img/taskbar/light/taskbar_offline_2x.pngimg/transfer.pngsmileys/cylgom/angel.pngsmileys/cylgom/angry.png
diff --git a/src/audio.cpp b/src/audio.cpp
index 6ade89edd..d90d5d48e 100644
--- a/src/audio.cpp
+++ b/src/audio.cpp
@@ -87,8 +87,6 @@ void Audio::openOutput(const QString& outDevDescr)
{
auto* tmp = alOutDev;
alOutDev = nullptr;
- if (tmp)
- alcCloseDevice(tmp);
if (outDevDescr.isEmpty())
alOutDev = alcOpenDevice(nullptr);
else
@@ -104,6 +102,8 @@ void Audio::openOutput(const QString& outDevDescr)
alcMakeContextCurrent(nullptr);
alcDestroyContext(alContext);
}
+ if (tmp)
+ alcCloseDevice(tmp);
alContext=alcCreateContext(alOutDev,nullptr);
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);
alSourcei(alSource, AL_LOOPING, AL_FALSE);
- if(processed)
+ if (processed)
{
ALuint bufids[processed];
alSourceUnqueueBuffers(alSource, processed, bufids);
alDeleteBuffers(processed - 1, bufids + 1);
bufid = bufids[0];
}
- else if(queued < 16)
+ else if (queued < 16)
{
alGenBuffers(1, &bufid);
}
@@ -207,6 +207,6 @@ void Audio::playAudioBuffer(ALuint alSource, const int16_t *data, int samples, u
ALint state;
alGetSourcei(alSource, AL_SOURCE_STATE, &state);
- if(state != AL_PLAYING)
+ if (state != AL_PLAYING)
alSourcePlay(alSource);
}
diff --git a/src/core.cpp b/src/core.cpp
index 05ce62261..637436fb2 100644
--- a/src/core.cpp
+++ b/src/core.cpp
@@ -728,7 +728,7 @@ void Core::requestFriendship(const QString& friendAddress, const QString& messag
{
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")));
}
@@ -1677,7 +1677,7 @@ void Core::createGroup(uint8_t type)
bool Core::hasFriendWithAddress(const QString &addr) const
{
// Valid length check
- if(addr.length() != (TOX_FRIEND_ADDRESS_SIZE * 2))
+ if (addr.length() != (TOX_FRIEND_ADDRESS_SIZE * 2))
{
return false;
}
@@ -1689,7 +1689,7 @@ bool Core::hasFriendWithAddress(const QString &addr) const
bool Core::hasFriendWithPublicKey(const QString &pubkey) const
{
// Valid length check
- if(pubkey.length() != (TOX_CLIENT_ID_SIZE * 2))
+ if (pubkey.length() != (TOX_CLIENT_ID_SIZE * 2))
{
return false;
}
@@ -1706,7 +1706,7 @@ bool Core::hasFriendWithPublicKey(const QString &pubkey) const
QString addrOrId = getFriendAddress(ids[i]);
// Set true if found
- if(addrOrId.toUpper().startsWith(pubkey.toUpper()))
+ if (addrOrId.toUpper().startsWith(pubkey.toUpper()))
{
found = true;
break;
diff --git a/src/coreav.cpp b/src/coreav.cpp
index a00d54ae6..13f6dd8c0 100644
--- a/src/coreav.cpp
+++ b/src/coreav.cpp
@@ -207,7 +207,7 @@ void Core::playCallAudio(void* toxav, int32_t callId, const int16_t *data, uint1
alGenSources(1, &calls[callId].alSource);
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);
}
@@ -229,24 +229,24 @@ void Core::sendCallAudio(int callId, ToxAv* toxav)
bool frame = false;
ALint samples;
alcGetIntegerv(Audio::alInDev, ALC_CAPTURE_SAMPLES, sizeof(samples), &samples);
- if(samples >= framesize)
+ if (samples >= framesize)
{
memset(buf, 0, bufsize); // Avoid uninitialized values (Valgrind)
alcCaptureSamples(Audio::alInDev, buf, framesize);
frame = 1;
}
- if(frame)
+ if (frame)
{
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";
calls[callId].sendAudioTimer->start();
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";
}
calls[callId].sendAudioTimer->start();
@@ -271,7 +271,7 @@ void Core::sendCallVideo(int callId)
if (frame.w && frame.h)
{
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);
vpx_img_free(&frame);
@@ -279,7 +279,7 @@ void Core::sendCallVideo(int callId)
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);
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
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 "<= framesize)
+ if (samples >= framesize)
{
memset(buf, 0, bufsize); // Avoid uninitialized values (Valgrind)
alcCaptureSamples(Audio::alInDev, buf, framesize);
frame = 1;
}
- if(frame)
+ if (frame)
{
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)
{
qDebug() << "Core: toxav_group_send_audio error";
diff --git a/src/main.cpp b/src/main.cpp
index 3ecb63d1c..ef378bfbc 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -70,7 +70,7 @@ int main(int argc, char *argv[])
parser.process(a);
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"));
sodium_init(); // For the auto-updater
@@ -156,7 +156,7 @@ int main(int argc, char *argv[])
return EXIT_FAILURE;
}
}
- else if(!ipc.isCurrentOwner() && !parser.isSet("P"))
+ else if (!ipc.isCurrentOwner() && !parser.isSet("P"))
{
time_t event = ipc.postEvent("$activate");
ipc.waitUntilProcessed(event);
diff --git a/src/misc/settings.cpp b/src/misc/settings.cpp
index c5e13b1e7..b14fe2e34 100644
--- a/src/misc/settings.cpp
+++ b/src/misc/settings.cpp
@@ -129,7 +129,6 @@ void Settings::load()
makeToxPortable = s.value("makeToxPortable", false).toBool();
autostartInTray = s.value("autostartInTray", false).toBool();
closeToTray = s.value("closeToTray", false).toBool();
- trayShowsUserStatus = s.value("trayShowsUserStatus", false).toBool();
forceTCP = s.value("forceTCP", false).toBool();
useProxy = s.value("useProxy", false).toBool();
proxyAddr = s.value("proxyAddr", "").toString();
@@ -168,6 +167,7 @@ void Settings::load()
timestampFormat = s.value("timestampFormat", "hh:mm").toString();
minimizeOnClose = s.value("minimizeOnClose", false).toBool();
minimizeToTray = s.value("minimizeToTray", false).toBool();
+ lightTrayIcon = s.value("lightTrayIcon", false).toBool();
useNativeStyle = s.value("nativeStyle", false).toBool();
useEmoticons = s.value("useEmoticons", true).toBool();
statusChangeNotificationEnabled = s.value("statusChangeNotificationEnabled", false).toBool();
@@ -281,7 +281,6 @@ void Settings::save(QString path, bool writeFriends)
s.setValue("showSystemTray", showSystemTray);
s.setValue("autostartInTray",autostartInTray);
s.setValue("closeToTray", closeToTray);
- s.setValue("trayShowsUserStatus", trayShowsUserStatus);
s.setValue("useProxy", useProxy);
s.setValue("forceTCP", forceTCP);
s.setValue("proxyAddr", proxyAddr);
@@ -317,6 +316,7 @@ void Settings::save(QString path, bool writeFriends)
s.setValue("timestampFormat", timestampFormat);
s.setValue("minimizeOnClose", minimizeOnClose);
s.setValue("minimizeToTray", minimizeToTray);
+ s.setValue("lightTrayIcon", lightTrayIcon);
s.setValue("nativeStyle", useNativeStyle);
s.setValue("useEmoticons", useEmoticons);
s.setValue("themeColor", themeColor);
@@ -521,16 +521,6 @@ void Settings::setCloseToTray(bool newValue)
closeToTray = newValue;
}
-bool Settings::getTrayShowsUserStatus() const
-{
- return trayShowsUserStatus;
-}
-
-void Settings::setTrayShowsUserStatus(bool newValue)
-{
- trayShowsUserStatus = newValue;
-}
-
bool Settings::getMinimizeToTray() const
{
return minimizeToTray;
@@ -542,6 +532,16 @@ void Settings::setMinimizeToTray(bool newValue)
minimizeToTray = newValue;
}
+bool Settings::getLightTrayIcon() const
+{
+ return lightTrayIcon;
+}
+
+void Settings::setLightTrayIcon(bool newValue)
+{
+ lightTrayIcon = newValue;
+}
+
bool Settings::getStatusChangeNotificationEnabled() const
{
return statusChangeNotificationEnabled;
diff --git a/src/misc/settings.h b/src/misc/settings.h
index 5622be204..848ade407 100644
--- a/src/misc/settings.h
+++ b/src/misc/settings.h
@@ -58,12 +58,12 @@ public:
bool getCloseToTray() const;
void setCloseToTray(bool newValue);
-
- bool getTrayShowsUserStatus() const;
- void setTrayShowsUserStatus(bool newValue);
bool getMinimizeToTray() const;
void setMinimizeToTray(bool newValue);
+
+ bool getLightTrayIcon() const;
+ void setLightTrayIcon(bool newValue);
QString getStyle() const;
void setStyle(const QString& newValue);
@@ -247,7 +247,7 @@ private:
bool autostartInTray;
bool closeToTray;
bool minimizeToTray;
- bool trayShowsUserStatus;
+ bool lightTrayIcon;
bool useEmoticons;
bool checkUpdates;
bool showInFront;
diff --git a/src/misc/smileypack.cpp b/src/misc/smileypack.cpp
index 1ec70f954..c640fffb4 100644
--- a/src/misc/smileypack.cpp
+++ b/src/misc/smileypack.cpp
@@ -69,9 +69,9 @@ QList > SmileyPack::listSmileyPacks(const QStringList &p
if (relPath.leftRef(2) == "..")
{
- if(!smileyPacks.contains(QPair(packageName, absPath)))
+ if (!smileyPacks.contains(QPair(packageName, absPath)))
smileyPacks << QPair(packageName, absPath);
- else if(!smileyPacks.contains(QPair(packageName, relPath)))
+ else if (!smileyPacks.contains(QPair(packageName, relPath)))
smileyPacks << QPair(packageName, relPath); // use relative path for subdirectories
}
}
@@ -97,7 +97,7 @@ bool SmileyPack::load(const QString& filename)
// open emoticons.xml
QFile xmlFile(filename);
- if(!xmlFile.open(QIODevice::ReadOnly))
+ if (!xmlFile.open(QIODevice::ReadOnly))
return false; // cannot open file
/* parse the cfg file
@@ -138,14 +138,14 @@ bool SmileyPack::load(const QString& filename)
QPixmap pm;
pm.loadFromData(getCachedSmiley(emoticon), "PNG");
- if(pm.size().width() > 0)
+ if (pm.size().width() > 0)
emoticonSet.push_back(emoticon);
stringElement = stringElement.nextSibling().toElement();
}
- if(emoticonSet.size() > 0)
+ if (emoticonSet.size() > 0)
emoticons.push_back(emoticonSet);
}
diff --git a/src/platform/timer_win.cpp b/src/platform/timer_win.cpp
index 07650a0e1..31542f76f 100644
--- a/src/platform/timer_win.cpp
+++ b/src/platform/timer_win.cpp
@@ -17,14 +17,14 @@
#include
#ifdef Q_OS_WIN32
#include "src/platform/timer.h"
-#include
+#include
uint32_t Platform::getIdleTime()
{
LASTINPUTINFO info = { 0 };
info.cbSize = sizeof(info);
- if(GetLastInputInfo(&info))
+ if (GetLastInputInfo(&info))
return GetTickCount() - info.dwTime;
return 0;
}
diff --git a/src/platform/timer_x11.cpp b/src/platform/timer_x11.cpp
index 5c9ac1b20..263a3b9b6 100644
--- a/src/platform/timer_x11.cpp
+++ b/src/platform/timer_x11.cpp
@@ -25,7 +25,7 @@ uint32_t Platform::getIdleTime()
uint32_t idleTime = 0;
Display *display = XOpenDisplay(NULL);
- if(!display)
+ if (!display)
{
qDebug() << "XOpenDisplay(NULL) failed";
return 0;
@@ -33,10 +33,10 @@ uint32_t Platform::getIdleTime()
int32_t x11event = 0, x11error = 0;
static int32_t hasExtension = XScreenSaverQueryExtension(display, &x11event, &x11error);
- if(hasExtension)
+ if (hasExtension)
{
XScreenSaverInfo *info = XScreenSaverAllocInfo();
- if(info)
+ if (info)
{
XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
idleTime = info->idle;
diff --git a/src/video/cameraworker.cpp b/src/video/cameraworker.cpp
index 8671d6568..da98e58f4 100644
--- a/src/video/cameraworker.cpp
+++ b/src/video/cameraworker.cpp
@@ -129,7 +129,7 @@ void CameraWorker::applyProps()
if (!cam.isOpened())
return;
- for(int prop : props.keys())
+ for (int prop : props.keys())
cam.set(prop, props.value(prop));
}
@@ -148,7 +148,7 @@ void CameraWorker::subscribe()
void CameraWorker::unsubscribe()
{
- if(--refCount <= 0)
+ if (--refCount <= 0)
{
cam.release();
refCount = 0;
diff --git a/src/widget/chatareawidget.cpp b/src/widget/chatareawidget.cpp
index 393a01c0e..22886ba8c 100644
--- a/src/widget/chatareawidget.cpp
+++ b/src/widget/chatareawidget.cpp
@@ -87,6 +87,7 @@ void ChatAreaWidget::mouseReleaseEvent(QMouseEvent * event)
}
}
}
+ emit onClick();
}
void ChatAreaWidget::onAnchorClicked(const QUrl &url)
diff --git a/src/widget/chatareawidget.h b/src/widget/chatareawidget.h
index 2eda1aad4..72a17823c 100644
--- a/src/widget/chatareawidget.h
+++ b/src/widget/chatareawidget.h
@@ -41,6 +41,7 @@ public slots:
signals:
void onFileTranfertInterract(QString widgetName, QString buttonName);
+ void onClick();
protected:
void mouseReleaseEvent(QMouseEvent * event);
diff --git a/src/widget/form/chatform.cpp b/src/widget/form/chatform.cpp
index a97faf93c..4f2c73998 100644
--- a/src/widget/form/chatform.cpp
+++ b/src/widget/form/chatform.cpp
@@ -673,7 +673,7 @@ void ChatForm::onFileSendFailed(int FriendId, const QString &fname)
if (FriendId != f->getFriendID())
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)
@@ -793,7 +793,7 @@ void ChatForm::onLoadHistory()
void ChatForm::startCounter()
{
- if(!timer)
+ if (!timer)
{
timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));
@@ -805,7 +805,7 @@ void ChatForm::startCounter()
void ChatForm::stopCounter()
{
- if(timer)
+ if (timer)
{
addSystemInfoMessage(tr("Call with %1 ended. %2").arg(f->getDisplayedName(),
secondsToDHMS(timeElapsed.elapsed()/1000)),
@@ -834,10 +834,10 @@ QString ChatForm::secondsToDHMS(quint32 duration)
int hours = (int) (duration % 24);
int days = (int) (duration / 24);
- if(minutes == 0)
+ if (minutes == 0)
return cD + res.sprintf("%02ds", seconds);
- if(hours == 0 && days == 0)
+ if (hours == 0 && days == 0)
return cD + res.sprintf("%02dm %02ds", minutes, seconds);
if (days == 0)
diff --git a/src/widget/form/genericchatform.cpp b/src/widget/form/genericchatform.cpp
index d9912a091..176e3c876 100644
--- a/src/widget/form/genericchatform.cpp
+++ b/src/widget/form/genericchatform.cpp
@@ -152,6 +152,7 @@ GenericChatForm::GenericChatForm(QWidget *parent) :
connect(emoteButton, SIGNAL(clicked()), this, SLOT(onEmoteButtonClicked()));
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->setStyleSheet(Style::getStylesheet(":/ui/chatArea/chatArea.css"));
@@ -252,6 +253,11 @@ void GenericChatForm::onEmoteButtonClicked()
}
}
+void GenericChatForm::onChatWidgetClicked()
+{
+ msgEdit->setFocus();
+}
+
void GenericChatForm::onEmoteInsertRequested(QString str)
{
// insert the emoticon
diff --git a/src/widget/form/genericchatform.h b/src/widget/form/genericchatform.h
index d838fd31e..fe6de80fb 100644
--- a/src/widget/form/genericchatform.h
+++ b/src/widget/form/genericchatform.h
@@ -69,6 +69,7 @@ protected slots:
void onEmoteButtonClicked();
void onEmoteInsertRequested(QString str);
void clearChatArea(bool);
+ void onChatWidgetClicked();
protected:
QString getElidedName(const QString& name);
diff --git a/src/widget/form/groupchatform.cpp b/src/widget/form/groupchatform.cpp
index cbb41df6b..095948515 100644
--- a/src/widget/form/groupchatform.cpp
+++ b/src/widget/form/groupchatform.cpp
@@ -209,11 +209,8 @@ void GroupChatForm::onCallClicked()
void GroupChatForm::keyPressEvent(QKeyEvent* ev)
{
- if (msgEdit->hasFocus())
- return;
-
- // Push to talk
- if (ev->key() == Qt::Key_P && inCall)
+ // Push to talk (CTRL+P)
+ if (ev->key() == Qt::Key_P && (ev->modifiers() & Qt::ControlModifier) && inCall)
{
Core* core = Core::getInstance();
if (!core->isGroupCallMicEnabled(group->getGroupId()))
@@ -224,15 +221,15 @@ void GroupChatForm::keyPressEvent(QKeyEvent* ev)
Style::repolish(micButton);
}
}
+
+ if (msgEdit->hasFocus())
+ return;
}
void GroupChatForm::keyReleaseEvent(QKeyEvent* ev)
{
- if (msgEdit->hasFocus())
- return;
-
- // Push to talk
- if (ev->key() == Qt::Key_P && inCall)
+ // Push to talk (CTRL+P)
+ if (ev->key() == Qt::Key_P && (ev->modifiers() & Qt::ControlModifier) && inCall)
{
Core* core = Core::getInstance();
if (core->isGroupCallMicEnabled(group->getGroupId()))
@@ -243,4 +240,7 @@ void GroupChatForm::keyReleaseEvent(QKeyEvent* ev)
Style::repolish(micButton);
}
}
+
+ if (msgEdit->hasFocus())
+ return;
}
diff --git a/src/widget/form/settings/generalform.cpp b/src/widget/form/settings/generalform.cpp
index a28fafa9f..64efcbdf5 100644
--- a/src/widget/form/settings/generalform.cpp
+++ b/src/widget/form/settings/generalform.cpp
@@ -62,8 +62,8 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
bodyUI->closeToTray->setEnabled(showSystemTray);
bodyUI->minimizeToTray->setChecked(Settings::getInstance().getMinimizeToTray());
bodyUI->minimizeToTray->setEnabled(showSystemTray);
- bodyUI->trayShowsUserStatus->setChecked(Settings::getInstance().getTrayShowsUserStatus());
- bodyUI->trayShowsUserStatus->setEnabled(showSystemTray);
+ bodyUI->lightTrayIcon->setChecked(Settings::getInstance().getLightTrayIcon());
+ bodyUI->lightTrayIcon->setEnabled(showSystemTray);
bodyUI->statusChanges->setChecked(Settings::getInstance().getStatusChangeNotificationEnabled());
bodyUI->useEmoticons->setChecked(Settings::getInstance().getUseEmoticons());
bodyUI->autoacceptFiles->setChecked(Settings::getInstance().getAutoSaveEnabled());
@@ -81,7 +81,7 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
bodyUI->styleBrowser->addItem(tr("None"));
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());
else
bodyUI->styleBrowser->setCurrentText(tr("None"));
@@ -122,12 +122,12 @@ GeneralForm::GeneralForm(SettingsWidget *myParent) :
connect(bodyUI->startInTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetAutostartInTray);
connect(bodyUI->closeToTray, &QCheckBox::stateChanged, this, &GeneralForm::onSetCloseToTray);
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->autoAwaySpinBox, SIGNAL(editingFinished()), this, SLOT(onAutoAwayChanged()));
connect(bodyUI->showInFront, &QCheckBox::stateChanged, this, &GeneralForm::onSetShowInFront);
connect(bodyUI->autoacceptFiles, &QCheckBox::stateChanged, this, &GeneralForm::onAutoAcceptFileChange);
- if(bodyUI->autoacceptFiles->isChecked())
+ if (bodyUI->autoacceptFiles->isChecked())
connect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()), this, SLOT(onAutoSaveDirChange()));
//theme
connect(bodyUI->useEmoticons, &QCheckBox::stateChanged, this, &GeneralForm::onUseEmoticonsChange);
@@ -188,20 +188,20 @@ void GeneralForm::onSetCloseToTray()
Settings::getInstance().setCloseToTray(bodyUI->closeToTray->isChecked());
}
+void GeneralForm::onSetLightTrayIcon()
+{
+ Settings::getInstance().setLightTrayIcon(bodyUI->lightTrayIcon->isChecked());
+ Widget::getInstance()->updateTrayIcon();
+}
+
void GeneralForm::onSetMinimizeToTray()
{
Settings::getInstance().setMinimizeToTray(bodyUI->minimizeToTray->isChecked());
}
-void GeneralForm::onSettrayShowsUserStatus()
-{
- Settings::getInstance().setTrayShowsUserStatus(bodyUI->trayShowsUserStatus->isChecked());
- Widget::getInstance()->updateTrayIcon();
-}
-
void GeneralForm::onStyleSelected(QString style)
{
- if(bodyUI->styleBrowser->currentIndex() == 0)
+ if (bodyUI->styleBrowser->currentIndex() == 0)
Settings::getInstance().setStyle("None");
else
Settings::getInstance().setStyle(style);
@@ -230,7 +230,7 @@ void GeneralForm::onAutoAcceptFileChange()
{
Settings::getInstance().setAutoSaveEnabled(bodyUI->autoacceptFiles->isChecked());
- if(bodyUI->autoacceptFiles->isChecked() == true)
+ if (bodyUI->autoacceptFiles->isChecked() == true)
connect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()), this, SLOT(onAutoSaveDirChange()));
else
disconnect(bodyUI->autoSaveFilesDir, SIGNAL(clicked()),this, SLOT(onAutoSaveDirChange()));
@@ -240,7 +240,7 @@ void GeneralForm::onAutoSaveDirChange()
{
QString previousDir = Settings::getInstance().getGlobalAutoAcceptDir();
QString directory = QFileDialog::getExistingDirectory(0, tr("Choose an auto accept directory","popup title"));
- if(directory.isEmpty())
+ if (directory.isEmpty())
directory = previousDir;
Settings::getInstance().setGlobalAutoAcceptDir(directory);
@@ -308,7 +308,7 @@ void GeneralForm::reloadSmiles()
QStringList smiles;
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());
int pixSize = 30;
diff --git a/src/widget/form/settings/generalform.h b/src/widget/form/settings/generalform.h
index dba72d404..a560cf7ae 100644
--- a/src/widget/form/settings/generalform.h
+++ b/src/widget/form/settings/generalform.h
@@ -37,6 +37,7 @@ private slots:
void onSetShowSystemTray();
void onSetAutostartInTray();
void onSetCloseToTray();
+ void onSetLightTrayIcon();
void onSmileyBrowserIndexChanged(int index);
void onUDPUpdated();
void onProxyAddrEdited();
@@ -49,7 +50,6 @@ private slots:
void onAutoAwayChanged();
void onUseEmoticonsChange();
void onSetMinimizeToTray();
- void onSettrayShowsUserStatus();
void onReconnectClicked();
void onAutoAcceptFileChange();
void onAutoSaveDirChange();
diff --git a/src/widget/form/settings/generalsettings.ui b/src/widget/form/settings/generalsettings.ui
index c4d07dfd8..47258e049 100644
--- a/src/widget/form/settings/generalsettings.ui
+++ b/src/widget/form/settings/generalsettings.ui
@@ -39,8 +39,8 @@
00
- 509
- 849
+ 513
+ 819
@@ -109,7 +109,7 @@
-
+
@@ -152,19 +152,10 @@
-
-
-
-
- 0
- 0
-
-
+
+
- Tray icon displays user status
-
-
- This is a temporary work around until proper systray status icons are available.
+ Light icon
@@ -607,21 +598,5 @@
-
- showSystemTray
- toggled(bool)
- trayShowsUserStatus
- setEnabled(bool)
-
-
- 148
- 143
-
-
- 158
- 205
-
-
-
diff --git a/src/widget/form/tabcompleter.cpp b/src/widget/form/tabcompleter.cpp
index 73d3ffeef..2fbaa48c7 100644
--- a/src/widget/form/tabcompleter.cpp
+++ b/src/widget/form/tabcompleter.cpp
@@ -52,7 +52,7 @@ void TabCompleter::buildCompletionList()
// that section is then used as the completion regex
QRegExp regex(QString("^[-_\\[\\]{}|`^.\\\\]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive);
- for(auto name : group->getPeerList())
+ for (auto name : group->getPeerList())
if (regex.indexIn(name) > -1)
completionMap[name.toLower()] = name;
diff --git a/src/widget/maskablepixmapwidget.cpp b/src/widget/maskablepixmapwidget.cpp
index f0015d6d0..5f8d2ea99 100644
--- a/src/widget/maskablepixmapwidget.cpp
+++ b/src/widget/maskablepixmapwidget.cpp
@@ -130,6 +130,6 @@ void MaskablePixmapWidget::paintEvent(QPaintEvent *)
void MaskablePixmapWidget::mousePressEvent(QMouseEvent*)
{
- if(clickable)
+ if (clickable)
emit clicked();
}
diff --git a/src/widget/tool/chatactions/messageaction.cpp b/src/widget/tool/chatactions/messageaction.cpp
index 06f27ef1d..93b8271ee 100644
--- a/src/widget/tool/chatactions/messageaction.cpp
+++ b/src/widget/tool/chatactions/messageaction.cpp
@@ -29,7 +29,7 @@ MessageAction::MessageAction(const QString &author, const QString &message, cons
QString MessageAction::getMessage(QString div)
{
QString message_;
- if(Settings::getInstance().getUseEmoticons())
+ if (Settings::getInstance().getUseEmoticons())
message_ = SmileyPack::getInstance().smileyfied(toHtmlChars(message));
else
message_ = toHtmlChars(message);
diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp
index 4736f3642..77593bdf8 100644
--- a/src/widget/widget.cpp
+++ b/src/widget/widget.cpp
@@ -54,7 +54,7 @@
void toxActivateEventHandler(const QByteArray& data)
{
- if(data != "$activate")
+ if (data != "$activate")
return;
Widget::getInstance()->show();
Widget::getInstance()->activateWindow();
@@ -116,7 +116,7 @@ void Widget::init()
if (Settings::getInstance().getShowSystemTray()){
icon->show();
- if(Settings::getInstance().getAutostartInTray() == false)
+ if (Settings::getInstance().getAutostartInTray() == false)
this->show();
}
else
@@ -125,7 +125,8 @@ void Widget::init()
}
else
{
- qWarning() << "No system tray detected!";
+ qWarning() << "Widget: No system tray detected!";
+ icon = nullptr;
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;}"));
- if(QStyleFactory::keys().contains(Settings::getInstance().getStyle())
+ if (QStyleFactory::keys().contains(Settings::getInstance().getStyle())
&& Settings::getInstance().getStyle() != "None")
{
ui->mainHead->setStyle(QStyleFactory::create(Settings::getInstance().getStyle()));
@@ -295,22 +296,20 @@ void Widget::setTranslation()
void Widget::updateTrayIcon()
{
- if(Settings::getInstance().getTrayShowsUserStatus())
- {
- QString status = ui->statusButton->property("status").toString();
- QString icon;
- if(status == "online")
- icon = ":img/status/dot_online_2x.png";
- else if(status == "away")
- icon = ":img/status/dot_idle_2x.png";
- else if(status == "busy")
- icon = ":img/status/dot_busy_2x.png";
- else
- icon = ":img/status/dot_away_2x.png";
- this->icon->setIcon(QIcon(icon));
- }
+ if (!icon)
+ return;
+ QString status = ui->statusButton->property("status").toString();
+ QString pic;
+ QString color = Settings::getInstance().getLightTrayIcon() ? "light" : "dark";
+ if (status == "online")
+ pic = ":img/taskbar/" + color + "/taskbar_online_2x.png";
+ else if (status == "away")
+ pic = ":img/taskbar/" + color + "/taskbar_idle_2x.png";
+ else if (status == "busy")
+ pic = ":img/taskbar/" + color + "/taskbar_busy_2x.png";
else
- icon->setIcon(windowIcon());
+ pic = ":img/taskbar/" + color + "/taskbar_offline_2x.png";
+ icon->setIcon(QIcon(pic));
}
Widget::~Widget()
@@ -350,7 +349,7 @@ QThread* Widget::getCoreThread()
void Widget::closeEvent(QCloseEvent *event)
{
- if(Settings::getInstance().getShowSystemTray() && Settings::getInstance().getCloseToTray() == true)
+ if (Settings::getInstance().getShowSystemTray() && Settings::getInstance().getCloseToTray() == true)
{
event->ignore();
this->hide();
@@ -367,7 +366,7 @@ void Widget::changeEvent(QEvent *event)
{
if (event->type() == QEvent::WindowStateChange)
{
- if(isMinimized() && Settings::getInstance().getMinimizeToTray())
+ if (isMinimized() && Settings::getInstance().getMinimizeToTray())
{
this->hide();
}
@@ -417,7 +416,7 @@ QList Widget::searchProfiles()
QDir dir(Settings::getSettingsDirPath());
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
dir.setNameFilters(QStringList("*.tox"));
- for(QFileInfo file : dir.entryInfoList())
+ for (QFileInfo file : dir.entryInfoList())
out += file.completeBaseName();
return out;
}
@@ -593,7 +592,7 @@ void Widget::onIconClick(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Trigger:
- if(this->isHidden() == true)
+ if (this->isHidden() == true)
{
this->show();
this->activateWindow();
@@ -714,7 +713,7 @@ void Widget::addFriend(int friendId, const QString &userId)
void Widget::addFriendFailed(const QString&, const QString& errorInfo)
{
QString info = QString(tr("Couldn't request friendship"));
- if(!errorInfo.isEmpty()) {
+ if (!errorInfo.isEmpty()) {
info = info + (QString(": ") + errorInfo);
}
@@ -735,7 +734,7 @@ void Widget::onFriendStatusChanged(int friendId, Status status)
f->getFriendWidget()->updateStatusLight();
//won't print the message if there were no messages before
- if(!f->getChatForm()->isEmpty()
+ if (!f->getChatForm()->isEmpty()
&& Settings::getInstance().getStatusChangeNotificationEnabled())
{
QString fStatus = "";
diff --git a/translations/de.ts b/translations/de.ts
index 373221256..6636bf5de 100644
--- a/translations/de.ts
+++ b/translations/de.ts
@@ -36,6 +36,11 @@
Aufnahmegerät
+
+
+
+ Erneut nach Audiogeräten suchen
+
@@ -252,6 +257,11 @@ Soll der Proxy ignoriert und eine direkte Internetverbindung genutzt werden?Call rejected
Anruf abgewiesen
+
+
+
+ Fehler beim Senden der Datei
+
@@ -594,29 +604,34 @@ Wollen Sie ein anderes probieren?
Mache Tox portabel
-
-
+
+
+ Systemtray Integration
+
+
+
+
Im Systemtray zeigen
-
+ Ins Tray starten
-
+ Ins Tray schließen
-
+ Ins Tray minimieren
- Zeige Statusänderungen der Kontakte
+ Zeigt Statusänderungen der Kontakte
@@ -626,7 +641,7 @@ Wollen Sie ein anderes probieren?
- Bringe qTox in den Vordergrund, wenn eine Nachricht eintrifft
+ Bringt qTox in den Vordergrund, wenn eine Nachricht eintrifft
@@ -1629,4 +1644,4 @@ Es wird beim Neustart von qTox installiert.
Senden der Nachricht fehlgeschlagen
-
+
\ No newline at end of file
diff --git a/translations/fr.ts b/translations/fr.ts
index 206cf9356..48cc108ea 100644
--- a/translations/fr.ts
+++ b/translations/fr.ts
@@ -76,13 +76,13 @@
- Ajouter des amis
+ Ajouter des contactsTox ID of the person you're sending a friend request to
- ID Tox
+ Tox ID
@@ -93,25 +93,25 @@
- Envoyer la demande d'ami
+ Envoyer la demande de contactDefault message in friend requests if the field is left blank. Write something appropriate!
- Je souhaiterais vous ajouter à mes contacts
+ Je souhaiterais vous ajouter à mes contacts.Tox ID of the friend you're sending a friend request to
- Merci de remplir un ID Tox valide
+ Merci d'entrer un Tox ID valideWhen trying to add your own Tox ID as friend
- Vous ne pouvez pas vous ajouter vous même en temps qu'ami!
+ Vous ne pouvez pas vous ajouter vous-même !
@@ -123,19 +123,19 @@ Ignorer le proxy et se connecter directement à Internet ?
- qTox as besoin d'utiliser le DNS Tox, mais ne peut pas le faire avec un proxy
+ qTox a besoin d'utiliser le DNS Tox, mais ne peut pas le faire avec un proxy
Ignorer le proxy et se connecter directement à Internet ?DNS error
- Cet ID Tox n'existe pas
+ Ce Tox ID n'existe pasThe DNS gives the Tox ID associated to toxme.se addresses
- Cette addresse n'existe pas
+ Cette adresse n'existe pas
@@ -178,22 +178,22 @@ Ignorer le proxy et se connecter directement à Internet ?
- Mauvaise Idée
+ Mauvaise idée
- Vous êtes en train d'essayer d'envoyer un fichier spécial (sequentiel), ça ne marchera pas!
+ Vous êtes en train d'essayer d'envoyer un fichier spécial (sequentiel), ça ne fonctionnera pas !
- %1 appelle
+ %1 appel
- %1a arreté l'appel
+ %1 a arreté l'appel
@@ -229,7 +229,7 @@ Ignorer le proxy et se connecter directement à Internet ?
- Toxer avec qTox
+ Je Tox sur qTox
@@ -239,7 +239,7 @@ Ignorer le proxy et se connecter directement à Internet ?
- Cet ami est déjà dans cos contact
+ Ce contact est déjà dans vos contacts
@@ -249,7 +249,7 @@ Ignorer le proxy et se connecter directement à Internet ?
- Le fichier .tox est chiffré, mais l'encryption n'as pas été activée. Le problème sera ignoré.
+ Le fichier .tox est chiffré, mais le chiffrement n'a pas été activé. Le problème sera ignoré.
@@ -261,14 +261,14 @@ Ignorer le proxy et se connecter directement à Internet ?
- Mod de passe invalide
+ Mot de passe invalide
- Impossible de mettre ne place le mot de passe.
+ Impossible de mettre en place le mot de passe.
Le mot de passe est vide.
@@ -289,7 +289,7 @@ Le mot de passe est vide.
- Un mauvais mot de passe à été entré
+ Un mauvais mot de passe a été entré
@@ -316,7 +316,7 @@ Voulez-vous essayer un mot de passe différent?
- À cause d'un mauvais mot de passe, l'historique sera désactivé
+ Due à l'utilisation d'un mauvais mot de passe, l'historique sera désactivé
@@ -326,7 +326,7 @@ Voulez-vous essayer un mot de passe différent?
- L'historique sera sauvegardé sans être chiffré!
+ L'historique sera sauvegardé sans être chiffré !
@@ -380,12 +380,12 @@ Voulez-vous essayer un mot de passe différent?
Title of the window to aceept/deny a friend request
- Demande d'ami
+ Demande de contact
- Quelqu'un veut devenir votre ami
+ Quelqu'un vient de vous ajouter dans sa liste de contacts
@@ -395,7 +395,7 @@ Voulez-vous essayer un mot de passe différent?
- Message de demande d'ami:
+ Message au sujet de la demande:
@@ -422,7 +422,7 @@ Voulez-vous essayer un mot de passe différent?
Menu to copy the Tox ID of that friend
- Copier l'ID ami
+ Copier l'ID du contact
@@ -458,7 +458,7 @@ Voulez-vous essayer un mot de passe différent?
context menu entry
- Désactiver l'acceptation automatique de fichier
+ Désactiver le téléchargement automatique de fichiers
@@ -470,7 +470,7 @@ Voulez-vous essayer un mot de passe différent?
Menu to remove the friend from our friendlist
- Supprimer ami
+ Supprimer ce contact
@@ -502,7 +502,7 @@ Voulez-vous essayer un mot de passe différent?
popup text
- Vous ne pouvez pas vous déconnecter avec un appel en cours!
+ Vous ne pouvez pas vous déconnecter avec un appel en cours !
@@ -520,7 +520,7 @@ Voulez-vous essayer un mot de passe différent?
- La translation peut ne pas se charger jusqu'à ce que qTox redémarre.
+ La traduction peut ne pas prendre effet immédiatement. Redémarrez qTox si ce n'est pas le cas.
@@ -550,7 +550,7 @@ Voulez-vous essayer un mot de passe différent?
- Minimizer dans la barre d'état
+ Minimiser dans la barre d'état
@@ -564,7 +564,7 @@ Voulez-vous essayer un mot de passe différent?
- Auto-absent après (0 pour désactiver):
+ Se rendre absent après (0 pour désactiver):
@@ -620,7 +620,7 @@ Voulez-vous essayer un mot de passe différent?
reconnect button
- Reconnection
+ Se reconnecter
@@ -640,7 +640,7 @@ Voulez-vous essayer un mot de passe différent?
- Montrer qTox quand un message est reçu
+ Montrer la fênetre qTox quand un message est reçu
@@ -713,7 +713,7 @@ Voulez-vous essayer un mot de passe différent?
force tcp checkbox tooltip
- Permet par exemple d'utiliser Tox à travers Tor, mais ce n'est à utiliser que si nécessaire, car cela ralenti le réseau Tox.
+ Permet par exemple d'utiliser Tox à travers Tor, mais ce n'est à utiliser que si nécessaire car cela ralenti le réseau Tox.
@@ -748,7 +748,7 @@ Voulez-vous essayer un mot de passe différent?
- Emoticones
+ Émoticônes
@@ -768,7 +768,7 @@ Voulez-vous essayer un mot de passe différent?
- Couper les haut parleurs
+ Couper les haut-parleurs
@@ -818,7 +818,7 @@ Voulez-vous essayer un mot de passe différent?
- 0 personnes
+ Le groupe est vide
@@ -844,7 +844,7 @@ Voulez-vous essayer un mot de passe différent?
popup text
- Vous ne pouvez pas changer de profil quand un appel est en cours!
+ Vous ne pouvez pas changer de profil quand un appel est en cours !
@@ -894,7 +894,7 @@ Voulez-vous essayer un mot de passe différent?
- Le fichier que vous avez choisi n'as pas pu être écrit.
+ Le fichier que vous avez choisi n'es pas disponible en écriture.
@@ -912,7 +912,7 @@ Voulez-vous essayer un mot de passe différent?
deletion confirmation title
- Suppression imminente!
+ Suppression imminente !
@@ -936,13 +936,13 @@ Voulez-vous essayer un mot de passe différent?
popup title
- Fichier non-Tox ignoré
+ Fichier incompatible avec Tox ignorépopup text
- Attention: Vous avez sélectionné un fichier qui n'est pas une sauvegarde Tox: il sera ignoré.
+ Attention: Vous avez sélectionné un fichier qui n'est pas une sauvegarde Tox, il sera ignoré.
@@ -986,7 +986,7 @@ Voulez-vous essayer un mot de passe différent?
- Votre ID Tox (cliquez pour copier)
+ Votre Tox ID (cliquez pour copier)
@@ -1033,7 +1033,7 @@ Voulez-vous essayer un mot de passe différent?
delete profile button tooltip
- Util pour sécuriser sur un ordinateur public
+ Utile pour rester en sécurité sur un ordinateur public
@@ -1045,7 +1045,7 @@ Voulez-vous essayer un mot de passe différent?
new profile button
- Nouvel ID Tox
+ Nouvel Tox ID
@@ -1093,12 +1093,12 @@ Voulez-vous essayer un mot de passe différent?
- Ajouter des amis
+ Ajouter des contacts
- Creer un groupe
+ Créer un groupe
@@ -1125,7 +1125,7 @@ Voulez-vous essayer un mot de passe différent?
- Vidéo tox
+ Vidéo Tox
@@ -1145,7 +1145,7 @@ Voulez-vous essayer un mot de passe différent?
Vous avez déjà un historique chiffré avec un autre mot de passe
-Voulez vous supprimer l'ancien historique?
+Voulez vous supprimer l'ancien historique ?
@@ -1192,7 +1192,7 @@ Voulez vous supprimer l'ancien historique?
popup text
- Attention: Vous avez sélectionné un fichier qui n'est pas une sauvegarde Tox: il sera ignoré.
+ Attention: Vous avez sélectionné un fichier qui n'est pas une sauvegarde Tox, il sera ignoré.
@@ -1233,12 +1233,12 @@ Voulez vous supprimer l'ancien historique?
Une mise à jour est disponible, voulez vous la télécharger maintenant ?
-Elle sera installée au prochain démarrage de qTox
+Elle sera installée au prochain démarrage de qTox.
- URI Tox à utiliser
+ URL Tox à utiliser
@@ -1255,7 +1255,7 @@ Elle sera installée au prochain démarrage de qTox
- Répetez le mot de passe
+ Retapez le mot de passe
@@ -1270,13 +1270,13 @@ Elle sera installée au prochain démarrage de qTox
The DNS gives the Tox ID associated to toxme.se addresses
- Cette addresse n'existe pas
+ Cette adresse n'existe pasThe DNS gives the Tox ID associated to toxme.se addresses
- Erreur en consultant le serveur DNS
+ Une erreur s'est produite en consultant le serveur DNS
@@ -1316,22 +1316,22 @@ Elle sera installée au prochain démarrage de qTox
Title of the window to add a friend through Tox URI
- Ajouter un ami
+ Ajouter un contact
- Voulez-vous ajouter %1 à vos amis ?
+ Voulez-vous ajouter %1 à vos contacts ?
- ID utilisateur:
+ ID d'utilisateur:
- Message de demande d'ami:
+ Associer un message à cette demande:
@@ -1354,7 +1354,7 @@ Elle sera installée au prochain démarrage de qTox
- indisponnible
+ absent
@@ -1368,7 +1368,7 @@ Elle sera installée au prochain démarrage de qTox
- Indisponible
+ Absent
@@ -1383,7 +1383,7 @@ Elle sera installée au prochain démarrage de qTox
- Changer le status en:
+ Changer le status par:
@@ -1395,7 +1395,7 @@ Elle sera installée au prochain démarrage de qTox
Button to set your status to 'Away'
- Indisponible
+ Absent
@@ -1443,18 +1443,18 @@ Elle sera installée au prochain démarrage de qTox
- Toxcore n'as pas pu démarrer correctement, l'application va quitter quand vous fermerez ce message.
+ ToxCore n'as pas pu démarrer correctement, l'application va s'arrêter quand vous fermerez cette alerte.popup text
- Toxcore n'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.
+ ToxCore n'as pas pu démarrer avec ces paramètres proxy. Merci de modifier ou désactiver vos paramètres et redémarrer l'application.
- Ajouter un ami
+ Ajouter un contact
@@ -1469,13 +1469,13 @@ Elle sera installée au prochain démarrage de qTox
- Impossible de demander en ami
+ Impossible d'envoyer la demande de contactcontact status
- indisponnible
+ absent
@@ -1487,7 +1487,7 @@ Elle sera installée au prochain démarrage de qTox
contact status
- déconnecté
+ hors ligne
@@ -1510,7 +1510,7 @@ Elle sera installée au prochain démarrage de qTox
- Le message n'as pas pu être envoyé
+ Le message n'as pu être envoyé
diff --git a/translations/it.ts b/translations/it.ts
index 6650ae750..9ebdbf4c4 100644
--- a/translations/it.ts
+++ b/translations/it.ts
@@ -226,6 +226,11 @@ Ignorare le impostazioni del proxy e connettersi direttamente alla rete Tox?Calling to %1
Stai chiamando %1
+
+
+
+ Invio del file "%1" fallito
+
@@ -538,17 +543,22 @@ Soprannome:
Mostra icona nella traybar
-
+
+
+ Icona brillante
+
+
+ Imposta 0 per disabilitare
-
+ Impostazioni Connessione
-
+ Text on a checkbox to enable IPv6Abilita IPv6 (consigliato)
@@ -590,143 +600,133 @@ Soprannome:
Minimizza nella traybar
-
-
- Mostra lo stato nell'icona della traybar
-
-
-
-
- Questo è un workaround temporaneo fino a quando non saranno disponibili icone di stato adeguate.
-
-
-
+ Mostra quando i contatti cambiano stato
-
+ Controlla aggiornamenti all'avvio (unstable)
-
+ Dai il focus a qTox quando arriva un messaggio
-
+ Falsi messaggi offline
-
+ Espresso in minuti
-
+ Imposta assenza dopo
-
+ minuti
-
+ autoaccept cb tooltipPuoi impostare questa preferenza per ogni singolo contatto usando il click destro sul suo nome.
-
+ Accetta automaticamente i trasferimenti di files
-
+ Salva i files in
-
+ Sfoglia
-
+ Impostazioni Tema
-
+ Usa emoticons
-
+ Text on smiley pack labelEmoticons
-
+ Stile
-
+ Colore
-
+ Dimensione emoticons
-
+ px
-
+ Formato data/ora
-
+ force tcp checkbox tooltipDisabilitando questo sarà possibile usare qTox con Tor. Tuttavia verrà aggiunto carico alla rete Tox, quindi disabilitare solo se necessario.
-
+ Text on checkbox to disable UDPAbilita UDP (consigliato)
-
+ Usa proxy (SOCKS5)
-
+ Text on proxy addr labelIP
-
+ Text on proxy port labelPorta
-
+ reconnect buttonRiconnetti
@@ -771,7 +771,7 @@ Soprannome:
-
+ Salva il log della chat
@@ -781,7 +781,7 @@ Soprannome:
Rimuovi messaggi visualizzati
-
+ Pulito
@@ -1417,134 +1417,134 @@ Verrà installata al riavvio del programma.
Cambia stato in:
-
+ Button to set your status to 'Online'Online
-
+ Button to set your status to 'Away'Assente
-
+ Button to set your status to 'Busy'Occupato
-
+ Scegli un profilo
-
+ Per favore scegli quale identità usare
-
+ Scegli un'immagine per il profilo
-
-
-
+
+
+ Errore
-
+ Impossibile aprire il file
-
+ Impossibile leggere l'immagine
-
+ L'immagine è troppo grande
-
+ Impossibile avviare Toxcore.\nqTox terminerà dopo che avrai chiuso questo messaggio.
-
+ popup textImpossibile avviare Toxcore con le tue impostazione proxy.\nqTox non può funzionare correttamente, per favore modifica le impostazioni e riavvia il programma.
-
+ Aggiungi contatto
-
+ Files trasferiti
-
+ Impostazioni
-
+ Impossibile inviare la richiesta d'amicizia
-
+ contact statusassente
-
+ contact statusoccupato
-
+ contact statusoffline
-
+ contact statusonline
-
+ e.g. "Dubslow is now online"%1 è ora %2
-
+ Placeholder when we don't know someone's name in a group chat<Sconosciuto>
-
+ %1 ha impostato il titolo in %2
-
+ Impossibile inviare il messaggio