diff options
-rw-r--r-- | doc/doxygen/Doxyfile | 2 | ||||
-rw-r--r-- | intern/cycles/blender/blender_geometry.cpp | 85 | ||||
-rw-r--r-- | intern/cycles/blender/blender_object.cpp | 39 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.h | 11 | ||||
-rw-r--r-- | release/datafiles/splash.png | bin | 760281 -> 737984 bytes | |||
-rw-r--r-- | release/scripts/modules/bl_keymap_utils/io.py | 23 | ||||
-rw-r--r-- | release/scripts/modules/bl_keymap_utils/versioning.py | 49 | ||||
-rw-r--r-- | release/scripts/presets/keyconfig/keymap_data/blender_default.py | 686 | ||||
-rw-r--r-- | release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py | 358 | ||||
-rw-r--r-- | release/scripts/startup/bl_operators/gpencil_mesh_bake.py | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_blender_version.h | 6 | ||||
-rw-r--r-- | source/blender/editors/gpencil/gpencil_mesh.c | 80 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c | 5 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_wm_api.c | 4 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_app.c | 3 |
15 files changed, 780 insertions, 577 deletions
diff --git a/doc/doxygen/Doxyfile b/doc/doxygen/Doxyfile index 6e4a087fa36..ca545eec4ca 100644 --- a/doc/doxygen/Doxyfile +++ b/doc/doxygen/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = Blender # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "V2.91" +PROJECT_NUMBER = "V2.92" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/intern/cycles/blender/blender_geometry.cpp b/intern/cycles/blender/blender_geometry.cpp index 002f5e0fdb7..14da8075903 100644 --- a/intern/cycles/blender/blender_geometry.cpp +++ b/intern/cycles/blender/blender_geometry.cpp @@ -25,6 +25,7 @@ #include "blender/blender_util.h" #include "util/util_foreach.h" +#include "util/util_task.h" CCL_NAMESPACE_BEGIN @@ -45,7 +46,8 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph, BL::Object &b_ob, BL::Object &b_ob_instance, bool object_updated, - bool use_particle_hair) + bool use_particle_hair, + TaskPool *task_pool) { /* Test if we can instance or if the object is modified. */ BL::ID b_ob_data = b_ob.data(); @@ -77,8 +79,15 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph, used_shaders.push_back(default_shader); } - /* Test if we need to sync. */ + /* Ensure we only sync instanced geometry once. */ Geometry *geom = geometry_map.find(key); + if (geom) { + if (geometry_synced.find(geom) != geometry_synced.end()) { + return geom; + } + } + + /* Test if we need to sync. */ bool sync = true; if (geom == NULL) { /* Add new geometry if it did not exist yet. */ @@ -125,28 +134,36 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph, } } - /* Ensure we only sync instanced geometry once. */ - if (geometry_synced.find(geom) != geometry_synced.end()) { - return geom; - } - - progress.set_sync_status("Synchronizing object", b_ob.name()); - geometry_synced.insert(geom); geom->name = ustring(b_ob_data.name().c_str()); - if (geom_type == Geometry::HAIR) { - Hair *hair = static_cast<Hair *>(geom); - sync_hair(b_depsgraph, b_ob, hair, used_shaders); - } - else if (geom_type == Geometry::VOLUME) { - Volume *volume = static_cast<Volume *>(geom); - sync_volume(b_ob, volume, used_shaders); + auto sync_func = [=]() mutable { + if (progress.get_cancel()) + return; + + progress.set_sync_status("Synchronizing object", b_ob.name()); + + if (geom_type == Geometry::HAIR) { + Hair *hair = static_cast<Hair *>(geom); + sync_hair(b_depsgraph, b_ob, hair, used_shaders); + } + else if (geom_type == Geometry::VOLUME) { + Volume *volume = static_cast<Volume *>(geom); + sync_volume(b_ob, volume, used_shaders); + } + else { + Mesh *mesh = static_cast<Mesh *>(geom); + sync_mesh(b_depsgraph, b_ob, mesh, used_shaders); + } + }; + + /* Defer the actual geometry sync to the task_pool for multithreading */ + if (task_pool) { + task_pool->push(sync_func); } else { - Mesh *mesh = static_cast<Mesh *>(geom); - sync_mesh(b_depsgraph, b_ob, mesh, used_shaders); + sync_func(); } return geom; @@ -156,7 +173,8 @@ void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph, BL::Object &b_ob, Object *object, float motion_time, - bool use_particle_hair) + bool use_particle_hair, + TaskPool *task_pool) { /* Ensure we only sync instanced geometry once. */ Geometry *geom = object->geometry; @@ -177,16 +195,29 @@ void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph, return; } - if (b_ob.type() == BL::Object::type_HAIR || use_particle_hair) { - Hair *hair = static_cast<Hair *>(geom); - sync_hair_motion(b_depsgraph, b_ob, hair, motion_step); - } - else if (b_ob.type() == BL::Object::type_VOLUME || object_fluid_gas_domain_find(b_ob)) { - /* No volume motion blur support yet. */ + auto sync_func = [=]() mutable { + if (progress.get_cancel()) + return; + + if (b_ob.type() == BL::Object::type_HAIR || use_particle_hair) { + Hair *hair = static_cast<Hair *>(geom); + sync_hair_motion(b_depsgraph, b_ob, hair, motion_step); + } + else if (b_ob.type() == BL::Object::type_VOLUME || object_fluid_gas_domain_find(b_ob)) { + /* No volume motion blur support yet. */ + } + else { + Mesh *mesh = static_cast<Mesh *>(geom); + sync_mesh_motion(b_depsgraph, b_ob, mesh, motion_step); + } + }; + + /* Defer the actual geometry sync to the task_pool for multithreading */ + if (task_pool) { + task_pool->push(sync_func); } else { - Mesh *mesh = static_cast<Mesh *>(geom); - sync_mesh_motion(b_depsgraph, b_ob, mesh, motion_step); + sync_func(); } } diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index 212b9cbe103..c3420c24469 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -32,6 +32,7 @@ #include "util/util_foreach.h" #include "util/util_hash.h" #include "util/util_logging.h" +#include "util/util_task.h" CCL_NAMESPACE_BEGIN @@ -103,7 +104,8 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph, bool use_particle_hair, bool show_lights, BlenderObjectCulling &culling, - bool *use_portal) + bool *use_portal, + TaskPool *geom_task_pool) { const bool is_instance = b_instance.is_instance(); BL::Object b_ob = b_instance.object(); @@ -181,6 +183,10 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph, return NULL; } + /* Use task pool only for non-instances, since sync_dupli_particle accesses + * geometry. This restriction should be removed for better performance. */ + TaskPool *object_geom_task_pool = (is_instance) ? NULL : geom_task_pool; + /* key to lookup object */ ObjectKey key(b_parent, persistent_id, b_ob_instance, use_particle_hair); Object *object; @@ -198,7 +204,12 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph, /* mesh deformation */ if (object->geometry) - sync_geometry_motion(b_depsgraph, b_ob, object, motion_time, use_particle_hair); + sync_geometry_motion(b_depsgraph, + b_ob_instance, + object, + motion_time, + use_particle_hair, + object_geom_task_pool); } return object; @@ -211,8 +222,15 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph, object_updated = true; /* mesh sync */ - object->geometry = sync_geometry( - b_depsgraph, b_ob, b_ob_instance, object_updated, use_particle_hair); + /* b_ob is owned by the iterator and will go out of scope at the end of the block. + * b_ob_instance is the original object and will remain valid for deferred geometry + * sync. */ + object->geometry = sync_geometry(b_depsgraph, + b_ob_instance, + b_ob_instance, + object_updated, + use_particle_hair, + object_geom_task_pool); /* special case not tracked by object update flags */ @@ -331,6 +349,9 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d, float motion_time) { + /* Task pool for multithreaded geometry sync. */ + TaskPool geom_task_pool; + /* layer data */ bool motion = motion_time != 0.0f; @@ -355,8 +376,8 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph, const bool show_lights = BlenderViewportParameters(b_v3d).use_scene_lights; BL::ViewLayer b_view_layer = b_depsgraph.view_layer_eval(); - BL::Depsgraph::object_instances_iterator b_instance_iter; + for (b_depsgraph.object_instances.begin(b_instance_iter); b_instance_iter != b_depsgraph.object_instances.end() && !cancel; ++b_instance_iter) { @@ -381,7 +402,8 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph, false, show_lights, culling, - &use_portal); + &use_portal, + &geom_task_pool); } /* Particle hair as separate object. */ @@ -393,12 +415,15 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph, true, show_lights, culling, - &use_portal); + &use_portal, + &geom_task_pool); } cancel = progress.get_cancel(); } + geom_task_pool.wait_work(); + progress.set_sync_status(""); if (!cancel && !motion) { diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 62fd1ac2351..a17db128957 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -50,6 +50,7 @@ class ViewLayer; class Shader; class ShaderGraph; class ShaderNode; +class TaskPool; class BlenderSync { public: @@ -145,7 +146,8 @@ class BlenderSync { bool use_particle_hair, bool show_lights, BlenderObjectCulling &culling, - bool *use_portal); + bool *use_portal, + TaskPool *geom_task_pool); /* Volume */ void sync_volume(BL::Object &b_ob, Volume *volume, const vector<Shader *> &used_shaders); @@ -177,12 +179,15 @@ class BlenderSync { BL::Object &b_ob, BL::Object &b_ob_instance, bool object_updated, - bool use_particle_hair); + bool use_particle_hair, + TaskPool *task_pool); + void sync_geometry_motion(BL::Depsgraph &b_depsgraph, BL::Object &b_ob, Object *object, float motion_time, - bool use_particle_hair); + bool use_particle_hair, + TaskPool *task_pool); /* Light */ void sync_light(BL::Object &b_parent, diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png Binary files differindex 9f6078722ee..babb3e30c6d 100644 --- a/release/datafiles/splash.png +++ b/release/datafiles/splash.png diff --git a/release/scripts/modules/bl_keymap_utils/io.py b/release/scripts/modules/bl_keymap_utils/io.py index 8cddbd37ea3..e850661d6c6 100644 --- a/release/scripts/modules/bl_keymap_utils/io.py +++ b/release/scripts/modules/bl_keymap_utils/io.py @@ -73,6 +73,11 @@ def kmi_args_as_data(kmi): if kmi.key_modifier and kmi.key_modifier != 'NONE': s.append(f"\"key_modifier\": '{kmi.key_modifier}'") + if kmi.repeat: + if kmi.map_type == 'KEYBOARD': + if kmi.value in {'PRESS', 'ANY'}: + s.append("\"repeat\": True") + return "{" + ", ".join(s) + "}" @@ -161,6 +166,13 @@ def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False): with open(filepath, "w") as fh: fw = fh.write + + # Use the file version since it includes the sub-version + # which we can bump multiple times between releases. + from bpy.app import version_file + fw(f"keyconfig_version = {version_file!r}\n") + del version_file + fw("keyconfig_data = \\\n[") for km, _kc_x in export_keymaps: @@ -212,7 +224,11 @@ def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False): fw("if __name__ == \"__main__\":\n") fw(" import os\n") fw(" from bl_keymap_utils.io import keyconfig_import_from_data\n") - fw(" keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)\n") + fw(" keyconfig_import_from_data(\n") + fw(" os.path.splitext(os.path.basename(__file__))[0],\n") + fw(" keyconfig_data,\n") + fw(" keyconfig_version=keyconfig_version,\n") + fw(" )\n") # ----------------------------------------------------------------------------- @@ -264,7 +280,7 @@ def keyconfig_init_from_data(kc, keyconfig_data): keymap_init_from_data(km, km_items, is_modal=km_args.get("modal", False)) -def keyconfig_import_from_data(name, keyconfig_data): +def keyconfig_import_from_data(name, keyconfig_data, *, keyconfig_version=(0, 0, 0)): # Load data in the format defined above. # # Runs at load time, keep this fast! @@ -272,6 +288,9 @@ def keyconfig_import_from_data(name, keyconfig_data): import bpy wm = bpy.context.window_manager kc = wm.keyconfigs.new(name) + if keyconfig_version is not None: + from .versioning import keyconfig_update + keyconfig_data = keyconfig_update(keyconfig_data, keyconfig_version) keyconfig_init_from_data(kc, keyconfig_data) return kc diff --git a/release/scripts/modules/bl_keymap_utils/versioning.py b/release/scripts/modules/bl_keymap_utils/versioning.py new file mode 100644 index 00000000000..4c2e8ed7f54 --- /dev/null +++ b/release/scripts/modules/bl_keymap_utils/versioning.py @@ -0,0 +1,49 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +# Update Blender version this key-map was written in: +# +# When the version is ``(0, 0, 0)``, the key-map being loaded didn't contain any versioning information. +# This will older than ``(2, 92, 0)``. + +def keyconfig_update(keyconfig_data, keyconfig_version): + from bpy.app import version_file as blender_version + if keyconfig_version >= blender_version: + return keyconfig_data + + # Version the key-map. + import copy + has_copy = False + + # Default repeat to false. + if keyconfig_version <= (2, 92, 0): + # Only copy once. + if not has_copy: + keyconfig_data = copy.deepcopy(keyconfig_data) + has_copy = True + + for _km_name, _km_parms, km_items_data in keyconfig_data: + for (_item_op, item_event, _item_prop) in km_items_data["items"]: + if item_event.get("value") == 'PRESS': + # Unfortunately we don't know the 'map_type' at this point. + # Setting repeat true on other kinds of events is harmless. + item_event["repeat"] = True + + return keyconfig_data diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 7cf687cbaa2..cfed4955c99 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -394,7 +394,7 @@ def km_window(params): ("wm.window_new", {"type": 'W', "value": 'PRESS', "ctrl": True, "alt": True}, None), ("wm.window_fullscreen_toggle", {"type": 'F11', "value": 'PRESS', "alt": True}, None), ("wm.doc_view_manual_ui_context", {"type": 'F1', "value": 'PRESS', "alt": True}, None), - ("wm.search_menu", {"type": 'SPACE', "value": 'PRESS', "repeat": False}, None), + ("wm.search_menu", {"type": 'SPACE', "value": 'PRESS'}, None), ("wm.redraw_timer", {"type": 'T', "value": 'PRESS', "ctrl": True, "alt": True}, None), ("wm.debug_menu", {"type": 'D', "value": 'PRESS', "ctrl": True, "alt": True}, None), ]) @@ -470,11 +470,11 @@ def km_window(params): ) elif params.spacebar_action == 'PLAY': items.append( - ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS', "shift": True, "repeat": False}, None), + ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None), ) elif params.spacebar_action == 'SEARCH': items.append( - ("wm.search_menu", {"type": 'SPACE', "value": 'PRESS', "repeat": False}, None), + ("wm.search_menu", {"type": 'SPACE', "value": 'PRESS'}, None), ) else: assert False @@ -506,14 +506,14 @@ def km_screen(params): # Quad view ("screen.region_quadview", {"type": 'Q', "value": 'PRESS', "ctrl": True, "alt": True}, None), # Repeat last - ("screen.repeat_last", {"type": 'R', "value": 'PRESS', "shift": True}, None), + ("screen.repeat_last", {"type": 'R', "value": 'PRESS', "shift": True, "repeat": True}, None), # Files ("file.execute", {"type": 'RET', "value": 'PRESS'}, None), ("file.execute", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None), ("file.cancel", {"type": 'ESC', "value": 'PRESS'}, None), # Undo - ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True}, None), - ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True}, None), + ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None), # Render ("render.render", {"type": 'F12', "value": 'PRESS'}, {"properties": [("use_viewport", True)]}), @@ -526,8 +526,8 @@ def km_screen(params): if not params.legacy: items.extend([ - ("screen.screen_full_area", {"type": 'SPACE', "value": 'PRESS', "ctrl": True, "repeat": False}, None), - ("screen.screen_full_area", {"type": 'SPACE', "value": 'PRESS', "ctrl": True, "alt": True, "repeat": False}, + ("screen.screen_full_area", {"type": 'SPACE', "value": 'PRESS', "ctrl": True}, None), + ("screen.screen_full_area", {"type": 'SPACE', "value": 'PRESS', "ctrl": True, "alt": True}, {"properties": [("use_hide_panels", True)]}), ("screen.redo_last", {"type": 'F9', "value": 'PRESS'}, None), ]) @@ -633,8 +633,8 @@ def km_view2d(_params): # Zoom with single step ("view2d.zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None), ("view2d.zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None), - ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), - ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), + ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), + ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), ("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), ("view2d.smoothview", {"type": 'TIMER1', "value": 'ANY', "any": True}, None), # Scroll up/down, only when zoom is not available. @@ -668,16 +668,16 @@ def km_view2d_buttons_list(_params): ("view2d.pan", {"type": 'TRACKPADPAN', "value": 'ANY'}, None), ("view2d.scroll_down", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None), ("view2d.scroll_up", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None), - ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("page", True)]}), - ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("page", True)]}), # Zoom ("view2d.zoom", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "ctrl": True}, None), ("view2d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None), ("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), - ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), - ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), + ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), + ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), ("view2d.reset", {"type": 'HOME', "value": 'PRESS'}, None), ]) @@ -789,17 +789,21 @@ def km_outliner(params): {"properties": [("tweak", True), ("mode", "ADD")]}), ("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True}, {"properties": [("tweak", True), ("mode", "SUB")]}), - ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'UP')]}), - ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'UP')]}), + ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'UP'), ("extend", True)]}), - ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'DOWN')]}), - ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'DOWN')]}), + ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'DOWN'), ("extend", True)]}), - ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'LEFT')]}), - ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'LEFT')]}), + ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'LEFT'), ("toggle_all", True)]}), - ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'RIGHT')]}), - ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'RIGHT')]}), + ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'RIGHT'), ("toggle_all", True)]}), ("outliner.item_openclose", {"type": 'LEFTMOUSE', "value": 'CLICK'}, {"properties": [("all", False)]}), @@ -815,9 +819,9 @@ def km_outliner(params): ("outliner.show_hierarchy", {"type": 'HOME', "value": 'PRESS'}, None), ("outliner.show_active", {"type": 'PERIOD', "value": 'PRESS'}, None), ("outliner.show_active", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), - ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("up", False)]}), - ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("up", True)]}), ("outliner.show_one_level", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), ("outliner.show_one_level", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, @@ -890,8 +894,8 @@ def km_uv_editor(params): {"properties": [("extend", True), ("deselect", False)]}), ("uv.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True}, {"properties": [("extend", False), ("deselect", True)]}), - ("uv.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("uv.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("uv.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("uv.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), *_template_items_select_actions(params, "uv.select_all"), ("uv.select_pinned", {"type": 'P', "value": 'PRESS', "shift": True}, None), op_menu("IMAGE_MT_uvs_merge", {"type": 'M', "value": 'PRESS'}), @@ -912,12 +916,12 @@ def km_uv_editor(params): op_menu_pie("IMAGE_MT_uvs_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}), op_menu("IMAGE_MT_uvs_select_mode", {"type": 'TAB', "value": 'PRESS', "ctrl": True}), *_template_items_proportional_editing(connected=False), - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), - ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None), - ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True, "repeat": False}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), + ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), + ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), ("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True}, {"properties": [("data_path", 'tool_settings.use_snap')]}), ("wm.context_menu_enum", {"type": 'TAB', "value": 'PRESS', "shift": True, "ctrl": True}, @@ -1031,25 +1035,25 @@ def km_view3d(params): ("view3d.smoothview", {"type": 'TIMER1', "value": 'ANY', "any": True}, None), ("view3d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None), ("view3d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), - ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, + ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, {"properties": [("delta", 1)]}), - ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, + ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, {"properties": [("delta", -1)]}), - ("view3d.zoom", {"type": 'EQUAL', "value": 'PRESS', "ctrl": True}, + ("view3d.zoom", {"type": 'EQUAL', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("view3d.zoom", {"type": 'MINUS', "value": 'PRESS', "ctrl": True}, + ("view3d.zoom", {"type": 'MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("delta", -1)]}), ("view3d.zoom", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, {"properties": [("delta", 1)]}), ("view3d.zoom", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, {"properties": [("delta", -1)]}), - ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True}, + ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True}, + ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("delta", -1)]}), - ("view3d.dolly", {"type": 'EQUAL', "value": 'PRESS', "shift": True, "ctrl": True}, + ("view3d.dolly", {"type": 'EQUAL', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("view3d.dolly", {"type": 'MINUS', "value": 'PRESS', "shift": True, "ctrl": True}, + ("view3d.dolly", {"type": 'MINUS', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("delta", -1)]}), ("view3d.view_center_camera", {"type": 'HOME', "value": 'PRESS'}, None), ("view3d.view_center_lock", {"type": 'HOME', "value": 'PRESS'}, None), @@ -1070,18 +1074,18 @@ def km_view3d(params): ("view3d.view_camera", {"type": 'NUMPAD_0', "value": 'PRESS'}, None), ("view3d.view_axis", {"type": 'NUMPAD_1', "value": 'PRESS'}, {"properties": [("type", 'FRONT')]}), - ("view3d.view_orbit", {"type": 'NUMPAD_2', "value": 'PRESS'}, + ("view3d.view_orbit", {"type": 'NUMPAD_2', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'ORBITDOWN')]}), ("view3d.view_axis", {"type": 'NUMPAD_3', "value": 'PRESS'}, {"properties": [("type", 'RIGHT')]}), - ("view3d.view_orbit", {"type": 'NUMPAD_4', "value": 'PRESS'}, + ("view3d.view_orbit", {"type": 'NUMPAD_4', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'ORBITLEFT')]}), ("view3d.view_persportho", {"type": 'NUMPAD_5', "value": 'PRESS'}, None), - ("view3d.view_orbit", {"type": 'NUMPAD_6', "value": 'PRESS'}, + ("view3d.view_orbit", {"type": 'NUMPAD_6', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'ORBITRIGHT')]}), ("view3d.view_axis", {"type": 'NUMPAD_7', "value": 'PRESS'}, {"properties": [("type", 'TOP')]}), - ("view3d.view_orbit", {"type": 'NUMPAD_8', "value": 'PRESS'}, + ("view3d.view_orbit", {"type": 'NUMPAD_8', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'ORBITUP')]}), ("view3d.view_axis", {"type": 'NUMPAD_1', "value": 'PRESS', "ctrl": True}, {"properties": [("type", 'BACK')]}), @@ -1089,17 +1093,17 @@ def km_view3d(params): {"properties": [("type", 'LEFT')]}), ("view3d.view_axis", {"type": 'NUMPAD_7', "value": 'PRESS', "ctrl": True}, {"properties": [("type", 'BOTTOM')]}), - ("view3d.view_pan", {"type": 'NUMPAD_2', "value": 'PRESS', "ctrl": True}, + ("view3d.view_pan", {"type": 'NUMPAD_2', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PANDOWN')]}), - ("view3d.view_pan", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True}, + ("view3d.view_pan", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PANLEFT')]}), - ("view3d.view_pan", {"type": 'NUMPAD_6', "value": 'PRESS', "ctrl": True}, + ("view3d.view_pan", {"type": 'NUMPAD_6', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PANRIGHT')]}), - ("view3d.view_pan", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True}, + ("view3d.view_pan", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PANUP')]}), - ("view3d.view_roll", {"type": 'NUMPAD_4', "value": 'PRESS', "shift": True}, + ("view3d.view_roll", {"type": 'NUMPAD_4', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'LEFT')]}), - ("view3d.view_roll", {"type": 'NUMPAD_6', "value": 'PRESS', "shift": True}, + ("view3d.view_roll", {"type": 'NUMPAD_6', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'RIGHT')]}), ("view3d.view_orbit", {"type": 'NUMPAD_9', "value": 'PRESS'}, {"properties": [("angle", 3.1415927), ("type", 'ORBITRIGHT')]}), @@ -1201,19 +1205,19 @@ def km_view3d(params): ("view3d.copybuffer", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), ("view3d.pastebuffer", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), # Transform. - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), - ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True, "repeat": False}, None), - ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True, "repeat": False}, None), - ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None), - ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True, "repeat": False}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), + ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True}, None), + ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), + ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), + ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), ("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True}, {"properties": [("data_path", 'tool_settings.use_snap')]}), op_panel("VIEW3D_PT_snapping", {"type": 'TAB', "value": 'PRESS', "shift": True, "ctrl": True}, [("keep_open", False)]), ("object.transform_axis_target", {"type": 'T', "value": 'PRESS', "shift": True}, None), - ("transform.skin_resize", {"type": 'A', "value": 'PRESS', "ctrl": True, "repeat": False}, None), + ("transform.skin_resize", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ]) if not params.legacy: @@ -1267,11 +1271,11 @@ def km_view3d(params): {"properties": [("type", 'LEFT')]}), ("view3d.view_roll", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("type", 'RIGHT')]}), - ("transform.create_orientation", {"type": 'SPACE', "value": 'PRESS', "ctrl": True, "alt": True, "repeat": False}, + ("transform.create_orientation", {"type": 'SPACE', "value": 'PRESS', "ctrl": True, "alt": True}, {"properties": [("use", True)]}), - ("transform.translate", {"type": 'T', "value": 'PRESS', "shift": True, "repeat": False}, + ("transform.translate", {"type": 'T', "value": 'PRESS', "shift": True}, {"properties": [("texture_space", True)]}), - ("transform.resize", {"type": 'T', "value": 'PRESS', "shift": True, "alt": True, "repeat": False}, + ("transform.resize", {"type": 'T', "value": 'PRESS', "shift": True, "alt": True}, {"properties": [("texture_space", True)]}), # Old pivot. ("wm.context_set_enum", {"type": 'COMMA', "value": 'PRESS'}, @@ -1280,7 +1284,7 @@ def km_view3d(params): {"properties": [("data_path", 'tool_settings.transform_pivot_point'), ("value", 'MEDIAN_POINT')]}), ("wm.context_toggle", {"type": 'COMMA', "value": 'PRESS', "alt": True}, {"properties": [("data_path", 'tool_settings.use_transform_pivot_point_align')]}), - ("wm.context_toggle", {"type": 'SPACE', "value": 'PRESS', "ctrl": True, "repeat": False}, + ("wm.context_toggle", {"type": 'SPACE', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'space_data.show_gizmo_context')]}), ("wm.context_set_enum", {"type": 'PERIOD', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.transform_pivot_point'), ("value", 'CURSOR')]}), @@ -1350,8 +1354,8 @@ def km_mask_editing(params): {"properties": [("mode", 'ADD')]}), ("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True}, {"properties": [("mode", 'SUB')]}), - ("mask.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("mask.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("mask.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("mask.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("mask.hide_view_clear", {"type": 'H', "value": 'PRESS', "alt": True}, None), ("mask.hide_view_set", {"type": 'H', "value": 'PRESS'}, {"properties": [("unselected", False)]}), @@ -1371,13 +1375,13 @@ def km_mask_editing(params): ("mask.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), ("mask.copy_splines", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), ("mask.paste_splines", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), - ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True, "repeat": False}, None), - ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None), - ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False}, + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), + ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), + ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), + ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True}, {"properties": [("mode", 'MASK_SHRINKFATTEN')]}), ]) @@ -1544,8 +1548,8 @@ def km_graph_editor(params): {"properties": [("mode", 'MARKERS_COLUMN')]}), ("graph.select_column", {"type": 'K', "value": 'PRESS', "alt": True}, {"properties": [("mode", 'MARKERS_BETWEEN')]}), - ("graph.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("graph.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("graph.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("graph.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("graph.select_linked", {"type": 'L', "value": 'PRESS'}, None), ("graph.frame_jump", {"type": 'G', "value": 'PRESS', "ctrl": True}, None), op_menu_pie("GRAPH_MT_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}), @@ -1576,12 +1580,12 @@ def km_graph_editor(params): ("graph.fmodifier_add", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("only_active", False)]}), ("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None), - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'E', "value": 'PRESS'}, {"properties": [("mode", 'TIME_EXTEND')]}), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), ("wm.context_toggle", {"type": 'O', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.use_proportional_fcurve')]}), op_menu_pie("VIEW3D_MT_proportional_editing_falloff_pie", {"type": 'O', "value": 'PRESS', "shift": True}), @@ -1622,8 +1626,8 @@ def km_image_generic(_params): ("image.read_viewlayers", {"type": 'R', "value": 'PRESS', "ctrl": True}, None), ("image.save", {"type": 'S', "value": 'PRESS', "alt": True}, None), ("image.save_as", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), - ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS'}, None), - ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "alt": True}, + ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "repeat": True}, None), + ("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("reverse", True)]}), ]) @@ -1650,8 +1654,8 @@ def km_image(params): ("image.view_ndof", {"type": 'NDOF_MOTION', "value": 'ANY'}, None), ("image.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None), ("image.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None), - ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), - ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), + ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), + ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), ("image.view_zoom", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "ctrl": True}, None), ("image.view_zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None), ("image.view_zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), @@ -1775,9 +1779,9 @@ def km_node_editor(params): ("node.links_cut", {"type": 'EVT_TWEAK_R', "value": 'ANY', "ctrl": True}, None), ("node.select_link_viewer", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, None), ("node.backimage_move", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "alt": True}, None), - ("node.backimage_zoom", {"type": 'V', "value": 'PRESS'}, + ("node.backimage_zoom", {"type": 'V', "value": 'PRESS', "repeat": True}, {"properties": [("factor", 1.0 / 1.2)]}), - ("node.backimage_zoom", {"type": 'V', "value": 'PRESS', "alt": True}, + ("node.backimage_zoom", {"type": 'V', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("factor", 1.2)]}), ("node.backimage_fit", {"type": 'HOME', "value": 'PRESS', "alt": True}, None), ("node.backimage_sample", {"type": params.action_mouse, "value": 'PRESS', "alt": True}, None), @@ -1832,13 +1836,13 @@ def km_node_editor(params): ("node.translate_attach", {"type": 'G', "value": 'PRESS'}, None), ("node.translate_attach", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), ("node.translate_attach", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), ("node.move_detach_links", {"type": 'D', "value": 'PRESS', "alt": True}, None), ("node.move_detach_links_release", {"type": params.action_tweak, "value": 'ANY', "alt": True}, None), ("node.move_detach_links", {"type": params.select_tweak, "value": 'ANY', "alt": True}, None), @@ -1909,17 +1913,17 @@ def km_file_browser(params): ("file.smoothscroll", {"type": 'TIMER1', "value": 'ANY', "any": True}, None), ("file.bookmark_add", {"type": 'B', "value": 'PRESS', "ctrl": True}, None), ("file.start_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", 1)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", 10)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", 100)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", -1)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", -10)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", -100)]}), *_template_items_context_menu("FILEBROWSER_MT_context_menu", params.context_menu_event), ]) @@ -1951,29 +1955,29 @@ def km_file_browser_main(params): {"properties": [("extend", True), ("open", False)]}), ("file.select", {"type": 'LEFTMOUSE', "value": 'CLICK', "shift": True}, {"properties": [("extend", True), ("fill", True), ("open", False)]}), - ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'UP')]}), ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, {"properties": [("direction", 'UP'), ("extend", True)]}), - ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("file.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'UP'), ("extend", True), ("fill", True)]}), - ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'DOWN')]}), - ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'DOWN'), ("extend", True)]}), - ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("file.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'DOWN'), ("extend", True), ("fill", True)]}), - ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'LEFT')]}), - ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'LEFT'), ("extend", True)]}), - ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("file.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'LEFT'), ("extend", True), ("fill", True)]}), - ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'RIGHT')]}), - ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'RIGHT'), ("extend", True)]}), - ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("file.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'RIGHT'), ("extend", True), ("fill", True)]}), ("file.previous", {"type": 'BUTTON4MOUSE', "value": 'CLICK'}, None), ("file.next", {"type": 'BUTTON5MOUSE', "value": 'CLICK'}, None), @@ -2000,17 +2004,17 @@ def km_file_browser_buttons(_params): ) items.extend([ - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", 1)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", 10)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", 100)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", -1)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", -10)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", -100)]}), ]) @@ -2094,8 +2098,8 @@ def km_dopesheet(params): {"properties": [("mode", 'MARKERS_COLUMN')]}), ("action.select_column", {"type": 'K', "value": 'PRESS', "alt": True}, {"properties": [("mode", 'MARKERS_BETWEEN')]}), - ("action.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("action.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("action.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("action.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("action.select_linked", {"type": 'L', "value": 'PRESS'}, None), ("action.frame_jump", {"type": 'G', "value": 'PRESS', "ctrl": True}, None), op_menu_pie("DOPESHEET_MT_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}), @@ -2121,15 +2125,15 @@ def km_dopesheet(params): ("action.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None), ("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None), ("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), - ("transform.transform", {"type": 'G', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'G', "value": 'PRESS'}, {"properties": [("mode", 'TIME_TRANSLATE')]}), ("transform.transform", {"type": params.select_tweak, "value": 'ANY'}, {"properties": [("mode", 'TIME_TRANSLATE')]}), - ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'E', "value": 'PRESS'}, {"properties": [("mode", 'TIME_EXTEND')]}), - ("transform.transform", {"type": 'S', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'S', "value": 'PRESS'}, {"properties": [("mode", 'TIME_SCALE')]}), - ("transform.transform", {"type": 'T', "value": 'PRESS', "shift": True, "repeat": False}, + ("transform.transform", {"type": 'T', "value": 'PRESS', "shift": True}, {"properties": [("mode", 'TIME_SLIDE')]}), ("wm.context_toggle", {"type": 'O', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.use_proportional_action')]}), @@ -2247,19 +2251,19 @@ def km_nla_editor(params): ("nla.split", {"type": 'Y', "value": 'PRESS'}, None), ("nla.mute_toggle", {"type": 'H', "value": 'PRESS'}, None), ("nla.swap", {"type": 'F', "value": 'PRESS', "alt": True}, None), - ("nla.move_up", {"type": 'PAGE_UP', "value": 'PRESS'}, None), - ("nla.move_down", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None), + ("nla.move_up", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None), + ("nla.move_down", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None), ("nla.apply_scale", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ("nla.clear_scale", {"type": 'S', "value": 'PRESS', "alt": True}, None), op_menu_pie("NLA_MT_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}), ("nla.fmodifier_add", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True}, None), - ("transform.transform", {"type": 'G', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'G', "value": 'PRESS'}, {"properties": [("mode", 'TRANSLATION')]}), ("transform.transform", {"type": params.select_tweak, "value": 'ANY'}, {"properties": [("mode", 'TRANSLATION')]}), - ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'E', "value": 'PRESS'}, {"properties": [("mode", 'TIME_EXTEND')]}), - ("transform.transform", {"type": 'S', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'S', "value": 'PRESS'}, {"properties": [("mode", 'TIME_SCALE')]}), ("marker.add", {"type": 'M', "value": 'PRESS'}, None), ("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), @@ -2304,9 +2308,9 @@ def km_text(params): {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), ("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), ]) @@ -2318,9 +2322,9 @@ def km_text(params): items.extend([ ("text.new", {"type": 'N', "value": 'PRESS', "ctrl": True}, None), - ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, + ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, + ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), ]) @@ -2336,16 +2340,16 @@ def km_text(params): ("text.cut", {"type": 'DEL', "value": 'PRESS', "shift": True}, None), ("text.copy", {"type": 'INSERT', "value": 'PRESS', "ctrl": True}, None), ("text.paste", {"type": 'INSERT', "value": 'PRESS', "shift": True}, None), - ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True}, None), + ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("text.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ("text.select_line", {"type": 'A', "value": 'PRESS', "shift": True, "ctrl": True}, None), ("text.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None), - ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'UP')]}), - ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'DOWN')]}), - ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None), - ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None), + ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None), + ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None), ("text.comment_toggle", {"type": 'SLASH', "value": 'PRESS', "ctrl": True}, None), ("text.move", {"type": 'HOME', "value": 'PRESS'}, {"properties": [("type", 'LINE_BEGIN')]}), @@ -2355,21 +2359,21 @@ def km_text(params): {"properties": [("type", 'LINE_END')]}), ("text.move", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("type", 'LINE_END')]}), - ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True}, + ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True}, + ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("text.move", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("text.move", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("text.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), ("text.move", {"type": 'HOME', "value": 'PRESS', "ctrl": True}, {"properties": [("type", 'FILE_TOP')]}), @@ -2379,33 +2383,33 @@ def km_text(params): {"properties": [("type", 'LINE_BEGIN')]}), ("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True}, {"properties": [("type", 'LINE_END')]}), - ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), ("text.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("type", 'FILE_TOP')]}), ("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("type", 'FILE_BOTTOM')]}), - ("text.delete", {"type": 'DEL', "value": 'PRESS'}, + ("text.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS'}, + ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, + ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, + ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), @@ -2421,11 +2425,11 @@ def km_text(params): {"properties": [("lines", -1)]}), ("text.scroll", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, {"properties": [("lines", 1)]}), - ("text.line_break", {"type": 'RET', "value": 'PRESS'}, None), - ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None), - ("text.line_number", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None), + ("text.line_break", {"type": 'RET', "value": 'PRESS', "repeat": True}, None), + ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "repeat": True}, None), + ("text.line_number", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None), op_menu("TEXT_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}), - ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None), + ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None), ]) return keymap @@ -2503,17 +2507,17 @@ def km_sequencer(params): ("sequencer.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("sequencer.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), ("sequencer.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None), - ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("next", True), ("center", False)]}), - ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("next", False), ("center", False)]}), - ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True}, + ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("next", True), ("center", True)]}), - ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True}, + ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("next", False), ("center", True)]}), - ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, + ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("side", 'LEFT')]}), - ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, + ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("side", 'RIGHT')]}), ("sequencer.gap_remove", {"type": 'BACK_SPACE', "value": 'PRESS'}, {"properties": [("all", False)]}), @@ -2543,8 +2547,8 @@ def km_sequencer(params): ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS' if params.legacy else 'CLICK', "ctrl": True, "shift": True}, {"properties": [("side_of_frame", True), ("linked_time", True), ("extend", True)]}), - ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS'}, {"properties": [("extend", False)]}), ("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True}, @@ -2565,9 +2569,9 @@ def km_sequencer(params): ("sequencer.slip", {"type": 'S', "value": 'PRESS'}, None), ("wm.context_set_int", {"type": 'O', "value": 'PRESS'}, {"properties": [("data_path", 'scene.sequence_editor.overlay_frame'), ("value", 0)]}), - ("transform.seq_slide", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.seq_slide", {"type": 'G', "value": 'PRESS'}, None), ("transform.seq_slide", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.transform", {"type": 'E', "value": 'PRESS', "repeat": False}, + ("transform.transform", {"type": 'E', "value": 'PRESS'}, {"properties": [("mode", 'TIME_EXTEND')]}), ("marker.add", {"type": 'M', "value": 'PRESS'}, None), ("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), @@ -2623,9 +2627,9 @@ def km_console(_params): ) items.extend([ - ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True}, + ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True}, + ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), ("console.move", {"type": 'HOME', "value": 'PRESS'}, {"properties": [("type", 'LINE_BEGIN')]}), @@ -2635,27 +2639,27 @@ def km_console(_params): {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), ("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), - ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("reverse", True)]}), - ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("reverse", False)]}), - ("console.delete", {"type": 'DEL', "value": 'PRESS'}, + ("console.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS'}, - {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, + ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, + ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True}, + {"properties": [("type", 'PREVIOUS_CHARACTER')], "repeat": True}), + ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True}, + ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), ("console.clear_line", {"type": 'RET', "value": 'PRESS', "shift": True}, None), ("console.clear_line", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "shift": True}, None), @@ -2668,12 +2672,12 @@ def km_console(_params): ("console.paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), ("console.select_set", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), ("console.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None), - ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, + ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("text", '\t')]}), - ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None), - ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None), + ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None), + ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None), *_template_items_context_menu("CONSOLE_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}), - ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None), + ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None), ]) return keymap @@ -2693,9 +2697,9 @@ def km_clip(_params): sidebar_key={"type": 'N', "value": 'PRESS'}, ), ("clip.open", {"type": 'O', "value": 'PRESS', "alt": True}, None), - ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, + ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("backwards", True), ("sequence", False)]}), - ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, + ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("backwards", False), ("sequence", False)]}), ("clip.track_markers", {"type": 'T', "value": 'PRESS', "ctrl": True}, {"properties": [("backwards", False), ("sequence", True)]}), @@ -2730,8 +2734,8 @@ def km_clip_editor(params): ("clip.view_zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), ("clip.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None), ("clip.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None), - ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), - ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), + ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), + ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), ("clip.view_zoom_ratio", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True}, {"properties": [("ratio", 8.0)]}), ("clip.view_zoom_ratio", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True}, @@ -2758,13 +2762,13 @@ def km_clip_editor(params): ("clip.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), ("clip.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("clip.view_ndof", {"type": 'NDOF_MOTION', "value": 'ANY'}, None), - ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("position", 'PATHSTART')]}), - ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("position", 'PATHEND')]}), - ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True}, + ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True}, {"properties": [("position", 'FAILEDPREV')]}), - ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True}, + ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True}, {"properties": [("position", 'PATHSTART')]}), ("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), ("clip.select", {"type": params.select_mouse, "value": 'PRESS'}, @@ -2807,10 +2811,10 @@ def km_clip_editor(params): {"properties": [("data_path", 'space_data.show_marker_search')]}), ("wm.context_toggle", {"type": 'M', "value": 'PRESS'}, {"properties": [("data_path", 'space_data.use_mute_footage')]}), - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), ("clip.clear_track_path", {"type": 'T', "value": 'PRESS', "alt": True}, {"properties": [("action", 'REMAINED'), ("clear_active", False)]}), ("clip.clear_track_path", {"type": 'T', "value": 'PRESS', "shift": True}, @@ -2864,10 +2868,10 @@ def km_clip_graph_editor(params): {"properties": [("action", 'ALL'), ("clear_active", True)]}), ("clip.graph_disable_markers", {"type": 'D', "value": 'PRESS', "shift": True}, {"properties": [("action", 'TOGGLE')]}), - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), ]) if params.select_mouse == 'LEFTMOUSE' and not params.legacy: @@ -2914,17 +2918,17 @@ def km_frames(params): items.extend([ # Frame offsets - ("screen.frame_offset", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("screen.frame_offset", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("delta", -1)]}), - ("screen.frame_offset", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("screen.frame_offset", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("delta", 1)]}), - ("screen.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("screen.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("end", True)]}), - ("screen.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("screen.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("end", False)]}), - ("screen.keyframe_jump", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("screen.keyframe_jump", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("next", True)]}), - ("screen.keyframe_jump", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("screen.keyframe_jump", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("next", False)]}), ("screen.keyframe_jump", {"type": 'MEDIA_LAST', "value": 'PRESS'}, {"properties": [("next", True)]}), @@ -2940,29 +2944,29 @@ def km_frames(params): # New playback if params.spacebar_action in {'TOOL', 'SEARCH'}: items.append( - ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True, "repeat": False}, None), + ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None), ) elif params.spacebar_action == 'PLAY': items.append( - ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "repeat": False}, None), + ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS'}, None), ) else: assert False items.extend([ - ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": False}, + ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("reverse", True)]}), ]) else: # Old playback items.extend([ - ("screen.frame_offset", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("screen.frame_offset", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("delta", 10)]}), - ("screen.frame_offset", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("screen.frame_offset", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("delta", -10)]}), - ("screen.frame_jump", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("screen.frame_jump", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("end", True)]}), - ("screen.frame_jump", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("screen.frame_jump", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("end", False)]}), ("screen.animation_play", {"type": 'A', "value": 'PRESS', "alt": True}, None), ("screen.animation_play", {"type": 'A', "value": 'PRESS', "shift": True, "alt": True}, @@ -3048,9 +3052,9 @@ def km_animation_channels(params): ("anim.channels_collapse", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, {"properties": [("all", False)]}), # Move. - ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'UP')]}), - ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'DOWN')]}), ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, {"properties": [("direction", 'TOP')]}), @@ -3135,8 +3139,8 @@ def _grease_pencil_selection(params): # Select grouped ("gpencil.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None), # Select more/less - ("gpencil.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("gpencil.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("gpencil.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("gpencil.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ] @@ -3208,17 +3212,17 @@ def km_grease_pencil_stroke_edit_mode(params): # Move to layer op_menu("GPENCIL_MT_move_to_layer", {"type": 'M', "value": 'PRESS'}), # Transform tools - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), - ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True, "repeat": False}, None), - ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True, "repeat": False}, None), - ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True, "repeat": False}, None), - ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True, "repeat": False}, None), - ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False}, + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), + ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), + ("transform.bend", {"type": 'W', "value": 'PRESS', "shift": True}, None), + ("transform.tosphere", {"type": 'S', "value": 'PRESS', "shift": True, "alt": True}, None), + ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), + ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True}, {"properties": [("mode", 'GPENCIL_SHRINKFATTEN')]}), - ("transform.transform", {"type": 'F', "value": 'PRESS', "shift": True, "repeat": False}, + ("transform.transform", {"type": 'F', "value": 'PRESS', "shift": True}, {"properties": [("mode", 'GPENCIL_OPACITY')]}), # Proportional editing. *_template_items_proportional_editing(connected=True), @@ -3912,13 +3916,13 @@ def km_pose(params): {"properties": [("flipped", True)]}), *_template_items_select_actions(params, "pose.select_all"), ("pose.select_parent", {"type": 'P', "value": 'PRESS', "shift": True}, None), - ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", False)]}), - ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True}, + ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", True)]}), - ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", False)]}), - ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, + ("pose.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", True)]}), ("pose.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), ("pose.select_linked_pick", {"type": 'L', "value": 'PRESS'}, None), @@ -3935,7 +3939,7 @@ def km_pose(params): ("armature.layers_show_all", {"type": 'ACCENT_GRAVE', "value": 'PRESS', "ctrl": True}, None), ("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": True}, None), ("pose.bone_layers", {"type": 'M', "value": 'PRESS'}, None), - ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True, "repeat": False}, None), + ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True}, None), ("anim.keyframe_insert_menu", {"type": 'I', "value": 'PRESS'}, None), ("anim.keyframe_delete_v3d", {"type": 'I', "value": 'PRESS', "alt": True}, None), ("anim.keying_set_active_set", {"type": 'I', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), @@ -3973,17 +3977,17 @@ def km_object_mode(params): ("wm.context_toggle", {"type": 'O', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.use_proportional_edit_objects')]}), *_template_items_select_actions(params, "object.select_all"), - ("object.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("object.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("object.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("object.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("object.select_linked", {"type": 'L', "value": 'PRESS', "shift": True}, None), ("object.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None), - ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", False)]}), - ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True}, + ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", True)]}), - ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", False)]}), - ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, + ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", True)]}), ("object.parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None), ("object.parent_clear", {"type": 'P', "value": 'PRESS', "alt": True}, None), @@ -4081,10 +4085,10 @@ def km_paint_curve(params): ("paintcurve.delete_point", {"type": 'DEL', "value": 'PRESS'}, None), ("paintcurve.draw", {"type": 'RET', "value": 'PRESS'}, None), ("paintcurve.draw", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None), - ("transform.translate", {"type": 'G', "value": 'PRESS', "repeat": False}, None), + ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), - ("transform.rotate", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("transform.resize", {"type": 'S', "value": 'PRESS', "repeat": False}, None), + ("transform.rotate", {"type": 'R', "value": 'PRESS'}, None), + ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), ]) return keymap @@ -4104,8 +4108,8 @@ def km_curve(params): ("curve.vertex_add", {"type": params.action_mouse, "value": 'CLICK', "ctrl": True}, None), *_template_items_select_actions(params, "curve.select_all"), ("curve.select_row", {"type": 'R', "value": 'PRESS', "shift": True}, None), - ("curve.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("curve.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("curve.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("curve.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("curve.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), ("curve.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None), ("curve.select_linked_pick", {"type": 'L', "value": 'PRESS'}, @@ -4124,8 +4128,8 @@ def km_curve(params): ("curve.dissolve_verts", {"type": 'X', "value": 'PRESS', "ctrl": True}, None), ("curve.dissolve_verts", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, None), ("curve.tilt_clear", {"type": 'T', "value": 'PRESS', "alt": True}, None), - ("transform.tilt", {"type": 'T', "value": 'PRESS', "ctrl": True, "repeat": False}, None), - ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False}, + ("transform.tilt", {"type": 'T', "value": 'PRESS', "ctrl": True}, None), + ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True}, {"properties": [("mode", 'CURVE_SHRINKFATTEN')]}), ("curve.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None), ("curve.hide", {"type": 'H', "value": 'PRESS'}, @@ -4208,9 +4212,9 @@ def km_image_paint(params): ("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None), ("paint.grab_clone", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None), ("paint.sample_color", {"type": 'S', "value": 'PRESS'}, None), - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("image_paint", color=True, zoom=True, rotation=True, secondary_rotation=True), ("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, @@ -4257,9 +4261,9 @@ def km_vertex_paint(params): ("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None), ("paint.sample_color", {"type": 'S', "value": 'PRESS'}, None), ("paint.vertex_color_set", {"type": 'K', "value": 'PRESS', "shift": True}, None), - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("vertex_paint", color=True, rotation=True), ("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, @@ -4312,9 +4316,9 @@ def km_weight_paint(params): ("paint.weight_gradient", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True, "alt": True}, {"properties": [("type", 'RADIAL')]}), ("paint.weight_set", {"type": 'K', "value": 'PRESS', "shift": True}, None), - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("weight_paint"), ("wm.radial_control", {"type": 'F', "value": 'PRESS', "ctrl": True}, @@ -4376,9 +4380,9 @@ def km_sculpt(params): {"properties": [("mode", "SHRINK")]}), # Subdivision levels *_template_items_object_subdivision_set(), - ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("level", 1), ("relative", True)]}), - ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("level", -1), ("relative", True)]}), # Mask ("paint.mask_flood_fill", {"type": 'M', "value": 'PRESS', "alt": True}, @@ -4404,9 +4408,9 @@ def km_sculpt(params): # Color ("sculpt.sample_color", {"type": 'S', "value": 'PRESS'}, None), # Brush properties - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("sculpt", rotation=True), # Stencil @@ -4501,10 +4505,10 @@ def km_mesh(params): ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True}, {"properties": [("use_fill", True)]}), *_template_items_select_actions(params, "mesh.select_all"), - ("mesh.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("mesh.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), - ("mesh.select_next_item", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "ctrl": True}, None), - ("mesh.select_prev_item", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "ctrl": True}, None), + ("mesh.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("mesh.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("mesh.select_next_item", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None), + ("mesh.select_prev_item", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None), ("mesh.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), ("mesh.select_linked_pick", {"type": 'L', "value": 'PRESS'}, {"properties": [("deselect", False)]}), @@ -4525,7 +4529,7 @@ def km_mesh(params): {"properties": [("inside", True)]}), ("view3d.edit_mesh_extrude_move_normal", {"type": 'E', "value": 'PRESS'}, None), op_menu("VIEW3D_MT_edit_mesh_extrude", {"type": 'E', "value": 'PRESS', "alt": True}), - ("transform.edge_crease", {"type": 'E', "value": 'PRESS', "shift": True, "repeat": False}, None), + ("transform.edge_crease", {"type": 'E', "value": 'PRESS', "shift": True}, None), ("mesh.fill", {"type": 'F', "value": 'PRESS', "alt": True}, None), ("mesh.quads_convert_to_tris", {"type": 'T', "value": 'PRESS', "ctrl": True}, {"properties": [("quad_method", 'BEAUTY'), ("ngon_method", 'BEAUTY')]}), @@ -4539,7 +4543,7 @@ def km_mesh(params): ("mesh.rip_edge_move", {"type": 'D', "value": 'PRESS', "alt": True}, None), op_menu("VIEW3D_MT_edit_mesh_merge", {"type": 'M', "value": 'PRESS'}), op_menu("VIEW3D_MT_edit_mesh_split", {"type": 'M', "value": 'PRESS', "alt": True}), - ("transform.shrink_fatten", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False}, None), + ("transform.shrink_fatten", {"type": 'S', "value": 'PRESS', "alt": True}, None), ("mesh.edge_face_add", {"type": 'F', "value": 'PRESS'}, None), ("mesh.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), op_menu("VIEW3D_MT_mesh_add", {"type": 'A', "value": 'PRESS', "shift": True}), @@ -4547,7 +4551,7 @@ def km_mesh(params): ("mesh.split", {"type": 'Y', "value": 'PRESS'}, None), ("mesh.vert_connect_path", {"type": 'J', "value": 'PRESS'}, None), ("mesh.point_normals", {"type": 'L', "value": 'PRESS', "alt": True}, None), - ("transform.vert_slide", {"type": 'V', "value": 'PRESS', "shift": True, "repeat": False}, None), + ("transform.vert_slide", {"type": 'V', "value": 'PRESS', "shift": True}, None), ("mesh.dupli_extrude_cursor", {"type": params.action_mouse, "value": 'CLICK', "ctrl": True}, {"properties": [("rotate_source", True)]}), ("mesh.dupli_extrude_cursor", {"type": params.action_mouse, "value": 'CLICK', "shift": True, "ctrl": True}, @@ -4639,8 +4643,8 @@ def km_armature(params): {"properties": [("direction", 'CHILD'), ("extend", False)]}), ("armature.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, {"properties": [("direction", 'CHILD'), ("extend", True)]}), - ("armature.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("armature.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("armature.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("armature.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("armature.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None), ("armature.select_linked_pick", {"type": 'L', "value": 'PRESS'}, {"properties": [("deselect", False)]}), @@ -4669,10 +4673,10 @@ def km_armature(params): ("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": True}, None), ("armature.bone_layers", {"type": 'M', "value": 'PRESS'}, None), # Special transforms. - ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True, "repeat": False}, None), - ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True, "repeat": False}, + ("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": True, "alt": True}, None), + ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True}, {"properties": [("mode", 'BONE_ENVELOPE')]}), - ("transform.transform", {"type": 'R', "value": 'PRESS', "ctrl": True, "repeat": False}, + ("transform.transform", {"type": 'R', "value": 'PRESS', "ctrl": True}, {"properties": [("mode", 'BONE_ROLL')]}), # Menus. *_template_items_context_menu("VIEW3D_MT_armature_context_menu", params.context_menu_event), @@ -4720,8 +4724,8 @@ def km_lattice(params): items.extend([ *_template_items_select_actions(params, "lattice.select_all"), - ("lattice.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("lattice.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("lattice.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("lattice.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("object.vertex_parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None), ("lattice.flip", {"type": 'F', "value": 'PRESS', "alt": True}, None), op_menu("VIEW3D_MT_hook", {"type": 'H', "value": 'PRESS', "ctrl": True}), @@ -4743,8 +4747,8 @@ def km_particle(params): items.extend([ *_template_items_select_actions(params, "particle.select_all"), - ("particle.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), - ("particle.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), + ("particle.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("particle.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("particle.select_linked_pick", {"type": 'L', "value": 'PRESS'}, {"properties": [("deselect", False)]}), ("particle.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True}, @@ -4796,71 +4800,71 @@ def km_font(params): {"properties": [("style", 'UNDERLINE')]}), ("font.style_toggle", {"type": 'P', "value": 'PRESS', "ctrl": True}, {"properties": [("style", 'SMALL_CAPS')]}), - ("font.delete", {"type": 'DEL', "value": 'PRESS'}, + ("font.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_OR_SELECTION')]}), - ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, + ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS'}, + ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_OR_SELECTION')]}), - ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, + ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_OR_SELECTION')]}), - ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True}, + ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), ("font.move", {"type": 'HOME', "value": 'PRESS'}, {"properties": [("type", 'LINE_BEGIN')]}), ("font.move", {"type": 'END', "value": 'PRESS'}, {"properties": [("type", 'LINE_END')]}), - ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True}, + ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True}, + ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("font.move", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("font.move", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("font.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), ("font.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True}, {"properties": [("type", 'LINE_BEGIN')]}), ("font.move_select", {"type": 'END', "value": 'PRESS', "shift": True}, {"properties": [("type", 'LINE_END')]}), - ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), - ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", -1)]}), - ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", -1)]}), ("font.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ("font.text_copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), ("font.text_cut", {"type": 'X', "value": 'PRESS', "ctrl": True}, None), ("font.text_paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), - ("font.line_break", {"type": 'RET', "value": 'PRESS'}, None), - ("font.text_insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None), - ("font.text_insert", {"type": 'BACK_SPACE', "value": 'PRESS', "alt": True}, + ("font.line_break", {"type": 'RET', "value": 'PRESS', "repeat": True}, None), + ("font.text_insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None), + ("font.text_insert", {"type": 'BACK_SPACE', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("accent", True)]}), *_template_items_context_menu("VIEW3D_MT_edit_font_context_menu", params.context_menu_event), ]) @@ -4977,28 +4981,28 @@ def km_transform_modal_map(_params): ("CONFIRM", {"type": 'SPACE', "value": 'PRESS', "any": True}, None), ("CANCEL", {"type": 'RIGHTMOUSE', "value": 'PRESS', "any": True}, None), ("CANCEL", {"type": 'ESC', "value": 'PRESS', "any": True}, None), - ("AXIS_X", {"type": 'X', "value": 'PRESS', "repeat": False}, None), - ("AXIS_Y", {"type": 'Y', "value": 'PRESS', "repeat": False}, None), - ("AXIS_Z", {"type": 'Z', "value": 'PRESS', "repeat": False}, None), - ("PLANE_X", {"type": 'X', "value": 'PRESS', "shift": True, "repeat": False}, None), - ("PLANE_Y", {"type": 'Y', "value": 'PRESS', "shift": True, "repeat": False}, None), - ("PLANE_Z", {"type": 'Z', "value": 'PRESS', "shift": True, "repeat": False}, None), - ("CONS_OFF", {"type": 'C', "value": 'PRESS', "repeat": False}, None), - ("TRANSLATE", {"type": 'G', "value": 'PRESS', "repeat": False}, None), - ("ROTATE", {"type": 'R', "value": 'PRESS', "repeat": False}, None), - ("RESIZE", {"type": 'S', "value": 'PRESS', "repeat": False}, None), - ("SNAP_TOGGLE", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": False}, None), + ("AXIS_X", {"type": 'X', "value": 'PRESS'}, None), + ("AXIS_Y", {"type": 'Y', "value": 'PRESS'}, None), + ("AXIS_Z", {"type": 'Z', "value": 'PRESS'}, None), + ("PLANE_X", {"type": 'X', "value": 'PRESS', "shift": True}, None), + ("PLANE_Y", {"type": 'Y', "value": 'PRESS', "shift": True}, None), + ("PLANE_Z", {"type": 'Z', "value": 'PRESS', "shift": True}, None), + ("CONS_OFF", {"type": 'C', "value": 'PRESS'}, None), + ("TRANSLATE", {"type": 'G', "value": 'PRESS'}, None), + ("ROTATE", {"type": 'R', "value": 'PRESS'}, None), + ("RESIZE", {"type": 'S', "value": 'PRESS'}, None), + ("SNAP_TOGGLE", {"type": 'TAB', "value": 'PRESS', "shift": True}, None), ("SNAP_INV_ON", {"type": 'LEFT_CTRL', "value": 'PRESS', "any": True}, None), ("SNAP_INV_OFF", {"type": 'LEFT_CTRL', "value": 'RELEASE', "any": True}, None), ("SNAP_INV_ON", {"type": 'RIGHT_CTRL', "value": 'PRESS', "any": True}, None), ("SNAP_INV_OFF", {"type": 'RIGHT_CTRL', "value": 'RELEASE', "any": True}, None), - ("ADD_SNAP", {"type": 'A', "value": 'PRESS', "repeat": False}, None), - ("ADD_SNAP", {"type": 'A', "value": 'PRESS', "ctrl": True, "repeat": False}, None), - ("REMOVE_SNAP", {"type": 'A', "value": 'PRESS', "alt": True, "repeat": False}, None), - ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None), - ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None), - ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None), - ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None), + ("ADD_SNAP", {"type": 'A', "value": 'PRESS'}, None), + ("ADD_SNAP", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), + ("REMOVE_SNAP", {"type": 'A', "value": 'PRESS', "alt": True}, None), + ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None), + ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None), + ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None), + ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None), ("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None), ("PROPORTIONAL_SIZE_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None), ("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None), @@ -5006,17 +5010,17 @@ def km_transform_modal_map(_params): ("PROPORTIONAL_SIZE", {"type": 'TRACKPADPAN', "value": 'ANY'}, None), ("EDGESLIDE_EDGE_NEXT", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "alt": True}, None), ("EDGESLIDE_PREV_NEXT", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "alt": True}, None), - ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None), - ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None), - ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None), - ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None), + ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None), + ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None), + ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None), + ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None), ("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None), ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None), ("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None), ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "shift": True}, None), - ("INSERTOFS_TOGGLE_DIR", {"type": 'T', "value": 'PRESS', "repeat": False}, None), - ("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "repeat": False}, None), - ("AUTOCONSTRAINPLANE", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "repeat": False, "shift": True}, None), + ("INSERTOFS_TOGGLE_DIR", {"type": 'T', "value": 'PRESS'}, None), + ("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), + ("AUTOCONSTRAINPLANE", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), ]) return keymap @@ -5069,9 +5073,9 @@ def km_view3d_gesture_circle(_params): ("DESELECT", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), ("NOP", {"type": 'MIDDLEMOUSE', "value": 'RELEASE', "any": True}, None), ("SUBTRACT", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None), - ("SUBTRACT", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), + ("SUBTRACT", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), ("ADD", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None), - ("ADD", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), + ("ADD", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), ("SIZE", {"type": 'TRACKPADPAN', "value": 'ANY'}, None), ]) @@ -5096,7 +5100,7 @@ def km_gesture_border(_params): ("SELECT", {"type": 'LEFTMOUSE', "value": 'RELEASE', "any": True}, None), ("BEGIN", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), ("DESELECT", {"type": 'MIDDLEMOUSE', "value": 'RELEASE'}, None), - ("MOVE", {"type": 'SPACE', "value": 'ANY', "repeat": False, "any": True}, None), + ("MOVE", {"type": 'SPACE', "value": 'ANY', "any": True}, None), ]) return keymap @@ -5135,9 +5139,9 @@ def km_gesture_straight_line(_params): ("CANCEL", {"type": 'RIGHTMOUSE', "value": 'ANY', "any": True}, None), ("BEGIN", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), ("SELECT", {"type": 'LEFTMOUSE', "value": 'RELEASE', "any": True}, None), - ("MOVE", {"type": 'SPACE', "value": 'ANY', "repeat": False, "any": True}, None), - ("SNAP", {"type": 'LEFT_CTRL', "value": 'ANY', "any": True, "repeat": False}, None), - ("FLIP", {"type": 'F', "value": 'PRESS', "any": True, "repeat": False}, None), + ("MOVE", {"type": 'SPACE', "value": 'ANY', "any": True}, None), + ("SNAP", {"type": 'LEFT_CTRL', "value": 'ANY', "any": True}, None), + ("FLIP", {"type": 'F', "value": 'PRESS', "any": True}, None), ]) return keymap @@ -5152,7 +5156,7 @@ def km_gesture_lasso(_params): ) items.extend([ - ("MOVE", {"type": 'SPACE', "value": 'ANY', "repeat": False, "any": True}, None), + ("MOVE", {"type": 'SPACE', "value": 'ANY', "any": True}, None), ]) return keymap @@ -5290,25 +5294,25 @@ def km_view3d_fly_modal(_params): ("CONFIRM", {"type": 'RET', "value": 'PRESS', "any": True}, None), ("CONFIRM", {"type": 'SPACE', "value": 'PRESS', "any": True}, None), ("CONFIRM", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "any": True}, None), - ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True}, None), - ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True}, None), + ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True, "repeat": True}, None), + ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True, "repeat": True}, None), ("ACCELERATE", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "any": True}, None), ("DECELERATE", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "any": True}, None), ("CONFIRM", {"type": 'TRACKPADPAN', "value": 'ANY'}, None), ("PAN_ENABLE", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "any": True}, None), ("PAN_DISABLE", {"type": 'MIDDLEMOUSE', "value": 'RELEASE', "any": True}, None), - ("FORWARD", {"type": 'W', "value": 'PRESS'}, None), - ("BACKWARD", {"type": 'S', "value": 'PRESS'}, None), - ("LEFT", {"type": 'A', "value": 'PRESS'}, None), - ("RIGHT", {"type": 'D', "value": 'PRESS'}, None), - ("UP", {"type": 'E', "value": 'PRESS'}, None), - ("DOWN", {"type": 'Q', "value": 'PRESS'}, None), - ("UP", {"type": 'R', "value": 'PRESS'}, None), - ("DOWN", {"type": 'F', "value": 'PRESS'}, None), - ("FORWARD", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("BACKWARD", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), - ("LEFT", {"type": 'LEFT_ARROW', "value": 'PRESS'}, None), - ("RIGHT", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, None), + ("FORWARD", {"type": 'W', "value": 'PRESS', "repeat": True}, None), + ("BACKWARD", {"type": 'S', "value": 'PRESS', "repeat": True}, None), + ("LEFT", {"type": 'A', "value": 'PRESS', "repeat": True}, None), + ("RIGHT", {"type": 'D', "value": 'PRESS', "repeat": True}, None), + ("UP", {"type": 'E', "value": 'PRESS', "repeat": True}, None), + ("DOWN", {"type": 'Q', "value": 'PRESS', "repeat": True}, None), + ("UP", {"type": 'R', "value": 'PRESS', "repeat": True}, None), + ("DOWN", {"type": 'F', "value": 'PRESS', "repeat": True}, None), + ("FORWARD", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("BACKWARD", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), + ("LEFT", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, None), + ("RIGHT", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, None), ("AXIS_LOCK_X", {"type": 'X', "value": 'PRESS'}, None), ("AXIS_LOCK_Z", {"type": 'Z', "value": 'PRESS'}, None), ("PRECISION_ENABLE", {"type": 'LEFT_ALT', "value": 'PRESS', "any": True}, None), @@ -5366,8 +5370,8 @@ def km_view3d_walk_modal(_params): ("JUMP_STOP", {"type": 'V', "value": 'RELEASE', "any": True}, None), ("TELEPORT", {"type": 'SPACE', "value": 'PRESS', "any": True}, None), ("TELEPORT", {"type": 'MIDDLEMOUSE', "value": 'ANY', "any": True}, None), - ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True}, None), - ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True}, None), + ("ACCELERATE", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "any": True, "repeat": True}, None), + ("DECELERATE", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "any": True, "repeat": True}, None), ("ACCELERATE", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "any": True}, None), ("DECELERATE", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "any": True}, None), ]) @@ -5687,9 +5691,9 @@ def km_image_editor_tool_uv_sculpt_stroke(params): {"properties": [("mode", 'INVERT')]}), ("sculpt.uv_sculpt_stroke", {"type": params.tool_mouse, "value": 'PRESS', "shift": True}, {"properties": [("mode", 'RELAX')]}), - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("uv_sculpt"), ]}, diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py index a3a5c853b29..b4cf52522ac 100644 --- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py +++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py @@ -237,7 +237,7 @@ def km_screen(params): ) items.extend([ - ("screen.repeat_last", {"type": 'G', "value": 'PRESS'}, None), + ("screen.repeat_last", {"type": 'G', "value": 'PRESS', "repeat": True}, None), # Animation ("screen.userpref_show", {"type": 'COMMA', "value": 'PRESS', "ctrl": True}, None), ("screen.animation_step", {"type": 'TIMER0', "value": 'ANY', "any": True}, None), @@ -256,8 +256,8 @@ def km_screen(params): ("file.execute", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None), ("file.cancel", {"type": 'ESC', "value": 'PRESS'}, None), # Undo - ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True}, None), - ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True}, None), + ("ed.undo", {"type": 'Z', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("ed.redo", {"type": 'Z', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, None), ("ed.undo_history", {"type": 'Z', "value": 'PRESS', "alt": True, "ctrl": True}, None), # Render ("render.view_cancel", {"type": 'ESC', "value": 'PRESS'}, None), @@ -344,8 +344,8 @@ def km_view2d(params): ("view2d.zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, None), ("view2d.zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True}, None), ("view2d.zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS', "alt": True}, None), - ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), - ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), + ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), + ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), ("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), ("view2d.smoothview", {"type": 'TIMER1', "value": 'ANY', "any": True}, None), # Scroll up/down, only when zoom is not available. @@ -379,16 +379,16 @@ def km_view2d_buttons_list(params): ("view2d.pan", {"type": 'TRACKPADPAN', "value": 'ANY'}, None), ("view2d.scroll_down", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None), ("view2d.scroll_up", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None), - ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("view2d.scroll_down", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("page", True)]}), - ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("view2d.scroll_up", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("page", True)]}), # Zoom ("view2d.zoom", {"type": 'RIGHTMOUSE', "value": 'PRESS', "alt": True}, None), ("view2d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None), ("view2d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), - ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), - ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), + ("view2d.zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), + ("view2d.zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), ("view2d.reset", {"type": 'A', "value": 'PRESS'}, None), ]) @@ -479,17 +479,21 @@ def km_outliner(params): {"properties": [("tweak", True), ("mode", "ADD")]}), ("outliner.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True}, {"properties": [("tweak", True), ("mode", "SUB")]}), - ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'UP')]}), - ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'UP')]}), + ("outliner.select_walk", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'UP'), ("extend", True)]}), - ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'DOWN')]}), - ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'DOWN')]}), + ("outliner.select_walk", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'DOWN'), ("extend", True)]}), - ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'LEFT')]}), - ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'LEFT')]}), + ("outliner.select_walk", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'LEFT'), ("toggle_all", True)]}), - ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, {"properties": [("direction", 'RIGHT')]}), - ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, + {"properties": [("direction", 'RIGHT')]}), + ("outliner.select_walk", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'RIGHT'), ("toggle_all", True)]}), ("outliner.item_openclose", {"type": 'LEFTMOUSE', "value": 'CLICK'}, {"properties": [("all", False)]}), @@ -505,9 +509,9 @@ def km_outliner(params): ("outliner.show_hierarchy", {"type": 'A', "value": 'PRESS'}, None), ("outliner.show_active", {"type": 'PERIOD', "value": 'PRESS'}, None), ("outliner.show_active", {"type": 'F', "value": 'PRESS'}, None), - ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("outliner.scroll_page", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("up", False)]}), - ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("outliner.scroll_page", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("up", True)]}), ("outliner.show_one_level", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), ("outliner.show_one_level", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, @@ -570,8 +574,8 @@ def km_uv_editor(params): ("uv.select_loop", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, {"properties": [("extend", False)]}), ("uv.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), - ("uv.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("uv.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("uv.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("uv.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("uv.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), ("uv.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("uv.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), @@ -649,9 +653,9 @@ def km_view3d(params): ("view3d.zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None), ("view3d.zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), # Numpad - ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, + ("view3d.zoom", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, {"properties": [("delta", 1)]}), - ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, + ("view3d.zoom", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, {"properties": [("delta", -1)]}), ("view3d.zoom", {"type": 'WHEELINMOUSE', "value": 'PRESS'}, {"properties": [("delta", 1)]}), @@ -661,9 +665,9 @@ def km_view3d(params): {"properties": [("delta", 1)]}), ("view3d.zoom", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True}, {"properties": [("delta", -1)]}), - ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True}, + ("view3d.dolly", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True}, + ("view3d.dolly", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("delta", -1)]}), ("view3d.view_all", {"type": 'A', "value": 'PRESS'}, {"properties": [("center", False)]}), @@ -777,8 +781,8 @@ def km_mask_editing(params): {"properties": [("mode", 'ADD')]}), ("mask.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True}, {"properties": [("mode", 'SUB')]}), - ("mask.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("mask.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("mask.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("mask.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("mask.hide_view_clear", {"type": 'H', "value": 'PRESS', "alt": True}, None), ("mask.hide_view_set", {"type": 'H', "value": 'PRESS', "ctrl": True}, {"properties": [("unselected", False)]}), @@ -903,8 +907,8 @@ def km_graph_editor(params): {"properties":[("tweak", True), ("axis_range", False), ("mode", 'ADD')]}), ("graph.select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True}, {"properties":[("tweak", True), ("axis_range", False), ("mode", 'SUB')]}), - ("graph.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("graph.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("graph.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("graph.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("graph.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), op_menu("GRAPH_MT_delete", {"type": 'BACK_SPACE', "value": 'PRESS'}), op_menu("GRAPH_MT_delete", {"type": 'DEL', "value": 'PRESS'}), @@ -982,8 +986,8 @@ def km_image(params): ("image.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None), ("image.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS', "alt": True}, None), ("image.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True}, None), - ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), - ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), + ("image.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), + ("image.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), ("image.view_zoom", {"type": 'RIGHTMOUSE', "value": 'PRESS', "alt": True}, None), ("image.view_zoom", {"type": 'TRACKPADZOOM', "value": 'ANY'}, None), ("image.view_zoom", {"type": 'TRACKPADPAN', "value": 'ANY', "ctrl": True}, None), @@ -1213,17 +1217,17 @@ def km_file_browser(params): ("wm.context_toggle", {"type": 'T', "value": 'PRESS'}, {"properties": [("data_path", 'space_data.show_region_toolbar')]}), ("file.bookmark_add", {"type": 'B', "value": 'PRESS', "ctrl": True}, None), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", 1)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", 10)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", 100)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", -1)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", -10)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", -100)]}), *_template_items_context_menu("FILEBROWSER_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}), ]) @@ -1301,17 +1305,17 @@ def km_file_browser_buttons(params): ) items.extend([ - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", 1)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", 10)]}), - ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", 100)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, {"properties": [("increment", -1)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("increment", -10)]}), - ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("file.filenum", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("increment", -100)]}), ]) @@ -1385,8 +1389,8 @@ def km_dopesheet(params): {"properties": [("mode", 'MARKERS_COLUMN')]}), ("action.select_column", {"type": 'K', "value": 'PRESS', "alt": True}, {"properties": [("mode", 'MARKERS_BETWEEN')]}), - ("action.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "ctrl": True}, None), - ("action.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "ctrl": True}, None), + ("action.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("action.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("action.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), ("action.frame_jump", {"type": 'G', "value": 'PRESS', "ctrl": True}, None), ("wm.context_menu_enum", {"type": 'X', "value": 'PRESS'}, @@ -1584,9 +1588,9 @@ def km_text(params): {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), ("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), ("text.new", {"type": 'N', "value": 'PRESS', "ctrl": True}, None), ]) @@ -1603,16 +1607,16 @@ def km_text(params): ("text.cut", {"type": 'DEL', "value": 'PRESS', "shift": True}, None), ("text.copy", {"type": 'INSERT', "value": 'PRESS', "ctrl": True}, None), ("text.paste", {"type": 'INSERT', "value": 'PRESS', "shift": True}, None), - ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True}, None), + ("text.duplicate_line", {"type": 'D', "value": 'PRESS', "ctrl": True, "repeat": True}, None), ("text.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ("text.select_line", {"type": 'A', "value": 'PRESS', "shift": True, "ctrl": True}, None), ("text.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None), - ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_lines", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'UP')]}), - ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_lines", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("direction", 'DOWN')]}), - ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None), - ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None), + ("text.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None), + ("text.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None), ("text.uncomment", {"type": 'D', "value": 'PRESS', "shift": True, "ctrl": True}, None), ("text.move", {"type": 'HOME', "value": 'PRESS'}, {"properties": [("type", 'LINE_BEGIN')]}), @@ -1622,21 +1626,21 @@ def km_text(params): {"properties": [("type", 'LINE_END')]}), ("text.move", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("type", 'LINE_END')]}), - ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True}, + ("text.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True}, + ("text.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("text.move", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("text.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("text.move", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("text.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("text.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), ("text.move", {"type": 'HOME', "value": 'PRESS', "ctrl": True}, {"properties": [("type", 'FILE_TOP')]}), @@ -1646,33 +1650,33 @@ def km_text(params): {"properties": [("type", 'LINE_BEGIN')]}), ("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True}, {"properties": [("type", 'LINE_END')]}), - ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("text.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, + ("text.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), ("text.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("type", 'FILE_TOP')]}), ("text.move_select", {"type": 'END', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("type", 'FILE_BOTTOM')]}), - ("text.delete", {"type": 'DEL', "value": 'PRESS'}, + ("text.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS'}, + ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, + ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, + ("text.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), ("text.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), @@ -1688,11 +1692,11 @@ def km_text(params): {"properties": [("lines", -1)]}), ("text.scroll", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, {"properties": [("lines", 1)]}), - ("text.line_break", {"type": 'RET', "value": 'PRESS'}, None), - ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS'}, None), + ("text.line_break", {"type": 'RET', "value": 'PRESS', "repeat": True}, None), + ("text.line_break", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "repeat": True}, None), *_template_items_context_menu("TEXT_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS', "any": True}), ("text.line_number", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None), - ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None), + ("text.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None), ]) return keymap @@ -1759,17 +1763,17 @@ def km_sequencer(params): ("sequencer.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("sequencer.view_selected", {"type": 'F', "value": 'PRESS'}, None), ("sequencer.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None), - ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("next", True), ("center", False)]}), - ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("next", False), ("center", False)]}), - ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True}, + ("sequencer.strip_jump", {"type": 'PAGE_UP', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("next", True), ("center", True)]}), - ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True}, + ("sequencer.strip_jump", {"type": 'PAGE_DOWN', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("next", False), ("center", True)]}), - ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, + ("sequencer.swap", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("side", 'LEFT')]}), - ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, + ("sequencer.swap", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("side", 'RIGHT')]}), ("sequencer.gap_remove", {"type": 'BACK_SPACE', "value": 'PRESS'}, {"properties": [("all", False)]}), @@ -1797,8 +1801,8 @@ def km_sequencer(params): {"properties": [("side_of_frame", True), ("linked_time", True)]}), ("sequencer.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("extend", True), ("side_of_frame", True), ("linked_time", True)]}), - ("sequencer.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("sequencer.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("sequencer.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("sequencer.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("sequencer.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, {"properties": [("extend", False)]}), ("sequencer.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, @@ -1860,9 +1864,9 @@ def km_console(params): ) items.extend([ - ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True}, + ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True}, + ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), ("console.move", {"type": 'HOME', "value": 'PRESS'}, {"properties": [("type", 'LINE_BEGIN')]}), @@ -1872,27 +1876,27 @@ def km_console(params): {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), ("wm.context_cycle_int", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", False)]}), - ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, + ("wm.context_cycle_int", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("data_path", 'space_data.font_size'), ("reverse", True)]}), - ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("console.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("console.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("console.history_cycle", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("reverse", True)]}), - ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("console.history_cycle", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("reverse", False)]}), - ("console.delete", {"type": 'DEL', "value": 'PRESS'}, + ("console.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS'}, - {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, + ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, + ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True}, + {"properties": [("type", 'PREVIOUS_CHARACTER')], "repeat": True}), + ("console.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True}, + ("console.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), ("console.clear_line", {"type": 'RET', "value": 'PRESS', "shift": True}, None), ("console.clear_line", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "shift": True}, None), @@ -1905,12 +1909,12 @@ def km_console(params): ("console.paste", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), ("console.select_set", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), ("console.select_word", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None), - ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, + ("console.insert", {"type": 'TAB', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("text", '\t')]}), - ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS'}, None), - ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True}, None), + ("console.indent_or_autocomplete", {"type": 'TAB', "value": 'PRESS', "repeat": True}, None), + ("console.unindent", {"type": 'TAB', "value": 'PRESS', "shift": True, "repeat": True}, None), *_template_items_context_menu("CONSOLE_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}), - ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True}, None), + ("console.insert", {"type": 'TEXTINPUT', "value": 'ANY', "any": True, "repeat": True}, None), ]) return keymap @@ -1928,9 +1932,9 @@ def km_clip(params): op_panel("TOPBAR_PT_name", {"type": 'RET', "value": 'PRESS'}, [("keep_open", False)]), ("wm.search_menu", {"type": 'TAB', "value": 'PRESS'}, None), ("clip.open", {"type": 'O', "value": 'PRESS', "alt": True}, None), - ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, + ("clip.track_markers", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("backwards", True), ("sequence", False)]}), - ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, + ("clip.track_markers", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("backwards", False), ("sequence", False)]}), ("clip.track_markers", {"type": 'T', "value": 'PRESS', "ctrl": True}, {"properties": [("backwards", False), ("sequence", True)]}), @@ -1965,8 +1969,8 @@ def km_clip_editor(params): ("clip.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS'}, None), ("clip.view_zoom_in", {"type": 'WHEELINMOUSE', "value": 'PRESS', "alt": True}, None), ("clip.view_zoom_out", {"type": 'WHEELOUTMOUSE', "value": 'PRESS', "alt": True}, None), - ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), - ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, None), + ("clip.view_zoom_in", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True}, None), + ("clip.view_zoom_out", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "repeat": True}, None), ("clip.view_zoom_ratio", {"type": 'NUMPAD_8', "value": 'PRESS', "ctrl": True}, {"properties": [("ratio", 8.0)]}), ("clip.view_zoom_ratio", {"type": 'NUMPAD_4', "value": 'PRESS', "ctrl": True}, @@ -1991,13 +1995,13 @@ def km_clip_editor(params): ("clip.view_selected", {"type": 'F', "value": 'PRESS'}, None), ("clip.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None), ("clip.view_ndof", {"type": 'NDOF_MOTION', "value": 'ANY'}, None), - ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("position", 'PATHSTART')]}), - ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("position", 'PATHEND')]}), - ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True}, + ("clip.frame_jump", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True}, {"properties": [("position", 'FAILEDPREV')]}), - ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True}, + ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True, "repeat": True}, {"properties": [("position", 'PATHSTART')]}), ("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), ("clip.select", {"type": 'LEFTMOUSE', "value": 'PRESS'}, @@ -2139,7 +2143,7 @@ def km_frames(params): {"properties": [("end", True)]}), ("screen.frame_jump", {"type": 'MEDIA_FIRST', "value": 'PRESS'}, {"properties": [("end", False)]}), - ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "repeat": False}, None), + ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS'}, None), ("screen.animation_cancel", {"type": 'ESC', "value": 'PRESS'}, None), ("screen.animation_play", {"type": 'MEDIA_PLAY', "value": 'PRESS'}, None), ("screen.animation_cancel", {"type": 'MEDIA_STOP', "value": 'PRESS'}, None), @@ -2214,9 +2218,9 @@ def km_animation_channels(params): ("anim.channels_collapse", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, {"properties": [("all", False)]}), # Move. - ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'UP')]}), - ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("anim.channels_move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'DOWN')]}), ("anim.channels_move", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, {"properties": [("direction", 'TOP')]}), @@ -2268,8 +2272,8 @@ def _grease_pencil_selection(params): # Select grouped ("gpencil.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None), # Select more/less - ("gpencil.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("gpencil.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("gpencil.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("gpencil.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ] @@ -2957,13 +2961,13 @@ def km_pose(params): ("pose.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("pose.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), ("pose.select_parent", {"type": 'UP_ARROW', "value": 'PRESS', "ctrl": True}, None), - ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", False)]}), - ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("pose.select_hierarchy", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", True)]}), - ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", False)]}), - ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("pose.select_hierarchy", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", True)]}), ("pose.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), ("pose.bone_layers", {"type": 'G', "value": 'PRESS'}, None), @@ -3007,16 +3011,16 @@ def km_object_mode(params): ("object.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), ("object.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("object.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), - ("object.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("object.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("object.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("object.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("object.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), - ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", False)]}), - ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True}, + ("object.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'PARENT'), ("extend", True)]}), - ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", False)]}), - ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, + ("object.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("direction", 'CHILD'), ("extend", True)]}), ("object.parent_set", {"type": 'P', "value": 'PRESS'}, None), @@ -3113,8 +3117,8 @@ def km_curve(params): ("curve.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("curve.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), ("curve.select_row", {"type": 'R', "value": 'PRESS', "shift": True}, None), - ("curve.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("curve.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("curve.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("curve.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("curve.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), ("curve.shortest_path_pick", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True, "shift": True}, None), ("curve.duplicate_move", {"type": 'D', "value": 'PRESS', "ctrl": True}, None), @@ -3208,9 +3212,9 @@ def km_image_paint(params): ("paint.sample_color", {"type": 'I', "value": 'PRESS'}, None), ("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None), ("paint.grab_clone", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("image_paint", color=True, zoom=True, rotation=True, secondary_rotation=True), ("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, @@ -3258,9 +3262,9 @@ def km_vertex_paint(params): ("paint.vertex_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("mode", 'INVERT')]}), ("paint.brush_colors_flip", {"type": 'X', "value": 'PRESS'}, None), - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("vertex_paint", color=True, rotation=True), ("brush.stencil_control", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, @@ -3303,9 +3307,9 @@ def km_weight_paint(params): items.extend([ ("paint.weight_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), ("paint.weight_sample_group", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, None), - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("weight_paint"), ("wm.context_toggle", {"type": 'M', "value": 'PRESS'}, @@ -3354,9 +3358,9 @@ def km_sculpt(params): {"properties": [("action", 'SHOW'), ("area", 'ALL')]}), # Subdivision levels *_template_items_object_subdivision_set(), - ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("object.subdivision_set", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("level", 1), ("relative", True)]}), - ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("object.subdivision_set", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("level", -1), ("relative", True)]}), # Mask ("paint.mask_flood_fill", {"type": 'A', "value": 'PRESS', "ctrl": True}, @@ -3379,9 +3383,9 @@ def km_sculpt(params): ("object.voxel_size_edit", {"type": 'R', "value": 'PRESS', "shift": True}, None), ("object.quadriflow_remesh", {"type": 'R', "value": 'PRESS', "ctrl": True, "alt": True}, None), # Brush properties - ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'LEFT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 0.9)]}), - ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, + ("brush.scale_size", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "repeat": True}, {"properties": [("scalar", 1.0 / 0.9)]}), *_template_paint_radial_control("sculpt", rotation=True), # Stencil @@ -3467,8 +3471,8 @@ def km_mesh(params): ("mesh.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), ("mesh.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("mesh.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), - ("mesh.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("mesh.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("mesh.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("mesh.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("mesh.select_linked", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, None), *_template_items_editmode_mesh_select_mode(params), @@ -3535,8 +3539,8 @@ def km_armature(params): ("armature.select_hierarchy", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, {"properties": [("direction", 'CHILD'), ("extend", True)]}), - ("armature.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("armature.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("armature.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("armature.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("armature.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None), ("armature.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, @@ -3608,8 +3612,8 @@ def km_lattice(params): ("lattice.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), ("lattice.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("lattice.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), - ("lattice.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("lattice.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("lattice.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("lattice.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("object.vertex_parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None), *_template_items_context_menu("VIEW3D_MT_edit_lattice_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}), ("wm.context_toggle", {"type": 'B', "value": 'PRESS'}, @@ -3639,8 +3643,8 @@ def km_particle(params): ("particle.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'SELECT')]}), ("particle.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True, "shift": True}, {"properties": [("action", 'DESELECT')]}), ("particle.select_all", {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), - ("particle.select_more", {"type": 'UP_ARROW', "value": 'PRESS'}, None), - ("particle.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS'}, None), + ("particle.select_more", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, None), + ("particle.select_less", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, None), ("particle.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, {"properties": [("deselect", False)]}), ("particle.select_linked_pick", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, @@ -3685,63 +3689,63 @@ def km_font(params): {"properties": [("style", 'UNDERLINE')]}), ("font.style_toggle", {"type": 'P', "value": 'PRESS', "ctrl": True}, {"properties": [("style", 'SMALL_CAPS')]}), - ("font.delete", {"type": 'DEL', "value": 'PRESS'}, + ("font.delete", {"type": 'DEL', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_OR_SELECTION')]}), - ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, + ("font.delete", {"type": 'DEL', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS'}, + ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_OR_SELECTION')]}), - ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, + ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_OR_SELECTION')]}), - ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True}, + ("font.delete", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), ("font.move", {"type": 'HOME', "value": 'PRESS'}, {"properties": [("type", 'LINE_BEGIN')]}), ("font.move", {"type": 'END', "value": 'PRESS'}, {"properties": [("type", 'LINE_END')]}), - ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True}, + ("font.move", {"type": 'LEFT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True}, + ("font.move", {"type": 'RIGHT_ARROW', "value": 'PRESS', "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("font.move", {"type": 'UP_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'UP_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS'}, + ("font.move", {"type": 'DOWN_ARROW', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("font.move", {"type": 'PAGE_UP', "value": 'PRESS'}, + ("font.move", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS'}, + ("font.move", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), ("font.move_select", {"type": 'HOME', "value": 'PRESS', "shift": True}, {"properties": [("type", 'LINE_BEGIN')]}), ("font.move_select", {"type": 'END', "value": 'PRESS', "shift": True}, {"properties": [("type", 'LINE_END')]}), - ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_CHARACTER')]}), - ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_CHARACTER')]}), - ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("font.move_select", {"type": 'LEFT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_WORD')]}), - ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True}, + ("font.move_select", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "ctrl": True, "repeat": True}, {"properties": [("type", 'NEXT_WORD')]}), - ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'UP_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_LINE')]}), - ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'DOWN_ARROW', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_LINE')]}), - ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'PREVIOUS_PAGE')]}), - ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, + ("font.move_select", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, {"properties": [("type", 'NEXT_PAGE')]}), - ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_spacing", {"type": 'LEFT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", -1)]}), - ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_spacing", {"type": 'RIGHT_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_character", {"type": 'UP_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", 1)]}), - ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True}, + ("font.change_character", {"type": 'DOWN_ARROW', "value": 'PRESS', "alt": True, "repeat": True}, {"properties": [("delta", -1)]}), ("font.select_all", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ("font.text_copy", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), @@ -3916,10 +3920,10 @@ def km_transform_modal_map(_params): ("ADD_SNAP", {"type": 'A', "value": 'PRESS'}, None), ("ADD_SNAP", {"type": 'A', "value": 'PRESS', "ctrl": True}, None), ("REMOVE_SNAP", {"type": 'A', "value": 'PRESS', "alt": True}, None), - ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None), - ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None), - ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None), - ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None), + ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None), + ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None), + ("PROPORTIONAL_SIZE_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None), + ("PROPORTIONAL_SIZE_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None), ("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None), ("PROPORTIONAL_SIZE_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None), ("PROPORTIONAL_SIZE_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None), @@ -3927,10 +3931,10 @@ def km_transform_modal_map(_params): ("PROPORTIONAL_SIZE", {"type": 'TRACKPADPAN', "value": 'ANY'}, None), ("EDGESLIDE_EDGE_NEXT", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "alt": True}, None), ("EDGESLIDE_PREV_NEXT", {"type": 'WHEELUPMOUSE', "value": 'PRESS', "alt": True}, None), - ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS'}, None), - ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS'}, None), - ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True}, None), - ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True}, None), + ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "repeat": True}, None), + ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "repeat": True}, None), + ("AUTOIK_CHAIN_LEN_UP", {"type": 'PAGE_UP', "value": 'PRESS', "shift": True, "repeat": True}, None), + ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'PAGE_DOWN', "value": 'PRESS', "shift": True, "repeat": True}, None), ("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS'}, None), ("AUTOIK_CHAIN_LEN_DOWN", {"type": 'WHEELUPMOUSE', "value": 'PRESS'}, None), ("AUTOIK_CHAIN_LEN_UP", {"type": 'WHEELDOWNMOUSE', "value": 'PRESS', "shift": True}, None), diff --git a/release/scripts/startup/bl_operators/gpencil_mesh_bake.py b/release/scripts/startup/bl_operators/gpencil_mesh_bake.py index d4b1b11ed69..251e0af5854 100644 --- a/release/scripts/startup/bl_operators/gpencil_mesh_bake.py +++ b/release/scripts/startup/bl_operators/gpencil_mesh_bake.py @@ -99,6 +99,11 @@ class GPENCIL_OT_mesh_bake(Operator): description="Export faces as filled strokes", default=True, ) + only_selected: BoolProperty( + name="Only Selected Keyframes", + description="Convert only selected keyframes", + default=False, + ) target: EnumProperty( name="Target Object", description="Grease Pencil Object", @@ -139,6 +144,7 @@ class GPENCIL_OT_mesh_bake(Operator): thickness=self.thickness, seams=self.seams, faces=self.faces, + only_selected=self.only_selected, offset=self.offset, target=self.target, frame_target=self.frame_target, diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 741abb50453..987b64c217e 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -31,15 +31,15 @@ extern "C" { */ /* Blender major and minor version. */ -#define BLENDER_VERSION 291 +#define BLENDER_VERSION 292 /* Blender patch version for bugfix releases. */ #define BLENDER_VERSION_PATCH 0 /** Blender release cycle stage: alpha/beta/rc/release. */ -#define BLENDER_VERSION_CYCLE beta +#define BLENDER_VERSION_CYCLE alpha /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 9 +#define BLENDER_FILE_SUBVERSION 0 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and show a warning if the file diff --git a/source/blender/editors/gpencil/gpencil_mesh.c b/source/blender/editors/gpencil/gpencil_mesh.c index e4862617d12..7cf4325d03b 100644 --- a/source/blender/editors/gpencil/gpencil_mesh.c +++ b/source/blender/editors/gpencil/gpencil_mesh.c @@ -25,12 +25,15 @@ #include "MEM_guardedalloc.h" #include "BLI_blenlib.h" +#include "BLI_ghash.h" #include "BLI_math.h" +#include "DNA_anim_types.h" #include "DNA_gpencil_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" +#include "BKE_anim_data.h" #include "BKE_context.h" #include "BKE_duplilist.h" #include "BKE_global.h" @@ -86,6 +89,35 @@ typedef struct GpBakeOb { Object *ob; } GpBakeOb; +/* Get list of keyframes used by selected objects. */ +static void animdata_keyframe_list_get(ListBase *ob_list, + const bool only_selected, + GHash *r_keyframes) +{ + /* Loop all objects to get the list of keyframes used. */ + LISTBASE_FOREACH (GpBakeOb *, elem, ob_list) { + Object *ob = elem->ob; + AnimData *adt = BKE_animdata_from_id(&ob->id); + if ((adt == NULL) || (adt->action == NULL)) { + continue; + } + LISTBASE_FOREACH (FCurve *, fcurve, &adt->action->curves) { + int i; + BezTriple *bezt; + for (i = 0, bezt = fcurve->bezt; i < fcurve->totvert; i++, bezt++) { + /* Keyframe number is x value of point. */ + if ((bezt->f2 & SELECT) || (!only_selected)) { + /* Insert only one key for each keyframe number. */ + int key = (int)bezt->vec[1][0]; + if (!BLI_ghash_haskey(r_keyframes, POINTER_FROM_INT(key))) { + BLI_ghash_insert(r_keyframes, POINTER_FROM_INT(key), POINTER_FROM_INT(key)); + } + } + } + } + } +} + static void gpencil_bake_duplilist(Depsgraph *depsgraph, Scene *scene, Object *ob, ListBase *list) { GpBakeOb *elem = NULL; @@ -161,13 +193,13 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); Object *ob_gpencil = NULL; - ListBase list = {NULL, NULL}; - gpencil_bake_ob_list(C, depsgraph, scene, &list); + ListBase ob_selected_list = {NULL, NULL}; + gpencil_bake_ob_list(C, depsgraph, scene, &ob_selected_list); /* Cannot check this in poll because the active object changes. */ - if (list.first == NULL) { + if (ob_selected_list.first == NULL) { BKE_report(op->reports, RPT_INFO, "No valid object selected"); - gpencil_bake_free_ob_list(&list); + gpencil_bake_free_ob_list(&ob_selected_list); return OPERATOR_CANCELLED; } @@ -186,6 +218,7 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) const int thickness = RNA_int_get(op->ptr, "thickness"); const bool use_seams = RNA_boolean_get(op->ptr, "seams"); const bool use_faces = RNA_boolean_get(op->ptr, "faces"); + const bool only_selected = RNA_boolean_get(op->ptr, "only_selected"); const float offset = RNA_float_get(op->ptr, "offset"); const int frame_offset = RNA_int_get(op->ptr, "frame_target") - frame_start; char target[64]; @@ -206,7 +239,7 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) if ((ob_gpencil == NULL) || (ob_gpencil->type != OB_GPENCIL)) { BKE_report(op->reports, RPT_ERROR, "Target grease pencil object not valid"); - gpencil_bake_free_ob_list(&list); + gpencil_bake_free_ob_list(&ob_selected_list); return OPERATOR_CANCELLED; } @@ -237,6 +270,13 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) /* Loop all frame range. */ int oldframe = (int)DEG_get_ctime(depsgraph); int key = -1; + + /* Get list of keyframes. */ + GHash *keyframe_list = BLI_ghash_int_new(__func__); + if (only_selected) { + animdata_keyframe_list_get(&ob_selected_list, only_selected, keyframe_list); + } + for (int i = frame_start; i < frame_end + 1; i++) { key++; /* Jump if not step limit but include last frame always. */ @@ -244,12 +284,17 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) continue; } + /* Check if frame is in the list of frames to be exported. */ + if ((only_selected) && (!BLI_ghash_haskey(keyframe_list, POINTER_FROM_INT(i)))) { + continue; + } + /* Move scene to new frame. */ CFRA = i; BKE_scene_graph_update_for_newframe(depsgraph); /* Loop all objects in the list. */ - LISTBASE_FOREACH (GpBakeOb *, elem, &list) { + LISTBASE_FOREACH (GpBakeOb *, elem, &ob_selected_list) { Object *ob_eval = (Object *)DEG_get_evaluated_object(depsgraph, elem->ob); /* Generate strokes. */ @@ -270,13 +315,14 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) if (project_type != GP_REPROJECT_KEEP) { LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) { bGPDframe *gpf = gpl->actframe; - if (gpf != NULL) { - LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { - if ((gps->flag & GP_STROKE_TAG) == 0) { - ED_gpencil_stroke_reproject( - depsgraph, &gsc, sctx, gpl, gpf, gps, project_type, false); - gps->flag |= GP_STROKE_TAG; - } + if (gpf == NULL) { + continue; + } + LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { + if ((gps->flag & GP_STROKE_TAG) == 0) { + ED_gpencil_stroke_reproject( + depsgraph, &gsc, sctx, gpl, gpf, gps, project_type, false); + gps->flag |= GP_STROKE_TAG; } } } @@ -314,10 +360,14 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op) } /* Free memory. */ - gpencil_bake_free_ob_list(&list); + gpencil_bake_free_ob_list(&ob_selected_list); if (sctx != NULL) { ED_transform_snap_object_context_destroy(sctx); } + /* Free temp hash table. */ + if (keyframe_list != NULL) { + BLI_ghash_free(keyframe_list, NULL, NULL); + } /* notifiers */ if (newob) { @@ -394,6 +444,8 @@ void GPENCIL_OT_bake_mesh_animation(wmOperatorType *ot) RNA_def_int(ot->srna, "thickness", 1, 1, 100, "Thickness", "", 1, 100); RNA_def_boolean(ot->srna, "seams", 0, "Only Seam Edges", "Convert only seam edges"); RNA_def_boolean(ot->srna, "faces", 1, "Export Faces", "Export faces as filled strokes"); + RNA_def_boolean( + ot->srna, "only_selected", 0, "Only Selected Keyframes", "Convert only selected keyframes"); RNA_def_float_distance( ot->srna, "offset", 0.001f, 0.0, 100.0, "Offset", "Offset strokes from fill", 0.0, 100.00); RNA_def_int(ot->srna, "frame_target", 1, 1, 100000, "Frame Target", "", 1, 100000); diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c index 6eb12974408..8f17be97710 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c @@ -101,6 +101,11 @@ static void deformStroke(GpencilModifierData *md, } BKE_gpencil_stroke_subdivide(gps, mmd->level, mmd->type); + + /* If the stroke is cyclic, must generate the closing geometry. */ + if (gps->flag & GP_STROKE_CYCLIC) { + BKE_gpencil_stroke_close(gps); + } } static void bakeModifier(struct Main *UNUSED(bmain), diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index 2cabc89feee..2c373eb8d46 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -1135,7 +1135,7 @@ void RNA_api_keymapitems(StructRNA *srna) RNA_def_boolean(func, "alt", 0, "Alt", ""); RNA_def_boolean(func, "oskey", 0, "OS Key", ""); RNA_def_enum(func, "key_modifier", rna_enum_event_type_items, 0, "Key Modifier", ""); - RNA_def_boolean(func, "repeat", true, "Repeat", "When set, accept key-repeat events"); + RNA_def_boolean(func, "repeat", false, "Repeat", "When set, accept key-repeat events"); RNA_def_boolean(func, "head", 0, @@ -1159,7 +1159,7 @@ void RNA_api_keymapitems(StructRNA *srna) RNA_def_boolean(func, "alt", 0, "Alt", ""); RNA_def_boolean(func, "oskey", 0, "OS Key", ""); RNA_def_enum(func, "key_modifier", rna_enum_event_type_items, 0, "Key Modifier", ""); - RNA_def_boolean(func, "repeat", true, "Repeat", "When set, accept key-repeat events"); + RNA_def_boolean(func, "repeat", false, "Repeat", "When set, accept key-repeat events"); parm = RNA_def_pointer(func, "item", "KeyMapItem", "Item", "Added key map item"); RNA_def_function_return(func, parm); diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index 554ab2645a7..a580b4f10f0 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -82,6 +82,7 @@ static PyTypeObject BlenderAppType; static PyStructSequence_Field app_info_fields[] = { {"version", "The Blender version as a tuple of 3 numbers. eg. (2, 83, 1)"}, + {"version_file", "The blend file version, compatible with ``bpy.data.version``"}, {"version_string", "The Blender version formatted as a string"}, {"version_cycle", "The release status of this build alpha/beta/rc/release"}, {"version_char", "Deprecated, always an empty string"}, @@ -151,6 +152,8 @@ static PyObject *make_app_info(void) SetObjItem( PyC_Tuple_Pack_I32(BLENDER_VERSION / 100, BLENDER_VERSION % 100, BLENDER_VERSION_PATCH)); + SetObjItem(PyC_Tuple_Pack_I32( + BLENDER_FILE_VERSION / 100, BLENDER_FILE_VERSION % 100, BLENDER_FILE_SUBVERSION)); SetStrItem(BKE_blender_version_string()); SetStrItem(STRINGIFY(BLENDER_VERSION_CYCLE)); |