forked from j62/ctbrec
1
0
Fork 0

Ignore menu item action if mouse exited the menu item

This commit is contained in:
0xb00bface 2021-01-03 13:00:05 +01:00
parent 0df02b8c9d
commit 19d2644500
7 changed files with 43 additions and 15 deletions

View File

@ -1,5 +1,7 @@
package ctbrec.ui;
import javafx.geometry.Bounds;
import javafx.scene.Node;
import javafx.scene.control.ContextMenu;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
@ -15,4 +17,17 @@ public class UiUtils {
}
});
}
public static void ignoreMouseReleasedIfMouseExited(ContextMenu menu) {
menu.addEventFilter(MouseEvent.MOUSE_RELEASED, evt -> {
if (evt.getTarget() instanceof Node) {
Node target = (Node) evt.getTarget();
Bounds screenBounds = target.localToScreen(target.getBoundsInLocal());
boolean releasedOnOriginalMouseItem = screenBounds.contains(evt.getScreenX(), evt.getScreenY());
if (!releasedOnOriginalMouseItem) {
evt.consume();
}
}
});
}
}

View File

@ -0,0 +1,14 @@
package ctbrec.ui.controls;
import ctbrec.ui.UiUtils;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
public class CustomMouseBehaviorContextMenu extends ContextMenu {
public CustomMouseBehaviorContextMenu(MenuItem...items) {
super(items);
UiUtils.disableRightClickFor(this);
UiUtils.ignoreMouseReleasedIfMouseExited(this);
}
}

View File

