Revision: 59558
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59558
Author:   ack-err
Date:     2013-08-27 16:27:28 +0000 (Tue, 27 Aug 2013)
Log Message:
-----------
Not possible to add the same operator twice. Added checks for both drag & drop 
and the menu.

Modified Paths:
--------------
    branches/soc-2013-ui_replay/source/blender/editors/screen/area.c
    
branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/soc-2013-ui_replay/source/blender/editors/screen/area.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/screen/area.c    
2013-08-27 15:43:26 UTC (rev 59557)
+++ branches/soc-2013-ui_replay/source/blender/editors/screen/area.c    
2013-08-27 16:27:28 UTC (rev 59558)
@@ -937,9 +937,6 @@
        
        /* set here, assuming userpref switching forces to call this again */
        ar->overlap = region_is_overlap(win, sa, ar);
-       
-       if (ar->regiontype == RGN_TYPE_TOOL_PROPS)
-               printf("yep, overlep!\n");
 
        /* clear state flags first */
        ar->flag &= ~RGN_FLAG_TOO_SMALL;

Modified: 
branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- 
branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c  
    2013-08-27 15:43:26 UTC (rev 59557)
+++ 
branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c  
    2013-08-27 16:27:28 UTC (rev 59558)
@@ -4156,10 +4156,17 @@
 {
        ScrArea *sa = CTX_wm_area(C);
        ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_MENU_BAR);
+       wmWindowManager *wm = CTX_wm_manager(C);
        
        if (ar && arg1)
        {
                wmOperatorType *ot = (wmOperatorType*)arg1;
+               
+               if (BLI_findstring(&ar->operators, ot->idname, 
offsetof(OperatorListItem, optype_idname))) {
+                       BKE_reportf(&wm->reports, RPT_INFO, "This operator (%s) 
is already present in the menubar.", ot->idname);
+                       return;
+               }
+               
                OperatorListItem *oli = MEM_callocN(sizeof(OperatorListItem), 
"add operator list item to icon shelf");
 
                BLI_strncpy(oli->optype_idname, ot->idname, OP_MAX_TYPENAME);
@@ -4230,7 +4237,7 @@
 {
        ScrArea *sa = CTX_wm_area(C);
        ARegion *ar;
-       PanelType *pt_iter, *pt_new;
+       PanelType *pt_iter;
        char *name = NULL;
        int name_taken = 1;
        
@@ -4297,7 +4304,6 @@
        char *opname = NULL, *panelid = NULL;
        ARegion *ar;
        ScrArea *sa = CTX_wm_area(C);
-       PanelType *pt;
        Panel *pa;
        
        prop = RNA_struct_find_property(op->ptr, "operator");
@@ -4310,12 +4316,6 @@
        
        // get panel
        ar = BKE_area_find_region_type(sa, RGN_TYPE_TOOLS);
-//     for (pt_iter = ar->type->paneltypes.first; pt_iter; pt_iter = 
pt_iter->next) {
-//             if (strcmp(pt_iter->idname, panelid) == 0) {
-//                     pt = pt_iter;
-//                     break;
-//             }
-//     }
 
        for (pa = ar->panels.first; pa; pa = pa->next) {
                if (pa->type && strcmp(pa->type->idname, panelid) == 0) {
@@ -4323,13 +4323,17 @@
                }
        }
 
-       if(pa == NULL) {
+       if (pa == NULL) {
                MEM_freeN(opname);
                MEM_freeN(panelid);
                return OPERATOR_CANCELLED;
        }
        
-       // TODO: actually add the operator id string to the paneltype
+       if (BLI_findstring(&pa->operators, opname, offsetof(OperatorListItem, 
optype_idname))) {
+               BKE_reportf(op->reports, RPT_INFO, "This operator (%s) is 
already present in this panel (%s).", opname, pa->drawname);
+               return OPERATOR_CANCELLED;
+       }
+       
        uiPanelAddOperator(pa, opname);
        
        MEM_freeN(opname);

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

Reply via email to