[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40671] trunk/blender/source/blender: fix 2 bugs with reset-default failing on operators redo panel.
Campbell Barton
ideasman42 at gmail.com
Wed Sep 28 20:45:18 CEST 2011
Revision: 40671
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40671
Author: campbellbarton
Date: 2011-09-28 18:45:17 +0000 (Wed, 28 Sep 2011)
Log Message:
-----------
fix 2 bugs with reset-default failing on operators redo panel.
- The operator its self was registered so resetting the defaults would unhelpfully replace the toolbar with the reset to defaults operator panel.
- The callback for the operator wasnt being used so the settings were changed but the operator didnt re-run.
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/UI_interface.h
trunk/blender/source/blender/editors/interface/interface.c
trunk/blender/source/blender/editors/interface/interface_handlers.c
trunk/blender/source/blender/editors/interface/interface_ops.c
trunk/blender/source/blender/makesdna/DNA_ID.h
Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h 2011-09-28 17:57:12 UTC (rev 40670)
+++ trunk/blender/source/blender/editors/include/UI_interface.h 2011-09-28 18:45:17 UTC (rev 40671)
@@ -787,6 +787,7 @@
/* Helpers for Operators */
void uiContextActiveProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index);
+void uiContextActivePropertyHandle(struct bContext *C);
void uiContextAnimUpdate(const struct bContext *C);
void uiFileBrowseContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop);
void uiIDContextProperty(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop);
Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c 2011-09-28 17:57:12 UTC (rev 40670)
+++ trunk/blender/source/blender/editors/interface/interface.c 2011-09-28 18:45:17 UTC (rev 40671)
@@ -746,7 +746,7 @@
* unforseen conciquences, so best check for ID's we _know_ are not
* handled by undo - campbell */
ID *id= but->rnapoin.id.data;
- if(ELEM(GS(id->name), ID_SCR, ID_WM)) {
+ if(ID_CHECK_UNDO(id) == FALSE) {
return FALSE;
}
else {
Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c 2011-09-28 17:57:12 UTC (rev 40670)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c 2011-09-28 18:45:17 UTC (rev 40671)
@@ -5089,19 +5089,16 @@
}
}
-/* helper function for insert keyframe, reset to default, etc operators */
-void uiContextActiveProperty(const bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index)
+static uiBut *ui_context_rna_button_active(const bContext *C)
{
+ uiBut *rnabut= NULL;
+
ARegion *ar= CTX_wm_region(C);
- memset(ptr, 0, sizeof(*ptr));
- *prop= NULL;
- *index= 0;
-
while(ar) {
uiBlock *block;
uiBut *but, *activebut= NULL;
-
+
/* find active button */
for(block=ar->uiblocks.first; block; block=block->next) {
for(but=block->buttons.first; but; but= but->next) {
@@ -5115,27 +5112,56 @@
if(activebut && activebut->rnapoin.data) {
uiHandleButtonData *data= activebut->active;
- /* found RNA button */
- *ptr= activebut->rnapoin;
- *prop= activebut->rnaprop;
- *index= activebut->rnaindex;
+ rnabut= activebut;
/* recurse into opened menu, like colorpicker case */
if(data && data->menu && (ar != data->menu->region)) {
ar = data->menu->region;
}
else {
- return;
+ return rnabut;
}
}
else {
/* no active button */
- return;
+ return rnabut;
}
}
+
+ return rnabut;
}
/* helper function for insert keyframe, reset to default, etc operators */
+void uiContextActiveProperty(const bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index)
+{
+ uiBut *activebut= ui_context_rna_button_active(C);
+
+ memset(ptr, 0, sizeof(*ptr));
+
+ if(activebut && activebut->rnapoin.data) {
+ *ptr= activebut->rnapoin;
+ *prop= activebut->rnaprop;
+ *index= activebut->rnaindex;
+ }
+ else {
+ *prop= NULL;
+ *index= 0;
+ }
+}
+
+void uiContextActivePropertyHandle(bContext *C)
+{
+ uiBut *activebut= ui_context_rna_button_active(C);
+ if(activebut) {
+ /* TODO, look into a better way to handle the button change
+ * currently this is mainly so reset defaults works for the
+ * operator redo panel - campbell */
+ uiBlock *block= activebut->block;
+ block->handle_func(C, block->handle_func_arg, 0);
+ }
+}
+
+/* helper function for insert keyframe, reset to default, etc operators */
void uiContextAnimUpdate(const bContext *C)
{
Scene *scene= CTX_data_scene(C);
Modified: trunk/blender/source/blender/editors/interface/interface_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_ops.c 2011-09-28 17:57:12 UTC (rev 40670)
+++ trunk/blender/source/blender/editors/interface/interface_ops.c 2011-09-28 18:45:17 UTC (rev 40671)
@@ -295,10 +295,31 @@
if(RNA_property_reset(&ptr, prop, (all)? -1: index)) {
/* perform updates required for this property */
RNA_property_update(C, &ptr, prop);
+
+ /* as if we pressed the button */
+ uiContextActivePropertyHandle(C);
+
success= 1;
}
}
-
+
+ /* Since we dont want to undo _all_ edits to settings, eg window
+ * edits on the screen or on operator settings.
+ * it might be better to move undo's inline - campbell */
+ /* Note that buttons already account for this, it might be better to
+ * have a way to edit the buttons rather than set the rna since block
+ * callbacks also fail to run. */
+ if(success) {
+ ID *id= ptr.id.data;
+ if(id && ID_CHECK_UNDO(id)) {
+ /* do nothing, go ahead with undo */
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
+ }
+ /* end hack */
+
return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
}
@@ -314,7 +335,7 @@
ot->exec= reset_default_button_exec;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
/* properties */
RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
Modified: trunk/blender/source/blender/makesdna/DNA_ID.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_ID.h 2011-09-28 17:57:12 UTC (rev 40670)
+++ trunk/blender/source/blender/makesdna/DNA_ID.h 2011-09-28 18:45:17 UTC (rev 40671)
@@ -204,6 +204,8 @@
#define ID_REAL_USERS(id) (((ID *)id)->us - ((((ID *)id)->flag & LIB_FAKEUSER) ? 1:0))
+#define ID_CHECK_UNDO(id) ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM))
+
#ifdef GS
#undef GS
#endif
More information about the Bf-blender-cvs
mailing list