[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23316] trunk/blender/source/blender: Keymaps now have a poll() function, rather than adding/removing

Brecht Van Lommel brecht at blender.org
Thu Sep 17 23:36:02 CEST 2009


Revision: 23316
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23316
Author:   blendix
Date:     2009-09-17 23:36:02 +0200 (Thu, 17 Sep 2009)

Log Message:
-----------
Keymaps now have a poll() function, rather than adding/removing
their handlers based on notifiers, which is simpler and more
reliable.

This fixes for example editmode or uv edit keymaps not working
when creating a new 3dview or image space.

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/animation/anim_channels_edit.c
    trunk/blender/source/blender/editors/animation/anim_markers.c
    trunk/blender/source/blender/editors/animation/anim_ops.c
    trunk/blender/source/blender/editors/armature/armature_ops.c
    trunk/blender/source/blender/editors/curve/curve_ops.c
    trunk/blender/source/blender/editors/gpencil/gpencil_ops.c
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/interface/view2d_ops.c
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    trunk/blender/source/blender/editors/metaball/mball_ops.c
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/physics/ed_pointcache.c
    trunk/blender/source/blender/editors/physics/editparticle.c
    trunk/blender/source/blender/editors/screen/area.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_action/action_ops.c
    trunk/blender/source/blender/editors/space_action/space_action.c
    trunk/blender/source/blender/editors/space_buttons/space_buttons.c
    trunk/blender/source/blender/editors/space_console/space_console.c
    trunk/blender/source/blender/editors/space_file/space_file.c
    trunk/blender/source/blender/editors/space_graph/graph_ops.c
    trunk/blender/source/blender/editors/space_graph/space_graph.c
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/editors/space_logic/space_logic.c
    trunk/blender/source/blender/editors/space_nla/nla_ops.c
    trunk/blender/source/blender/editors/space_nla/space_nla.c
    trunk/blender/source/blender/editors/space_node/node_ops.c
    trunk/blender/source/blender/editors/space_node/space_node.c
    trunk/blender/source/blender/editors/space_outliner/outliner_ops.c
    trunk/blender/source/blender/editors/space_outliner/space_outliner.c
    trunk/blender/source/blender/editors/space_script/script_ops.c
    trunk/blender/source/blender/editors/space_script/space_script.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c
    trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c
    trunk/blender/source/blender/editors/space_sound/space_sound.c
    trunk/blender/source/blender/editors/space_text/space_text.c
    trunk/blender/source/blender/editors/space_time/space_time.c
    trunk/blender/source/blender/editors/space_time/time_ops.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c
    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
    trunk/blender/source/blender/editors/transform/transform_ops.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
    trunk/blender/source/blender/windowmanager/intern/wm_keymap.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c
    trunk/blender/source/blender/windowmanager/intern/wm_window.c
    trunk/blender/source/blender/windowmanager/wm_event_system.h

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -4826,7 +4826,6 @@
 			rv3d->ri= NULL;
 			rv3d->sms= NULL;
 			rv3d->smooth_timer= NULL;
-			rv3d->lastmode= 0;
 		}
 	}
 	

