mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Support Mac OS X 10.6+ keyboard setting "Full Keyboard Access" in sheets emulation.
This commit is contained in:
@@ -32,6 +32,7 @@ import com.intellij.openapi.wm.WindowManager;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.ui.mac.MacMessages;
|
||||
import com.intellij.ui.mac.foundation.MacUtil;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.PairFunction;
|
||||
@@ -45,9 +46,7 @@ import javax.swing.plaf.basic.BasicHTML;
|
||||
import javax.swing.text.JTextComponent;
|
||||
import javax.swing.text.html.HTMLEditorKit;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.awt.event.*;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
@@ -1025,6 +1024,7 @@ public class Messages {
|
||||
setButtonsAlignment(SwingConstants.CENTER);
|
||||
setDoNotAskOption(doNotAskOption);
|
||||
init();
|
||||
MacUtil.adjustFocusTraversal(myDisposable);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -15,11 +15,18 @@
|
||||
*/
|
||||
package com.intellij.ui.mac.foundation;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.text.JTextComponent;
|
||||
import java.awt.*;
|
||||
import java.awt.event.AWTEventListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
import static com.intellij.ui.mac.foundation.Foundation.invoke;
|
||||
import static com.intellij.ui.mac.foundation.Foundation.toStringViaUTF8;
|
||||
@@ -103,6 +110,31 @@ public class MacUtil {
|
||||
public static synchronized void startModal(JComponent component) {
|
||||
startModal(component, MAC_NATIVE_WINDOW_SHOWING);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static boolean isFullKeyboardAccessEnabled() {
|
||||
return SystemInfo.isMacOSSnowLeopard
|
||||
&& invoke(invoke("NSApplication", "sharedApplication"), "isFullKeyboardAccessEnabled").intValue() == 1;
|
||||
}
|
||||
|
||||
public static void adjustFocusTraversal(@NotNull Disposable disposable) {
|
||||
if (!SystemInfo.isMacOSSnowLeopard) return;
|
||||
final AWTEventListener listener = new AWTEventListener() {
|
||||
@Override
|
||||
public void eventDispatched(AWTEvent event) {
|
||||
if (event instanceof KeyEvent
|
||||
&& ((KeyEvent)event).getKeyCode() == KeyEvent.VK_TAB
|
||||
&& (!(event.getSource() instanceof JTextComponent))
|
||||
&& (!(event.getSource() instanceof JList))
|
||||
&& !isFullKeyboardAccessEnabled())
|
||||
((KeyEvent)event).consume();
|
||||
}
|
||||
};
|
||||
Disposer.register(disposable, new Disposable() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
Toolkit.getDefaultToolkit().removeAWTEventListener(listener);
|
||||
}
|
||||
});
|
||||
Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user