Commit: ce4a1a9dcd2a5fe844f989784d7b409407a77523
Author: Julian Eisel
Date:   Mon Dec 21 17:25:18 2015 +0100
Branches: temp_widgets_c++_experiment
https://developer.blender.org/rBce4a1a9dcd2a5fe844f989784d7b409407a77523

Bunch of changes - Blender works again \o/

Changes include: More porting, fixes, cleanup

===================================================================

M       source/blender/blenkernel/intern/screen.c
M       source/blender/blenlib/BLI_listbase.h
M       source/blender/blenlib/intern/listbase.c
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/space_graph/graph_edit.c
M       source/blender/editors/space_node/space_node.c
M       source/blender/editors/space_sequencer/sequencer_view.c
M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/makesdna/DNA_widget_types.h
M       source/blender/makesrna/intern/rna_wm.c
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/WM_types.h
M       source/blender/windowmanager/intern/widgets/wm_widgetgroup.cc
M       source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cc
M       source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h
M       source/blender/windowmanager/intern/widgets/wm_widgetmap.cc
M       source/blender/windowmanager/intern/widgets/wm_widgetmap.h
M       source/blender/windowmanager/intern/widgets/wm_widgetmaptype.cc
M       source/blender/windowmanager/intern/widgets/wm_widgetmaptype.h
M       source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cc
M       source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
M       source/blender/windowmanager/intern/wm_event_system.c
M       source/blender/windowmanager/intern/wm_widgets.c
M       source/blender/windowmanager/wm_event_system.h
M       source/blenderplayer/bad_level_call_stubs/stubs.c

===================================================================

diff --git a/source/blender/blenkernel/intern/screen.c 
b/source/blender/blenkernel/intern/screen.c
index b0a3edc..27621d9 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -295,7 +295,6 @@ void BKE_spacedata_id_unref(struct SpaceLink *sl, const 
struct ID *id)
 void BKE_area_region_free(SpaceType *st, ARegion *ar)
 {
        uiList *uilst;
-       struct wmWidgetMapC *wmap, *wmap_tmp;
 
        if (st) {
                ARegionType *art = BKE_regiontype_from_id(st, ar->regiontype);
@@ -341,11 +340,8 @@ void BKE_area_region_free(SpaceType *st, ARegion *ar)
                        MEM_freeN(uilst->properties);
                }
        }
-       
-       for (wmap = ar->widgetmaps.first; wmap; wmap = wmap_tmp) {
-               wmap_tmp = wmap->next;
-               WM_widgetmap_delete(wmap);
-       }
+
+       WM_widgetmaps_delete(&ar->widgetmaps);
        BLI_listbase_clear(&ar->widgetmaps);
        BLI_freelistN(&ar->ui_lists);
        BLI_freelistN(&ar->ui_previews);
diff --git a/source/blender/blenlib/BLI_listbase.h 
b/source/blender/blenlib/BLI_listbase.h
index 9dfa800..98a9627 100644
--- a/source/blender/blenlib/BLI_listbase.h
+++ b/source/blender/blenlib/BLI_listbase.h
@@ -92,6 +92,8 @@ BLI_INLINE void BLI_listbase_clear(struct ListBase *lb) { 
lb->first = lb->last =
 /* create a generic list node containing link to provided data */
 struct LinkData *BLI_genericNodeN(void *data);
 
+extern const ListBase ListBase_NULL;
+
 /**
  * Does a full loop on the list, with any value acting as first
  * (handy for cycling items)
diff --git a/source/blender/blenlib/intern/listbase.c 
b/source/blender/blenlib/intern/listbase.c
index ebee2c7..c3afdfa 100644
--- a/source/blender/blenlib/intern/listbase.c
+++ b/source/blender/blenlib/intern/listbase.c
@@ -44,6 +44,9 @@
 
 #include "BLI_strict_flags.h"
 
+const ListBase ListBase_NULL = {NULL, NULL};
+
+
 /* implementation */
 
 /**
diff --git a/source/blender/editors/object/object_edit.c 
b/source/blender/editors/object/object_edit.c
index 6a2a382..1bfe2b6 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -2139,9 +2139,9 @@ static int WIDGETGROUP_object_manipulator_poll(const 
struct bContext *C, struct
        Object *ob = ED_object_active_context((bContext *)C);
 
        if (ED_operator_object_active((bContext *)C)) {
-               char *idname = NULL;
-               WM_widgetgrouptype_idname_get(wgrouptype, idname);
+               char idname[MAX_NAME];
 
+               WM_widgetgrouptype_idname_get(wgrouptype, idname);
                if (STREQ(idname, ob->id.name)) {
                        return true;
                }
@@ -2159,9 +2159,7 @@ static int object_widget_add_exec(bContext *C, wmOperator 
*UNUSED(op))
                                                                      
SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
 
        /* assign the objects id name to the widget */
-       char *idname = NULL;
-       WM_widgetgrouptype_idname_get(wgrouptype, idname);
-       strcpy(idname, ob->id.name);
+       WM_widgetgrouptype_idname_set(wgrouptype, ob->id.name);
 
        return OPERATOR_FINISHED;
 }
diff --git a/source/blender/editors/space_graph/graph_edit.c 
b/source/blender/editors/space_graph/graph_edit.c
index be272b2..8047c47 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -2610,7 +2610,7 @@ static int graph_widget_backdrop_transform_poll(bContext 
*C)
 static void widgetgroup_backdrop_create(const struct bContext *C, struct 
wmWidgetGroup *wgroup)
 {
        ARegion *ar = CTX_wm_region(C);
-       wmOperator *op = wgroup->type->op;
+       wmOperator *op = WM_widgetgrouptype_operator_get(wgroup->type);
        Scene *scene = CTX_data_scene(C);
        int width = (scene->r.size * scene->r.xsch) / 150.0f;
        int height = (scene->r.size * scene->r.ysch) / 150.0f;
diff --git a/source/blender/editors/space_node/space_node.c 
b/source/blender/editors/space_node/space_node.c
index 1754ad6..ef20419 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -652,7 +652,7 @@ static void node_main_region_init(wmWindowManager *wm, 
ARegion *ar)
                BLI_addhead(&ar->widgetmaps, WM_widgetmap_new("Node_Canvas", 
SPACE_NODE, RGN_TYPE_WINDOW, false));
        }
 
-       WM_event_add_area_widgetmap_handlers(ar);
+       WM_widgetmaps_create_region_handlers(ar);
 
        /* own keymaps */
        keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0);
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c 
b/source/blender/editors/space_sequencer/sequencer_view.c
index fec9d09..dfb513c 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -269,7 +269,7 @@ static int sequencer_overdrop_transform_poll(bContext *C)
 static void widgetgroup_overdrop_create(const struct bContext *C, struct 
wmWidgetGroup *wgroup)
 {
        ARegion *ar = CTX_wm_region(C);
-       wmOperator *op = wgroup->type->op;
+       wmOperator *op = WM_widgetgrouptype_operator_get(wgroup->type);
        Scene *sce = CTX_data_scene(C);
        int sizex = (sce->r.size * sce->r.xsch) / 100;
        int sizey = (sce->r.size * sce->r.ysch) / 100;
@@ -433,7 +433,7 @@ static void widgetgroup_image_transform_create(const struct 
bContext *C, struct
 {
        ARegion *ar = CTX_wm_region(C);
        View2D *v2d = &ar->v2d;
-       wmOperator *op = wgroup->type->op;
+       wmOperator *op = WM_widgetgrouptype_operator_get(wgroup->type);
        wmWidget *cage;
        float origin[3];
        float viewrect[2];
diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index 5c4e206..a6f00c3 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -504,7 +504,7 @@ static void view3d_main_region_init(wmWindowManager *wm, 
ARegion *ar)
                BLI_addhead(&ar->widgetmaps, WM_widgetmap_new("View3D", 
SPACE_VIEW3D, RGN_TYPE_WINDOW, true));
        }
 
-       WM_event_add_area_widgetmap_handlers(ar);
+       WM_widgetmaps_create_region_handlers(ar);
 
        /* object ops. */
        
diff --git a/source/blender/makesdna/DNA_widget_types.h 
b/source/blender/makesdna/DNA_widget_types.h
index 13fce0a..5fa2cd8 100644
--- a/source/blender/makesdna/DNA_widget_types.h
+++ b/source/blender/makesdna/DNA_widget_types.h
@@ -47,8 +47,7 @@ typedef enum WidgetType {
 struct wmWidgetGroup {
        struct wmWidgetGroup *next, *prev;
 
-       struct wmWidgetGroupTypeC *type;
-       struct wmWidgetGroupType *type_cxx;
+       struct wmWidgetGroupType *type;
        ListBase widgets;
 
        void *py_instance;            /* python stores the class instance here 
*/
diff --git a/source/blender/makesrna/intern/rna_wm.c 
b/source/blender/makesrna/intern/rna_wm.c
index dd52ce7..ac22bcd 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -1533,7 +1533,7 @@ static StructRNA *rna_WidgetGroup_register(Main *bmain, 
ReportList *reports, voi
        int have_function[2];
 
        /* setup dummy widgetgroup & widgetgroup type to store static 
properties in */
-       dummywg.type_cxx = &dummywgt;
+       dummywg.type = &dummywgt;
        RNA_pointer_create(NULL, &RNA_WidgetGroup, &dummywg, &wgptr);
 
        /* clear in case they are left unset */
@@ -1891,6 +1891,8 @@ static void rna_def_widgetgroup(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Has Reports",
                                 "WidgetGroup has a set of reports (warnings 
and errors) from last execution");
 
+#ifdef USE_WM_WIDGET_API
+
        /* Registration */
        prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
        RNA_def_property_string_sdna(prop, NULL, "type->idname");
@@ -1918,6 +1920,8 @@ static void rna_def_widgetgroup(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Options",  "Options for this operator 
type");
 #endif
 
+#endif /* USE_WM_WIDGET_API */
+
        prop = RNA_def_property(srna, "widgets", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "widgets", NULL);
        RNA_def_property_struct_type(prop, "Widget");
diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index 90848b1..dc0d4cc 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -61,7 +61,6 @@ struct wmOperator;
 struct wmWidget;
 struct wmWidgetGroup;
 struct wmWidgetMapC;
-struct wmWidgetGroupTypeC;
 struct wmWidgetMapType;
 struct rcti;
 struct PointerRNA;
@@ -512,10 +511,6 @@ struct wmWidget *WM_widget_new(void (*draw)(const struct 
bContext *, struct wmWi
                                int  (*intersect)(struct bContext *, const 
struct wmEvent *, struct wmWidget *),
                                int  (*handler)(struct bContext *, const struct 
wmEvent *, struct wmWidget *, const int));
 
-void  WM_event_add_area_widgetmap_handlers(struct ARegion *ar);
-void  WM_modal_handler_attach_widgetgroup(struct bContext *C, struct 
wmEventHandler *handler,
-                                          struct wmWidgetGroupTypeC 
*wgrouptype, struct wmOperator *op);
-
 /* wmWidget->flag */
 enum widgetflags {
        /* states */
@@ -557,12 +552,6 @@ wmKeyMap *WM_widgetgroup_keymap_common(wmKeyConfig 
*config, const char *wgroupna
 
 bool WM_widgetmap_select_all(struct bContext *C, struct wmWidgetMapC *wmap, 
const int action);
 
-/* creates a widgetmap with all registered widgets for that type */
-void WM_widgetmap_delete(struct wmWidgetMapC *wmap);
-bool WM_widgetmap_cursor_set(const struct wmWidgetMapC *wmap, struct wmWindow 
*win);
-
-void WM_widgetmaptypes_free(void);
-
 /* wm_generic_widgets.c */
 
 enum {
diff --git a/source/blender/windowmanager/WM_types.h 
b/source/blender/windowmanager/WM_types.h
index 7b1acf2..4a217d6 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -679,43 +679,6 @@ typedef struct wmWidget wmWidget;
 typedef struct wmWidgetGroup wmWidgetGroup;
 typedef struct wmWidgetMapType wmWidgetMapType;
 
-/* factory class for a widgetgroup type, gets called every time a new area is 
spawned */
-typedef struct wmWidgetGroupTypeC {
-       struct wmWidgetGroupTypeC *next, *prev;
-
-       char idname[64]; /* MAX_NAME */
-       char name[64]; /* widget group name - displayed in UI (keymap editor) */
-
-       /* poll if widgetmap should be active */
-       int (*poll)(const struct bContext *C, struct wmWidgetGroupTypeC 
*wgrouptype) ATTR_WARN_UNUSED_RESULT;
-
-       /* update widgets, called right before drawing */
-       void (*create)(const st

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to