[Bf-blender-cvs] [6b8c5f49a4d] soc-2020-info-editor: Fix info editor: select what see

Mateusz Grzeliński noreply at git.blender.org
Mon Aug 17 21:24:33 CEST 2020


Commit: 6b8c5f49a4d78263ef03c1d88f9aeb87cf273567
Author: Mateusz Grzeliński
Date:   Mon Aug 17 17:47:36 2020 +0200
Branches: soc-2020-info-editor
https://developer.blender.org/rB6b8c5f49a4d78263ef03c1d88f9aeb87cf273567

Fix info editor: select what see

Before this change it was possible for list to update while you were selecting log. This resulted in unexpected selection shift.
It was also possible with logs, although very unlikely.

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

M	source/blender/editors/space_info/info_clog.c
M	source/blender/editors/space_info/info_draw.c
M	source/blender/editors/space_info/info_intern.h
M	source/blender/editors/space_info/info_report.c
M	source/blender/editors/space_info/space_info.c
M	source/blender/makesdna/DNA_space_types.h

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

diff --git a/source/blender/editors/space_info/info_clog.c b/source/blender/editors/space_info/info_clog.c
index 31e269ccfab..3065b912268 100644
--- a/source/blender/editors/space_info/info_clog.c
+++ b/source/blender/editors/space_info/info_clog.c
@@ -135,7 +135,9 @@ bool is_clog_record_visible(const CLG_LogRecord *record, const SpaceInfo *sinfo)
   return true;
 }
 
