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