mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-69397 On MacOS X, hide mouse cursor when typing
This commit is contained in:
Executable
BIN
Binary file not shown.
@@ -0,0 +1,13 @@
|
||||
#include <jni.h>
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_intellij_util_ui_MacUIUtil_doHideCursor
|
||||
(JNIEnv *env, jclass clazz) {
|
||||
CGDisplayHideCursor(kCGDirectMainDisplay);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_intellij_util_ui_MacUIUtil_doShowCursor
|
||||
(JNIEnv *env, jclass clazz) {
|
||||
CGDisplayShowCursor(kCGDirectMainDisplay);
|
||||
}
|
||||
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
gcc -arch i386 -arch x86_64 -mmacosx-version-min=10.5 -framework ApplicationServices -I/System/Library/Frameworks/JavaVM.framework/Headers/ cursorHider.c -shared -fPIC -o cursorHider.jnilib
|
||||
+10
@@ -34,6 +34,7 @@ import com.intellij.openapi.keymap.impl.keyGestures.KeyboardGestureProcessor;
|
||||
import com.intellij.openapi.keymap.impl.ui.ShortcutTextField;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.TypingTarget;
|
||||
import com.intellij.openapi.ui.popup.JBPopup;
|
||||
import com.intellij.openapi.ui.popup.ListPopupStep;
|
||||
import com.intellij.openapi.ui.popup.PopupStep;
|
||||
@@ -57,12 +58,14 @@ import com.intellij.ui.popup.list.ListPopupImpl;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.MacUIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.plaf.basic.ComboPopup;
|
||||
import javax.swing.text.JTextComponent;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.InputEvent;
|
||||
@@ -162,6 +165,13 @@ public final class IdeKeyEventDispatcher implements Disposable {
|
||||
if (focusOwner instanceof ShortcutTextField) {
|
||||
return false;
|
||||
}
|
||||
if (Registry.is("ide.mac.hide.cursor.when.typing") &&
|
||||
(focusOwner instanceof TypingTarget ||
|
||||
(focusOwner instanceof JTextComponent && ((JTextComponent)focusOwner).isEditable()))) {
|
||||
if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED && e.getKeyChar() != KeyEvent.VK_ESCAPE) {
|
||||
MacUIUtil.hideCursor();
|
||||
}
|
||||
}
|
||||
|
||||
MenuSelectionManager menuSelectionManager=MenuSelectionManager.defaultManager();
|
||||
MenuElement[] selectedPath = menuSelectionManager.getSelectedPath();
|
||||
|
||||
+3
@@ -26,6 +26,7 @@ import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.wm.impl.IdeGlassPaneImpl;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.ui.MacUIUtil;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -129,6 +130,8 @@ public final class IdeMouseEventDispatcher {
|
||||
resetPopupTrigger(e);
|
||||
}
|
||||
|
||||
MacUIUtil.showCursor();
|
||||
|
||||
if (!(e.getID() == MouseEvent.MOUSE_PRESSED ||
|
||||
e.getID() == MouseEvent.MOUSE_RELEASED ||
|
||||
e.getID() == MOUSE_CLICKED)) {
|
||||
|
||||
@@ -106,6 +106,7 @@ ide.mac.filechooser.showhidden.files=false
|
||||
ide.mac.filechooser.native=true
|
||||
ide.mac.message.dialogs.as.sheets=true
|
||||
ide.mac.inplaceDialogMnemonicsFix=true
|
||||
ide.mac.hide.cursor.when.typing=true
|
||||
|
||||
debugger.valueTooltipAutoShow=true
|
||||
debugger.valueTooltipAutoShow.description=Auto show tooltip on mouse over
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.util.ui;
|
||||
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.ui.Gray;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -25,6 +26,7 @@ import javax.swing.plaf.TreeUI;
|
||||
import javax.swing.tree.DefaultTreeCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.awt.geom.GeneralPath;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
/**
|
||||
@@ -36,10 +38,34 @@ public class MacUIUtil {
|
||||
public static final String MAC_FILL_BORDER = "MAC_FILL_BORDER";
|
||||
public static final int MAC_COMBO_BORDER_V_OFFSET = SystemInfo.isMacOSLion ? 1 : 0;
|
||||
private static Cursor INVERTED_TEXT_CURSOR;
|
||||
private static boolean CURSOR_HIDER_LOADED = false;
|
||||
|
||||
static {
|
||||
if (SystemInfo.isMac) {
|
||||
try {
|
||||
System.load(PathManager.getBinPath() + File.separatorChar + "cursorHider.jnilib");
|
||||
CURSOR_HIDER_LOADED = true;
|
||||
} catch (UnsatisfiedLinkError ignored) {}
|
||||
}
|
||||
}
|
||||
|
||||
private MacUIUtil() {
|
||||
}
|
||||
|
||||
public static void hideCursor() {
|
||||
if (CURSOR_HIDER_LOADED) {
|
||||
doHideCursor();
|
||||
}
|
||||
}
|
||||
private static native void doHideCursor();
|
||||
|
||||
public static void showCursor() {
|
||||
if (CURSOR_HIDER_LOADED) {
|
||||
doShowCursor();
|
||||
}
|
||||
}
|
||||
private static native void doShowCursor();
|
||||
|
||||
public static class EditorTextFieldBorder implements Border {
|
||||
private JComponent myEnabledComponent;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user