-
Notifications
You must be signed in to change notification settings - Fork 227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Popup menus in the score canvas don't show on Mac #2
Comments
I did a bit of debugging trying to find the reason for this issue:
|
Thank you for your investigation, Leo! Stay tuned. |
Rubber.java class calls BoardsPane calls I suppose the problem should be somewhere in the mouse event handling logic of the Rubber class. I'll continue my investigation... |
I would suggest testing for the CTRL key on the Mac, too, as described in http://stackoverflow.com/questions/2972512/how-to-detect-right-click-event-for-mac-os. This is because you normally use CTRL+ on a notebook to simulate a right-click.
|
Not exactly, but it was very close. The logic causing this issue is located in two places: Both lines check for MouseMovement == RELEASING before actually initialize the popup: if (movement == MouseMovement.RELEASING) {
...
} Because the popup trigger occurs when the mouse is pressed on Mac (as opposed to released on Windows), the above mentioned checks prevent the popup from working on Mac. Now, we need to fix that. |
This should be fixed in the 'development' branch. To be part of coming 5.1 release. |
Popups still don't work. I'll investigate this further. |
The above described problem still persists caused by this line: if (movement == MouseMovement.RELEASING) {
showPagePopup(pt, getRubberRectangle());
} On a Mac, |
Does this mean that, on macOS, a contextual menu can show up only at PRESSING time? (That is when pressing down the right button on a mouse) |
Yes. |
Here below is a simple java program, named TestMouse.java. If you prefer, it is also packed into this .zip file: Could you compile and run it. It opens a square panel. Then post your text output in this forum, together with the reference of your environment OS and java (using command java -version).
Here is the content of TestMouse.java: import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
* A simple program to check actual Swing events when user plays with the mouse.
*
* @author Hervé Bitteur
*/
public class TestMouse
extends JPanel
implements MouseListener, MouseWheelListener, MouseMotionListener
{
//~ Constructors -------------------------------------------------------------------------------
/**
* Creates a new {@code TestMouse} object.
*/
public TestMouse ()
{
setPreferredSize(new Dimension(400, 400));
addMouseListener(this);
addMouseMotionListener(this);
addMouseWheelListener(this);
}
//~ Methods ------------------------------------------------------------------------------------
public static void main (String[] args)
{
SwingUtilities.invokeLater(
new Runnable()
{
@Override
public void run ()
{
TestMouse gui = new TestMouse();
JFrame frame = new JFrame();
frame.setTitle("TestMouse");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(gui);
frame.pack();
frame.setVisible(true);
}
});
}
@Override
public void mouseClicked (MouseEvent e)
{
log(e, "mouseClicked");
}
@Override
public void mouseDragged (MouseEvent e)
{
log(e, "mouseDragged");
}
@Override
public void mouseEntered (MouseEvent e)
{
///log(e, "mouseEntered");
}
@Override
public void mouseExited (MouseEvent e)
{
///log(e, "mouseExited");
}
@Override
public void mouseMoved (MouseEvent e)
{
///log(e, "mouseMoved");
}
@Override
public void mousePressed (MouseEvent e)
{
log(e, "mousePressed");
}
@Override
public void mouseReleased (MouseEvent e)
{
log(e, "mouseReleased");
}
@Override
public void mouseWheelMoved (MouseWheelEvent e)
{
log(e, "mouseWheelMoved");
}
private void log (MouseEvent e,
String method)
{
final int modifiers = e.getModifiersEx();
final String text = MouseEvent.getMouseModifiersText(modifiers);
final String params = e.paramString();
System.out.printf("%13s %4x %s %s%n", method, modifiers, text, params);
}
} |
|
@maximumspatium My understanding, when I read your MacOS output, is that indeed we should be able to get and process on MacOS the mouse RELEASING events, for left and right buttons. For left button released: For right button released: Or did I miss anything? |
Please consider the fact that audiveris currently utilizes
This implies that we have to remove the following platform-dependent check in UIPredicates.java, Line 82 and reduce the whole method to the following, single line: return SwingUtilities.isRightMouseButton(e) && !SwingUtilities.isLeftMouseButton(e); Just apply this change and voilà - it works! |
The problem is that I don't know how it behaves on Apple hardware/software configurations other than MacBook Pro (this is a laptop). Maybe someone with a recent desktop macOs system could step in and test whether it works for him/her... |
Good news! |
It fixes the issue #2 (Popup menus don't work on Mac).
Okay, I did it (see 9643e46). |
Closing the issue since now MacOS can behave as the other OSes |
Right click on the score canvas should bring up popup menus. Unfortunately, it doesn't work on Mac.
The code responsible for handling click events is located in UIPredicates class.
There is Mac-specific code in the isContextWanted method:
It looks like
e.isPopupTrigger()
never evaluates totrue
on JRE7 and later. Why? To be investigated and fixed.The text was updated successfully, but these errors were encountered: