app-office/calligra: Fix configure, remove file collisions, crash fixes
[gentoo.git] / app-office / calligra / files / calligra-3.0.0-plan-crash.patch
1 From dd2cb16ab43d21ee25ba6ebfb36cd68ec9879c4f Mon Sep 17 00:00:00 2001
2 From: Dag Andersen <danders@get2net.dk>
3 Date: Mon, 12 Dec 2016 10:07:38 +0100
4 Subject: Plan: Fix crash on close
5
6 Due to accessing project node during delete
7
8 BUG: 373527
9 FIXED-IN: 3.0.0
10 ---
11  plan/libs/kernel/kptnode.cpp     | 14 ++++++++++++--
12  plan/libs/kernel/kptnode.h       |  5 ++++-
13  plan/libs/kernel/kptproject.cpp  | 11 ++++++++++-
14  plan/libs/kernel/kptresource.cpp | 20 ++++++++++++++++----
15  plan/libs/kernel/kptresource.h   |  7 ++++++-
16  5 files changed, 48 insertions(+), 9 deletions(-)
17
18 diff --git a/plan/libs/kernel/kptnode.cpp b/plan/libs/kernel/kptnode.cpp
19 index d8b0e6b..e55f9ca 100644
20 --- a/plan/libs/kernel/kptnode.cpp
21 +++ b/plan/libs/kernel/kptnode.cpp
22 @@ -40,7 +40,8 @@ namespace KPlato
23  Node::Node(Node *parent) 
24      : QObject( 0 ), // We don't use qobjects parent
25        m_nodes(), m_dependChildNodes(), m_dependParentNodes(),
26 -      m_estimate( 0 )
27 +      m_estimate( 0 ),
28 +      m_blockChanged(false)
29  {
30      //debugPlan<<"("<<this<<")";
31      m_parent = parent;
32 @@ -53,7 +54,8 @@ Node::Node(const Node &node, Node *parent)
33        m_nodes(), 
34        m_dependChildNodes(), 
35        m_dependParentNodes(),
36 -      m_estimate( 0 )
37 +      m_estimate( 0 ),
38 +      m_blockChanged(false)
39  {
40      //debugPlan<<"("<<this<<")";
41      m_parent = parent;
42 @@ -1225,7 +1227,15 @@ void Node::setRunningAccount(Account *acc)
43      changed();
44  }
45  
46 +void Node::blockChanged(bool on)
47 +{
48 +    m_blockChanged = on;
49 +}
50 +
51  void Node::changed(Node *node, int property) {
52 +    if (m_blockChanged) {
53 +        return;
54 +    }
55      switch ( property) {
56          case Type:
57          case StartupCost:
58 diff --git a/plan/libs/kernel/kptnode.h b/plan/libs/kernel/kptnode.h
59 index cfcbd3e..4c98acc 100644
60 --- a/plan/libs/kernel/kptnode.h
61 +++ b/plan/libs/kernel/kptnode.h
62 @@ -528,6 +528,8 @@ public:
63      virtual void emitDocumentRemoved( Node *node, Document *doc, int idx );
64      virtual void emitDocumentChanged( Node *node, Document *doc, int idx );
65      
66 +    void blockChanged(bool on = true);
67 +
68  public:
69      // These shouldn't be available to other than those who inherits
70      /// Calculate the critical path
71 @@ -673,7 +675,8 @@ protected:
72      ResourceRequestCollection m_requests;
73  
74  private:
75 -    void init();        
76 +    void init();
77 +    bool m_blockChanged;
78  };
79  
80  ////////////////////////////////   Estimate   ////////////////////////////////
81 diff --git a/plan/libs/kernel/kptproject.cpp b/plan/libs/kernel/kptproject.cpp
82 index 30cd450..d2fafb5 100644
83 --- a/plan/libs/kernel/kptproject.cpp
84 +++ b/plan/libs/kernel/kptproject.cpp
85 @@ -94,7 +94,16 @@ void Project::deref()
86  Project::~Project()
87  {
88      debugPlan;
89 -    disconnect(); // NOTE: may be a problem if somebody uses the destroyd() signal
90 +    disconnect();
91 +    for(Node *n : nodeIdDict) {
92 +        n->blockChanged();
93 +    }
94 +    for (Resource *r : resourceIdDict) {
95 +        r->blockChanged();
96 +    }
97 +    for (ResourceGroup *g : resourceGroupIdDict) {
98 +        g->blockChanged();
99 +    }
100      delete m_standardWorktime;
101      while ( !m_resourceGroups.isEmpty() )
102          delete m_resourceGroups.takeFirst();
103 diff --git a/plan/libs/kernel/kptresource.cpp b/plan/libs/kernel/kptresource.cpp
104 index 8a3d55e..b32d4e7 100644
105 --- a/plan/libs/kernel/kptresource.cpp
106 +++ b/plan/libs/kernel/kptresource.cpp
107 @@ -44,7 +44,8 @@ namespace KPlato
108  {
109  
110  ResourceGroup::ResourceGroup()
111 -    : QObject( 0 ) 
112 +    : QObject( 0 ),
113 +    m_blockChanged(false)
114  {
115      m_project = 0;
116      m_type = Type_Work;
117 @@ -80,8 +81,13 @@ void ResourceGroup::copy( const ResourceGroup *group )
118      m_name = group->m_name;
119  }
120  
121 +void ResourceGroup::blockChanged(bool on)
122 +{
123 +    m_blockChanged = on;
124 +}
125 +
126  void ResourceGroup::changed() {
127 -    if ( m_project ) {
128 +    if (m_project && !m_blockChanged) {
129          m_project->changed( this );
130      }
131  }
132 @@ -319,7 +325,8 @@ Resource::Resource()
133      m_project(0),
134      m_parent( 0 ),
135      m_autoAllocate( false ),
136 -    m_currentSchedule( 0 )
137 +    m_currentSchedule( 0 ),
138 +    m_blockChanged(false)
139  {
140      m_type = Type_Work;
141      m_units = 100; // %
142 @@ -409,9 +416,14 @@ void Resource::copy(Resource *resource) {
143      //m_externalNames = resource->m_externalNames;
144  }
145  
146 +void Resource::blockChanged(bool on)
147 +{
148 +    m_blockChanged = on;
149 +}
150 +
151  void Resource::changed()
152  {
153 -    if ( m_project ) {
154 +    if (m_project && !m_blockChanged) {
155          m_project->changed( this );
156      }
157  }
158 diff --git a/plan/libs/kernel/kptresource.h b/plan/libs/kernel/kptresource.h
159 index 10f6b92..fba020a 100644
160 --- a/plan/libs/kernel/kptresource.h
161 +++ b/plan/libs/kernel/kptresource.h
162 @@ -177,6 +177,8 @@ public:
163      DateTime startTime( long id ) const;
164      DateTime endTime( long id ) const;
165  
166 +    void blockChanged(bool on = true);
167 +
168  #ifndef NDEBUG
169  
170      void printDebug( const QString& ident );
171 @@ -199,7 +201,7 @@ private:
172      Type m_type;
173  
174      QList<ResourceGroupRequest*> m_requests;
175 -
176 +    bool m_blockChanged;
177  };
178  
179  /**
180 @@ -492,6 +494,8 @@ public:
181      /// Set the @p account
182      void setAccount( Account *account );
183  
184 +    void blockChanged(bool on = true);
185 +
186      // for xml loading code
187      
188      class WorkInfoCache
189 @@ -564,6 +568,7 @@ private:
190  
191      // return this if resource has no calendar and is a material resource
192      Calendar m_materialCalendar;
193 +    bool m_blockChanged;
194  
195  #ifndef NDEBUG
196  public:
197 -- 
198 cgit v0.11.2
199