Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Utilities
Kate
Commits
5abbcb31
Commit
5abbcb31
authored
Dec 13, 2021
by
Waqar Ahmed
Browse files
Ensure to clean up saved ranges when docs close
(cherry picked from commit
eb5956e5
)
parent
ff63da89
Pipeline
#112831
passed with stage
in 4 minutes and 19 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
addons/rainbow-parens/rainbowparens_plugin.cpp
View file @
5abbcb31
...
...
@@ -85,22 +85,12 @@ void RainbowParenPluginView::updateColors(KTextEditor::Editor *editor)
}
}
static
void
clearSavedRangesForView
(
std
::
vector
<
RainbowParenPluginView
::
ViewSavedRanges
>
&
ranges
,
KTextEditor
::
View
*
v
)
static
void
getSavedRangesForDoc
(
std
::
vector
<
RainbowParenPluginView
::
SavedRanges
>
&
ranges
,
std
::
vector
<
std
::
unique_ptr
<
KTextEditor
::
MovingRange
>>
&
outRanges
,
KTextEditor
::
Document
*
d
)
{
auto
it
=
std
::
find_if
(
ranges
.
begin
(),
ranges
.
end
(),
[
v
](
const
RainbowParenPluginView
::
ViewSavedRanges
&
r
)
{
return
r
.
view
==
v
;
});
if
(
it
!=
ranges
.
end
())
{
ranges
.
erase
(
it
);
}
}
static
void
getSavedRangesForView
(
std
::
vector
<
RainbowParenPluginView
::
ViewSavedRanges
>
&
ranges
,
std
::
vector
<
std
::
unique_ptr
<
KTextEditor
::
MovingRange
>>
&
outRanges
,
KTextEditor
::
View
*
v
)
{
auto
it
=
std
::
find_if
(
ranges
.
begin
(),
ranges
.
end
(),
[
v
](
const
RainbowParenPluginView
::
ViewSavedRanges
&
r
)
{
return
r
.
view
==
v
;
auto
it
=
std
::
find_if
(
ranges
.
begin
(),
ranges
.
end
(),
[
d
](
const
RainbowParenPluginView
::
SavedRanges
&
r
)
{
return
r
.
doc
==
d
;
});
if
(
it
!=
ranges
.
end
())
{
outRanges
=
std
::
move
(
it
->
ranges
);
...
...
@@ -120,24 +110,28 @@ void RainbowParenPluginView::viewChanged(KTextEditor::View *view)
disconnect
(
doc
,
SIGNAL
(
aboutToInvalidateMovingInterfaceContent
(
KTextEditor
::
Document
*
)),
this
,
SLOT
(
clearRanges
(
KTextEditor
::
Document
*
)));
// Remove if we already have this view's ranges saved
clearSavedRangesFor
View
(
savedRanges
,
m_activeView
);
clearSavedRangesFor
Doc
(
doc
);
// save these ranges so that if we are in a split view etc, we don't
// loose the bracket coloring
View
SavedRanges
saved
;
saved
.
view
=
m_activeView
;
SavedRanges
saved
;
saved
.
doc
=
doc
;
saved
.
ranges
=
std
::
move
(
ranges
);
savedRanges
.
push_back
(
std
::
move
(
saved
));
if
(
savedRanges
.
size
()
>
4
)
{
savedRanges
.
erase
(
savedRanges
.
begin
());
}
// clear ranges for this doc if it gets closed
connect
(
doc
,
SIGNAL
(
aboutToDeleteMovingInterfaceContent
(
KTextEditor
::
Document
*
)),
this
,
SLOT
(
clearSavedRangesForDoc
(
KTextEditor
::
Document
*
)));
connect
(
doc
,
SIGNAL
(
aboutToInvalidateMovingInterfaceContent
(
KTextEditor
::
Document
*
)),
this
,
SLOT
(
clearSavedRangesForDoc
(
KTextEditor
::
Document
*
)));
}
ranges
.
clear
();
m_activeView
=
view
;
// get any existing ranges for this view
getSavedRangesFor
View
(
savedRanges
,
ranges
,
m_activeView
);
getSavedRangesFor
Doc
(
savedRanges
,
ranges
,
m_activeView
->
document
()
);
connect
(
view
,
&
KTextEditor
::
View
::
verticalScrollPositionChanged
,
this
,
&
RainbowParenPluginView
::
rehighlight
,
Qt
::
UniqueConnection
);
connect
(
view
,
&
KTextEditor
::
View
::
textInserted
,
this
,
&
RainbowParenPluginView
::
rehighlight
,
Qt
::
UniqueConnection
);
...
...
@@ -158,6 +152,16 @@ void RainbowParenPluginView::clearRanges(KTextEditor::Document *)
ranges
.
clear
();
}
void
RainbowParenPluginView
::
clearSavedRangesForDoc
(
KTextEditor
::
Document
*
doc
)
{
auto
it
=
std
::
find_if
(
savedRanges
.
begin
(),
savedRanges
.
end
(),
[
doc
](
const
RainbowParenPluginView
::
SavedRanges
&
r
)
{
return
r
.
doc
==
doc
;
});
if
(
it
!=
savedRanges
.
end
())
{
savedRanges
.
erase
(
it
);
}
}
static
bool
isComment
(
KTextEditor
::
Document
*
doc
,
int
line
,
int
col
)
{
return
doc
->
defaultStyleAt
({
line
,
col
})
==
KTextEditor
::
DefaultStyle
::
dsComment
;
...
...
addons/rainbow-parens/rainbowparens_plugin.h
View file @
5abbcb31
...
...
@@ -37,12 +37,13 @@ public:
void
viewChanged
(
KTextEditor
::
View
*
view
);
Q_SLOT
void
clearRanges
(
KTextEditor
::
Document
*
doc
);
Q_SLOT
void
clearSavedRangesForDoc
(
KTextEditor
::
Document
*
doc
);
struct
View
SavedRanges
{
QPointer
<
KTextEditor
::
View
>
view
;
struct
SavedRanges
{
QPointer
<
KTextEditor
::
Document
>
doc
;
std
::
vector
<
std
::
unique_ptr
<
KTextEditor
::
MovingRange
>>
ranges
;
};
std
::
vector
<
View
SavedRanges
>
savedRanges
;
std
::
vector
<
SavedRanges
>
savedRanges
;
private:
std
::
vector
<
std
::
unique_ptr
<
KTextEditor
::
MovingRange
>>
ranges
;
...
...
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