Add support for Ctrl-V pasting on login screen

Based on what field is currently selected, add support for pasting to
that field with standard Ctrl-V keybinding (disabled by default).

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-04-20 10:44:39 +02:00
committed by Adam
parent 2f6679d67a
commit 3722013aa6
2 changed files with 105 additions and 12 deletions

View File

@@ -22,15 +22,35 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.usernamesyncer;
package net.runelite.client.plugins.loginscreen;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
@ConfigGroup("rememberusername")
public interface UsernameSyncerConfig extends Config
@ConfigGroup("loginscreen")
public interface LoginScreenConfig extends Config
{
@ConfigItem(
keyName = "syncusername",
name = "Sync username",
description = "Syncs the username that is currently remembered between computers"
)
default boolean syncUsername()
{
return true;
}
@ConfigItem(
keyName = "pasteenabled",
name = "Ctrl-V paste",
description = "Enables Ctrl+V pasting on the login screen"
)
default boolean pasteEnabled()
{
return false;
}
@ConfigItem(
keyName = "username",
name = "",

View File

@@ -22,11 +22,16 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.usernamesyncer;
package net.runelite.client.plugins.loginscreen;
import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
@@ -34,21 +39,26 @@ import net.runelite.api.GameState;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.SessionOpen;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.input.KeyListener;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
@PluginDescriptor(
name = "Username Syncer",
description = "Save your username to the config, allowing it to be synced"
name = "Login Screen",
description = "Provides various enhancements for login screen"
)
@Slf4j
public class UsernameSyncerPlugin extends Plugin
public class LoginScreenPlugin extends Plugin implements KeyListener
{
@Inject
private Client client;
@Inject
private UsernameSyncerConfig config;
private LoginScreenConfig config;
@Inject
private KeyManager keyManager;
private String usernameCache;
@@ -56,23 +66,34 @@ public class UsernameSyncerPlugin extends Plugin
protected void startUp() throws Exception
{
applyUsername();
keyManager.registerKeyListener(this);
}
@Override
protected void shutDown() throws Exception
{
client.getPreferences().setRememberedUsername(usernameCache);
if (config.syncUsername())
{
client.getPreferences().setRememberedUsername(usernameCache);
}
keyManager.unregisterKeyListener(this);
}
@Provides
UsernameSyncerConfig getConfig(ConfigManager configManager)
LoginScreenConfig getConfig(ConfigManager configManager)
{
return configManager.getConfig(UsernameSyncerConfig.class);
return configManager.getConfig(LoginScreenConfig.class);
}
@Subscribe
public void onGameStateChanged(GameStateChanged event)
{
if (!config.syncUsername())
{
return;
}
if (event.getGameState() == GameState.LOGIN_SCREEN)
{
applyUsername();
@@ -105,6 +126,11 @@ public class UsernameSyncerPlugin extends Plugin
private void applyUsername()
{
if (!config.syncUsername())
{
return;
}
GameState gameState = client.getGameState();
if (gameState == GameState.LOGIN_SCREEN)
{
@@ -124,4 +150,51 @@ public class UsernameSyncerPlugin extends Plugin
client.getPreferences().setRememberedUsername(username);
}
}
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
if (!config.pasteEnabled() || client.getGameState() != GameState.LOGIN_SCREEN)
{
return;
}
if (e.getKeyCode() == KeyEvent.VK_V && e.isControlDown())
{
try
{
final String data = Toolkit
.getDefaultToolkit()
.getSystemClipboard()
.getData(DataFlavor.stringFlavor)
.toString()
.trim();
// 0 is username, 1 is password
if (client.getCurrentLoginField() == 0)
{
client.setUsername(data);
}
else
{
client.setPassword(data);
}
}
catch (UnsupportedFlavorException | IOException ex)
{
log.warn("failed to fetch clipboard data", ex);
}
}
}
@Override
public void keyReleased(KeyEvent e)
{
}
}