mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-27 16:29:02 +08:00
Inputs: Treat ctrl-left-click as right click when ConfigMacOSXBehaviors is set. (#2343)
This commit is contained in:
parent
b4f564c1ed
commit
25e279ee73
@ -59,6 +59,7 @@ Other changes:
|
|||||||
- Inputs: (OSX) Fixes variety of code which inconsistently required using Ctrl instead of Cmd.
|
- Inputs: (OSX) Fixes variety of code which inconsistently required using Ctrl instead of Cmd.
|
||||||
- e.g. Drags/Sliders now use Cmd+Click to input a value. (#4084)
|
- e.g. Drags/Sliders now use Cmd+Click to input a value. (#4084)
|
||||||
- Some shortcuts still uses Ctrl on Mac: e.g. Ctrl+Tab to switch windows. (#4828)
|
- Some shortcuts still uses Ctrl on Mac: e.g. Ctrl+Tab to switch windows. (#4828)
|
||||||
|
- Inputs: (OSX) Ctrl+Left Click alias as a Right click. (#2343) [@haldean, @ocornut]
|
||||||
- Nav: fixed holding Ctrl or gamepad L1 from not slowing down keyboard/gamepad tweak speed.
|
- Nav: fixed holding Ctrl or gamepad L1 from not slowing down keyboard/gamepad tweak speed.
|
||||||
Broken during a refactor refactor for 1.89. Holding Shift/R1 to speed up wasn't broken.
|
Broken during a refactor refactor for 1.89. Holding Shift/R1 to speed up wasn't broken.
|
||||||
- Tables: fixed cell background of fully clipped row overlapping with header. (#7575, #7041) [@prabuinet]
|
- Tables: fixed cell background of fully clipped row overlapping with header. (#7575, #7041) [@prabuinet]
|
||||||
|
24
imgui.cpp
24
imgui.cpp
@ -1608,12 +1608,36 @@ void ImGuiIO::AddMouseButtonEvent(int mouse_button, bool down)
|
|||||||
if (!AppAcceptingEvents)
|
if (!AppAcceptingEvents)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// On MacOS X: Convert Ctrl(Super)+Left click into Right-click: handle held button.
|
||||||
|
if (ConfigMacOSXBehaviors && mouse_button == 0 && MouseCtrlLeftAsRightClick)
|
||||||
|
{
|
||||||
|
// Order of both statements matterns: this event will still release mouse button 1
|
||||||
|
mouse_button = 1;
|
||||||
|
if (!down)
|
||||||
|
MouseCtrlLeftAsRightClick = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Filter duplicate
|
// Filter duplicate
|
||||||
const ImGuiInputEvent* latest_event = FindLatestInputEvent(&g, ImGuiInputEventType_MouseButton, (int)mouse_button);
|
const ImGuiInputEvent* latest_event = FindLatestInputEvent(&g, ImGuiInputEventType_MouseButton, (int)mouse_button);
|
||||||
const bool latest_button_down = latest_event ? latest_event->MouseButton.Down : g.IO.MouseDown[mouse_button];
|
const bool latest_button_down = latest_event ? latest_event->MouseButton.Down : g.IO.MouseDown[mouse_button];
|
||||||
if (latest_button_down == down)
|
if (latest_button_down == down)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// On MacOS X: Convert Ctrl(Super)+Left click into Right-click.
|
||||||
|
// - Note that this is actual physical Ctrl which is ImGuiMod_Super for us.
|
||||||
|
// - At this point we want from !down to down, so this is handling the initial press.
|
||||||
|
if (ConfigMacOSXBehaviors && mouse_button == 0 && down)
|
||||||
|
{
|
||||||
|
const ImGuiInputEvent* latest_super_event = FindLatestInputEvent(&g, ImGuiInputEventType_Key, (int)ImGuiMod_Super);
|
||||||
|
if (latest_super_event ? latest_super_event->Key.Down : g.IO.KeySuper)
|
||||||
|
{
|
||||||
|
IMGUI_DEBUG_LOG_IO("[io] Super+Left Click aliased into Right Click\n");
|
||||||
|
MouseCtrlLeftAsRightClick = true;
|
||||||
|
AddMouseButtonEvent(1, true); // This is just quicker to write that passing through, as we need to filter duplicate again.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ImGuiInputEvent e;
|
ImGuiInputEvent e;
|
||||||
e.Type = ImGuiInputEventType_MouseButton;
|
e.Type = ImGuiInputEventType_MouseButton;
|
||||||
e.Source = ImGuiInputSource_Mouse;
|
e.Source = ImGuiInputSource_Mouse;
|
||||||
|
3
imgui.h
3
imgui.h
@ -28,7 +28,7 @@
|
|||||||
// Library Version
|
// Library Version
|
||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
|
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
|
||||||
#define IMGUI_VERSION "1.90.7 WIP"
|
#define IMGUI_VERSION "1.90.7 WIP"
|
||||||
#define IMGUI_VERSION_NUM 19063
|
#define IMGUI_VERSION_NUM 19064
|
||||||
#define IMGUI_HAS_TABLE
|
#define IMGUI_HAS_TABLE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2239,6 +2239,7 @@ struct ImGuiIO
|
|||||||
bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds.
|
bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds.
|
||||||
bool MouseDownOwnedUnlessPopupClose[5]; // Track if button was clicked inside a dear imgui window.
|
bool MouseDownOwnedUnlessPopupClose[5]; // Track if button was clicked inside a dear imgui window.
|
||||||
bool MouseWheelRequestAxisSwap; // On a non-Mac system, holding SHIFT requests WheelY to perform the equivalent of a WheelX event. On a Mac system this is already enforced by the system.
|
bool MouseWheelRequestAxisSwap; // On a non-Mac system, holding SHIFT requests WheelY to perform the equivalent of a WheelX event. On a Mac system this is already enforced by the system.
|
||||||
|
bool MouseCtrlLeftAsRightClick; // (OSX) Set to true when the current click was a ctrl-click that spawned a simulated right click
|
||||||
float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
|
float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
|
||||||
float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
|
float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
|
||||||
float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point (used for moving thresholds)
|
float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point (used for moving thresholds)
|
||||||
|
Loading…
Reference in New Issue
Block a user