From fbc30002ab3438356c0476e70c4577a0310d52c0 Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Tue, 21 Jul 2020 06:15:04 -0400 Subject: New upstream version 2.3.3+dfsg. --- src/gui/CMakeLists.txt | 4 +- src/gui/res/Barrier.qrc | 3 + src/gui/res/icons/32x32/barrier-connected-mask.png | Bin 0 -> 876 bytes src/gui/res/icons/32x32/barrier-connected-mask.svg | 114 ++++ .../res/icons/32x32/barrier-disconnected-mask.png | Bin 0 -> 732 bytes .../res/icons/32x32/barrier-disconnected-mask.svg | 102 ++++ .../res/icons/32x32/barrier-transfering-mask.png | Bin 0 -> 682 bytes .../res/icons/32x32/barrier-transfering-mask.svg | 148 ++++++ src/gui/res/lang/gui_sv.ts | 576 +++++++++++---------- src/gui/src/Action.cpp | 23 +- src/gui/src/Action.h | 4 +- src/gui/src/ActionDialog.cpp | 2 +- src/gui/src/ActionDialogBase.ui | 11 + src/gui/src/BaseConfig.h | 72 ++- src/gui/src/MainWindow.cpp | 30 +- src/gui/src/Screen.cpp | 65 ++- src/gui/src/Screen.h | 23 +- src/gui/src/ScreenSettingsDialog.cpp | 65 +-- src/gui/src/ServerConfig.cpp | 17 +- src/gui/src/ServerConfig.h | 4 +- src/gui/src/ServerConfigDialog.cpp | 20 +- src/gui/src/ServerConfigDialogBase.ui | 100 ++-- src/gui/src/SettingsDialog.cpp | 4 +- 23 files changed, 962 insertions(+), 425 deletions(-) create mode 100644 src/gui/res/icons/32x32/barrier-connected-mask.png create mode 100644 src/gui/res/icons/32x32/barrier-connected-mask.svg create mode 100644 src/gui/res/icons/32x32/barrier-disconnected-mask.png create mode 100644 src/gui/res/icons/32x32/barrier-disconnected-mask.svg create mode 100644 src/gui/res/icons/32x32/barrier-transfering-mask.png create mode 100644 src/gui/res/icons/32x32/barrier-transfering-mask.svg (limited to 'src/gui') diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 9eaa67e..f29fd91 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required (VERSION 3.4) -find_package (Qt5 COMPONENTS Core Widgets Network) +find_package (Qt5 REQUIRED COMPONENTS Core Widgets Network) set (CMAKE_AUTOMOC ON) set (CMAKE_AUTORCC ON) set (CMAKE_AUTOUIC ON) @@ -48,6 +48,6 @@ target_link_libraries (barrier common) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") install (TARGETS barrier DESTINATION ${BARRIER_BUNDLE_BINARY_DIR}) -elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "BSD") install (TARGETS barrier DESTINATION bin) endif() diff --git a/src/gui/res/Barrier.qrc b/src/gui/res/Barrier.qrc index 39da79e..ee6127d 100644 --- a/src/gui/res/Barrier.qrc +++ b/src/gui/res/Barrier.qrc @@ -54,5 +54,8 @@ image/spinning-wheel.gif icons/16x16/padlock.png icons/16x16/barrier-transfering.png + icons/32x32/barrier-connected-mask.png + icons/32x32/barrier-disconnected-mask.png + icons/32x32/barrier-transfering-mask.png diff --git a/src/gui/res/icons/32x32/barrier-connected-mask.png b/src/gui/res/icons/32x32/barrier-connected-mask.png new file mode 100644 index 0000000..7e17314 Binary files /dev/null and b/src/gui/res/icons/32x32/barrier-connected-mask.png differ diff --git a/src/gui/res/icons/32x32/barrier-connected-mask.svg b/src/gui/res/icons/32x32/barrier-connected-mask.svg new file mode 100644 index 0000000..e710bff --- /dev/null +++ b/src/gui/res/icons/32x32/barrier-connected-mask.svg @@ -0,0 +1,114 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gui/res/icons/32x32/barrier-disconnected-mask.png b/src/gui/res/icons/32x32/barrier-disconnected-mask.png new file mode 100644 index 0000000..bedfa75 Binary files /dev/null and b/src/gui/res/icons/32x32/barrier-disconnected-mask.png differ diff --git a/src/gui/res/icons/32x32/barrier-disconnected-mask.svg b/src/gui/res/icons/32x32/barrier-disconnected-mask.svg new file mode 100644 index 0000000..aae4aea --- /dev/null +++ b/src/gui/res/icons/32x32/barrier-disconnected-mask.svg @@ -0,0 +1,102 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gui/res/icons/32x32/barrier-transfering-mask.png b/src/gui/res/icons/32x32/barrier-transfering-mask.png new file mode 100644 index 0000000..90b69d1 Binary files /dev/null and b/src/gui/res/icons/32x32/barrier-transfering-mask.png differ diff --git a/src/gui/res/icons/32x32/barrier-transfering-mask.svg b/src/gui/res/icons/32x32/barrier-transfering-mask.svg new file mode 100644 index 0000000..ef7126a --- /dev/null +++ b/src/gui/res/icons/32x32/barrier-transfering-mask.svg @@ -0,0 +1,148 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gui/res/lang/gui_sv.ts b/src/gui/res/lang/gui_sv.ts index 6a8420e..f0c239e 100644 --- a/src/gui/res/lang/gui_sv.ts +++ b/src/gui/res/lang/gui_sv.ts @@ -1,12 +1,14 @@ - + + + AboutDialogBase About Barrier - Om Barrier + Om Barrier - + <p> Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> @@ -26,22 +28,30 @@ Barrier is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> The Barrier GUI is based on QSynergy by Volker Lanz.<br /><br /> Visit our website for help and info (symless.com). </p> - + <p> +Program för att dela tangentbord och mus. Plattformsöverskridande och öppen källkod.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Barrier är släppt under GNU General Public License (GPLv2).<br /><br /> +Barrier baseras på CosmoSynergy av Richard Lee and Adam Feder.<br /> +Barrier GUI baseras på QSynergy av Volker Lanz.<br /><br /> +Besök vår webbplats för hjälp och information (symless.com). +</p> Unknown - Okänd + Okänd Version: - Version: + Version: &Ok - &Ok + &OK @@ -49,97 +59,97 @@ Visit our website for help and info (symless.com). Configure Action - Konfigurera + Konfigurera åtgärd Choose the action to perform - Välj funktion som skall utföras + Välj den åtgärd som skall utföras Press a hotkey - Tryck ned en snabbtangent + Tryck ner en snabbtangent Release a hotkey - Släpp en snabbtangent + Släpp en snabbtangent Press and release a hotkey - Tryck ned och släpp en snabbtangent + Tryck ner och släpp en snabbtangent only on these screens - endast på dessa skärmar + endast på dessa skärmar Switch to screen - Växla till skärm + Växla till skärm Switch in direction - Växla i riktning + Växla i riktning left - vänster + vänster right - höger + höger up - upp + upp down - ner + ner Lock cursor to screen - Lås muspekaren till skärm + Lås muspekaren till skärm toggle - skifta + växla on - + off - Av + av This action is performed when - Detta utförs när + Denna åtgärd utförs när the hotkey is pressed - snabbtangenten trycks in + snabbtangenten trycks ner the hotkey is released - snabbtangenten släpps + snabbtangenten släpps @@ -147,17 +157,17 @@ Visit our website for help and info (symless.com). Dialog - + Dialog TextLabel - + Textetikett Ignore auto connect clients - + Ignorera klienter med automatisk anslutning @@ -165,12 +175,12 @@ Visit our website for help and info (symless.com). Hotkey - Snabbtangent + Snabbtangent Enter the specification for the hotkey: - Beskriv snabbtangenten: + Beskriv snabbtangenten: @@ -178,189 +188,193 @@ Visit our website for help and info (symless.com). &Start - Start + &Starta &File - Arkiv + &Arkiv &Edit - &Redigera + &Redigera &Window - Fönster + &Fönster &Help - Hjälp + &Hjälp <p>Your version of Barrier is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> <p>Version %1 is now available, <a href="%2">visit website</a>.</p> - <p>Du kör inte den senaste versionen av Barrier. Version <b>%1</b> finns tillgänglig för <a href="%2">nedladdning</a>.</p> + <p>Din version av Barrier är utdaterad. Version <b>%1</b> finns nu tillgänglig för <a href="%2">nerladdning</a>.</p> Program can not be started - Programmet kan inte startas + Programmet kan inte startas The executable<br><br>%1<br><br>could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program. - Programmet<br><br>%1<br><br>kunde inte startas, men det finns. Var vänlig och kontrollera att du har tillräckliga rättigheter för att köra detta program. + Programmet<br><br>%1<br><br>kunde inte startas, men det finns tillgängligt. Kontrollera att du har tillräckliga rättigheter för att köra detta program. Barrier client not found - Barrierklienten hittades inte + Barrier-klienten hittades inte The executable for the barrier client does not exist. - Den exekverbara filen för Barrierklienten existerar inte. + Barrier-klientens körbara fil saknas. Hostname is empty - Värddatornamnet är inte satt + Värdnamnet är tomt Please fill in a hostname for the barrier client to connect to. - Fyll i det värddatornamn som Barrierklienten skall ansluta till. + Fyll i det värdnamn som Barrier-klienten skall ansluta till. Cannot write configuration file - Kan inte spara konfigurationsfilen + Kan inte skriva konfigurationsfilen The temporary configuration file required to start barrier can not be written. - Den tillfälliga konfigurationsfilen som krävs för att kunna starta Barrier kan inte skapas. + Den tillfälliga konfigurationsfil som krävs för att starta Barrier, kan inte skrivas. Configuration filename invalid - Namnet på konfigurationsfilen är inte giltigt + Ogiltigt namn på konfigurationsfilen You have not filled in a valid configuration file for the barrier server. Do you want to browse for the configuration file now? - Du har inte fyllt i en giltig konfigurationsfil för Barrierservern. Vill du bläddra efter konfigurationsfilen nu? + Du har inte fyllt i en giltig konfigurationsfil för Barrier-servern. Vill du bläddra efter konfigurationsfilen nu? Barrier server not found - Barrierservern hittades inte + Barrier-servern hittades inte The executable for the barrier server does not exist. - Den körbara filen för Barrierservern existerar inte. + Barrier-serverns körbara fil finns inte. Barrier terminated with an error - Barrier avslutades med ett fel + Barrier avslutades med ett fel Barrier terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. - Barrierterminalen avslutades oväntat med avbrottskoden %1.<br><br>Kontrollera loggdatan för detaljer. + Barrier avslutades oväntat med avbrottskoden %1.<br><br>Se loggdata för detaljerad info. &Stop - Stopp + &Stopp Please add the server (%1) to the grid. - + Lägg till servern (%1) i rutfältet. Please drag the new client screen (%1) to the desired position on the grid. - + Dra den nya klientskämen (%1) till önskad position i rutfältet. Failed to detect system architecture. - + Kunde inte identifiera systemarkitektur. Cancel - + Avbryt Failed to download Bonjour installer to location: %1 - + Kunde inte ladda ner Bonjour-installerare till platsen: %1 Do you want to enable auto config and install Bonjour? This feature helps you establish the connection. - + Vill du aktivera automatisk konfiguration och installation av Bonjour? + +Denna funktion hjälper dig att etablera anslutningen. Auto config feature requires Bonjour. Do you want to install Bonjour? - + Automatisk konfiguration kräver Bonjour. + +Vill du installera Bonjour? Barrier is starting. - Barrier startas. + Barrier startar. Barrier is running. - Barrier körs. + Barrier körs. Barrier is not running. - Barrier körs inte. + Barrier körs inte. Unknown - Okänd + Okänd Barrier - Barrier + Barrier Browse for a barriers config file - Bläddra efter Barriers konfigurationsfil. + Bläddra efter Barriers konfigurationsfil Barrier is now connected, You can close the config window. Barrier will remain connected in the background. - + Barrier är nu ansluten, du kan stänga konfigurationsfönstret. Barrier kommer att fortsätta vara ansluten i bakgrunden. Security question - + Säkerhetsfråga @@ -368,25 +382,31 @@ Do you want to install Bonjour? %1 -This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). +This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. - + Litar du på fingeravtrycket? + +%1 + +Detta är en servers fingeravtryck. Du bör jämföra det här fingeravtrycket med det på serverns skärm. Om de två inte stämmer exakt, så är det förmodligen inte den server du förväntar dig (det kan vara en skadlig användare). + +Klicka "Ja" för att automatiskt lita på fingeravtrycket i framtida anslutningar. Klicka "Nej" för att avvisa det här fingeravtrycket och koppla från servern. Save configuration as... - Spara konfiguration som... + Spara konfigurationen som... Save failed - Sparades inte + Kunde inte spara Could not save configuration to file. - Kunde inte spara konfiguration till fil. + Kunde inte spara konfigurationen till fil. @@ -394,168 +414,168 @@ To automatically trust this fingerprint for future connections, click Yes. To re Barrier - Barrier + Barrier - Ser&ver (share this computer's mouse and keyboard): - + Ser&ver (share this computer's mouse and keyboard): + Ser&ver (dela den här datorns mus och tangentbord): Screen name: - Skärmnamn: + Skärmnamn: &Server IP: - Serverns IP: + &Serverns IP: &Start - Start + &Starta Use existing configuration: - Använd befintlig konfiguration: + Använd befintlig konfiguration: &Configuration file: - Konfigurationsfil: + &Konfigurationsfil: &Browse... - Bläddra... + &Bläddra... Configure interactively: - Konfigurera interaktivt: + Konfigurera interaktivt: &Configure Server... - Konfigurera server... + &Konfigurera server... Ready - Klar + Klar Log - Logg + Logg &Reload - Verkställ + &Uppdatera IP addresses: - IP-adresser: + IP-adresser: Fingerprint: - + Fingeravtryck: - &Client (use another computer's mouse and keyboard): - + &Client (use another computer's mouse and keyboard): + &Klient (använd en annan dators mus och tangenbord): Auto config - + Konfigurera automatiskt &About Barrier... - Om Barrier... + &Om Barrier... &Quit - Avsluta + A&vsluta Quit - Avsluta + Avsluta Run - Kör + Kör S&top - S&topp + S&topp Stop - Stopp + Stopp S&how Status - Visa Status + V&isa status &Hide - Dölj + &Dölj Hide - Dölj + Dölj &Show - Visa + &Visa Show - Visa + Visa Save configuration &as... - Spara konfiguration som... + S&para konfigurationen som... Save the interactively generated server configuration to a file. - Spara den interaktivt genererade serverkonfigurationen till en fil. + Spara den interaktivt skapade serverkonfigurationen till en fil. Settings - Inställningar + Inställningar Edit settings - Ändra inställningar + Ändra inställningar Run Wizard - Kör guiden + Kör guiden @@ -563,7 +583,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re Unnamed - Namnlös + Namnlös @@ -571,28 +591,29 @@ To automatically trust this fingerprint for future connections, click Yes. To re Failed to get plugin directory. - + Kunde inte hämta mappen för insticksmoduler. Failed to get profile directory. - + Kunde inte hämta profilmappen. - Failed to download plugin '%1' to: %2 + Failed to download plugin '%1' to: %2 %3 - + Kunde inte ladda ner insticksmodulen "%1" till: %2 +%3 Could not get Windows architecture type. - + Kunde inte hämta Windows arkitekturtyp. Could not get Linux architecture type. - + Kunde inte hämta Linux arkitekturtyp. @@ -600,48 +621,48 @@ To automatically trust this fingerprint for future connections, click Yes. To re Setup Barrier - Ställ in Barrier + Ställ in Barrier Please wait... - + Vänta... Error: %1 - + Fel: %1 Setup complete. - + Inställning slutförd. - Downloading '%1' plugin (%2/%3)... - + Downloading '%1' plugin (%2/%3)... + Laddar ner "%1" (%2/%3)... Plugins installed successfully. - + Insticksmoduler korrekt installerade. Generating SSL certificate... - + Genererar SSL-certifikat... Downloading plugin: %1 (1/%2) - + Laddar ner insticksmodul: %1 (1/%2) Getting plugin list... - + Hämtar instickslista... @@ -649,17 +670,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re Barrier Configurations (*.sgc);;All files (*.*) - Barrier-konfigurationer (*.sgc);;Alla filer (*.*) + Barrier-konfigurationer (*.sgc);;Alla filer (*.*) Barrier Configurations (*.conf);;All files (*.*) - Barrier-konfigurationer (*.conf);;Alla filer (*.*) + Barrier-konfigurationer (*.conf);;Alla filer (*.*) System tray is unavailable, quitting. - Systemfältet otillgängligt, avslutar. + Systemfältet otillgängligt, avslutar. @@ -667,22 +688,22 @@ To automatically trust this fingerprint for future connections, click Yes. To re Screen name is empty - Skärmnamnet är tomt + Skärmnamnet är tomt The screen name cannot be empty. Please either fill in a name or cancel the dialog. - Skärmnamnet kan inte vara tomt. Fyll i ett namn eller avbryt dialogrutan. + Skärmnamnet kan inte vara tomt. Fyll i ett namn eller avbryt. Screen name matches alias - Skärmnamn matchar alias + Skärmnamnet är samma som alias The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. - Skärmnamnet kan inte vara samma som en alias. Var vänlig att antingen ta bort alias eller ändra skärmnamnet. + Skärmnamnet kan inte vara samma som alias. Ta antingen bort alias eller ändra skärmnamnet. @@ -690,37 +711,37 @@ To automatically trust this fingerprint for future connections, click Yes. To re Screen Settings - Skärminställningar + Skärminställningar Screen &name: - Skärmnamn: + Skärm&namn: A&liases - Alias + A&lias &Add - Lägg till + &Lägg till &Remove - Ta bort + &Ta bort &Modifier keys - Modifieringstangenter + &Modifieringstangenter &Shift: - Shift: + &Shift: @@ -729,7 +750,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re Shift - Shift + Shift @@ -738,7 +759,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re Ctrl - Ctrl + Ctrl @@ -747,7 +768,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re Alt - Alt + Alt @@ -756,7 +777,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re Meta - Meta + Meta @@ -765,7 +786,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re Super - Super + Super @@ -774,82 +795,82 @@ To automatically trust this fingerprint for future connections, click Yes. To re None - Ingen + Ingen &Ctrl: - &Ctrl: + &Ctrl: Al&t: - Alt: + Al&t: M&eta: - Meta: + M%eta: S&uper: - Super: + S&uper: &Dead corners - Döda hörn + &Döda hörn Top-left - Över vänster + Vänster överkant Top-right - Över höger + Höger överkant Bottom-left - Nedre vänstra hörnet + Vänster underkant Bottom-right - Nedre höger + Höger underkant Corner Si&ze: - Hörnets storlek: + H&örnstorlek: &Fixes - Korrigeringar + &Korrigeringar Fix CAPS LOCK key - Korrigera CAPS LOCK + Korrigera CAPS LOCK Fix NUM LOCK key - Korrigera NUM LOCK + Korrigera NUM LOCK Fix SCROLL LOCK key - Korrigera SCROLL LOCK + Korrigera SCROLL LOCK Fix XTest for Xinerama - Korrigera XTest för Xinerama + Korrigera XTest för Xinerama @@ -857,7 +878,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it - <center>Skärm:<b>%1</b></center><br>Dubbelklicka för att ändra inställningar<br>Dra skärmen till papperskorgen för att ta bort den + <center>Skärm:<b>%1</b></center><br>Dubbelklicka för att ändra inställningar<br>Dra skärmen till papperskorgen för att ta bort den @@ -865,7 +886,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re Configure server - + Konfigurera server @@ -873,168 +894,168 @@ To automatically trust this fingerprint for future connections, click Yes. To re Server Configuration - Serverkonfiguration + Serverkonfiguration Screens and links - Skärmar och länkar + Skärmar och länkar Drag a screen from the grid to the trashcan to remove it. - Dra en skärm från rutnätet till papperskorgen för att ta bort den. + Dra en skärm från rutfältet till papperskorgen för att ta bort den. Configure the layout of your barrier server configuration. - Konfigurera layouten på din Barrier-konfiguration. + Konfigurera layouten på din Barrier serverkonfiguration. Drag this button to the grid to add a new screen. - Dra den här knappen till rutnätet för att lägga till en ny skärm. + Dra den här knappen till rutfältet för att lägga till en ny skärm. Drag new screens to the grid or move existing ones around. Drag a screen to the trashcan to delete it. Double click on a screen to edit its settings. - Dra nya skärmar till rutnätet eller flytta runt existerande. + Dra nya skärmar till rutfältet eller flytta runt befintliga. Dra en skärm till papperskorgen för att ta bort den. Dubbelklicka på en skärm för att ändra dess inställningar. Hotkeys - Snabbtangenter + Snabbtangenter &Hotkeys - Snabbtangenter + &Snabbtangenter &New - Ny + &Nytt &Edit - &Redigera + &Redigera &Remove - Ta bort + &Ta bort A&ctions - Åtgärder + &Åtgärder Ne&w - Ny + N&ytt E&dit - Ändra + Re&digera Re&move - Ta bort + Ta &bort Advanced server settings - Avancerade serverinställningar + Avancerade serverinställningar &Switch - Växla + &Växla Switch &after waiting - Växla efter väntan + V&äxla efter väntan ms - ms + ms Switch on double &tap within - Växla eller dubbelklicka inuti + Växla vid &dubbelklick inom &Options - Alternativ + &Alternativ &Check clients every - Kontrollera klienter varje + &Kontrollera klienter varje Use &relative mouse moves - Använd relativa musrörelser + Använd &relativa musrörelser S&ynchronize screen savers - Synkronisera skärmsläckare + Synkr&onisera skärmsläckare - Don't take &foreground window on Windows servers - Använd inte förgrundsfönster på Windowsservrar + Don't take &foreground window on Windows servers + Använd inte &förgrundsfönster på Windowsservrar Ignore auto config clients - + Ignorera automatiskt konfigurerade klienter &Dead corners - Döda hörn + &Döda hörn To&p-left - Övre vänstra hörnet + V&änster överkant Top-rig&ht - Övre högra hörnet + H&öger överkant &Bottom-left - Nedre vänstra hörnet + Vänster &underkant Bottom-ri&ght - Nedre högra hörnet + Höger u&nderkant Cor&ner Size: - Hörnstorlek: + Hö&rnstorlek: @@ -1042,20 +1063,20 @@ Dubbelklicka på en skärm för att ändra dess inställningar. Save log file to... - Spara loggfil till... + Spara loggfil till... Elevate Barrier - Förhöj Barriers behörighet + Höj Barriers behörighet Are you sure you want to elevate Barrier? This allows Barrier to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Barrier only if you really need to. - Är du säker på att du vill förhöja Barriers behörighet? -Detta låter Barrier interagera med förhöjda processer och UAC-dialogen, men kan skapa program med processer som inte är förhöjda. Förhöj Barriers behörighet enbart om du verkligen måste. + Vill du verkligen höja Barriers behörighet? +Detta låter Barrier interagera med förhöjda processer och UAC-dialogen, men kan skapa program med processer som inte är förhöjda. Höj Barriers behörighet enbart om du verkligen måste. @@ -1063,107 +1084,107 @@ Detta låter Barrier interagera med förhöjda processer och UAC-dialogen, men k Settings - Inställningar + Inställningar Sc&reen name: - Skärmnamn: + Sk&ärmnamn: P&ort: - Port: + P&ort: &Interface: - Gränssnitt: + G&ränssnitt: Elevate mode - + Rättighetsläge &Hide on startup - + &Dölj vid programstart &Network Security - + &Nätverkssäkerhet Use &SSL encryption (unique certificate) - + Använd &SSL-kryptering (unikt certifikat) Logging - Loggning + Loggning &Logging level: - Loggningsnivå: + &Loggningsnivå: Log to file: - Logga till fil: + Logga till fil: Browse... - Bläddra: + Bläddra... Error - Fel + Fel &Language: - Språk: + &Språk: &Miscellaneous - &Övrigt + &Diverse Warning - Varning + Varning Note - Notering + Anteckning Info - Info + Information Debug - Felsök + Felsök Debug1 - Felsök1 + Felsök1 Debug2 - Felsök2 + Felsök2 @@ -1171,17 +1192,17 @@ Detta låter Barrier interagera med förhöjda processer och UAC-dialogen, men k Setup Barrier - Ställ in Barrier + Ställ in Barrier Please select an option. - Välj ett alternativ. + Välj ett alternativ. Please enter your email address and password. - Var vänlig skriv din e-postaddress och lösenord. + Ange din e-postadress och lösenord. @@ -1189,85 +1210,93 @@ Detta låter Barrier interagera med förhöjda processer och UAC-dialogen, men k Setup Barrier - Ställ in Barrier + Installera Barrier Welcome - Välkommen + Välkommen Thanks for installing Barrier! - Tack för att du installerar Barrier! + Tack för att du installerar Barrier! - Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux). - Med Barrier kan du enkelt dela din mus och ditt tangentbord med flera datorer på ditt skrivbord, och det är Fri och Öppen mjukvara. För bara muspekaren över kanten på en datorskärm för att den skall dyka upp på nästa. Du kan till och med dela utklipp. Allt du behöver är en nätverksanslutning. Barrier är multiplattform (fungerar på både Windows, Mac OS X och Linux). + Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux). + Med Barrier kan du enkelt dela din mus och ditt tangentbord mellan flera datorer på ditt skrivbord, och det är fri och öppen källkod. För bara muspekaren över kanten på en datorskärm till en annan. Du kan till och med dela urklipp. Allt du behöver är en nätverksanslutning. Barrier är multiplattform (fungerar på både Windows, OSX och Linux). Activate - + Aktivera &Activate now... - + &Aktivera nu... Email: - + E-post: Password: - + Lösenord: <a href="https://symless.com/account/reset/">Forgot password</a> - + <a href="https://symless.com/account/reset/">Glömt lösenord</a> &Skip activation - + &Skippa aktivering - &Server (share this computer's mouse and keyboard) - + &Server (share this computer's mouse and keyboard) + &Server (dela denna dators mus och tangentbord) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html> - +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Min primära mus och tangentbord är anslutna till den här datorn. Detta låter dig flytta musen över till en annan dators skärm. Det kan bara finnas en server i din installation.</span></p></body></html> - &Client (use another computer's mouse and keyboard) - + &Client (use another computer's mouse and keyboard) + &Klient (använd en annan dators mus och tangentbord) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html> - +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Du har redan installerat en server. Den här datorn styrs med hjälp av serverns mus och tangentbord. Det kan finnas många klienter i din installation.</span></p></body></html> Server or Client? - Server eller klient? + Server eller klient? @@ -1275,22 +1304,22 @@ p, li { white-space: pre-wrap; } Failed to get profile directory. - + Kunde inte hämta profilmappen. SSL certificate generated. - + SSL-certifikat genererat. SSL fingerprint generated. - + SSL-fingeravtryck genererat. Failed to find SSL fingerprint. - + Kunde inte hitta SSL-fingeravtryck. @@ -1298,7 +1327,7 @@ p, li { white-space: pre-wrap; } Unknown - Okänd + Okänd @@ -1308,19 +1337,22 @@ p, li { white-space: pre-wrap; } An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. %1 - + Ett fel uppstod när du försökte logga in. Kontakta supporten och ange följande uppgifter. + +%1 Login failed, invalid email or password. - Inloggning misslyckades, ogiltig e-postaddress eller lösenord. + Inloggning misslyckades. Ogiltig e-postaddress eller lösenord. Login failed, an error occurred. %1 - Inloggning misslyckades, ett problem inträffade. + Inloggning misslyckades. Ett fel uppstod. + %1 @@ -1330,8 +1362,10 @@ p, li { white-space: pre-wrap; } Server response: %1 - Inloggning misslyckades, ett problem inträffade. -Server svar: + Inloggning misslyckades. Ett fel uppstod. + +Serversvar: + %1 @@ -1339,19 +1373,23 @@ Server svar: An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. %1 - + Ett fel uppstod när instickslistan anropades. Kontakta supporten och ange följande uppgifter. + +%1 Get plugin list failed, invalid user email or password. - + Kunde inte hämta instickslistan. Ogiltig e-postadress eller lösenord. Get plugin list failed, an error occurred. %1 - + Kunde inte hämta instickslistan. Ett fel uppstod. + +%1 @@ -1360,7 +1398,11 @@ Server svar: Server response: %1 - + Kunde inte hämta instickslistan. Ett fel uppstod. + +Serversvar: + +%1 @@ -1368,44 +1410,44 @@ Server response: zeroconf server detected: %1 - + zeroconf-server identifierad: %1 zeroconf client detected: %1 - + zeroconf-klient identifierad: %1 Zero configuration service - + Zero konfigurationstjänst Error code: %1. - + Felkod:%1. Unable to start the zeroconf: %1. - + Kunde inte starta zeroconf: %1. Barrier - Barrier + Barrier Failed to get local IP address. Please manually type in server address on your clients - + Kunde inte inhämta lokal IP-adress. Skriv in serveradressen manuellt, på dina klienter. %1 - + %1 - \ No newline at end of file + diff --git a/src/gui/src/Action.cpp b/src/gui/src/Action.cpp index 2e0f339..909e983 100644 --- a/src/gui/src/Action.cpp +++ b/src/gui/src/Action.cpp @@ -24,7 +24,8 @@ const char* Action::m_ActionTypeNames[] = { "keyDown", "keyUp", "keystroke", - "switchToScreen", "switchInDirection", "lockCursorToScreen", + "switchToScreen", "toggleScreen", + "switchInDirection", "lockCursorToScreen", "mouseDown", "mouseUp", "mousebutton" }; @@ -45,7 +46,13 @@ Action::Action() : QString Action::text() const { - QString text = QString(m_ActionTypeNames[keySequence().isMouseButton() ? type() + 6 : type() ]) + "("; + /* This function is used to save to config file which is for barriers to + * read. However the server config parse does not support functions with () + * in the end but now argument inside. If you need a function with no + * argument, it can not have () in the end. + */ + QString text = QString(m_ActionTypeNames[keySequence().isMouseButton() ? + type() + int(mouseDown) : type()]); switch (type()) { @@ -53,6 +60,7 @@ QString Action::text() const case keyUp: case keystroke: { + text += "("; text += keySequence().toString(); if (!keySequence().isMouseButton()) @@ -72,19 +80,29 @@ QString Action::text() const else text += ",*"; } + text += ")"; } break; case switchToScreen: + text += "("; text += switchScreenName(); + text += ")"; + break; + + case toggleScreen: break; case switchInDirection: + text += "("; text += m_SwitchDirectionNames[m_SwitchDirection]; + text += ")"; break; case lockCursorToScreen: + text += "("; text += m_LockCursorModeNames[m_LockCursorMode]; + text += ")"; break; default: @@ -92,7 +110,6 @@ QString Action::text() const break; } - text += ")"; return text; } diff --git a/src/gui/src/Action.h b/src/gui/src/Action.h index 2786842..b738f3b 100644 --- a/src/gui/src/Action.h +++ b/src/gui/src/Action.h @@ -36,7 +36,9 @@ class Action friend QTextStream& operator<<(QTextStream& outStream, const Action& action); public: - enum ActionType { keyDown, keyUp, keystroke, switchToScreen, switchInDirection, lockCursorToScreen, mouseDown, mouseUp, mousebutton }; + enum ActionType { keyDown, keyUp, keystroke, + switchToScreen, toggleScreen, switchInDirection, + lockCursorToScreen, mouseDown, mouseUp, mousebutton }; enum SwitchDirection { switchLeft, switchRight, switchUp, switchDown }; enum LockCursorMode { lockCursorToggle, lockCursonOn, lockCursorOff }; diff --git a/src/gui/src/ActionDialog.cpp b/src/gui/src/ActionDialog.cpp index 3565cfb..2796885 100644 --- a/src/gui/src/ActionDialog.cpp +++ b/src/gui/src/ActionDialog.cpp @@ -39,7 +39,7 @@ ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey // work around Qt Designer's lack of a QButtonGroup; we need it to get // at the button id of the checked radio button - QRadioButton* const typeButtons[] = { m_pRadioPress, m_pRadioRelease, m_pRadioPressAndRelease, m_pRadioSwitchToScreen, m_pRadioSwitchInDirection, m_pRadioLockCursorToScreen }; + QRadioButton* const typeButtons[] = { m_pRadioPress, m_pRadioRelease, m_pRadioPressAndRelease, m_pRadioSwitchToScreen, m_pRadioToggleScreen, m_pRadioSwitchInDirection, m_pRadioLockCursorToScreen }; for (unsigned int i = 0; i < sizeof(typeButtons) / sizeof(typeButtons[0]); i++) m_pButtonGroupType->addButton(typeButtons[i], i); diff --git a/src/gui/src/ActionDialogBase.ui b/src/gui/src/ActionDialogBase.ui index f6dff78..9c6ad0a 100644 --- a/src/gui/src/ActionDialogBase.ui +++ b/src/gui/src/ActionDialogBase.ui @@ -142,6 +142,17 @@ + + + + + + Toggle screen + + + + + diff --git a/src/gui/src/BaseConfig.h b/src/gui/src/BaseConfig.h index 2a34969..cf41ac6 100644 --- a/src/gui/src/BaseConfig.h +++ b/src/gui/src/BaseConfig.h @@ -26,61 +26,97 @@ class BaseConfig { - public: - enum Modifier { DefaultMod = -1, Shift, Ctrl, Alt, Meta, Super, None, NumModifiers }; - enum SwitchCorner { TopLeft, TopRight, BottomLeft, BottomRight, NumSwitchCorners }; - enum Fix { CapsLock, NumLock, ScrollLock, XTest, PreserveFocus, NumFixes }; +public: + enum class Modifier { + DefaultMod = -1, + Shift, + Ctrl, + Alt, + Meta, + Super, + None, + Count + }; + + enum class SwitchCorner { + TopLeft, + TopRight, + BottomLeft, + BottomRight, + Count + }; + + enum class Fix { + CapsLock, + NumLock, + ScrollLock, + XTest, + PreserveFocus, + Count + }; protected: BaseConfig() {} virtual ~BaseConfig() {} protected: - template - void readSettings(QSettings& settings, T1& array, const QString& arrayName, const T2& deflt) + template + void readSettings(QSettings& settings, QList& array, const QString& arrayName, + const T& deflt) { int entries = settings.beginReadArray(arrayName + "Array"); array.clear(); for (int i = 0; i < entries; i++) { settings.setArrayIndex(i); - QVariant v = settings.value(arrayName, deflt); - array.append(v.value()); + QVariant v = settings.value(arrayName, static_cast(deflt)); + array.append(static_cast(v.value())); } settings.endArray(); } - template - void readSettings(QSettings& settings, T1& array, const QString& arrayName, const T2& deflt, int entries) + template + void readSettings(QSettings& settings, QList& array, const QString& arrayName, + const T& deflt, int entries) { Q_ASSERT(array.size() >= entries); settings.beginReadArray(arrayName + "Array"); for (int i = 0; i < entries; i++) { settings.setArrayIndex(i); - QVariant v = settings.value(arrayName, deflt); - array[i] = v.value(); + QVariant v = settings.value(arrayName, static_cast(deflt)); + array[i] = static_cast(v.value()); } settings.endArray(); } - template - void writeSettings(QSettings& settings, const T& array, const QString& arrayName) const + template + void writeSettings(QSettings& settings, const QList& array, + const QString& arrayName) const { settings.beginWriteArray(arrayName + "Array"); for (int i = 0; i < array.size(); i++) { settings.setArrayIndex(i); - settings.setValue(arrayName, array[i]); + settings.setValue(arrayName, static_cast(array[i])); } settings.endArray(); } public: - static const char* modifierName(int idx) { return m_ModifierNames[idx]; } - static const char* fixName(int idx) { return m_FixNames[idx]; } - static const char* switchCornerName(int idx) { return m_SwitchCornerNames[idx]; } + static const char* modifierName(Modifier idx) + { + return m_ModifierNames[static_cast(idx)]; + } + static const char* fixName(Fix idx) + { + return m_FixNames[static_cast(idx)]; + } + static const char* switchCornerName(SwitchCorner idx) + { + return m_SwitchCornerNames[static_cast(idx)]; + } private: static const char* m_ModifierNames[]; diff --git a/src/gui/src/MainWindow.cpp b/src/gui/src/MainWindow.cpp index bcbb15b..01133bf 100644 --- a/src/gui/src/MainWindow.cpp +++ b/src/gui/src/MainWindow.cpp @@ -67,10 +67,17 @@ static const QString barrierConfigFilter(QObject::tr("Barrier Configurations (*. static const char* barrierIconFiles[] = { +#if defined(Q_OS_MAC) + ":/res/icons/32x32/barrier-disconnected-mask.png", + ":/res/icons/32x32/barrier-disconnected-mask.png", + ":/res/icons/32x32/barrier-connected-mask.png", + ":/res/icons/32x32/barrier-transfering-mask.png" +#else ":/res/icons/16x16/barrier-disconnected.png", ":/res/icons/16x16/barrier-disconnected.png", ":/res/icons/16x16/barrier-connected.png", ":/res/icons/16x16/barrier-transfering.png" +#endif }; static const char* barrierLargeIcon = ":/res/icons/256x256/barrier.ico"; @@ -288,8 +295,13 @@ void MainWindow::saveSettings() void MainWindow::setIcon(qBarrierState state) { - if (m_pTrayIcon) - m_pTrayIcon->setIcon(QIcon(barrierIconFiles[state])); + if (m_pTrayIcon) { + QIcon icon = QIcon(barrierIconFiles[state]); +#if defined(Q_OS_MAC) + icon.setIsMask(true); +#endif + m_pTrayIcon->setIcon(icon); + } } void MainWindow::trayActivated(QSystemTrayIcon::ActivationReason reason) @@ -333,7 +345,9 @@ void MainWindow::logError() void MainWindow::appendLogInfo(const QString& text) { - m_pLogWindow->appendInfo(text); + if (appConfig().logLevel() >= 3) { + m_pLogWindow->appendInfo(text); + } } void MainWindow::appendLogDebug(const QString& text) { @@ -524,10 +538,7 @@ void MainWindow::startBarrier() qDebug() << args; - // show command if debug log level... - if (appConfig().logLevel() >= 4) { - appendLogInfo(QString("command: %1 %2").arg(app, args.join(" "))); - } + appendLogDebug(QString("command: %1 %2").arg(app, args.join(" "))); appendLogInfo("config file: " + configFilename()); appendLogInfo("log level: " + appConfig().logLevelText()); @@ -584,9 +595,7 @@ bool MainWindow::clientArgs(QStringList& args, QString& app) args << "[" + serverIp + "]:" + QString::number(appConfig().port()); return true; } - } - - if (m_pLineEditHostname->text().isEmpty()) { + } else if (m_pLineEditHostname->text().isEmpty()) { show(); if (!m_SuppressEmptyServerWarning) { QMessageBox::warning(this, tr("Hostname is empty"), @@ -944,6 +953,7 @@ void MainWindow::updateSSLFingerprint() } if (m_AppConfig->getCryptoEnabled() && Fingerprint::local().fileExists()) { m_pLabelLocalFingerprint->setText(Fingerprint::local().readFirst()); + m_pLabelLocalFingerprint->setTextInteractionFlags(Qt::TextSelectableByMouse); } else { m_pLabelLocalFingerprint->setText("Disabled"); } diff --git a/src/gui/src/Screen.cpp b/src/gui/src/Screen.cpp index 880e78c..38d02e8 100644 --- a/src/gui/src/Screen.cpp +++ b/src/gui/src/Screen.cpp @@ -47,13 +47,13 @@ void Screen::init() // m_Modifiers, m_SwitchCorners and m_Fixes are QLists we use like fixed-size arrays, // thus we need to make sure to fill them with the required number of elements. - for (int i = 0; i < NumModifiers; i++) - modifiers() << i; + for (int i = 0; i < static_cast(Modifier::Count); i++) + modifiers() << static_cast(i); - for (int i = 0; i < NumSwitchCorners; i++) + for (int i = 0; i < static_cast(SwitchCorner::Count); i++) switchCorners() << false; - for (int i = 0; i < NumFixes; i++) + for (int i = 0; i < static_cast(Fix::Count); i++) fixes() << false; } @@ -66,10 +66,12 @@ void Screen::loadSettings(QSettings& settings) setSwitchCornerSize(settings.value("switchCornerSize").toInt()); - readSettings(settings, aliases(), "alias", QString("")); - readSettings(settings, modifiers(), "modifier", static_cast(DefaultMod), NumModifiers); - readSettings(settings, switchCorners(), "switchCorner", false, NumSwitchCorners); - readSettings(settings, fixes(), "fix", false, NumFixes); + readSettings(settings, aliases(), "alias", QString("")); + readSettings(settings, modifiers(), "modifier", Modifier::DefaultMod, + static_cast(Modifier::Count)); + readSettings(settings, switchCorners(), "switchCorner", false, + static_cast(SwitchCorner::Count)); + readSettings(settings, fixes(), "fix", false, static_cast(Fix::Count)); } void Screen::saveSettings(QSettings& settings) const @@ -81,27 +83,35 @@ void Screen::saveSettings(QSettings& settings) const settings.setValue("switchCornerSize", switchCornerSize()); - writeSettings(settings, aliases(), "alias"); - writeSettings(settings, modifiers(), "modifier"); - writeSettings(settings, switchCorners(), "switchCorner"); - writeSettings(settings, fixes(), "fix"); + writeSettings(settings, aliases(), "alias"); + writeSettings(settings, modifiers(), "modifier"); + writeSettings(settings, switchCorners(), "switchCorner"); + writeSettings(settings, fixes(), "fix"); } QTextStream& Screen::writeScreensSection(QTextStream& outStream) const { outStream << "\t" << name() << ":" << endl; - for (int i = 0; i < modifiers().size(); i++) - if (modifier(i) != i) - outStream << "\t\t" << modifierName(i) << " = " << modifierName(modifier(i)) << endl; + for (int i = 0; i < modifiers().size(); i++) { + auto mod = static_cast(i); + if (modifier(mod) != mod) { + outStream << "\t\t" << modifierName(mod) << " = " << modifierName(modifier(mod)) + << endl; + } + } - for (int i = 0; i < fixes().size(); i++) - outStream << "\t\t" << fixName(i) << " = " << (fixes()[i] ? "true" : "false") << endl; + for (int i = 0; i < fixes().size(); i++) { + auto fix = static_cast(i); + outStream << "\t\t" << fixName(fix) << " = " << (fixes()[i] ? "true" : "false") << endl; + } outStream << "\t\t" << "switchCorners = none "; - for (int i = 0; i < switchCorners().size(); i++) - if (switchCorners()[i]) - outStream << "+" << switchCornerName(i) << " "; + for (int i = 0; i < switchCorners().size(); i++) { + if (switchCorners()[i]) { + outStream << "+" << switchCornerName(static_cast(i)) << " "; + } + } outStream << endl; outStream << "\t\t" << "switchCornerSize = " << switchCornerSize() << endl; @@ -124,11 +134,16 @@ QTextStream& Screen::writeAliasesSection(QTextStream& outStream) const QDataStream& operator<<(QDataStream& outStream, const Screen& screen) { + QList modifiers; + for (auto mod : screen.modifiers()) { + modifiers.push_back(static_cast(mod)); + } + return outStream << screen.name() << screen.switchCornerSize() << screen.aliases() - << screen.modifiers() + << modifiers << screen.switchCorners() << screen.fixes() ; @@ -136,12 +151,18 @@ QDataStream& operator<<(QDataStream& outStream, const Screen& screen) QDataStream& operator>>(QDataStream& inStream, Screen& screen) { + QList modifiers; return inStream >> screen.m_Name >> screen.m_SwitchCornerSize >> screen.m_Aliases - >> screen.m_Modifiers + >> modifiers >> screen.m_SwitchCorners >> screen.m_Fixes ; + + screen.m_Modifiers.clear(); + for (auto mod : modifiers) { + screen.m_Modifiers.push_back(static_cast(mod)); + } } diff --git a/src/gui/src/Screen.h b/src/gui/src/Screen.h index 6d9c668..d728af1 100644 --- a/src/gui/src/Screen.h +++ b/src/gui/src/Screen.h @@ -50,12 +50,17 @@ class Screen : public BaseConfig const QStringList& aliases() const { return m_Aliases; } bool isNull() const { return m_Name.isEmpty(); } - int modifier(int m) const { return m_Modifiers[m] == DefaultMod ? m : m_Modifiers[m]; } - const QList& modifiers() const { return m_Modifiers; } - bool switchCorner(int c) const { return m_SwitchCorners[c]; } + Modifier modifier(Modifier m) const + { + Modifier overriddenModifier = m_Modifiers[static_cast(m)]; + return overriddenModifier == Modifier::DefaultMod ? m : overriddenModifier; + } + + const QList& modifiers() const { return m_Modifiers; } + bool switchCorner(SwitchCorner c) const { return m_SwitchCorners[static_cast(c)]; } const QList& switchCorners() const { return m_SwitchCorners; } int switchCornerSize() const { return m_SwitchCornerSize; } - bool fix(Fix f) const { return m_Fixes[f]; } + bool fix(Fix f) const { return m_Fixes[static_cast(f)]; } const QList& fixes() const { return m_Fixes; } void loadSettings(QSettings& settings); @@ -73,13 +78,13 @@ class Screen : public BaseConfig void setPixmap(const QPixmap& pixmap) { m_Pixmap = pixmap; } QStringList& aliases() { return m_Aliases; } - void setModifier(int m, int n) { m_Modifiers[m] = n; } - QList& modifiers() { return m_Modifiers; } + void setModifier(Modifier m, Modifier n) { m_Modifiers[static_cast(m)] = n; } + QList& modifiers() { return m_Modifiers; } void addAlias(const QString& alias) { m_Aliases.append(alias); } - void setSwitchCorner(int c, bool on) { m_SwitchCorners[c] = on; } + void setSwitchCorner(SwitchCorner c, bool on) { m_SwitchCorners[static_cast(c)] = on; } QList& switchCorners() { return m_SwitchCorners; } void setSwitchCornerSize(int val) { m_SwitchCornerSize = val; } - void setFix(int f, bool on) { m_Fixes[f] = on; } + void setFix(Fix f, bool on) { m_Fixes[static_cast(f)] = on; } QList& fixes() { return m_Fixes; } void setSwapped(bool on) { m_Swapped = on; } @@ -88,7 +93,7 @@ class Screen : public BaseConfig QString m_Name; QStringList m_Aliases; - QList m_Modifiers; + QList m_Modifiers; QList m_SwitchCorners; int m_SwitchCornerSize; QList m_Fixes; diff --git a/src/gui/src/ScreenSettingsDialog.cpp b/src/gui/src/ScreenSettingsDialog.cpp index 3023b6d..123bb8a 100644 --- a/src/gui/src/ScreenSettingsDialog.cpp +++ b/src/gui/src/ScreenSettingsDialog.cpp @@ -52,23 +52,23 @@ ScreenSettingsDialog::ScreenSettingsDialog(QWidget* parent, Screen* pScreen) : for (int i = 0; i < m_pScreen->aliases().count(); i++) new QListWidgetItem(m_pScreen->aliases()[i], m_pListAliases); - m_pComboBoxShift->setCurrentIndex(m_pScreen->modifier(Screen::Shift)); - m_pComboBoxCtrl->setCurrentIndex(m_pScreen->modifier(Screen::Ctrl)); - m_pComboBoxAlt->setCurrentIndex(m_pScreen->modifier(Screen::Alt)); - m_pComboBoxMeta->setCurrentIndex(m_pScreen->modifier(Screen::Meta)); - m_pComboBoxSuper->setCurrentIndex(m_pScreen->modifier(Screen::Super)); - - m_pCheckBoxCornerTopLeft->setChecked(m_pScreen->switchCorner(Screen::TopLeft)); - m_pCheckBoxCornerTopRight->setChecked(m_pScreen->switchCorner(Screen::TopRight)); - m_pCheckBoxCornerBottomLeft->setChecked(m_pScreen->switchCorner(Screen::BottomLeft)); - m_pCheckBoxCornerBottomRight->setChecked(m_pScreen->switchCorner(Screen::BottomRight)); + m_pComboBoxShift->setCurrentIndex(static_cast(m_pScreen->modifier(Screen::Modifier::Shift))); + m_pComboBoxCtrl->setCurrentIndex(static_cast(m_pScreen->modifier(Screen::Modifier::Ctrl))); + m_pComboBoxAlt->setCurrentIndex(static_cast(m_pScreen->modifier(Screen::Modifier::Alt))); + m_pComboBoxMeta->setCurrentIndex(static_cast(m_pScreen->modifier(Screen::Modifier::Meta))); + m_pComboBoxSuper->setCurrentIndex(static_cast(m_pScreen->modifier(Screen::Modifier::Super))); + + m_pCheckBoxCornerTopLeft->setChecked(m_pScreen->switchCorner(Screen::SwitchCorner::TopLeft)); + m_pCheckBoxCornerTopRight->setChecked(m_pScreen->switchCorner(Screen::SwitchCorner::TopRight)); + m_pCheckBoxCornerBottomLeft->setChecked(m_pScreen->switchCorner(Screen::SwitchCorner::BottomLeft)); + m_pCheckBoxCornerBottomRight->setChecked(m_pScreen->switchCorner(Screen::SwitchCorner::BottomRight)); m_pSpinBoxSwitchCornerSize->setValue(m_pScreen->switchCornerSize()); - m_pCheckBoxCapsLock->setChecked(m_pScreen->fix(Screen::CapsLock)); - m_pCheckBoxNumLock->setChecked(m_pScreen->fix(Screen::NumLock)); - m_pCheckBoxScrollLock->setChecked(m_pScreen->fix(Screen::ScrollLock)); - m_pCheckBoxXTest->setChecked(m_pScreen->fix(Screen::XTest)); - m_pCheckBoxPreserveFocus->setChecked(m_pScreen->fix(Screen::PreserveFocus)); + m_pCheckBoxCapsLock->setChecked(m_pScreen->fix(Screen::Fix::CapsLock)); + m_pCheckBoxNumLock->setChecked(m_pScreen->fix(Screen::Fix::NumLock)); + m_pCheckBoxScrollLock->setChecked(m_pScreen->fix(Screen::Fix::ScrollLock)); + m_pCheckBoxXTest->setChecked(m_pScreen->fix(Screen::Fix::XTest)); + m_pCheckBoxPreserveFocus->setChecked(m_pScreen->fix(Screen::Fix::PreserveFocus)); } void ScreenSettingsDialog::accept() @@ -100,23 +100,28 @@ void ScreenSettingsDialog::accept() m_pScreen->addAlias(alias); } - m_pScreen->setModifier(Screen::Shift, m_pComboBoxShift->currentIndex()); - m_pScreen->setModifier(Screen::Ctrl, m_pComboBoxCtrl->currentIndex()); - m_pScreen->setModifier(Screen::Alt, m_pComboBoxAlt->currentIndex()); - m_pScreen->setModifier(Screen::Meta, m_pComboBoxMeta->currentIndex()); - m_pScreen->setModifier(Screen::Super, m_pComboBoxSuper->currentIndex()); - - m_pScreen->setSwitchCorner(Screen::TopLeft, m_pCheckBoxCornerTopLeft->isChecked()); - m_pScreen->setSwitchCorner(Screen::TopRight, m_pCheckBoxCornerTopRight->isChecked()); - m_pScreen->setSwitchCorner(Screen::BottomLeft, m_pCheckBoxCornerBottomLeft->isChecked()); - m_pScreen->setSwitchCorner(Screen::BottomRight, m_pCheckBoxCornerBottomRight->isChecked()); + m_pScreen->setModifier(Screen::Modifier::Shift, + static_cast(m_pComboBoxShift->currentIndex())); + m_pScreen->setModifier(Screen::Modifier::Ctrl, + static_cast(m_pComboBoxCtrl->currentIndex())); + m_pScreen->setModifier(Screen::Modifier::Alt, + static_cast(m_pComboBoxAlt->currentIndex())); + m_pScreen->setModifier(Screen::Modifier::Meta, + static_cast(m_pComboBoxMeta->currentIndex())); + m_pScreen->setModifier(Screen::Modifier::Super, + static_cast(m_pComboBoxSuper->currentIndex())); + + m_pScreen->setSwitchCorner(Screen::SwitchCorner::TopLeft, m_pCheckBoxCornerTopLeft->isChecked()); + m_pScreen->setSwitchCorner(Screen::SwitchCorner::TopRight, m_pCheckBoxCornerTopRight->isChecked()); + m_pScreen->setSwitchCorner(Screen::SwitchCorner::BottomLeft, m_pCheckBoxCornerBottomLeft->isChecked()); + m_pScreen->setSwitchCorner(Screen::SwitchCorner::BottomRight, m_pCheckBoxCornerBottomRight->isChecked()); m_pScreen->setSwitchCornerSize(m_pSpinBoxSwitchCornerSize->value()); - m_pScreen->setFix(Screen::CapsLock, m_pCheckBoxCapsLock->isChecked()); - m_pScreen->setFix(Screen::NumLock, m_pCheckBoxNumLock->isChecked()); - m_pScreen->setFix(Screen::ScrollLock, m_pCheckBoxScrollLock->isChecked()); - m_pScreen->setFix(Screen::XTest, m_pCheckBoxXTest->isChecked()); - m_pScreen->setFix(Screen::PreserveFocus, m_pCheckBoxPreserveFocus->isChecked()); + m_pScreen->setFix(Screen::Fix::CapsLock, m_pCheckBoxCapsLock->isChecked()); + m_pScreen->setFix(Screen::Fix::NumLock, m_pCheckBoxNumLock->isChecked()); + m_pScreen->setFix(Screen::Fix::ScrollLock, m_pCheckBoxScrollLock->isChecked()); + m_pScreen->setFix(Screen::Fix::XTest, m_pCheckBoxXTest->isChecked()); + m_pScreen->setFix(Screen::Fix::PreserveFocus, m_pCheckBoxPreserveFocus->isChecked()); QDialog::accept(); } diff --git a/src/gui/src/ServerConfig.cpp b/src/gui/src/ServerConfig.cpp index d7d1a77..9fedd1e 100644 --- a/src/gui/src/ServerConfig.cpp +++ b/src/gui/src/ServerConfig.cpp @@ -88,8 +88,9 @@ void ServerConfig::init() screens().clear(); // m_NumSwitchCorners is used as a fixed size array. See Screen::init() - for (int i = 0; i < NumSwitchCorners; i++) + for (int i = 0; i < static_cast(SwitchCorner::Count); i++) { switchCorners() << false; + } // There must always be screen objects for each cell in the screens QList. Unused screens // are identified by having an empty name. @@ -119,7 +120,7 @@ void ServerConfig::saveSettings() settings().setValue("enableDragAndDrop", enableDragAndDrop()); settings().setValue("clipboardSharing", clipboardSharing()); - writeSettings(settings(), switchCorners(), "switchCorner"); + writeSettings(settings(), switchCorners(), "switchCorner"); settings().beginWriteArray("screens"); for (int i = 0; i < screens().size(); i++) @@ -164,7 +165,8 @@ void ServerConfig::loadSettings() setEnableDragAndDrop(settings().value("enableDragAndDrop", true).toBool()); setClipboardSharing(settings().value("clipboardSharing", true).toBool()); - readSettings(settings(), switchCorners(), "switchCorner", false, NumSwitchCorners); + readSettings(settings(), switchCorners(), "switchCorner", false, + static_cast(SwitchCorner::Count)); int numScreens = settings().beginReadArray("screens"); Q_ASSERT(numScreens <= screens().size()); @@ -258,9 +260,12 @@ QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config) outStream << "\t" << "switchDoubleTap = " << config.switchDoubleTap() << endl; outStream << "\t" << "switchCorners = none "; - for (int i = 0; i < config.switchCorners().size(); i++) - if (config.switchCorners()[i]) - outStream << "+" << config.switchCornerName(i) << " "; + for (int i = 0; i < config.switchCorners().size(); i++) { + auto corner = static_cast(i); + if (config.switchCorners()[i]) { + outStream << "+" << config.switchCornerName(corner) << " "; + } + } outStream << endl; outStream << "\t" << "switchCornerSize = " << config.switchCornerSize() << endl; diff --git a/src/gui/src/ServerConfig.h b/src/gui/src/ServerConfig.h index 65cbbac..c9648b0 100644 --- a/src/gui/src/ServerConfig.h +++ b/src/gui/src/ServerConfig.h @@ -56,7 +56,7 @@ class ServerConfig : public BaseConfig int switchDelay() const { return m_SwitchDelay; } bool hasSwitchDoubleTap() const { return m_HasSwitchDoubleTap; } int switchDoubleTap() const { return m_SwitchDoubleTap; } - bool switchCorner(int c) const { return m_SwitchCorners[c]; } + bool switchCorner(SwitchCorner c) const { return m_SwitchCorners[static_cast(c)]; } int switchCornerSize() const { return m_SwitchCornerSize; } const QList& switchCorners() const { return m_SwitchCorners; } const HotkeyList& hotkeys() const { return m_Hotkeys; } @@ -87,7 +87,7 @@ class ServerConfig : public BaseConfig void setSwitchDelay(int val) { m_SwitchDelay = val; } void haveSwitchDoubleTap(bool on) { m_HasSwitchDoubleTap = on; } void setSwitchDoubleTap(int val) { m_SwitchDoubleTap = val; } - void setSwitchCorner(int c, bool on) { m_SwitchCorners[c] = on; } + void setSwitchCorner(SwitchCorner c, bool on) { m_SwitchCorners[static_cast(c)] = on; } void setSwitchCornerSize(int val) { m_SwitchCornerSize = val; } void setIgnoreAutoConfigClient(bool on) { m_IgnoreAutoConfigClient = on; } void setEnableDragAndDrop(bool on) { m_EnableDragAndDrop = on; } diff --git a/src/gui/src/ServerConfigDialog.cpp b/src/gui/src/ServerConfigDialog.cpp index 799cfc8..2e7ffc9 100644 --- a/src/gui/src/ServerConfigDialog.cpp +++ b/src/gui/src/ServerConfigDialog.cpp @@ -48,10 +48,10 @@ ServerConfigDialog::ServerConfigDialog(QWidget* parent, ServerConfig& config, co m_pCheckBoxSwitchDoubleTap->setChecked(serverConfig().hasSwitchDoubleTap()); m_pSpinBoxSwitchDoubleTap->setValue(serverConfig().switchDoubleTap()); - m_pCheckBoxCornerTopLeft->setChecked(serverConfig().switchCorner(BaseConfig::TopLeft)); - m_pCheckBoxCornerTopRight->setChecked(serverConfig().switchCorner(BaseConfig::TopRight)); - m_pCheckBoxCornerBottomLeft->setChecked(serverConfig().switchCorner(BaseConfig::BottomLeft)); - m_pCheckBoxCornerBottomRight->setChecked(serverConfig().switchCorner(BaseConfig::BottomRight)); + m_pCheckBoxCornerTopLeft->setChecked(serverConfig().switchCorner(BaseConfig::SwitchCorner::TopLeft)); + m_pCheckBoxCornerTopRight->setChecked(serverConfig().switchCorner(BaseConfig::SwitchCorner::TopRight)); + m_pCheckBoxCornerBottomLeft->setChecked(serverConfig().switchCorner(BaseConfig::SwitchCorner::BottomLeft)); + m_pCheckBoxCornerBottomRight->setChecked(serverConfig().switchCorner(BaseConfig::SwitchCorner::BottomRight)); m_pSpinBoxSwitchCornerSize->setValue(serverConfig().switchCornerSize()); m_pCheckBoxIgnoreAutoConfigClient->setChecked(serverConfig().ignoreAutoConfigClient()); @@ -95,10 +95,14 @@ void ServerConfigDialog::accept() serverConfig().haveSwitchDoubleTap(m_pCheckBoxSwitchDoubleTap->isChecked()); serverConfig().setSwitchDoubleTap(m_pSpinBoxSwitchDoubleTap->value()); - serverConfig().setSwitchCorner(BaseConfig::TopLeft, m_pCheckBoxCornerTopLeft->isChecked()); - serverConfig().setSwitchCorner(BaseConfig::TopRight, m_pCheckBoxCornerTopRight->isChecked()); - serverConfig().setSwitchCorner(BaseConfig::BottomLeft, m_pCheckBoxCornerBottomLeft->isChecked()); - serverConfig().setSwitchCorner(BaseConfig::BottomRight, m_pCheckBoxCornerBottomRight->isChecked()); + serverConfig().setSwitchCorner(BaseConfig::SwitchCorner::TopLeft, + m_pCheckBoxCornerTopLeft->isChecked()); + serverConfig().setSwitchCorner(BaseConfig::SwitchCorner::TopRight, + m_pCheckBoxCornerTopRight->isChecked()); + serverConfig().setSwitchCorner(BaseConfig::SwitchCorner::BottomLeft, + m_pCheckBoxCornerBottomLeft->isChecked()); + serverConfig().setSwitchCorner(BaseConfig::SwitchCorner::BottomRight, + m_pCheckBoxCornerBottomRight->isChecked()); serverConfig().setSwitchCornerSize(m_pSpinBoxSwitchCornerSize->value()); serverConfig().setIgnoreAutoConfigClient(m_pCheckBoxIgnoreAutoConfigClient->isChecked()); serverConfig().setEnableDragAndDrop(m_pCheckBoxEnableDragAndDrop->isChecked()); diff --git a/src/gui/src/ServerConfigDialogBase.ui b/src/gui/src/ServerConfigDialogBase.ui index c360420..9c2e747 100644 --- a/src/gui/src/ServerConfigDialogBase.ui +++ b/src/gui/src/ServerConfigDialogBase.ui @@ -334,53 +334,67 @@ Double click on a screen to edit its settings. - + - - - true - - - Switch on double &tap within - - + + + + + true + + + Switch on double &tap within + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + 10 + + + 10000 + + + 10 + + + 250 + + + + + + + ms + + + + - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - false - - - 10 - - - 10000 - - - 10 - - - 250 - - - - - + - ms + Bump against the screen edge with the mouse pointer twice in quick succession. + + + true diff --git a/src/gui/src/SettingsDialog.cpp b/src/gui/src/SettingsDialog.cpp index 15f7067..24bb86c 100644 --- a/src/gui/src/SettingsDialog.cpp +++ b/src/gui/src/SettingsDialog.cpp @@ -31,8 +31,6 @@ #include #include -static const char networkSecurity[] = "ns"; - SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), Ui::SettingsDialogBase(), @@ -136,4 +134,4 @@ void SettingsDialog::on_m_pComboLanguage_currentIndexChanged(int index) { QString ietfCode = m_pComboLanguage->itemData(index).toString(); QBarrierApplication::getInstance()->switchTranslator(ietfCode); -} \ No newline at end of file +} -- cgit v1.2.3