Map right-click to BACK if screen is on
Right-click was used to turn the screen on. It did nothing when the screen was already on. Instead, in that case, press BACK (like Vysor). Suggested by: <https://www.reddit.com/r/Android/comments/834zmr/introducing_scrcpy_an_app_to_display_and_control/dvfueft/>
This commit is contained in:
parent
9396ea6d42
commit
675704c71c
5 changed files with 16 additions and 8 deletions
|
@ -199,10 +199,12 @@ To run without installing:
|
||||||
| click on `VOLUME_UP` | `Ctrl`+`+` |
|
| click on `VOLUME_UP` | `Ctrl`+`+` |
|
||||||
| click on `VOLUME_DOWN` | `Ctrl`+`-` |
|
| click on `VOLUME_DOWN` | `Ctrl`+`-` |
|
||||||
| click on `POWER` | `Ctrl`+`p` |
|
| click on `POWER` | `Ctrl`+`p` |
|
||||||
| turn screen on | _Right-click_ |
|
| turn screen on or press BACK¹ | _Right-click_ |
|
||||||
| paste computer clipboard to device | `Ctrl`+`v` |
|
| paste computer clipboard to device | `Ctrl`+`v` |
|
||||||
| enable/disable FPS counter (on stdout) | `Ctrl`+`i` |
|
| enable/disable FPS counter (on stdout) | `Ctrl`+`i` |
|
||||||
|
|
||||||
|
_¹ Press BACK if the screen is already on._
|
||||||
|
|
||||||
|
|
||||||
## Why _scrcpy_?
|
## Why _scrcpy_?
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ enum control_event_type {
|
||||||
CONTROL_EVENT_TYPE_COMMAND,
|
CONTROL_EVENT_TYPE_COMMAND,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CONTROL_EVENT_COMMAND_SCREEN_ON 0
|
#define CONTROL_EVENT_COMMAND_BACK_OR_SCREEN_ON 0
|
||||||
|
|
||||||
struct control_event {
|
struct control_event {
|
||||||
enum control_event_type type;
|
enum control_event_type type;
|
||||||
|
|
|
@ -78,10 +78,11 @@ static inline void action_volume_down(struct controller *controller) {
|
||||||
send_keycode(controller, AKEYCODE_VOLUME_DOWN, "VOLUME_DOWN");
|
send_keycode(controller, AKEYCODE_VOLUME_DOWN, "VOLUME_DOWN");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void turn_screen_on(struct controller *controller) {
|
// turn the screen on if it was off, press BACK otherwise
|
||||||
|
static void press_back_or_turn_screen_on(struct controller *controller) {
|
||||||
struct control_event control_event;
|
struct control_event control_event;
|
||||||
control_event.type = CONTROL_EVENT_TYPE_COMMAND;
|
control_event.type = CONTROL_EVENT_TYPE_COMMAND;
|
||||||
control_event.command_event.action = CONTROL_EVENT_COMMAND_SCREEN_ON;
|
control_event.command_event.action = CONTROL_EVENT_COMMAND_BACK_OR_SCREEN_ON;
|
||||||
|
|
||||||
if (!controller_push_event(controller, &control_event)) {
|
if (!controller_push_event(controller, &control_event)) {
|
||||||
LOGW("Cannot turn screen on");
|
LOGW("Cannot turn screen on");
|
||||||
|
@ -226,7 +227,7 @@ void input_manager_process_mouse_motion(struct input_manager *input_manager,
|
||||||
void input_manager_process_mouse_button(struct input_manager *input_manager,
|
void input_manager_process_mouse_button(struct input_manager *input_manager,
|
||||||
const SDL_MouseButtonEvent *event) {
|
const SDL_MouseButtonEvent *event) {
|
||||||
if (event->button == SDL_BUTTON_RIGHT && event->type == SDL_MOUSEBUTTONDOWN) {
|
if (event->button == SDL_BUTTON_RIGHT && event->type == SDL_MOUSEBUTTONDOWN) {
|
||||||
turn_screen_on(input_manager->controller);
|
press_back_or_turn_screen_on(input_manager->controller);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
struct control_event control_event;
|
struct control_event control_event;
|
||||||
|
|
|
@ -11,7 +11,7 @@ public final class ControlEvent {
|
||||||
public static final int TYPE_SCROLL = 3;
|
public static final int TYPE_SCROLL = 3;
|
||||||
public static final int TYPE_COMMAND = 4;
|
public static final int TYPE_COMMAND = 4;
|
||||||
|
|
||||||
public static final int COMMAND_SCREEN_ON = 0;
|
public static final int COMMAND_BACK_OR_SCREEN_ON = 0;
|
||||||
|
|
||||||
private int type;
|
private int type;
|
||||||
private String text;
|
private String text;
|
||||||
|
|
|
@ -167,10 +167,15 @@ public class EventController {
|
||||||
return device.isScreenOn() || injectKeycode(KeyEvent.KEYCODE_POWER);
|
return device.isScreenOn() || injectKeycode(KeyEvent.KEYCODE_POWER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean pressBackOrTurnScreenOn() {
|
||||||
|
int keycode = device.isScreenOn() ? KeyEvent.KEYCODE_BACK : KeyEvent.KEYCODE_POWER;
|
||||||
|
return injectKeycode(keycode);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean executeCommand(int action) {
|
private boolean executeCommand(int action) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case ControlEvent.COMMAND_SCREEN_ON:
|
case ControlEvent.COMMAND_BACK_OR_SCREEN_ON:
|
||||||
return turnScreenOn();
|
return pressBackOrTurnScreenOn();
|
||||||
default:
|
default:
|
||||||
Ln.w("Unsupported command: " + action);
|
Ln.w("Unsupported command: " + action);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue