[Bf-blender-cvs] [8b512414c57] master: Preferences: correct experimental flag use

Campbell Barton noreply at git.blender.org
Sat Dec 7 03:28:39 CET 2019


Commit: 8b512414c5751c39d443c85d3dcb4820c14e3ba0
Author: Campbell Barton
Date:   Sat Dec 7 08:46:02 2019 +1100
Branches: master
https://developer.blender.org/rB8b512414c5751c39d443c85d3dcb4820c14e3ba0

Preferences: correct experimental flag use

Add utilities for checking when experimental features
should be used.

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

M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesrna/intern/rna_userdef.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_toolsystem.c

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

diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 130db518cb7..386a5a184ca 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -2160,6 +2160,8 @@ class ExperimentalPanel:
     bl_space_type = 'PREFERENCES'
     bl_region_type = 'WINDOW'
 
+    url_prefix = "https://developer.blender.org/"
+
     @classmethod
     def poll(cls, context):
         prefs = context.preferences
@@ -2188,12 +2190,22 @@ class USERPREF_PT_experimental_all(ExperimentalPanel, Panel):
         # For the other settings create new panels
         # and make sure they are disabled if use_experimental_all is True
 
-        url_prefix = "https://developer.blender.org/"
 
-        row = col.row()
-        row.prop(experimental, "use_tool_fallback")
+class USERPREF_PT_experimental_ui(ExperimentalPanel, Panel):
+    bl_label = "User Interface"
+
+    def draw_props(self, context, layout):
+        prefs = context.preferences
+        experimental = prefs.experimental
+        layout.active = not experimental.use_experimental_all
+
+        task = "T66304"
+        split = layout.split(factor=0.66)
+        col = split.column()
+        col.prop(experimental, "use_tool_fallback", text="Use Tool Fallback")
+        col = split.column()
+        col.operator("wm.url_open", text=task, icon='URL').url = self.url_prefix + task
 
-        row.operator("wm.url_open", text="", icon='URL').url = url_prefix + "T66304"
 
 """
 # Example panel, leave it here so we always have a template to follow even
@@ -2212,14 +2224,14 @@ class USERPREF_PT_experimental_virtual_reality(ExperimentalPanel, Panel):
         col = split.split()
         col.prop(experimental, "use_virtual_reality_scene_inspection", text="Scene Inspection")
         col = split.split()
-        col.operator("wm.url_open", text=task, icon='URL').url = "https://developer.blender.org/" + task
+        col.operator("wm.url_open", text=task, icon='URL').url = self.url_prefix + task
 
         task = "T71348"
         split = layout.split(factor=0.66)
         col = split.column()
         col.prop(experimental, "use_virtual_reality_immersive_drawing", text="Continuous Immersive Drawing")
         col = split.column()
-        col.operator("wm.url_open", text=task, icon='URL').url = "https://developer.blender.org/" + task
+        col.operator("wm.url_open", text=task, icon='URL').url = self.url_prefix + task
 """
 
 
@@ -2305,6 +2317,7 @@ classes = (
     USERPREF_PT_studiolight_world,
 
     USERPREF_PT_experimental_all,
+    USERPREF_PT_experimental_ui,
 
     # Popovers.
     USERPREF_PT_ndof_settings,
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c b/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c
index 838abe46616..8b1a84fec1b 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_tool_generic.c
@@ -52,7 +52,7 @@ static const char *handle_free_id;
 
 static bool WIDGETGROUP_tool_generic_poll(const bContext *C, wmGizmoGroupType *gzgt)
 {
-  if (!U.experimental.use_tool_fallback) {
+  if (!USER_EXPEREMENTAL_TEST(&U, use_tool_fallback)) {
     return false;
   }
 
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index c26eb58a8f9..adab1f31507 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -600,10 +600,6 @@ typedef struct UserDef_FileSpaceData {
   int temp_win_sizey;
 } UserDef_FileSpaceData;
 
-/**
- * Store UI data here instead of the space
- * since the space is typically a window which is freed.
- */
 typedef struct UserDef_Experimental {
   /** #eUserPref_Experimental_Flag options. */
   int flag;
@@ -613,6 +609,10 @@ typedef struct UserDef_Experimental {
   char _pad0[3];
 } UserDef_Experimental;
 
+#define USER_EXPEREMENTAL_TEST(userdef, member) \
+  (((userdef)->flag & USER_DEVELOPER_UI) && \
+   (((userdef)->experimental.flag & USER_EXPERIMENTAL_ALL) || ((userdef)->experimental).member))
+
 typedef struct UserDef {
   /** UserDef has separate do-version handling, and can be read from other files. */
   int versionfile, subversionfile;
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index aa69b49c391..af30baf4a80 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -575,6 +575,15 @@ static void rna_userdef_autosave_update(Main *bmain, Scene *scene, PointerRNA *p
   rna_userdef_update(bmain, scene, ptr);
 }
 
+#  define RNA_USERDEF_EXPERIMENTAL_BOOLEAN_GET(member) \
+    static bool rna_userdef_experimental_##member##_get(PointerRNA *ptr) \
+    { \
+      UserDef *userdef = POINTER_OFFSET(ptr->data, -offsetof(UserDef, experimental)); \
+      return USER_EXPEREMENTAL_TEST(userdef, member); \
+    }
+
+RNA_USERDEF_EXPERIMENTAL_BOOLEAN_GET(use_tool_fallback)
+
 static bAddon *rna_userdef_addon_new(void)
 {
   ListBase *addons_list = &U.addons;
@@ -5848,6 +5857,7 @@ static void rna_def_userdef_experimental(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "use_tool_fallback", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "use_tool_fallback", 1);
+  RNA_def_property_boolean_funcs(prop, "rna_userdef_experimental_use_tool_fallback_get", NULL);
   RNA_def_property_ui_text(prop, "Fallback Tool Support", "Allow selection with an active tool");
   RNA_def_property_update(prop, 0, "rna_userdef_update");
 }
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index d65cf2324a9..7c3e4ebc008 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3731,7 +3731,7 @@ wmKeyMap *WM_event_get_keymap_from_toolsystem(wmWindowManager *wm, wmEventHandle
     const char *keymap_id = tref_rt->keymap;
 
     /* Support for the gizmo owning the tool keymap. */
-    if (U.experimental.use_tool_fallback) {
+    if (USER_EXPEREMENTAL_TEST(&U, use_tool_fallback)) {
       if (tref_rt->gizmo_group[0] != '\0') {
         wmGizmoMap *gzmap = NULL;
         wmGizmoGroup *gzgroup = NULL;
diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c
index d714fdaa19e..5878a82d576 100644
--- a/source/blender/windowmanager/intern/wm_toolsystem.c
+++ b/source/blender/windowmanager/intern/wm_toolsystem.c
@@ -355,7 +355,7 @@ void WM_toolsystem_ref_set_from_runtime(struct bContext *C,
    * pass in the argument to begin with. */
   bool use_fallback_keymap = false;
 
-  if (U.experimental.use_tool_fallback) {
+  if (USER_EXPEREMENTAL_TEST(&U, use_tool_fallback)) {
     if (tref_rt->gizmo_group[0]) {
       wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(tref_rt->gizmo_group, false);
       if (gzgt) {



More information about the Bf-blender-cvs mailing list