initialize keymaps after python so python keymaps, solves the problem of keymaps...
authorCampbell Barton <ideasman42@gmail.com>
Sat, 18 Jul 2009 19:40:26 +0000 (19:40 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 18 Jul 2009 19:40:26 +0000 (19:40 +0000)
Brecht/Ton you may want to check that C->data.py_init is a good place to store this.

source/blender/blenkernel/BKE_context.h
source/blender/blenkernel/intern/context.c
source/blender/makesdna/DNA_windowmanager_types.h
source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm.c

index 5baf5af81d16791e6ceeaf4c70e40bee3fc1c107..8078f57b98e09d408adb884bd1e50c3987d36696 100644 (file)
@@ -101,6 +101,10 @@ bContextStore *CTX_store_copy(bContextStore *store);
 void CTX_store_free(bContextStore *store);
 void CTX_store_free_list(ListBase *contexts);
 
+/* need to store if python is initialized or not */
+int CTX_py_init_get(bContext *C);
+int CTX_py_init_set(bContext *C, int value);
+
 /* Window Manager Context */
 
 struct wmWindowManager *CTX_wm_manager(const bContext *C);
index 4bfc1484e5694c6493b7777a35b83c0646d5eab7..17349ecc91941c91d380ab70f4c0d56310c92dc6 100644 (file)
@@ -68,6 +68,7 @@ struct bContext {
                struct Scene *scene;
 
                int recursion;
+               int py_init; /* true if python is initialized */
        } data;
        
        /* data evaluation */
@@ -162,6 +163,16 @@ void CTX_store_free_list(ListBase *contexts)
        }
 }
 
+/* is python initialied? */
+int CTX_py_init_get(bContext *C)
+{
+       return C->data.py_init;
+}
+int CTX_py_init_set(bContext *C, int value)
+{
+       C->data.py_init= value;
+}
+
 /* window manager context */
 
 wmWindowManager *CTX_wm_manager(const bContext *C)
index 69ab45d3389d6cfdb5472a468cfb1a849acf9e98..126b6c47b63572563e0776dfed18195dec4dc215 100644 (file)
@@ -117,6 +117,9 @@ typedef struct wmWindowManager {
        
 } wmWindowManager;
 
+/* wmWindowManager.initialized */
+#define WM_INIT_WINDOW         1<<0
+#define WM_INIT_KEYMAP         1<<1
 
 /* the savable part, rest of data is local in ghostwinlay */
 typedef struct wmWindow {
index a5e1df1669a118894d53352ae49e0b2961cb9004..3615df8bd3b3968f7507eee8e36d6b786644aeac 100644 (file)
@@ -72,6 +72,7 @@ void          *WM_paint_cursor_activate(struct wmWindowManager *wm, int (*poll)(struct b
 void           WM_paint_cursor_end(struct wmWindowManager *wm, void *handle);
 
                        /* keymap */
+void           WM_keymap_init          (struct bContext *C);
 wmKeymapItem *WM_keymap_verify_item(ListBase *lb, char *idname, short type, 
                                                                 short val, int modifier, short keymodifier);
 wmKeymapItem *WM_keymap_add_item(ListBase *lb, char *idname, short type, 
index 94200925a028a55d8eb26cfbffc7ccdcaaa292f0..863fb3ab4bd750ef0b818a8ffcdb01e03835cc5e 100644 (file)
@@ -120,6 +120,18 @@ void WM_operator_stack_clear(bContext *C)
 
 /* ****************************************** */
 
+void WM_keymap_init(bContext *C)
+{
+       wmWindowManager *wm= CTX_wm_manager(C);
+
+       if(CTX_py_init_get(C) && (wm->initialized & WM_INIT_KEYMAP) == 0) {
+               wm_window_keymap(wm);
+               ED_spacetypes_keymap(wm);
+
+               wm->initialized |= WM_INIT_KEYMAP;
+       }
+}
+
 void wm_check(bContext *C)
 {
        wmWindowManager *wm= CTX_wm_manager(C);
@@ -136,13 +148,12 @@ void wm_check(bContext *C)
        wm_window_add_ghostwindows(wm);
        
        /* case: fileread */
-       if(wm->initialized==0) {
+       if((wm->initialized & WM_INIT_WINDOW) == 0) {
                
-               wm_window_keymap(wm);
-               ED_spacetypes_keymap(wm);
+               WM_keymap_init(C);
                
                ED_screens_initialize(wm);
-               wm->initialized= 1;
+               wm->initialized |= WM_INIT_WINDOW;
        }
 }