Modified: trunk/blender/source/blender/editors/animation/anim_channels_edit.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_edit.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/animation/anim_channels_edit.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -1572,7 +1572,7 @@
 
 void ED_keymap_animchannels(wmWindowManager *wm)
 {
-	ListBase *keymap = WM_keymap_listbase(wm, "Animation_Channels", 0, 0);
+	wmKeyMap *keymap = WM_keymap_find(wm, "Animation_Channels", 0, 0);
 	
 	/* selection */
 		/* click-select */

Modified: trunk/blender/source/blender/editors/animation/anim_markers.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_markers.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/animation/anim_markers.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -992,7 +992,7 @@
 /* called in screen_ops.c:ED_keymap_screen() */
 void ED_marker_keymap(wmWindowManager *wm)
 {
-	ListBase *keymap= WM_keymap_listbase(wm, "Markers", 0, 0);
+	wmKeyMap *keymap= WM_keymap_find(wm, "Markers", 0, 0);
 	
 	WM_keymap_verify_item(keymap, "MARKER_OT_add", MKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "MARKER_OT_move", EVT_TWEAK_S, KM_ANY, 0, 0);

Modified: trunk/blender/source/blender/editors/animation/anim_ops.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/animation/anim_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -406,7 +406,7 @@
 
 void ED_keymap_anim(wmWindowManager *wm)
 {
-	ListBase *keymap= WM_keymap_listbase(wm, "Animation", 0, 0);
+	wmKeyMap *keymap= WM_keymap_find(wm, "Animation", 0, 0);
 	
 	/* frame management */
 		/* NOTE: 'ACTIONMOUSE' not 'LEFTMOUSE', as user may have swapped mouse-buttons */

Modified: trunk/blender/source/blender/editors/armature/armature_ops.c
===================================================================
--- trunk/blender/source/blender/editors/armature/armature_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/armature/armature_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -202,11 +202,12 @@
 
 void ED_keymap_armature(wmWindowManager *wm)
 {
-	ListBase *keymap;
+	wmKeyMap *keymap;
 	wmKeymapItem *kmi;
 	
 	/* Armature ------------------------ */
-	keymap= WM_keymap_listbase(wm, "Armature", 0, 0);
+	keymap= WM_keymap_find(wm, "Armature", 0, 0);
+	keymap->poll= ED_operator_editarmature;
 	
 	/* only set in editmode armature, by space_view3d listener */
 //	WM_keymap_add_item(keymap, "ARMATURE_OT_hide", HKEY, KM_PRESS, 0, 0);
@@ -280,7 +281,8 @@
 
 	/* Pose ------------------------ */
 	/* only set in posemode, by space_view3d listener */
-	keymap= WM_keymap_listbase(wm, "Pose", 0, 0);
+	keymap= WM_keymap_find(wm, "Pose", 0, 0);
+	keymap->poll= ED_operator_posemode;
 	
 	WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, 0, 0);
 	kmi= WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0);

Modified: trunk/blender/source/blender/editors/curve/curve_ops.c
===================================================================
--- trunk/blender/source/blender/editors/curve/curve_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/curve/curve_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -163,8 +163,11 @@
 
 void ED_keymap_curve(wmWindowManager *wm)
 {
-	ListBase *keymap= WM_keymap_listbase(wm, "Font", 0, 0);
+	wmKeyMap *keymap;
 	
+	keymap= WM_keymap_find(wm, "Font", 0, 0);
+	keymap->poll= ED_operator_editfont;
+	
 	/* only set in editmode font, by space_view3d listener */
 	RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_style_toggle", BKEY, KM_PRESS, KM_CTRL, 0)->ptr, "style", CU_BOLD);
 	RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_style_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "style", CU_ITALIC);
@@ -212,7 +215,8 @@
 	WM_keymap_add_item(keymap, "FONT_OT_text_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last!
 
 	/* only set in editmode curve, by space_view3d listener */
-	keymap= WM_keymap_listbase(wm, "Curve", 0, 0);
+	keymap= WM_keymap_find(wm, "Curve", 0, 0);
+	keymap->poll= ED_operator_editsurfcurve;
 	
 	WM_keymap_add_item(keymap, "OBJECT_OT_curve_add", AKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "CURVE_OT_vertex_add", ACTIONMOUSE, KM_PRESS, KM_CTRL, 0);

Modified: trunk/blender/source/blender/editors/gpencil/gpencil_ops.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -47,7 +47,7 @@
 
 void ED_keymap_gpencil(wmWindowManager *wm)
 {
-	ListBase *keymap= WM_keymap_listbase(wm, "Grease Pencil", 0, 0);
+	wmKeyMap *keymap= WM_keymap_find(wm, "Grease Pencil", 0, 0);
 	wmKeymapItem *kmi;
 	
 	/* Draw */

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2009-09-17 21:36:02 UTC (rev 23316)
@@ -41,8 +41,9 @@
 struct uiLayout;
 struct EnumPropertyItem;
 struct wmOperatorType;
+struct wmKeyMap;
 
-void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *keymap, int spaceid);
+void transform_keymap_for_space(struct wmWindowManager *wm, struct wmKeyMap *keymap, int spaceid);
 void transform_operatortypes(void);
 
 /* ******************** Macros & Prototypes *********************** */

Modified: trunk/blender/source/blender/editors/interface/view2d_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/view2d_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/interface/view2d_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -1409,7 +1409,7 @@
 
 void UI_view2d_keymap(wmWindowManager *wm)
 {
-	ListBase *keymap= WM_keymap_listbase(wm, "View2D", 0, 0);
+	wmKeyMap *keymap= WM_keymap_find(wm, "View2D", 0, 0);
 	
 	/* pan/scroll */
 	WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MIDDLEMOUSE, KM_PRESS, 0, 0);
@@ -1445,7 +1445,7 @@
 	WM_keymap_add_item(keymap, "VIEW2D_OT_scroller_activate", LEFTMOUSE, KM_PRESS, 0, 0);
 
 	/* Alternative keymap for buttons listview */
-	keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
+	keymap= WM_keymap_find(wm, "View2D Buttons List", 0, 0);
 	WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MIDDLEMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", WHEELDOWNMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", WHEELUPMOUSE, KM_PRESS, 0, 0);

Modified: trunk/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -349,9 +349,12 @@
 /* note mesh keymap also for other space? */
 void ED_keymap_mesh(wmWindowManager *wm)
 {	
-	ListBase *keymap= WM_keymap_listbase(wm, "EditMesh", 0, 0);
+	wmKeyMap *keymap;
 	wmKeymapItem *kmi;
 	
+	keymap= WM_keymap_find(wm, "EditMesh", 0, 0);
+	keymap->poll= ED_operator_editmesh;
+	
 	WM_keymap_add_item(keymap, "MESH_OT_loopcut", ACTIONMOUSE, KM_PRESS, KM_CTRL, RKEY);
 
 	/* selecting */

Modified: trunk/blender/source/blender/editors/metaball/mball_ops.c
===================================================================
--- trunk/blender/source/blender/editors/metaball/mball_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/metaball/mball_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -34,6 +34,8 @@
 #include "DNA_listBase.h"
 #include "DNA_windowmanager_types.h"
 
+#include "ED_screen.h"
+
 #include "mball_intern.h"
 
 void ED_operatortypes_metaball(void)
@@ -51,7 +53,10 @@
 
 void ED_keymap_metaball(wmWindowManager *wm)
 {
-	ListBase *keymap= WM_keymap_listbase(wm, "Metaball", 0, 0);
+	wmKeyMap *keymap;
+	
+	keymap= WM_keymap_find(wm, "Metaball", 0, 0);
+	keymap->poll= ED_operator_editmball;
 
 	WM_keymap_add_item(keymap, "OBJECT_OT_metaball_add", AKEY, KM_PRESS, KM_SHIFT, 0);
 	

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2009-09-17 18:40:37 UTC (rev 23315)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2009-09-17 21:36:02 UTC (rev 23316)
@@ -184,11 +184,19 @@
 	}
 }
 
+static int object_mode_poll(bContext *C)
+{
+	Object *ob= CTX_data_active_object(C);
+	return (!ob || ob->mode == OB_MODE_OBJECT);
+}
+
 void ED_keymap_object(wmWindowManager *wm)
 {
-	ListBase *keymap= WM_keymap_listbase(wm, "Object Non-modal", 0, 0);
+	wmKeyMap *keymap;
 	wmKeymapItem *kmi;
 	
+	keymap= WM_keymap_find(wm, "Object Non-modal", 0, 0);
+	
 	/* Note: this keymap works disregarding mode */
 	WM_keymap_add_item(keymap, "OBJECT_OT_editmode_toggle", TABKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "OBJECT_OT_posemode_toggle", TABKEY, KM_PRESS, KM_CTRL, 0);
@@ -203,7 +211,8 @@
 	WM_keymap_add_item(keymap, "OBJECT_OT_center_set", CKEY, KM_PRESS, KM_ALT|KM_SHIFT|KM_CTRL, 0);
 
 	/* Note: this keymap gets disabled in non-objectmode,  */
-	keymap= WM_keymap_listbase(wm, "Object Mode", 0, 0);
+	keymap= WM_keymap_find(wm, "Object Mode", 0, 0);
+	keymap->poll= object_mode_poll;
 	
 	WM_keymap_add_item(keymap, "OBJECT_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list