Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/presets/keyconfig/blender.py5
-rw-r--r--release/scripts/presets/keyconfig/blender_27x.py5
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py5
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h8
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c26
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c24
6 files changed, 64 insertions, 9 deletions
diff --git a/release/scripts/presets/keyconfig/blender.py b/release/scripts/presets/keyconfig/blender.py
index 8a7689d6d60..596b17d734f 100644
--- a/release/scripts/presets/keyconfig/blender.py
+++ b/release/scripts/presets/keyconfig/blender.py
@@ -169,7 +169,10 @@ def load():
keyconfig_data = blender_default.generate_keymaps(
blender_default.Params(
select_mouse=kc_prefs.select_mouse,
- use_mouse_emulate_3_button=prefs.inputs.use_mouse_emulate_3_button,
+ use_mouse_emulate_3_button=(
+ prefs.inputs.use_mouse_emulate_3_button and
+ prefs.inputs.mouse_emulate_3_button_modifier == 'ALT'
+ ),
spacebar_action=kc_prefs.spacebar_action,
v3d_tilde_action=kc_prefs.v3d_tilde_action,
use_select_all_toggle=kc_prefs.use_select_all_toggle,
diff --git a/release/scripts/presets/keyconfig/blender_27x.py b/release/scripts/presets/keyconfig/blender_27x.py
index 4ce77f46213..8d50d449494 100644
--- a/release/scripts/presets/keyconfig/blender_27x.py
+++ b/release/scripts/presets/keyconfig/blender_27x.py
@@ -53,7 +53,10 @@ def load():
keyconfig_data = blender_default.generate_keymaps(
blender_default.Params(
select_mouse=kc_prefs.select_mouse,
- use_mouse_emulate_3_button=prefs.inputs.use_mouse_emulate_3_button,
+ use_mouse_emulate_3_button=(
+ prefs.inputs.use_mouse_emulate_3_button and
+ prefs.inputs.mouse_emulate_3_button_modifier == 'ALT'
+ ),
spacebar_action='SEARCH',
use_select_all_toggle=True,
use_gizmo_drag=False,
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index be41fb52118..8ccd8b57357 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1479,12 +1479,17 @@ class USERPREF_PT_input_mouse(PreferencePanel, Panel):
return (prefs.active_section == 'INPUT')
def draw_props(self, context, layout):
+ import sys
prefs = context.preferences
inputs = prefs.inputs
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(inputs, "use_mouse_emulate_3_button")
+ if sys.platform[:3] != "win":
+ rowsub = flow.row()
+ rowsub.active = inputs.use_mouse_emulate_3_button
+ rowsub.prop(inputs, "mouse_emulate_3_button_modifier")
flow.prop(inputs, "use_mouse_continuous")
flow.prop(inputs, "use_drag_immediately")
flow.prop(inputs, "mouse_double_click_time", text="Double Click Speed")
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 126b4638ca1..f36802d33b3 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -606,7 +606,8 @@ typedef struct UserDef {
/** #eUserPref_PrefFlag preferences for the preferences. */
char pref_flag;
char savetime;
- char _pad4[4];
+ char mouse_emulate_3_button_modifier;
+ char _pad4[3];
/** FILE_MAXDIR length. */
char tempdir[768];
char fontdir[768];
@@ -1240,6 +1241,11 @@ typedef enum eUserpref_TempSpaceDisplayType {
USER_TEMP_SPACE_DISPLAY_WINDOW,
} eUserpref_TempSpaceDisplayType;
+typedef enum eUserpref_EmulateMMBMod {
+ USER_EMU_MMB_MOD_ALT = 0,
+ USER_EMU_MMB_MOD_OSKEY = 1,
+} eUserpref_EmulateMMBMod;
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index c9b6f46ab04..078af30e36c 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -424,6 +424,17 @@ static void rna_userdef_timecode_style_set(PointerRNA *ptr, int value)
}
}
+static int rna_UserDef_mouse_emulate_3_button_modifier_get(PointerRNA *ptr)
+{
+# if !defined(WIN32)
+ UserDef *userdef = ptr->data;
+ return userdef->mouse_emulate_3_button_modifier;
+# else
+ UNUSED_VARS(ptr);
+ return USER_EMU_MMB_MOD_ALT;
+# endif
+}
+
static PointerRNA rna_UserDef_view_get(PointerRNA *ptr)
{
return rna_pointer_inherit_refine(ptr, &RNA_PreferencesView, ptr->data);
@@ -5487,6 +5498,21 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_userdef_keyconfig_reload_update");
+ static const EnumPropertyItem mouse_emulate_3_button_modifier[] = {
+ {USER_EMU_MMB_MOD_ALT, "ALT", 0, "Alt", ""},
+ {USER_EMU_MMB_MOD_OSKEY, "OSKEY", 0, "OS-Key", ""},
+ {0, NULL, 0, NULL, NULL},
+ };
+
+ prop = RNA_def_property(srna, "mouse_emulate_3_button_modifier", PROP_ENUM, PROP_NONE);
+ /* Only needed because of WIN32 inability to support the option. */
+ RNA_def_property_enum_funcs(prop, "rna_UserDef_mouse_emulate_3_button_modifier_get", NULL, NULL);
+ RNA_def_property_enum_items(prop, mouse_emulate_3_button_modifier);
+ RNA_def_property_ui_text(
+ prop, "Emulate 3 Button Modifier", "Hold this modifier to emulate the middle mouse button");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_userdef_keyconfig_reload_update");
+
prop = RNA_def_property(srna, "use_emulate_numpad", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_NONUMPAD);
RNA_def_property_ui_text(
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 6b4327d5f44..6991dd2f9a6 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -4210,19 +4210,31 @@ static void wm_eventemulation(wmEvent *event, bool test_only)
if (U.flag & USER_TWOBUTTONMOUSE) {
if (event->type == LEFTMOUSE) {
- if (event->val == KM_PRESS && event->alt) {
- event->type = MIDDLEMOUSE;
- event->alt = 0;
+ short *mod = (
+#if !defined(WIN32)
+ (U.mouse_emulate_3_button_modifier == USER_EMU_MMB_MOD_OSKEY) ? &event->oskey :
+ &event->alt
+#else
+ /* Disable for WIN32 for now because it accesses the start menu. */
+ &event->alt
+#endif
+ );
- if (!test_only) {
- emulating_event = MIDDLEMOUSE;
+ if (event->val == KM_PRESS) {
+ if (*mod) {
+ *mod = 0;
+ event->type = MIDDLEMOUSE;
+
+ if (!test_only) {
+ emulating_event = MIDDLEMOUSE;
+ }
}
}
else if (event->val == KM_RELEASE) {
/* only send middle-mouse release if emulated */
if (emulating_event == MIDDLEMOUSE) {
event->type = MIDDLEMOUSE;
- event->alt = 0;
+ *mod = 0;
}
if (!test_only) {