@ -46,6 +46,7 @@ import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.action.FollowAction;
import ctbrec.ui.action.PlayAction;
import ctbrec.ui.action.StartRecordingAction;
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
import ctbrec.ui.controls.SearchBox;
import ctbrec.ui.tabs.TabSelectionListener;
import javafx.beans.property.BooleanProperty;
@ -342,7 +343,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
MenuItem follow = new MenuItem("Follow");
follow.setOnAction(e -> new FollowAction(getTabPane(), selectedModels).execute());
ContextMenu menu = new ContextMenu();
ContextMenu menu = new CustomMouseBehaviorContextMenu();
menu.getItems().addAll(startRecording, copyUrl, openInPlayer, openInBrowser, follow);
if (selectedModels.size() > 1) {
@ -468,7 +469,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
}
private void showColumnSelection(ActionEvent evt) {
ContextMenu menu = new ContextMenu();
ContextMenu menu = new CustomMouseBehaviorContextMenu();
for (TableColumn<ModelTableRow, ?> tc : columns) {
CheckMenuItem item = new CheckMenuItem(tc.getText());
item.setSelected(isColumnEnabled(tc));

View File

@ -39,7 +39,6 @@ import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.JavaFxModel;
import ctbrec.ui.PreviewPopupHandler;
import ctbrec.ui.StreamSourceSelectionDialog;
import ctbrec.ui.UiUtils;
import ctbrec.ui.action.CheckModelAccountAction;
import ctbrec.ui.action.EditNotesAction;
import ctbrec.ui.action.FollowAction;
@ -52,6 +51,7 @@ import ctbrec.ui.action.ResumeAction;
import ctbrec.ui.action.SetStopDateAction;
import ctbrec.ui.action.StopRecordingAction;
import ctbrec.ui.action.ToggleRecordingAction;
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
import ctbrec.ui.controls.DateTimeCellFactory;
import ctbrec.ui.controls.Dialogs;
import ctbrec.ui.controls.SearchBox;
@ -675,8 +675,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
MenuItem openRecDir = new MenuItem("Open recording directory");
openRecDir.setOnAction(e -> new OpenRecordingsDir(table, selectedModels.get(0)).execute());
ContextMenu menu = new ContextMenu(stop);
UiUtils.disableRightClickFor(menu);
ContextMenu menu = new CustomMouseBehaviorContextMenu(stop);
if (selectedModels.size() == 1) {
menu.getItems().add(selectedModels.get(0).isSuspended() ? resumeRecording : pauseRecording);
menu.getItems().add(stopRecordingAt);

View File

@ -46,11 +46,11 @@ import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.FileDownload;
import ctbrec.ui.JavaFxRecording;
import ctbrec.ui.Player;
import ctbrec.ui.UiUtils;
import ctbrec.ui.action.FollowAction;
import ctbrec.ui.action.PauseAction;
import ctbrec.ui.action.PlayAction;
import ctbrec.ui.action.StopRecordingAction;
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
import ctbrec.ui.controls.DateTimeCellFactory;
import ctbrec.ui.controls.Dialogs;
import ctbrec.ui.controls.Toast;
@ -390,11 +390,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
}
private ContextMenu createContextMenu(List<JavaFxRecording> recordings) {
ContextMenu contextMenu = new ContextMenu();
ContextMenu contextMenu = new CustomMouseBehaviorContextMenu();
contextMenu.setHideOnEscape(true);
contextMenu.setAutoHide(true);
contextMenu.setAutoFix(true);
UiUtils.disableRightClickFor(contextMenu);
JavaFxRecording first = recordings.get(0);
MenuItem openInPlayer = new MenuItem("Open in Player");

View File

@ -38,10 +38,10 @@ import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.SiteUiFactory;
import ctbrec.ui.TipDialog;
import ctbrec.ui.TokenLabel;
import ctbrec.ui.UiUtils;
import ctbrec.ui.action.IgnoreModelsAction;
import ctbrec.ui.action.OpenRecordingsDir;
import ctbrec.ui.action.SetStopDateAction;
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
import ctbrec.ui.controls.FasterVerticalScrollPaneSkin;
import ctbrec.ui.controls.SearchBox;
import ctbrec.ui.controls.SearchPopover;
@ -477,10 +477,10 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
openInPlayer.setOnAction(e -> startPlayer(getSelectedThumbCells(cell)));
MenuItem start = new MenuItem("Start Recording");
start.setOnAction(e -> startStopAction(e, getSelectedThumbCells(cell), true));
start.setOnAction(e -> startStopAction(getSelectedThumbCells(cell), true));
MenuItem stop = new MenuItem("Stop Recording");
stop.setOnAction(e -> startStopAction(e, getSelectedThumbCells(cell), false));
stop.setOnAction(e -> startStopAction(getSelectedThumbCells(cell), false));
MenuItem startStop = recorder.isTracked(cell.getModel()) ? stop : start;
MenuItem recordUntil = new MenuItem("Start Recording Until");
@ -515,12 +515,11 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
configureItemsForSelection(cell, openInPlayer, copyUrl, sendTip);
ContextMenu contextMenu = new ContextMenu();
ContextMenu contextMenu = new CustomMouseBehaviorContextMenu();
contextMenu.setAutoHide(true);
contextMenu.setHideOnEscape(true);
contextMenu.setAutoFix(true);
contextMenu.getItems().addAll(openInPlayer, new SeparatorMenuItem(), startStop);
UiUtils.disableRightClickFor(contextMenu);
if(modelIsTrackedByRecorder) {
contextMenu.getItems().add(pauseResume);
} else {
@ -704,7 +703,7 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
return 0;
}
private void startStopAction(ActionEvent e, List<ThumbCell> selection, boolean start) {
private void startStopAction(List<ThumbCell> selection, boolean start) {
for (ThumbCell thumbCell : selection) {
thumbCell.startStopAction(start);
}

View File

@ -18,6 +18,7 @@ import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.classic.spi.StackTraceElementProxy;
import ctbrec.event.EventBusHolder;
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
import ctbrec.ui.controls.SearchBox;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
@ -150,7 +151,7 @@ public class LoggingTab extends Tab {
});
});
ContextMenu menu = new ContextMenu(copy);
ContextMenu menu = new CustomMouseBehaviorContextMenu(copy);
return menu;
}