mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +02:00
Allow quote selection only in captions.
This commit is contained in:
parent
d62fb5786d
commit
b463c76eca
3 changed files with 32 additions and 4 deletions
|
@ -176,14 +176,23 @@ private:
|
|||
}
|
||||
preview->update();
|
||||
};
|
||||
const auto media = item->media();
|
||||
const auto onlyMessageText = media
|
||||
&& (media->webpage()
|
||||
|| media->game()
|
||||
|| (!media->photo() && !media->document()));
|
||||
preview->setMouseTracking(true);
|
||||
preview->events() | rpl::start_with_next([=](not_null<QEvent*> e) {
|
||||
const auto type = e->type();
|
||||
const auto mouse = static_cast<QMouseEvent*>(e.get());
|
||||
if (type == QEvent::MouseMove) {
|
||||
auto request = StateRequest{
|
||||
.flags = Ui::Text::StateRequest::Flag::LookupSymbol,
|
||||
.onlyMessageText = onlyMessageText,
|
||||
};
|
||||
auto resolved = state->element->textState(
|
||||
mouse->pos() - state->position,
|
||||
{ .flags = Ui::Text::StateRequest::Flag::LookupSymbol });
|
||||
request);
|
||||
state->over = true;
|
||||
const auto text = (resolved.cursor == CursorState::Text);
|
||||
if (state->textCursor != text) {
|
||||
|
|
|
@ -63,6 +63,7 @@ struct StateRequest {
|
|||
result.flags = flags;
|
||||
return result;
|
||||
}
|
||||
bool onlyMessageText = false;
|
||||
};
|
||||
|
||||
enum class InfoDisplayType : char {
|
||||
|
|
|
@ -2025,6 +2025,10 @@ TextState Message::textState(
|
|||
const auto media = this->media();
|
||||
|
||||
auto result = TextState(item);
|
||||
const auto minSymbol = (_invertMedia && request.onlyMessageText)
|
||||
? visibleMediaTextLength()
|
||||
: 0;
|
||||
result.symbol = minSymbol;
|
||||
|
||||
auto g = countGeometry();
|
||||
if (g.width() < 1 || isHidden()) {
|
||||
|
@ -2158,7 +2162,7 @@ TextState Message::textState(
|
|||
result = bottomInfoResult;
|
||||
}
|
||||
};
|
||||
if (!result.symbol && inBubble) {
|
||||
if (result.symbol <= minSymbol && inBubble) {
|
||||
const auto mediaHeight = mediaDisplayed ? media->height() : 0;
|
||||
const auto mediaLeft = trect.x() - st::msgPadding.left();
|
||||
const auto mediaTop = (!mediaDisplayed || _invertMedia)
|
||||
|
@ -2174,7 +2178,17 @@ TextState Message::textState(
|
|||
result = media->textState(
|
||||
point - QPoint(mediaLeft, mediaTop),
|
||||
request);
|
||||
if (!_invertMedia) {
|
||||
if (_invertMedia) {
|
||||
if (request.onlyMessageText) {
|
||||
result.symbol = minSymbol;
|
||||
result.afterSymbol = false;
|
||||
result.cursor = CursorState::None;
|
||||
}
|
||||
} else if (request.onlyMessageText) {
|
||||
result.symbol = visibleTextLength();
|
||||
result.afterSymbol = false;
|
||||
result.cursor = CursorState::None;
|
||||
} else {
|
||||
result.symbol += visibleTextLength();
|
||||
}
|
||||
} else if (getStateText(point, trect, &result, request)) {
|
||||
|
@ -2208,6 +2222,11 @@ TextState Message::textState(
|
|||
}
|
||||
} else if (media && media->isDisplayed()) {
|
||||
result = media->textState(point - g.topLeft(), request);
|
||||
if (request.onlyMessageText) {
|
||||
result.symbol = 0;
|
||||
result.afterSymbol = false;
|
||||
result.cursor = CursorState::None;
|
||||
}
|
||||
result.symbol += visibleTextLength();
|
||||
}
|
||||
|
||||
|
@ -2220,7 +2239,6 @@ TextState Message::textState(
|
|||
: 0);
|
||||
if (QRect(g.left(), keyboardTop, g.width(), keyboardHeight).contains(point)) {
|
||||
result.link = keyboard->getLink(point - QPoint(g.left(), keyboardTop));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue