Revision: 41899
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41899
Author:   aligorith
Date:     2011-11-16 00:13:38 +0000 (Wed, 16 Nov 2011)
Log Message:
-----------
Partial Bugfix: [#29229] Outliner RMB commands unexpected results

This commit implements the Unlink and Make Single User capabilities for World
datablocks in the Outliner

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_outliner/outliner_tools.c

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_tools.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_tools.c        
2011-11-15 23:03:35 UTC (rev 41898)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_tools.c        
2011-11-16 00:13:38 UTC (rev 41899)
@@ -236,6 +236,16 @@
        }
 }
 
+static void unlink_world_cb(bContext *UNUSED(C), Scene *UNUSED(scene), 
TreeElement *UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *tselem)
+{
+       Scene *parscene = (Scene *)tsep->id;
+       World *wo = (World *)tselem->id;
+       
+       /* need to use parent scene not just scene, otherwise may end up 
getting wrong one */
+       id_us_min(&wo->id);
+       parscene->world = NULL;
+}
+
 static void outliner_do_libdata_operation(bContext *C, Scene *scene, SpaceOops 
*soops, ListBase *lb, 
                                                                                
 void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, TreeStoreElem 
*, TreeStoreElem *))
 {
@@ -350,6 +360,23 @@
        }
 }
 
+static void singleuser_world_cb(bContext *C, Scene *UNUSED(scene), TreeElement 
*UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *tselem)
+{
+       ID *id = tselem->id;
+       
+       /* need to use parent scene not just scene, otherwise may end up 
getting wrong one */
+       if (id) {
+               Scene *parscene = (Scene *)tsep->id;
+               PointerRNA ptr = {{NULL}};
+               PropertyRNA *prop;
+               
+               RNA_id_pointer_create(&parscene->id, &ptr);
+               prop = RNA_struct_find_property(&ptr, "world");
+               
+               id_single_user(C, id, &ptr, prop);
+       }
+}
+
 static void group_linkobs2scene_cb(bContext *UNUSED(C), Scene *scene, 
TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
 {
        Group *group= (Group *)tselem->id;
@@ -746,6 +773,12 @@
                                        WM_event_add_notifier(C, 
NC_OBJECT|ND_OB_SHADING, NULL);
                                        ED_undo_push(C, "Unlink texture");
                                        break;
+                               case ID_WO:
+                                       outliner_do_libdata_operation(C, scene, 
soops, &soops->tree, unlink_world_cb);
+                                       
+                                       WM_event_add_notifier(C, 
NC_SCENE|ND_WORLD, NULL);
+                                       ED_undo_push(C, "Unlink world");
+                                       break;
                                default:
                                        BKE_report(op->reports, RPT_WARNING, 
"Not Yet");
                                        break;
@@ -772,6 +805,13 @@
                                        ED_undo_push(C, "Single-User Action");
                                        break;
                                        
+                               case ID_WO:
+                                       outliner_do_libdata_operation(C, scene, 
soops, &soops->tree, singleuser_world_cb);
+                                       
+                                       WM_event_add_notifier(C, 
NC_SCENE|ND_WORLD, NULL);
+                                       ED_undo_push(C, "Single-User World");
+                                       break;
+                                       
                                default:
                                        BKE_report(op->reports, RPT_WARNING, 
"Not Yet");
                                        break;
@@ -799,12 +839,13 @@
                }
                        break;
                case OUTLINER_IDOP_RENAME:
+               {
                        /* rename */
                        outliner_do_libdata_operation(C, scene, soops, 
&soops->tree, item_rename_cb);
-
+                       
                        WM_event_add_notifier(C, NC_ID|NA_EDITED, NULL);
                        ED_undo_push(C, "Rename");
-
+               }
                        break;
                        
                default:

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

Reply via email to