Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Kdenlive
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
261
Issues
261
List
Boards
Labels
Service Desk
Milestones
Merge Requests
16
Merge Requests
16
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Multimedia
Kdenlive
Commits
55338156
Commit
55338156
authored
Jan 16, 2020
by
Jean-Baptiste Mardelle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix timeline broken behavior on clip deletion.
Related to
#524
parent
b20a7307
Pipeline
#13294
passed with stage
in 13 minutes and 56 seconds
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
27 additions
and
11 deletions
+27
-11
src/timeline2/model/timelinemodel.cpp
src/timeline2/model/timelinemodel.cpp
+1
-2
src/timeline2/model/trackmodel.cpp
src/timeline2/model/trackmodel.cpp
+11
-7
src/timeline2/model/trackmodel.hpp
src/timeline2/model/trackmodel.hpp
+1
-1
src/timeline2/view/qml/timeline.qml
src/timeline2/view/qml/timeline.qml
+6
-0
src/timeline2/view/timelinecontroller.cpp
src/timeline2/view/timelinecontroller.cpp
+8
-1
No files found.
src/timeline2/model/timelinemodel.cpp
View file @
55338156
...
...
@@ -1161,7 +1161,6 @@ bool TimelineModel::requestItemDeletion(int itemId, bool logUndo)
PUSH_UNDO
(
undo
,
redo
,
actionLabel
);
}
TRACE_RES
(
res
);
requestClearSelection
(
true
);
return
res
;
}
...
...
@@ -2442,7 +2441,7 @@ Fun TimelineModel::deregisterClip_lambda(int clipId)
{
return
[
this
,
clipId
]()
{
// qDebug() << " // /REQUEST TL CLP DELETION: " << clipId << "\n--------\nCLIPS COUNT: " << m_allClips.size();
requestClearSelection
(
true
);
// Clear effect stack
clearAssetView
(
clipId
);
Q_ASSERT
(
m_allClips
.
count
(
clipId
)
>
0
);
Q_ASSERT
(
getClipTrackId
(
clipId
)
==
-
1
);
// clip must be deleted from its track at this point
...
...
src/timeline2/model/trackmodel.cpp
View file @
55338156
...
...
@@ -250,7 +250,7 @@ bool TrackModel::requestClipInsertion(int clipId, int position, bool updateView,
// A clip move changed the track duration, update track effects
m_effectStack
->
adjustStackLength
(
true
,
0
,
duration
,
0
,
trackDuration
(),
0
,
undo
,
redo
,
true
);
}
auto
reverse
=
requestClipDeletion_lambda
(
clipId
,
updateView
,
finalMove
,
groupMove
);
auto
reverse
=
requestClipDeletion_lambda
(
clipId
,
updateView
,
finalMove
,
groupMove
,
true
);
UPDATE_UNDO_REDO
(
operation
,
reverse
,
local_undo
,
local_redo
);
UPDATE_UNDO_REDO
(
local_redo
,
local_undo
,
undo
,
redo
);
return
true
;
...
...
@@ -289,7 +289,7 @@ void TrackModel::replugClip(int clipId)
m_playlists
[
target_track
].
unlock
();
}
Fun
TrackModel
::
requestClipDeletion_lambda
(
int
clipId
,
bool
updateView
,
bool
finalMove
,
bool
groupMove
)
Fun
TrackModel
::
requestClipDeletion_lambda
(
int
clipId
,
bool
updateView
,
bool
finalMove
,
bool
groupMove
,
bool
finalDeletion
)
{
QWriteLocker
locker
(
&
m_lock
);
// Find index of clip
...
...
@@ -297,8 +297,15 @@ Fun TrackModel::requestClipDeletion_lambda(int clipId, bool updateView, bool fin
bool
audioOnly
=
m_allClips
[
clipId
]
->
isAudioOnly
();
int
old_in
=
clip_position
;
int
old_out
=
old_in
+
m_allClips
[
clipId
]
->
getPlaytime
();
return
[
clip_position
,
clipId
,
old_in
,
old_out
,
updateView
,
audioOnly
,
finalMove
,
groupMove
,
this
]()
{
return
[
clip_position
,
clipId
,
old_in
,
old_out
,
updateView
,
audioOnly
,
finalMove
,
groupMove
,
finalDeletion
,
this
]()
{
if
(
isLocked
())
return
false
;
if
(
finalDeletion
&&
m_allClips
[
clipId
]
->
selected
)
{
m_allClips
[
clipId
]
->
selected
=
false
;
if
(
auto
ptr
=
m_parent
.
lock
())
{
// item was selected, unselect
ptr
->
requestClearSelection
(
true
);
}
}
auto
clip_loc
=
getClipIndexAt
(
clip_position
);
if
(
updateView
)
{
int
old_clip_index
=
getRowfromClip
(
clipId
);
...
...
@@ -354,11 +361,8 @@ bool TrackModel::requestClipDeletion(int clipId, bool updateView, bool finalMove
auto
old_clip
=
m_allClips
[
clipId
];
int
old_position
=
old_clip
->
getPosition
();
// qDebug() << "/// REQUESTOING CLIP DELETION_: " << updateView;
if
(
finalDeletion
)
{
m_allClips
[
clipId
]
->
selected
=
false
;
}
int
duration
=
trackDuration
();
auto
operation
=
requestClipDeletion_lambda
(
clipId
,
updateView
,
finalMove
,
groupMove
);
auto
operation
=
requestClipDeletion_lambda
(
clipId
,
updateView
,
finalMove
,
groupMove
,
finalDeletion
);
if
(
operation
())
{
if
(
finalMove
&&
duration
!=
trackDuration
())
{
// A clip move changed the track duration, update track effects
...
...
src/timeline2/model/trackmodel.hpp
View file @
55338156
...
...
@@ -155,7 +155,7 @@ protected:
*/
bool
requestClipDeletion
(
int
clipId
,
bool
updateView
,
bool
finalMove
,
Fun
&
undo
,
Fun
&
redo
,
bool
groupMove
,
bool
finalDeletion
);
/* @brief This function returns a lambda that performs the requested operation */
Fun
requestClipDeletion_lambda
(
int
clipId
,
bool
updateView
,
bool
finalMove
,
bool
groupMove
);
Fun
requestClipDeletion_lambda
(
int
clipId
,
bool
updateView
,
bool
finalMove
,
bool
groupMove
,
bool
finalDeletion
);
/* @brief Performs an insertion of the given composition.
Returns true if the operation succeeded, and otherwise, the track is not modified.
...
...
src/timeline2/view/qml/timeline.qml
View file @
55338156
...
...
@@ -50,6 +50,12 @@ Rectangle {
scrollView
.
flickableItem
.
contentX
=
pos
}
function
checkDeletion
(
itemId
)
{
if
(
dragProxy
.
draggedItem
==
itemId
)
{
endDrag
()
}
}
function
updatePalette
()
{
root
.
color
=
activePalette
.
window
root
.
textColor
=
activePalette
.
text
...
...
src/timeline2/view/timelinecontroller.cpp
View file @
55338156
...
...
@@ -90,6 +90,8 @@ void TimelineController::prepareClose()
// Delete timeline preview before resetting model so that removing clips from timeline doesn't invalidate
delete
m_timelinePreview
;
m_timelinePreview
=
nullptr
;
// Clear roor so we don't call its methods anymore
m_root
=
nullptr
;
}
void
TimelineController
::
setModel
(
std
::
shared_ptr
<
TimelineItemModel
>
model
)
...
...
@@ -98,7 +100,12 @@ void TimelineController::setModel(std::shared_ptr<TimelineItemModel> model)
m_zone
=
QPoint
(
-
1
,
-
1
);
m_timelinePreview
=
nullptr
;
m_model
=
std
::
move
(
model
);
connect
(
m_model
.
get
(),
&
TimelineItemModel
::
requestClearAssetView
,
[
&
](
int
id
)
{
pCore
->
clearAssetPanel
(
id
);
});
connect
(
m_model
.
get
(),
&
TimelineItemModel
::
requestClearAssetView
,
[
&
](
int
id
)
{
pCore
->
clearAssetPanel
(
id
);
if
(
m_root
)
{
QMetaObject
::
invokeMethod
(
m_root
,
"checkDeletion"
,
Qt
::
QueuedConnection
,
Q_ARG
(
QVariant
,
id
));
}
});
connect
(
m_model
.
get
(),
&
TimelineItemModel
::
requestMonitorRefresh
,
[
&
]()
{
pCore
->
requestMonitorRefresh
();
});
connect
(
m_model
.
get
(),
&
TimelineModel
::
invalidateZone
,
this
,
&
TimelineController
::
invalidateZone
,
Qt
::
DirectConnection
);
connect
(
m_model
.
get
(),
&
TimelineModel
::
durationUpdated
,
this
,
&
TimelineController
::
checkDuration
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment