improved mentions dropdown, version 0.8.28.dev

This commit is contained in:
John Preston 2015-06-18 20:24:54 +03:00
parent 391b370b0f
commit 11384743bc
16 changed files with 179 additions and 78 deletions

View File

@ -1,9 +1,9 @@
@echo OFF @echo OFF
set "AppVersion=8027" set "AppVersion=8028"
set "AppVersionStrSmall=0.8.27" set "AppVersionStrSmall=0.8.28"
set "AppVersionStr=0.8.27" set "AppVersionStr=0.8.28"
set "AppVersionStrFull=0.8.27.0" set "AppVersionStrFull=0.8.28.0"
set "DevChannel=1" set "DevChannel=1"
if %DevChannel% neq 0 goto preparedev if %DevChannel% neq 0 goto preparedev

View File

@ -1053,7 +1053,7 @@ textRectMargins: margins(-2px, -1px, -2px, -1px);
taMsgField: flatTextarea(taDefFlat) { taMsgField: flatTextarea(taDefFlat) {
font: msgFont; font: msgFont;
} }
maxFieldHeight: 265px; maxFieldHeight: 223px;
newMsgSound: ':/gui/art/newmsg.wav'; newMsgSound: ':/gui/art/newmsg.wav';
@ -1664,8 +1664,9 @@ stickerPanPadding: 11px;
stickerPanDelete: sprite(123px, 132px, 12px, 12px); stickerPanDelete: sprite(123px, 132px, 12px, 12px);
stickerPanDeleteOpacity: 0.5; stickerPanDeleteOpacity: 0.5;
stickerIconPadding: 3px; stickerIconPadding: 3px;
stickerIconHover: #e8ecef; stickerIconOpacity: 0.7;
stickerIconSel: #dfe3e6; stickerIconSel: 2px;
stickerIconSelColor: #58b2ed;
stickerIconRecent: sprite(342px, 50px, 21px, 22px); stickerIconRecent: sprite(342px, 50px, 21px, 22px);
stickerIconLeft: sprite(342px, 72px, 40px, 1px); stickerIconLeft: sprite(342px, 72px, 40px, 1px);
stickerIconRight: sprite(342px, 73px, 40px, 1px); stickerIconRight: sprite(342px, 73px, 40px, 1px);
@ -1680,9 +1681,9 @@ botKbFont: font(16px);
botKbButton: botKeyboardButton { botKbButton: botKeyboardButton {
margin: 10px; margin: 10px;
padding: 10px; padding: 10px;
height: 46px; height: 36px;
textTop: 13px; textTop: 8px;
downTextTop: 14px; downTextTop: 9px;
} }
botKbTinyButton: botKeyboardButton { botKbTinyButton: botKeyboardButton {
margin: 4px; margin: 4px;

View File

@ -540,6 +540,8 @@ namespace App {
} }
} }
if (!chat->participants.isEmpty()) { if (!chat->participants.isEmpty()) {
History *h = App::historyLoaded(chat->id);
bool found = !h || !h->lastKeyboardFrom;
int32 botStatus = -1; int32 botStatus = -1;
for (ChatData::Participants::iterator i = chat->participants.begin(), e = chat->participants.end(); i != e;) { for (ChatData::Participants::iterator i = chat->participants.begin(), e = chat->participants.end(); i != e;) {
if (i.value() < pversion) { if (i.value() < pversion) {
@ -549,10 +551,18 @@ namespace App {
botStatus = (botStatus > 0/* || i.key()->botInfo->readsAllHistory*/) ? 2 : 1; botStatus = (botStatus > 0/* || i.key()->botInfo->readsAllHistory*/) ? 2 : 1;
if (requestBotInfos && !i.key()->botInfo->inited) App::api()->requestFullPeer(i.key()); if (requestBotInfos && !i.key()->botInfo->inited) App::api()->requestFullPeer(i.key());
} }
if (!found && i.key()->id == h->lastKeyboardFrom) {
found = true;
}
++i; ++i;
} }
} }
chat->botStatus = botStatus; chat->botStatus = botStatus;
if (!found) {
h->lastKeyboardId = 0;
h->lastKeyboardFrom = 0;
if (App::main()) App::main()->updateBotKeyboard();
}
} }
if (App::main()) App::main()->peerUpdated(chat); if (App::main()) App::main()->peerUpdated(chat);
} }
@ -604,6 +614,13 @@ namespace App {
if (i != chat->participants.end()) { if (i != chat->participants.end()) {
chat->participants.erase(i); chat->participants.erase(i);
chat->count--; chat->count--;
History *h = App::historyLoaded(chat->id);
if (h && h->lastKeyboardFrom == user->id) {
h->lastKeyboardId = 0;
h->lastKeyboardFrom = 0;
if (App::main()) App::main()->updateBotKeyboard();
}
} }
if (chat->botStatus > 0 && user->botInfo) { if (chat->botStatus > 0 && user->botInfo) {
int32 botStatus = -1; int32 botStatus = -1;

View File

@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
*/ */
#pragma once #pragma once
static const int32 AppVersion = 8027; static const int32 AppVersion = 8028;
static const wchar_t *AppVersionStr = L"0.8.27"; static const wchar_t *AppVersionStr = L"0.8.28";
static const bool DevChannel = true; static const bool DevChannel = true;
static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)";

View File

@ -1670,7 +1670,7 @@ _travel(this , qsl("emoji_group"), dbietTravel , QString(), false, st::r
_objects(this , qsl("emoji_group"), dbietObjects , QString(), false, st::rbEmojiObjects), _objects(this , qsl("emoji_group"), dbietObjects , QString(), false, st::rbEmojiObjects),
_iconOver(-1), _iconSel(0), _iconDown(-1), _iconsDragging(false), _iconOver(-1), _iconSel(0), _iconDown(-1), _iconsDragging(false),
_iconAnim(animFunc(this, &EmojiPan::iconAnim)), _iconAnim(animFunc(this, &EmojiPan::iconAnim)),
_iconsLeft(0), _iconsTop(0), _iconsStartX(0), _iconsMax(0), _iconsX(0, 0), _iconsStartAnim(0), _iconsLeft(0), _iconsTop(0), _iconsStartX(0), _iconsMax(0), _iconsX(0, 0), _iconSelX(0, 0), _iconsStartAnim(0),
_stickersShown(false), _moveStart(0), _stickersShown(false), _moveStart(0),
e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_inner(), _removingSetId(0) { e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_inner(), _removingSetId(0) {
setFocusPolicy(Qt::NoFocus); setFocusPolicy(Qt::NoFocus);
@ -1765,16 +1765,21 @@ void EmojiPan::paintEvent(QPaintEvent *e) {
if (_stickersShown) { if (_stickersShown) {
p.fillRect(r.left(), _iconsTop, r.width(), st::rbEmoji.height, st::emojiPanCategories->b); p.fillRect(r.left(), _iconsTop, r.width(), st::rbEmoji.height, st::emojiPanCategories->b);
if (!_icons.isEmpty()) { if (!_icons.isEmpty()) {
int32 x = _iconsLeft, i = 0; int32 x = _iconsLeft, i = 0, selxrel = _iconSelX.current(), selx = x + selxrel - _iconsX.current();
if (!_icons.at(i).sticker) { if (!_icons.at(i).sticker) {
if (_iconSel == i) { if (selxrel > 0) {
p.fillRect(rtl() ? (width() - x - st::rbEmoji.width) : x, _iconsTop, st::rbEmoji.width, st::rbEmoji.height, st::stickerIconSel->b); if (_iconHovers.at(i) < 1) {
} else if (_iconHovers.at(i) > 0) { p.drawSpriteLeft(x + st::rbEmojiRecent.imagePos.x(), _iconsTop + st::rbEmojiRecent.imagePos.y(), width(), st::rbEmojiRecent.imageRect);
p.setOpacity(_iconHovers.at(i)); }
p.fillRect(rtl() ? (width() - x - st::rbEmoji.width) : x, _iconsTop, st::rbEmoji.width, st::rbEmoji.height, st::stickerIconHover->b); if (_iconHovers.at(i) > 0) {
p.drawSpriteLeft(x + st::rbEmojiRecent.imagePos.x(), _iconsTop + st::rbEmojiRecent.imagePos.y(), width(), st::rbEmojiRecent.overImageRect);
}
}
if (selxrel < st::rbEmoji.width) {
p.setOpacity(1 - (selxrel / st::rbEmoji.width));
p.drawSpriteLeft(x + st::rbEmojiRecent.imagePos.x(), _iconsTop + st::rbEmojiRecent.imagePos.y(), width(), st::rbEmojiRecent.chkImageRect);
p.setOpacity(1); p.setOpacity(1);
} }
p.drawSpriteLeft(x + st::rbEmojiRecent.imagePos.x(), _iconsTop + st::rbEmojiRecent.imagePos.y(), width(), st::stickerIconRecent);
x += st::rbEmoji.width; x += st::rbEmoji.width;
++i; ++i;
} }
@ -1790,15 +1795,19 @@ void EmojiPan::paintEvent(QPaintEvent *e) {
s.sticker->thumb->load(); s.sticker->thumb->load();
QPixmap pix(s.sticker->thumb->pix(s.pixw, s.pixh)); QPixmap pix(s.sticker->thumb->pix(s.pixw, s.pixh));
if (_iconSel == i) { if (_iconSel == i) {
p.fillRect(rtl() ? (width() - x - st::rbEmoji.width) : x, _iconsTop, st::rbEmoji.width, st::rbEmoji.height, st::stickerIconSel->b);
} else if (_iconHovers.at(i) > 0) {
p.setOpacity(_iconHovers.at(i));
p.fillRect(rtl() ? (width() - x - st::rbEmoji.width) : x, _iconsTop, st::rbEmoji.width, st::rbEmoji.height, st::stickerIconHover->b);
p.setOpacity(1); p.setOpacity(1);
} else {
p.setOpacity(1. * _iconHovers.at(i) + st::stickerIconOpacity * (1 - _iconHovers.at(i)));
} }
p.drawPixmapLeft(x + (st::rbEmoji.width - s.pixw) / 2, _iconsTop + (st::rbEmoji.height - s.pixh) / 2, width(), pix); p.drawPixmapLeft(x + (st::rbEmoji.width - s.pixw) / 2, _iconsTop + (st::rbEmoji.height - s.pixh) / 2, width(), pix);
x += st::rbEmoji.width; x += st::rbEmoji.width;
p.setOpacity(1);
} }
if (rtl()) selx = width() - selx - st::rbEmoji.width;
p.setOpacity(_icons.at(0).sticker ? 1. : qMax(1., selx / st::rbEmoji.width));
p.fillRect(selx, _iconsTop + st::rbEmoji.height - st::stickerIconPadding, st::rbEmoji.width, st::stickerIconSel, st::stickerIconSelColor->b);
float64 o_left = snap(float64(_iconsX.current()) / st::stickerIconLeft.pxWidth(), 0., 1.); float64 o_left = snap(float64(_iconsX.current()) / st::stickerIconLeft.pxWidth(), 0., 1.);
if (o_left > 0) { if (o_left > 0) {
p.setOpacity(o_left); p.setOpacity(o_left);
@ -1983,6 +1992,7 @@ void EmojiPan::onRefreshIcons() {
_iconAnimations.clear(); _iconAnimations.clear();
s_inner.fillIcons(_icons); s_inner.fillIcons(_icons);
_iconsX = anim::ivalue(0, 0); _iconsX = anim::ivalue(0, 0);
_iconSelX.finish();
_iconsStartAnim = 0; _iconsStartAnim = 0;
_iconAnim.stop(); _iconAnim.stop();
if (_icons.isEmpty()) { if (_icons.isEmpty()) {
@ -2076,8 +2086,10 @@ bool EmojiPan::iconAnim(float64 ms) {
if (dt >= 1) { if (dt >= 1) {
_iconsStartAnim = 0; _iconsStartAnim = 0;
_iconsX.finish(); _iconsX.finish();
_iconSelX.finish();
} else { } else {
_iconsX.update(dt, anim::linear); _iconsX.update(dt, anim::linear);
_iconSelX.update(dt, anim::linear);
} }
updateSelected(); updateSelected();
} }
@ -2161,6 +2173,7 @@ void EmojiPan::hideFinish() {
_iconOver = _iconDown = -1; _iconOver = _iconDown = -1;
_iconSel = 0; _iconSel = 0;
_iconsX = anim::ivalue(0, 0); _iconsX = anim::ivalue(0, 0);
_iconSelX = anim::ivalue(0, 0);
_iconsStartAnim = 0; _iconsStartAnim = 0;
_iconAnim.stop(); _iconAnim.stop();
_iconHovers = _icons.isEmpty() ? QVector<float64>() : QVector<float64>(_icons.size(), 0); _iconHovers = _icons.isEmpty() ? QVector<float64>() : QVector<float64>(_icons.size(), 0);
@ -2319,6 +2332,7 @@ void EmojiPan::onScroll() {
} }
if (newSel != _iconSel) { if (newSel != _iconSel) {
_iconSel = newSel; _iconSel = newSel;
_iconSelX.start(newSel * st::rbEmoji.width);
_iconsX.start(snap((2 * newSel - 7 - ((_icons.isEmpty() || _icons.at(0).sticker) ? 0 : 1)) * int(st::rbEmoji.width) / 2, 0, _iconsMax)); _iconsX.start(snap((2 * newSel - 7 - ((_icons.isEmpty() || _icons.at(0).sticker) ? 0 : 1)) * int(st::rbEmoji.width) / 2, 0, _iconsMax));
_iconsStartAnim = getms(); _iconsStartAnim = getms();
_iconAnim.start(); _iconAnim.start();
@ -2426,7 +2440,7 @@ void MentionsInner::paintEvent(QPaintEvent *e) {
} }
p.setPen(st::black->p); p.setPen(st::black->p);
if (!_rows->isEmpty()) { if (!_rows->isEmpty()) {
UserData *user = _rows->at(last - i - 1); UserData *user = _rows->at(i);
QString first = (_parent->filter().size() < 2) ? QString() : ('@' + user->username.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('@' + user->username) : user->username.mid(_parent->filter().size() - 1); QString first = (_parent->filter().size() < 2) ? QString() : ('@' + user->username.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('@' + user->username) : user->username.mid(_parent->filter().size() - 1);
int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth();
if (availwidth < unamewidth + namewidth) { if (availwidth < unamewidth + namewidth) {
@ -2455,7 +2469,8 @@ void MentionsInner::paintEvent(QPaintEvent *e) {
p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second);
} }
} else if (!_hrows->isEmpty()) { } else if (!_hrows->isEmpty()) {
QString first = (_parent->filter().size() < 2) ? QString() : ('#' + _hrows->at(last - i - 1).mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('#' + _hrows->at(last - i - 1)) : _hrows->at(last - i - 1).mid(_parent->filter().size() - 1); QString hrow = _hrows->at(i);
QString first = (_parent->filter().size() < 2) ? QString() : ('#' + hrow.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('#' + hrow) : hrow.mid(_parent->filter().size() - 1);
int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second);
if (htagwidth < firstwidth + secondwidth) { if (htagwidth < firstwidth + secondwidth) {
if (htagwidth < firstwidth + st::mentionFont->elidew) { if (htagwidth < firstwidth + st::mentionFont->elidew) {
@ -2476,9 +2491,9 @@ void MentionsInner::paintEvent(QPaintEvent *e) {
p.drawText(htagleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); p.drawText(htagleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second);
} }
} else { } else {
UserData *user = _crows->at(last - i - 1).first; UserData *user = _crows->at(i).first;
const BotCommand &command = _crows->at(last - i - 1).second; const BotCommand &command = _crows->at(i).second;
QString toHighlight = command.command; QString toHighlight = command.command;
int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1;
if (hasUsername || botStatus == 0 || botStatus == 2) { if (hasUsername || botStatus == 0 || botStatus == 2) {
@ -2551,19 +2566,21 @@ void MentionsInner::mouseMoveEvent(QMouseEvent *e) {
void MentionsInner::clearSel() { void MentionsInner::clearSel() {
_mouseSel = _overDelete = false; _mouseSel = _overDelete = false;
setSel(-1); setSel((_rows->isEmpty() && _crows->isEmpty() && _hrows->isEmpty()) ? -1 : 0);
} }
bool MentionsInner::moveSel(int direction) { bool MentionsInner::moveSel(int direction) {
_mouseSel = false; _mouseSel = false;
int32 maxSel = (_rows->isEmpty() ? (_hrows->isEmpty() ? _crows->size() : _hrows->size()) : _rows->size()); int32 maxSel = (_rows->isEmpty() ? (_hrows->isEmpty() ? _crows->size() : _hrows->size()) : _rows->size());
if (_sel >= maxSel || _sel < 0) { if (_sel >= maxSel || _sel < 0) {
if (direction < 0) setSel(maxSel - 1, true); if (direction < 0) {
setSel(maxSel - 1, true);
} else {
setSel(0, true);
}
return (_sel >= 0 && _sel < maxSel); return (_sel >= 0 && _sel < maxSel);
} }
if (_sel > 0 || direction > 0) {
setSel((_sel + direction >= maxSel) ? -1 : (_sel + direction), true); setSel((_sel + direction >= maxSel) ? -1 : (_sel + direction), true);
}
return true; return true;
} }
@ -2572,12 +2589,12 @@ bool MentionsInner::select() {
if (_sel >= 0 && _sel < maxSel) { if (_sel >= 0 && _sel < maxSel) {
QString result; QString result;
if (!_rows->isEmpty()) { if (!_rows->isEmpty()) {
result = '@' + _rows->at(_rows->size() - _sel - 1)->username; result = '@' + _rows->at(_sel)->username;
} else if (!_hrows->isEmpty()) { } else if (!_hrows->isEmpty()) {
result = '#' + _hrows->at(_hrows->size() - _sel - 1); result = '#' + _hrows->at(_sel);
} else { } else {
UserData *user = _crows->at(_crows->size() - _sel - 1).first; UserData *user = _crows->at(_sel).first;
const BotCommand &command(_crows->at(_crows->size() - _sel - 1).second); const BotCommand &command(_crows->at(_sel).second);
int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1;
if (botStatus == 0 || botStatus == 2 || _parent->filter().indexOf('@') > 1) { if (botStatus == 0 || botStatus == 2 || _parent->filter().indexOf('@') > 1) {
result = '/' + command.command + '@' + user->username; result = '/' + command.command + '@' + user->username;
@ -2599,7 +2616,7 @@ void MentionsInner::mousePressEvent(QMouseEvent *e) {
if (_overDelete && _sel >= 0 && _sel < _hrows->size()) { if (_overDelete && _sel >= 0 && _sel < _hrows->size()) {
_mousePos = mapToGlobal(e->pos()); _mousePos = mapToGlobal(e->pos());
QString toRemove = _hrows->at(_hrows->size() - _sel - 1); QString toRemove = _hrows->at(_sel);
RecentHashtagPack recent(cRecentWriteHashtags()); RecentHashtagPack recent(cRecentWriteHashtags());
for (RecentHashtagPack::iterator i = recent.begin(); i != recent.cend();) { for (RecentHashtagPack::iterator i = recent.begin(); i != recent.cend();) {
if (i->first == toRemove) { if (i->first == toRemove) {
@ -2851,7 +2868,7 @@ void MentionsDropdown::recount(bool toDown) {
_inner.resize(width(), h); _inner.resize(width(), h);
} }
if (h > _boundings.height()) h = _boundings.height(); if (h > _boundings.height()) h = _boundings.height();
if (h > 5 * st::mentionHeight) h = 5 * st::mentionHeight; if (h > 4.5 * st::mentionHeight) h = 4.5 * st::mentionHeight;
if (height() != h) { if (height() != h) {
st += _scroll.height() - h; st += _scroll.height() - h;
setGeometry(0, _boundings.height() - h, width(), h); setGeometry(0, _boundings.height() - h, width(), h);
@ -2859,7 +2876,7 @@ void MentionsDropdown::recount(bool toDown) {
} else if (y() != _boundings.height() - h) { } else if (y() != _boundings.height() - h) {
move(0, _boundings.height() - h); move(0, _boundings.height() - h);
} }
if (toDown) st = _scroll.scrollTopMax(); if (toDown) st = 0;// _scroll.scrollTopMax();
if (st != oldst) _scroll.scrollToY(st); if (st != oldst) _scroll.scrollToY(st);
if (toDown) _inner.clearSel(); if (toDown) _inner.clearSel();
} }
@ -2953,7 +2970,7 @@ bool MentionsDropdown::eventFilter(QObject *obj, QEvent *e) {
return true; return true;
} else if (ev->key() == Qt::Key_Down) { } else if (ev->key() == Qt::Key_Down) {
return _inner.moveSel(1); return _inner.moveSel(1);
} else if (ev->key() == Qt::Key_Enter || ev->key() == Qt::Key_Return || ev->key() == Qt::Key_Space) { } else if (ev->key() == Qt::Key_Enter || ev->key() == Qt::Key_Return) {
return _inner.select(); return _inner.select();
} }
} }

View File

@ -447,7 +447,7 @@ private:
QPoint _iconsMousePos, _iconsMouseDown; QPoint _iconsMousePos, _iconsMouseDown;
int32 _iconsLeft, _iconsTop; int32 _iconsLeft, _iconsTop;
int32 _iconsStartX, _iconsMax; int32 _iconsStartX, _iconsMax;
anim::ivalue _iconsX; anim::ivalue _iconsX, _iconSelX;
uint64 _iconsStartAnim; uint64 _iconsStartAnim;
bool _stickersShown; bool _stickersShown;

View File

@ -783,8 +783,8 @@ void HashtagLink::onClick(Qt::MouseButton button) const {
void BotCommandLink::onClick(Qt::MouseButton button) const { void BotCommandLink::onClick(Qt::MouseButton button) const {
if (button == Qt::LeftButton || button == Qt::MiddleButton) { if (button == Qt::LeftButton || button == Qt::MiddleButton) {
App::insertBotCommand(_cmd); // App::insertBotCommand(_cmd);
// App::sendBotCommand(_cmd); App::sendBotCommand(_cmd);
} }
} }

View File

@ -631,6 +631,11 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo
case mtpc_messageActionChatDeleteUser: { case mtpc_messageActionChatDeleteUser: {
const MTPDmessageActionChatDeleteUser &d(action.c_messageActionChatDeleteUser()); const MTPDmessageActionChatDeleteUser &d(action.c_messageActionChatDeleteUser());
if (lastKeyboardFrom == App::peerFromUser(d.vuser_id)) {
lastKeyboardInited = true;
lastKeyboardId = 0;
lastKeyboardFrom = 0;
}
// App::peer(App::peerFromUser(d.vuser_id)); left // App::peer(App::peerFromUser(d.vuser_id)); left
} break; } break;
@ -825,6 +830,10 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *
lastKeyboardId = 0; lastKeyboardId = 0;
lastKeyboardFrom = 0; lastKeyboardFrom = 0;
} }
} else if (peer->chat && (peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(adding->from())) {
lastKeyboardInited = true;
lastKeyboardId = 0;
lastKeyboardFrom = 0;
} else { } else {
lastKeyboardInited = true; lastKeyboardInited = true;
lastKeyboardId = adding->id; lastKeyboardId = adding->id;
@ -947,7 +956,7 @@ void History::addToFront(const QVector<MTPMessage> &slice) {
if (!(App::replyMarkup(item->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO)) { if (!(App::replyMarkup(item->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO)) {
if (!lastKeyboardInited) { if (!lastKeyboardInited) {
lastKeyboardInited = true; lastKeyboardInited = true;
if (wasKeyboardHide) { if (wasKeyboardHide || ((peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(item->from()))) {
lastKeyboardId = 0; lastKeyboardId = 0;
lastKeyboardFrom = 0; lastKeyboardFrom = 0;
} else { } else {

View File

@ -2032,7 +2032,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
, _field(this, st::taMsgField, lang(lng_message_ph)) , _field(this, st::taMsgField, lang(lng_message_ph))
, _recordAnim(animFunc(this, &HistoryWidget::recordStep)) , _recordAnim(animFunc(this, &HistoryWidget::recordStep))
, _recordingAnim(animFunc(this, &HistoryWidget::recordingStep)) , _recordingAnim(animFunc(this, &HistoryWidget::recordingStep))
, _recording(false), _inRecord(false), _inField(false) , _recording(false), _inRecord(false), _inField(false), _inReply(false)
, a_recordingLevel(0, 0), _recordingSamples(0) , a_recordingLevel(0, 0), _recordingSamples(0)
, a_recordOver(0, 0), a_recordDown(0, 0), a_recordCancel(st::recordCancel->c, st::recordCancel->c) , a_recordOver(0, 0), a_recordDown(0, 0), a_recordCancel(st::recordCancel->c, st::recordCancel->c)
, _recordCancelWidth(st::recordFont->m.width(lang(lng_record_cancel))) , _recordCancelWidth(st::recordFont->m.width(lang(lng_record_cancel)))
@ -2118,6 +2118,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
updateScrollColors(); updateScrollColors();
_toHistoryEnd.hide(); _toHistoryEnd.hide();
_toHistoryEnd.installEventFilter(this);
_attachMention.hide(); _attachMention.hide();
connect(&_attachMention, SIGNAL(chosen(QString)), &_field, SLOT(onMentionHashtagOrBotCommandInsert(QString))); connect(&_attachMention, SIGNAL(chosen(QString)), &_field, SLOT(onMentionHashtagOrBotCommandInsert(QString)));
@ -2632,7 +2633,7 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l
} }
if (_previewData && _previewData->pendingTill >= 0) { if (_previewData && _previewData->pendingTill >= 0) {
_previewData = 0; _previewData = 0;
if (!App::main()->hasForwardingItems()) _replyForwardPreviewCancel.hide(); _replyForwardPreviewCancel.hide();
} }
_previewCache.clear(); _previewCache.clear();
_scroll.setWidget(0); _scroll.setWidget(0);
@ -2786,13 +2787,13 @@ void HistoryWidget::updateControlsVisibility() {
_kbScroll.hide(); _kbScroll.hide();
_send.hide(); _send.hide();
_botStart.hide(); _botStart.hide();
_toHistoryEnd.hide();
_attachMention.hide(); _attachMention.hide();
_field.hide(); _field.hide();
_replyForwardPreviewCancel.hide(); _replyForwardPreviewCancel.hide();
_attachDocument.hide(); _attachDocument.hide();
_attachPhoto.hide(); _attachPhoto.hide();
_attachEmoji.hide(); _attachEmoji.hide();
_toHistoryEnd.hide();
_kbShow.hide(); _kbShow.hide();
_kbHide.hide(); _kbHide.hide();
_attachType.hide(); _attachType.hide();
@ -2800,12 +2801,8 @@ void HistoryWidget::updateControlsVisibility() {
return; return;
} }
updateToEndVisibility();
if (hist->readyForWork()) { if (hist->readyForWork()) {
if (hist->loadedAtBottom() && !_replyReturn) {
_toHistoryEnd.hide();
} else {
_toHistoryEnd.show();
}
if (!histPeer->chat || !histPeer->asChat()->forbidden) { if (!histPeer->chat || !histPeer->asChat()->forbidden) {
checkMentionDropdown(); checkMentionDropdown();
bool botStart = !histPeer->chat && histPeer->asUser()->botInfo && (!histPeer->asUser()->botInfo->startToken.isEmpty() || hist->isEmpty() && !hist->lastMsg); bool botStart = !histPeer->chat && histPeer->asUser()->botInfo && (!histPeer->asUser()->botInfo->startToken.isEmpty() || hist->isEmpty() && !hist->lastMsg);
@ -2873,7 +2870,7 @@ void HistoryWidget::updateControlsVisibility() {
_attachPhoto.hide(); _attachPhoto.hide();
} }
} }
if ((_replyToId || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0))) { if (_replyToId || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0) || _kbReplyTo) {
if (_replyForwardPreviewCancel.isHidden()) { if (_replyForwardPreviewCancel.isHidden()) {
_replyForwardPreviewCancel.show(); _replyForwardPreviewCancel.show();
resizeEvent(0); resizeEvent(0);
@ -2919,7 +2916,6 @@ void HistoryWidget::updateControlsVisibility() {
_kbHide.hide(); _kbHide.hide();
_attachType.hide(); _attachType.hide();
_emojiPan.hide(); _emojiPan.hide();
_toHistoryEnd.hide();
_replyForwardPreviewCancel.hide(); _replyForwardPreviewCancel.hide();
if (!_field.isHidden()) { if (!_field.isHidden()) {
_field.hide(); _field.hide();
@ -3205,6 +3201,8 @@ void HistoryWidget::onListScroll() {
return; return;
} }
updateToEndVisibility();
int st = _scroll.scrollTop(), stm = _scroll.scrollTopMax(), sh = _scroll.height(); int st = _scroll.scrollTop(), stm = _scroll.scrollTopMax(), sh = _scroll.height();
if (hist->readyForWork() && (st + PreloadHeightsCount * sh > stm)) { if (hist->readyForWork() && (st + PreloadHeightsCount * sh > stm)) {
loadMessagesDown(); loadMessagesDown();
@ -3245,12 +3243,9 @@ QString HistoryWidget::prepareMessage(QString result) {
void HistoryWidget::onHistoryToEnd() { void HistoryWidget::onHistoryToEnd() {
if (_replyReturn) { if (_replyReturn) {
showPeer(histPeer->id, _replyReturn->id); showPeer(histPeer->id, _replyReturn->id);
} else { } else if (hist) {
_toHistoryEnd.hide();
if (hist && !hist->loadedAtBottom()) {
showPeer(histPeer->id, 0); showPeer(histPeer->id, 0);
} }
}
} }
void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) {
@ -3555,6 +3550,7 @@ void HistoryWidget::mouseMoveEvent(QMouseEvent *e) {
QPoint pos(e ? e->pos() : mapFromGlobal(QCursor::pos())); QPoint pos(e ? e->pos() : mapFromGlobal(QCursor::pos()));
bool inRecord = _send.geometry().contains(pos); bool inRecord = _send.geometry().contains(pos);
bool inField = pos.y() >= (_scroll.y() + _scroll.height()) && pos.y() < height() && pos.x() >= 0 && pos.x() < width(); bool inField = pos.y() >= (_scroll.y() + _scroll.height()) && pos.y() < height() && pos.x() >= 0 && pos.x() < width();
bool inReply = QRect(st::replySkip, _field.y() - st::sendPadding - st::replyHeight, width() - st::replySkip - _replyForwardPreviewCancel.width(), st::replyHeight).contains(pos) && (_replyToId || _kbReplyTo);
bool startAnim = false; bool startAnim = false;
if (inRecord != _inRecord) { if (inRecord != _inRecord) {
_inRecord = inRecord; _inRecord = inRecord;
@ -3570,6 +3566,10 @@ void HistoryWidget::mouseMoveEvent(QMouseEvent *e) {
a_recordCancel.start(_inField ? st::recordCancel->c : st::recordCancelActive->c); a_recordCancel.start(_inField ? st::recordCancel->c : st::recordCancelActive->c);
startAnim = true; startAnim = true;
} }
if (inReply != _inReply) {
_inReply = inReply;
setCursor(inReply ? style::cur_pointer : style::cur_default);
}
if (startAnim) _recordAnim.start(); if (startAnim) _recordAnim.start();
} }
@ -3616,8 +3616,15 @@ void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // reply
App::main()->readServerHistory(hist, false); App::main()->readServerHistory(hist, false);
hist->loadAround(0); hist->loadAround(0);
QString toSend = cmd;
UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser();
QString username = (bot && bot->botInfo) ? bot->username : QString();
if (!replyTo && toSend.indexOf('@') < 2 && histPeer->chat && !username.isEmpty() && (histPeer->asChat()->botStatus == 0 || histPeer->asChat()->botStatus == 2)) {
toSend += '@' + username;
}
int32 botStatus = histPeer->chat ? histPeer->asChat()->botStatus : -1; int32 botStatus = histPeer->chat ? histPeer->asChat()->botStatus : -1;
App::main()->sendPreparedText(hist, cmd, replyTo ? ((histPeer->chat/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); App::main()->sendPreparedText(hist, toSend, replyTo ? ((histPeer->chat/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0);
if (replyTo) { if (replyTo) {
cancelReply(); cancelReply();
if (_keyboard.hasMarkup() && _keyboard.singleUse() && _keyboard.forMsgId() == replyTo) { if (_keyboard.hasMarkup() && _keyboard.singleUse() && _keyboard.forMsgId() == replyTo) {
@ -3633,7 +3640,7 @@ void HistoryWidget::insertBotCommand(const QString &cmd) {
QString toInsert = cmd; QString toInsert = cmd;
UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser(); UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser();
QString username = (bot && bot->botInfo) ? bot->username : QString(); QString username = (bot && bot->botInfo) ? bot->username : QString();
if (cmd.indexOf('@') < 2 && histPeer->chat && !username.isEmpty() && (histPeer->asChat()->botStatus == 0 || histPeer->asChat()->botStatus == 2)) { if (toInsert.indexOf('@') < 2 && histPeer->chat && !username.isEmpty() && (histPeer->asChat()->botStatus == 0 || histPeer->asChat()->botStatus == 2)) {
toInsert += '@' + username; toInsert += '@' + username;
} }
toInsert += ' '; toInsert += ' ';
@ -3652,6 +3659,13 @@ void HistoryWidget::insertBotCommand(const QString &cmd) {
_field.setTextCursor(cur); _field.setTextCursor(cur);
} }
bool HistoryWidget::eventFilter(QObject *obj, QEvent *e) {
if (obj == &_toHistoryEnd && e->type() == QEvent::Wheel) {
return _scroll.viewportEvent(e);
}
return TWidget::eventFilter(obj, e);
}
DragState HistoryWidget::getDragState(const QMimeData *d) { DragState HistoryWidget::getDragState(const QMimeData *d) {
if (!d) return DragStateNone; if (!d) return DragStateNone;
@ -3744,17 +3758,28 @@ void HistoryWidget::onKbToggle(bool manual) {
_kbShow.show(); _kbShow.show();
_kbScroll.hide(); _kbScroll.hide();
_kbShown = false; _kbShown = false;
_field.setMaxHeight(st::maxFieldHeight);
_kbReplyTo = 0; _kbReplyTo = 0;
if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) {
_replyForwardPreviewCancel.hide();
}
if (manual) _kbWasHidden = true; if (manual) _kbWasHidden = true;
} else { } else {
_kbHide.show(); _kbHide.show();
_kbShow.hide(); _kbShow.hide();
_kbScroll.show(); _kbScroll.show();
_kbShown = true; _kbShown = true;
int32 maxh = qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2));
_field.setMaxHeight(st::maxFieldHeight - maxh);
_kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0;
if (_kbReplyTo && !_replyToId) { if (_kbReplyTo && !_replyToId) {
updateReplyToName(); updateReplyToName();
_replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions);
_replyForwardPreviewCancel.show();
} }
if (manual) _kbWasHidden = false; if (manual) _kbWasHidden = false;
} }
@ -4502,6 +4527,7 @@ void HistoryWidget::updateBotKeyboard() {
if (_kbReplyTo && !_replyToId) { if (_kbReplyTo && !_replyToId) {
updateReplyToName(); updateReplyToName();
_replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions);
_replyForwardPreviewCancel.show();
} }
} else { } else {
if (!_showAnim.animating()) { if (!_showAnim.animating()) {
@ -4513,6 +4539,9 @@ void HistoryWidget::updateBotKeyboard() {
_field.setMaxHeight(st::maxFieldHeight); _field.setMaxHeight(st::maxFieldHeight);
_kbShown = false; _kbShown = false;
_kbReplyTo = 0; _kbReplyTo = 0;
if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) {
_replyForwardPreviewCancel.hide();
}
} }
} else { } else {
if (!_scroll.isHidden()) { if (!_scroll.isHidden()) {
@ -4524,13 +4553,25 @@ void HistoryWidget::updateBotKeyboard() {
_field.setMaxHeight(st::maxFieldHeight); _field.setMaxHeight(st::maxFieldHeight);
_kbShown = false; _kbShown = false;
_kbReplyTo = 0; _kbReplyTo = 0;
if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) {
_replyForwardPreviewCancel.hide();
}
} }
resizeEvent(0); resizeEvent(0);
update(); update();
} }
void HistoryWidget::updateToEndVisibility() {
bool toEndVisible = !_showAnim.animating() && hist && hist->readyForWork() && (!hist->loadedAtBottom() || _replyReturn || _scroll.scrollTop() + st::wndMinHeight < _scroll.scrollTopMax());
if (toEndVisible && _toHistoryEnd.isHidden()) {
_toHistoryEnd.show();
} else if (!toEndVisible && !_toHistoryEnd.isHidden()) {
_toHistoryEnd.hide();
}
}
void HistoryWidget::mousePressEvent(QMouseEvent *e) { void HistoryWidget::mousePressEvent(QMouseEvent *e) {
_replyForwardPressed = QRect(0, _field.y() - st::replyHeight, st::replySkip, st::replyHeight).contains(e->pos()); _replyForwardPressed = QRect(0, _field.y() - st::sendPadding - st::replyHeight, st::replySkip, st::replyHeight).contains(e->pos());
if (_replyForwardPressed && !_replyForwardPreviewCancel.isHidden()) { if (_replyForwardPressed && !_replyForwardPreviewCancel.isHidden()) {
updateField(); updateField();
} else if (_inRecord && cHasAudioCapture()) { } else if (_inRecord && cHasAudioCapture()) {
@ -4545,6 +4586,8 @@ void HistoryWidget::mousePressEvent(QMouseEvent *e) {
a_recordDown.start(1); a_recordDown.start(1);
a_recordOver.restart(); a_recordOver.restart();
_recordAnim.start(); _recordAnim.start();
} else if (_inReply) {
App::main()->showPeer(histPeer->id, _replyToId ? _replyToId : _kbReplyTo->id);
} }
} }
@ -4628,6 +4671,8 @@ void HistoryWidget::onStickerSend(DocumentData *sticker) {
App::main()->finishForwarding(hist); App::main()->finishForwarding(hist);
cancelReply(); cancelReply();
if (sticker->sticker) App::main()->incrementSticker(sticker);
App::historyRegRandom(randomId, newId); App::historyRegRandom(randomId, newId);
App::main()->historyToDown(hist); App::main()->historyToDown(hist);
@ -4683,8 +4728,9 @@ void HistoryWidget::cancelReply() {
if (!_replyToId) return; if (!_replyToId) return;
_replyTo = 0; _replyTo = 0;
_replyToId = 0; _replyToId = 0;
if (!App::main()->hasForwardingItems()) { mouseMoveEvent(0);
if (!_previewData || _previewData->pendingTill < 0) _replyForwardPreviewCancel.hide(); if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_kbReplyTo) {
_replyForwardPreviewCancel.hide();
} }
updateBotKeyboard(); updateBotKeyboard();
@ -4712,9 +4758,12 @@ void HistoryWidget::onReplyForwardPreviewCancel() {
_saveDraftText = true; _saveDraftText = true;
_saveDraftStart = getms(); _saveDraftStart = getms();
onDraftSave(); onDraftSave();
} else { } else if (App::main()->hasForwardingItems()) {
App::main()->cancelForwarding(); App::main()->cancelForwarding();
} else if (_replyToId) {
cancelReply(); cancelReply();
} else if (_kbReplyTo) {
onKbToggle();
} }
} }
@ -4734,7 +4783,7 @@ void HistoryWidget::previewCancel() {
_previewData = 0; _previewData = 0;
_previewLinks.clear(); _previewLinks.clear();
updatePreview(); updatePreview();
if (!_replyToId && !App::main()->hasForwardingItems()) _replyForwardPreviewCancel.hide(); if (!_replyToId && !App::main()->hasForwardingItems() && !_kbReplyTo) _replyForwardPreviewCancel.hide();
} }
void HistoryWidget::onPreviewParse() { void HistoryWidget::onPreviewParse() {
@ -4828,7 +4877,7 @@ void HistoryWidget::updatePreview() {
_previewTitle.setText(st::msgServiceNameFont, title, _textNameOptions); _previewTitle.setText(st::msgServiceNameFont, title, _textNameOptions);
_previewDescription.setText(st::msgFont, desc, _textDlgOptions); _previewDescription.setText(st::msgFont, desc, _textDlgOptions);
} }
} else if (!App::main()->hasForwardingItems() && !_replyToId) { } else if (!App::main()->hasForwardingItems() && !_replyToId && !_kbReplyTo) {
_replyForwardPreviewCancel.hide(); _replyForwardPreviewCancel.hide();
} }
resizeEvent(0); resizeEvent(0);

View File

@ -452,6 +452,9 @@ public:
void sendBotCommand(const QString &cmd, MsgId replyTo); void sendBotCommand(const QString &cmd, MsgId replyTo);
void insertBotCommand(const QString &cmd); void insertBotCommand(const QString &cmd);
bool eventFilter(QObject *obj, QEvent *e);
void updateBotKeyboard();
~HistoryWidget(); ~HistoryWidget();
signals: signals:
@ -572,7 +575,7 @@ private:
void addMessagesToFront(const QVector<MTPMessage> &messages); void addMessagesToFront(const QVector<MTPMessage> &messages);
void addMessagesToBack(const QVector<MTPMessage> &messages); void addMessagesToBack(const QVector<MTPMessage> &messages);
void updateBotKeyboard(); void updateToEndVisibility();
void stickersGot(const MTPmessages_AllStickers &stickers); void stickersGot(const MTPmessages_AllStickers &stickers);
bool stickersFailed(const RPCError &error); bool stickersFailed(const RPCError &error);
@ -611,7 +614,7 @@ private:
IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide; IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide;
MessageField _field; MessageField _field;
Animation _recordAnim, _recordingAnim; Animation _recordAnim, _recordingAnim;
bool _recording, _inRecord, _inField; bool _recording, _inRecord, _inField, _inReply;
anim::ivalue a_recordingLevel; anim::ivalue a_recordingLevel;
int32 _recordingSamples; int32 _recordingSamples;
anim::fvalue a_recordOver, a_recordDown; anim::fvalue a_recordOver, a_recordDown;

View File

@ -1718,6 +1718,10 @@ void MainWidget::updateReplyTo() {
history.updateReplyTo(true); history.updateReplyTo(true);
} }
void MainWidget::updateBotKeyboard() {
history.updateBotKeyboard();
}
void MainWidget::pushReplyReturn(HistoryItem *item) { void MainWidget::pushReplyReturn(HistoryItem *item) {
history.pushReplyReturn(item); history.pushReplyReturn(item);
} }

View File

@ -333,6 +333,7 @@ public:
ApiWrap *api(); ApiWrap *api();
void updateReplyTo(); void updateReplyTo();
void updateBotKeyboard();
void pushReplyReturn(HistoryItem *item); void pushReplyReturn(HistoryItem *item);

View File

@ -11,7 +11,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.8.27</string> <string>0.8.28</string>
<key>LSMinimumSystemVersion</key> <key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string> <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>

Binary file not shown.

View File

@ -1701,7 +1701,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 0.8.27; CURRENT_PROJECT_VERSION = 0.8.28;
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
@ -1719,7 +1719,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
CURRENT_PROJECT_VERSION = 0.8.27; CURRENT_PROJECT_VERSION = 0.8.28;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_OPTIMIZATION_LEVEL = fast; GCC_OPTIMIZATION_LEVEL = fast;
GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h;
@ -1745,10 +1745,10 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = ""; CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 0.8.27; CURRENT_PROJECT_VERSION = 0.8.28;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DYLIB_COMPATIBILITY_VERSION = 0.8; DYLIB_COMPATIBILITY_VERSION = 0.8;
DYLIB_CURRENT_VERSION = 0.8.27; DYLIB_CURRENT_VERSION = 0.8.28;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = ""; FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@ -1888,10 +1888,10 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = ""; CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 0.8.27; CURRENT_PROJECT_VERSION = 0.8.28;
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
DYLIB_COMPATIBILITY_VERSION = 0.8; DYLIB_COMPATIBILITY_VERSION = 0.8;
DYLIB_CURRENT_VERSION = 0.8.27; DYLIB_CURRENT_VERSION = 0.8.28;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = ""; FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;

View File

@ -1,2 +1,2 @@
echo 8027 0.8.27 1 echo 8028 0.8.28 1
# AppVersion AppVersionStr DevChannel # AppVersion AppVersionStr DevChannel