-static void log_records_select_all(CLG_LogRecordList *records, const SpaceInfo *sinfo, int action)
+static void log_records_select_all(const CLG_LogRecordList *records,
+                                   const SpaceInfo *sinfo,
+                                   int action)
 {
   if (action == SEL_TOGGLE) {
     action = SEL_SELECT;
@@ -175,7 +177,7 @@ static int select_clog_pick_exec(bContext *C, wmOperator *op)
 
   SpaceInfo *sinfo = CTX_wm_space_info(C);
 
-  CLG_LogRecordList *records = CLG_log_records_get();
+  CLG_LogRecordList *records = (CLG_LogRecordList *)&sinfo->last_drawn_log_records;
   CLG_LogRecord *record = BLI_findlink((const struct ListBase *)records, clog_index);
 
   if (clog_index == INDEX_INVALID) {  // click in empty area
@@ -241,11 +243,11 @@ static int select_clog_pick_invoke(bContext *C, wmOperator *op, const wmEvent *e
 {
   SpaceInfo *sinfo = CTX_wm_space_info(C);
   ARegion *region = CTX_wm_region(C);
-  CLG_LogRecordList *records = CLG_log_records_get();
+  CLG_LogRecordList *records = (CLG_LogRecordList *)&sinfo->last_drawn_log_records;
   CLG_LogRecord *record;
 
   BLI_assert(sinfo->view == INFO_VIEW_CLOG);
-  record = info_text_pick(sinfo, region, NULL, event->mval[1]);
+  record = info_text_pick(sinfo, region, NULL, records, event->mval[1]);
 
   if (record == NULL) {
     RNA_int_set(op->ptr, "clog_index", INDEX_INVALID);
@@ -299,7 +301,7 @@ void INFO_OT_clog_select_pick(wmOperatorType *ot)
 static int clog_select_all_exec(bContext *C, wmOperator *op)
 {
   SpaceInfo *sinfo = CTX_wm_space_info(C);
-  CLG_LogRecordList *records = CLG_log_records_get();
+  CLG_LogRecordList *records = (CLG_LogRecordList *)&sinfo->last_drawn_log_records;
 
   int action = RNA_enum_get(op->ptr, "action");
   log_records_select_all(records, sinfo, action);
@@ -328,7 +330,7 @@ static int box_select_exec(bContext *C, wmOperator *op)
 {
   SpaceInfo *sinfo = CTX_wm_space_info(C);
   ARegion *region = CTX_wm_region(C);
-  CLG_LogRecordList *records = CLG_log_records_get();
+  CLG_LogRecordList *records = (CLG_LogRecordList *)&sinfo->last_drawn_log_records;
   CLG_LogRecord *record_min, *record_max;
   rcti rect;
 
@@ -346,8 +348,8 @@ static int box_select_exec(bContext *C, wmOperator *op)
   }
 
   BLI_assert(sinfo->view == INFO_VIEW_CLOG);
-  record_min = info_text_pick(sinfo, region, NULL, rect.ymax);
-  record_max = info_text_pick(sinfo, region, NULL, rect.ymin);
+  record_min = info_text_pick(sinfo, region, NULL, records, rect.ymax);
+  record_max = info_text_pick(sinfo, region, NULL, records, rect.ymin);
 
   if (record_min == NULL && record_max == NULL) {
     log_records_select_all(records, sinfo, SEL_DESELECT);
@@ -465,7 +467,7 @@ typedef enum eClogCopy {
 static int clog_copy_exec(bContext *C, wmOperator *op)
 {
   SpaceInfo *sinfo = CTX_wm_space_info(C);
-  CLG_LogRecordList *records = CLG_log_records_get();
+  CLG_LogRecordList *records = (CLG_LogRecordList *)&sinfo->last_drawn_log_records;
   eClogCopy copy_type = RNA_enum_get(op->ptr, "method");
   CLG_LogRecord *record;
 
@@ -564,7 +566,7 @@ static struct SpaceInfoFilter *is_filter_duplicate(const ListBase *list,
 static int clog_filter_exec(bContext *C, wmOperator *op)
 {
   SpaceInfo *sinfo = CTX_wm_space_info(C);
-  CLG_LogRecordList *records = CLG_log_records_get();
+  CLG_LogRecordList *records = (CLG_LogRecordList *)&sinfo->last_drawn_log_records;
   eClogFilterMode filter_type = RNA_enum_get(op->ptr, "method");
 
   CLG_LogRecord *record;
diff --git a/source/blender/editors/space_info/info_draw.c b/source/blender/editors/space_info/info_draw.c
index 0c3410d8a70..0af4f853799 100644
--- a/source/blender/editors/space_info/info_draw.c
+++ b/source/blender/editors/space_info/info_draw.c
@@ -36,7 +36,6 @@
 #include "info_intern.h"
 #include "textview.h"
 
-
 static void info_textview_draw_rect_calc(const ARegion *region,
                                          rcti *r_draw_rect,
                                          rcti *r_draw_rect_outer)
@@ -57,6 +56,7 @@ static void info_textview_draw_rect_calc(const ARegion *region,
 static int info_textview_main__internal(const SpaceInfo *sinfo,
                                         const ARegion *region,
                                         const ReportList *reports,
+                                        const CLG_LogRecordList *log_records,
                                         const bool do_draw,
                                         const int mval[2],
                                         void **r_mval_pick_item,
@@ -76,7 +76,7 @@ static int info_textview_main__internal(const SpaceInfo *sinfo,
       tvc.line_draw_data = clog_line_draw_data;
       tvc.end = clog_textview_end;
       tvc.step = clog_textview_step;
-      tvc.arg2 = CLG_log_records_get();
+      tvc.arg2 = log_records;
       break;
     case INFO_VIEW_REPORTS:
       tvc.begin = report_textview_begin;
@@ -108,23 +108,43 @@ static int info_textview_main__internal(const SpaceInfo *sinfo,
 void *info_text_pick(const SpaceInfo *sinfo,
                      const ARegion *region,
                      const ReportList *reports,
+                     const CLG_LogRecordList *log_records,
                      int mval_y)
 {
   void *mval_pick_item = NULL;
   const int mval[2] = {0, mval_y};
 
-  info_textview_main__internal(sinfo, region, reports, false, mval, &mval_pick_item, NULL);
+  info_textview_main__internal(
+      sinfo, region, reports, log_records, false, mval, &mval_pick_item, NULL);
   return (void *)mval_pick_item;
 }
 
-int info_textview_height(const SpaceInfo *sinfo, const ARegion *region, const ReportList *reports)
+int info_textview_height(const SpaceInfo *sinfo,
+                         const ARegion *region,
+                         const ReportList *reports,
+                         const CLG_LogRecordList *log_records)
 {
   const int mval[2] = {INT_MAX, INT_MAX};
-  return info_textview_main__internal(sinfo, region, reports, false, mval, NULL, NULL);
+  return info_textview_main__internal(
+      sinfo, region, reports, log_records, false, mval, NULL, NULL);
 }
 
-void info_textview_main(const SpaceInfo *sinfo, const ARegion *region, const ReportList *reports)
+void info_textview_main(SpaceInfo *sinfo,
+                        const ARegion *region,
+                        const ReportList *reports,
+                        const CLG_LogRecordList *log_records)
 {
   const int mval[2] = {INT_MAX, INT_MAX};
-  info_textview_main__internal(sinfo, region, reports, true, mval, NULL, NULL);
+  switch (sinfo->view) {
+    case INFO_VIEW_CLOG:
+      sinfo->last_drawn_log_records.last = log_records->last;
+      sinfo->last_drawn_log_records.first = log_records->first;
+      break;
+    case INFO_VIEW_REPORTS:
+      memcpy(&sinfo->last_drawn_reports, reports, sizeof(*reports));
+      break;
+    default:
+      BLI_assert(false);
+  }
+  info_textview_main__internal(sinfo, region, reports, log_records, true, mval, NULL, NULL);
 }
diff --git a/source/blender/editors/space_info/info_intern.h b/source/blender/editors/space_info/info_intern.h
index 11622ddc21a..aded8c58e0e 100644
--- a/source/blender/editors/space_info/info_intern.h
+++ b/source/blender/editors/space_info/info_intern.h
@@ -33,6 +33,7 @@ struct wmOperatorType;
 struct TextViewContext;
 struct TextLine;
 struct CLG_LogRecord;
+struct CLG_LogRecordList;
 enum eTextViewContext_LineDrawFlag;
 
 #define INDEX_INVALID -1
@@ -62,13 +63,16 @@ void INFO_OT_log_type_filter_remove(struct wmOperatorType *ot);
 void *info_text_pick(const struct SpaceInfo *sinfo,
                      const struct ARegion *region,
                      const struct ReportList *reports,
-                     int mouse_y);
+                     const struct CLG_LogRecordList *log_records,
+                     int mval_y);
 int info_textview_height(const struct SpaceInfo *sinfo,
                          const struct ARegion *region,
-                         const struct ReportList *reports);
-void info_textview_main(const struct SpaceInfo *sinfo,
+                         const struct ReportList *reports,
+                         const struct CLG_LogRecordList *log_records);
+void info_textview_main(struct SpaceInfo *sinfo,
                         const struct ARegion *region,
-                        const struct ReportList *reports);
+                        const struct ReportList *reports,
+                        const struct CLG_LogRecordList *log_records);
 
 /* info_report.c */
 bool is_report_visible(const struct Report *report, const struct SpaceInfo *sinfo);
diff --git a/source/blender/editors/space_info/info_report.c b/source/blender/editors/space_info/info_report.c
index 3e813f55540..f6c9e4c9000 100644
--- a/source/blender/editors/space_info/info_report.c
+++ b/source/blender/editors/space_info/info_report.c
@@ -100,7 +100,7 @@ bool is_report_visible(const Report *report, const SpaceInfo *sinfo)
   return true;
 }
 
-static void reports_select_all(ReportList *reports, SpaceInfo *sinfo, int action)
+static void reports_select_all(ReportList *reports, const SpaceInfo *sinfo, int action)
 {
   if (action == SEL_TOGGLE) {
     action = SEL_SELECT;
@@ -135,7 +135,7 @@ static void reports_select_all(ReportList *reports, SpaceInfo *sinfo, int action
 static int report_replay_exec(bContext *C, wmOperator *UNUSED(op))
 {
   //  SpaceInfo *sc = CTX_wm_space_info(C);
-  //  ReportList *reports = CTX_wm_reports(C);
+  //  const ReportList *reports = &sinfo->last_drawn_reports;
   //  int report_mask = info_report_mask(sc);
   //  Report *report;
 
@@ -185,7 +185,7 @@ static int select_report_pick_exec(bContext *C, wmOperator *op)
 
   SpaceInfo *sinfo = CTX_wm_space_info(C);
 
-  ReportList *reports = CTX_wm_reports(C);
+  ReportList *reports = &sinfo->last_drawn_reports;
   Report *report = BLI_findlink(&reports->l

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list