From e3e774176ee3f4a2e9f742402c5c7fce5a706779 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 3 Oct 2015 13:09:09 +0300 Subject: [PATCH 1/4] new flat boxes started --- Telegram/Resources/lang.strings | 61 ++++---- Telegram/Resources/style.txt | 61 ++++++-- Telegram/Resources/style_classes.txt | 15 ++ Telegram/SourceFiles/app.cpp | 74 +++++++--- Telegram/SourceFiles/app.h | 7 +- Telegram/SourceFiles/art/sprite.png | Bin 177827 -> 178684 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 238261 -> 239881 bytes Telegram/SourceFiles/boxes/aboutbox.cpp | 4 +- Telegram/SourceFiles/boxes/abstractbox.cpp | 14 +- Telegram/SourceFiles/boxes/abstractbox.h | 6 +- Telegram/SourceFiles/boxes/addcontactbox.cpp | 20 +-- Telegram/SourceFiles/boxes/autolockbox.cpp | 4 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 91 +++++------- Telegram/SourceFiles/boxes/confirmbox.h | 21 ++- Telegram/SourceFiles/boxes/connectionbox.cpp | 4 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 36 +++-- Telegram/SourceFiles/boxes/contactsbox.h | 2 +- .../SourceFiles/boxes/downloadpathbox.cpp | 4 +- Telegram/SourceFiles/boxes/languagebox.cpp | 20 +-- Telegram/SourceFiles/boxes/passcodebox.cpp | 45 +++--- Telegram/SourceFiles/boxes/passcodebox.h | 2 +- Telegram/SourceFiles/boxes/photocropbox.cpp | 6 +- Telegram/SourceFiles/boxes/photosendbox.cpp | 16 +- Telegram/SourceFiles/boxes/sessionsbox.cpp | 52 +++---- Telegram/SourceFiles/boxes/stickersetbox.cpp | 10 +- Telegram/SourceFiles/boxes/usernamebox.cpp | 12 +- Telegram/SourceFiles/dialogswidget.cpp | 24 +-- Telegram/SourceFiles/dialogswidget.h | 4 +- Telegram/SourceFiles/dropdown.cpp | 30 ++-- Telegram/SourceFiles/dropdown.h | 2 - Telegram/SourceFiles/gui/countryinput.cpp | 8 +- Telegram/SourceFiles/gui/flatbutton.cpp | 83 ++++++++++- Telegram/SourceFiles/gui/flatbutton.h | 27 ++++ Telegram/SourceFiles/gui/flatcheckbox.cpp | 2 +- Telegram/SourceFiles/gui/flatinput.cpp | 8 +- Telegram/SourceFiles/gui/flattextarea.cpp | 4 +- Telegram/SourceFiles/gui/phoneinput.cpp | 2 +- Telegram/SourceFiles/gui/style_core.cpp | 4 +- Telegram/SourceFiles/gui/style_core.h | 13 +- Telegram/SourceFiles/gui/text.cpp | 4 +- Telegram/SourceFiles/history.cpp | 99 +++++++------ Telegram/SourceFiles/historywidget.cpp | 139 ++++++++++-------- Telegram/SourceFiles/historywidget.h | 10 +- Telegram/SourceFiles/intro/intropwdcheck.cpp | 8 +- Telegram/SourceFiles/intro/introsteps.cpp | 2 +- Telegram/SourceFiles/layerwidget.h | 2 +- Telegram/SourceFiles/mainwidget.cpp | 56 ++++--- Telegram/SourceFiles/mainwidget.h | 4 +- Telegram/SourceFiles/mediaview.cpp | 88 ++--------- Telegram/SourceFiles/mtproto/generate.py | 51 +++---- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 8 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 50 +++---- Telegram/SourceFiles/overviewwidget.cpp | 8 +- Telegram/SourceFiles/overviewwidget.h | 2 +- Telegram/SourceFiles/playerwidget.cpp | 4 +- Telegram/SourceFiles/profilewidget.cpp | 20 +-- Telegram/SourceFiles/pspecific_mac.cpp | 2 +- Telegram/SourceFiles/settingswidget.cpp | 50 +++---- Telegram/SourceFiles/structs.cpp | 2 +- Telegram/SourceFiles/sysbuttons.cpp | 4 +- Telegram/SourceFiles/window.cpp | 17 ++- Telegram/SourceFiles/window.h | 2 +- 62 files changed, 785 insertions(+), 645 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index ddccd8bc28..00030fa49d 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -62,6 +62,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_month_day" = "{month} {day}"; "lng_month_day_year" = "{month} {day}, {year}"; +"lng_box_ok" = "OK"; +"lng_box_cancel" = "CANCEL"; + "lng_cancel" = "Cancel"; "lng_continue" = "Continue"; "lng_close" = "Close"; @@ -152,8 +155,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_signin_no_email_forgot" = "Since you haven't provided a recovery\ne-mail when setting up your password, your remaining options are either to remember your password or to reset your account."; "lng_signin_cant_email_forgot" = "If you can't restore access to the e-mail, your remaining options are either to remember your password or to reset your account."; "lng_signin_reset_account" = "Reset your account"; -"lng_sigin_sure_reset" = "Warning!\n\nYou will lose all your chats and messages,\nalong with any media and files you shared!\n\nDo you want to reset your account?"; -"lng_sigin_reset" = "Reset"; +"lng_signin_sure_reset" = "Warning!\n\nYou will lose all your chats and messages,\nalong with any media and files you shared!\n\nDo you want to reset your account?"; +"lng_signin_reset" = "RESET"; "lng_signup_title" = "Information and photo"; "lng_signup_desc" = "Please enter your name and\nupload a photo."; @@ -248,7 +251,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_download_path_choose" = "Choose download path"; "lng_sure_clear_downloads" = "Do you want to remove all downloaded files from temp folder? It is done automatically on logout or program uninstall."; "lng_download_path_failed" = "File download could not be started. It could happen because of a bad download location.\n\nYou can change download path in Settings."; -"lng_download_path_settings" = "Go to Settings"; +"lng_download_path_settings" = "SETTINGS"; "lng_download_finish_failed" = "File download could not be finished.\n\nWould you like to try again?"; "lng_download_path_clearing" = "Clearing.."; "lng_download_path_cleared" = "Cleared!"; @@ -305,7 +308,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad_email" = "Incorrect e-mail, please try other."; "lng_cloud_password_about" = "This password will be required when you log in on a new device in addition to the pin code."; "lng_cloud_password_about_recover" = "Warning! Are you sure you don't want to\nadd a password recovery e-mail?\n\nIf you forget your password, you will\nlose access to your Telegram account."; -"lng_cloud_password_almost" = "A confirmation link was sent\nto the e-mail you provided.\n\nTwo-step verification will be enabled\nas soon as you follow that link."; +"lng_cloud_password_skip_email" = "SKIP E-MAIL"; +"lng_cloud_password_almost" = "A confirmation link was sent to the e-mail you provided. Two-step verification will be enabled as soon as you follow that link."; "lng_cloud_password_was_set" = "Two-step verification enabled."; "lng_cloud_password_updated" = "Your cloud password was updated."; "lng_cloud_password_removed" = "Two-step verification was disabled."; @@ -332,19 +336,20 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset" = "Terminate all other sessions"; "lng_settings_reset_sure" = "Are you sure you want to terminate\nall other sessions?"; "lng_settings_reset_one_sure" = "Do you want to terminate this session?"; -"lng_settings_reset_button" = "Terminate"; +"lng_settings_reset_button" = "TERMINATE"; "lng_settings_reset_done" = "Other sessions terminated"; "lng_settings_ask_question" = "Ask a Question"; "lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions."; -"lng_settings_faq_button" = "Go to FAQ"; -"lng_settings_ask_ok" = "Ask"; +"lng_settings_faq_button" = "GO TO FAQ"; +"lng_settings_ask_ok" = "ASK"; "lng_settings_faq" = "Telegram FAQ"; "lng_settings_logout" = "Log Out"; "lng_sure_logout" = "Are you sure you want to log out?"; +"lng_box_logout" = "LOG OUT"; -"lng_settings_need_restart" = "You need to restart for applying\nsome of the new settings. Restart now?"; -"lng_settings_restart_now" = "Restart"; -"lng_settings_restart_later" = "Later"; +"lng_settings_need_restart" = "You need to restart for applying some of the new settings. Restart now?"; +"lng_settings_restart_now" = "RESTART"; +"lng_settings_restart_later" = "LATER"; "lng_sessions_header" = "Current session"; "lng_sessions_other_header" = "Active sessions"; @@ -416,12 +421,12 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_participant_filter" = "Search"; "lng_participant_invite" = "Invite"; -"lng_participant_invite_sorry" = "Sorry, you can only add the first\n{count} members to a channel personally.\n\nFrom now on, people will need\nto join via your invite link."; +"lng_participant_invite_sorry" = "Sorry, you can only add the first {count:_not_used|# member|# members} to a channel personally.\n\nFrom now on, people will need to join via your invite link."; "lng_create_group_back" = "Back"; "lng_create_group_next" = "Next"; "lng_create_group_create" = "Create"; "lng_create_group_title" = "New Group"; -"lng_create_group_about" = "Groups are ideal for smaller communities, they can have up to {count} members"; +"lng_create_group_about" = "Groups are ideal for smaller communities, they can have up to {count:_not_used|# member|# members}"; "lng_create_channel_title" = "New Channel"; "lng_create_channel_about" = "Channels are a tool for broadcasting your messages to unlimited audiences"; "lng_create_public_channel_title" = "Public Channel"; @@ -451,8 +456,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone."; "lng_sure_delete_group_history" = "Are you sure, you want to delete all message history in «{group}»?\n\nThis action cannot be undone."; "lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone."; -"lng_sure_leave_channel" = "Are you sure, you want\nto leave this channel?"; -"lng_sure_delete_channel" = "Are you sure, you want\nto delete this channel?\n\nAll members will be removed\nand all messages will be lost."; +"lng_sure_leave_channel" = "Are you sure, you want to leave\nthis channel?"; +"lng_sure_delete_channel" = "Are you sure, you want to delete this channel? All members will be removed and all messages will be lost."; "lng_message_empty" = "Empty Message"; "lng_media_unsupported" = "Media Unsupported"; @@ -478,13 +483,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_channel_hide_comments" = "Hide comments"; "lng_channel_not_accessible" = "Sorry, this channel is not accessible."; -"lng_channels_too_much_public_existing" = "Sorry, you have created\ntoo many public channels already.\n\nPlease delete one first."; -"lng_channels_too_much_public" = "Sorry, you have created\ntoo many public channels.\n\nYou can either create a private channel\nor delete one of your public channels first."; +"lng_channels_too_much_public_existing" = "Sorry, you have created too many public channels already. Please delete one first."; +"lng_channels_too_much_public" = "Sorry, you have created too many public channels.\n\nYou can either create a private channel\nor delete one of your public channels first."; -"lng_group_invite_bad_link" = "This invite link is broken\nor has expired."; +"lng_group_invite_bad_link" = "This invite link is broken or has expired."; "lng_group_invite_want_join" = "Do you want to join the group «{title}»?"; "lng_group_invite_want_join_channel" = "Do you want to join the channel «{title}»?"; -"lng_group_invite_join" = "Join"; +"lng_group_invite_join" = "JOIN"; "lng_group_invite_link" = "Invite link:"; "lng_group_invite_create" = "Create an invite link"; @@ -492,7 +497,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_group_invite_create_new" = "Revoke invite link"; "lng_group_invite_about_new" = "Your previous link will be deactivated\nand we'll generate a new invite link for you."; "lng_group_invite_copied" = "Invite link copied to clipboard."; -"lng_group_invite_no_room" = "Unable to join this group because there are\ntoo many members in it already."; +"lng_group_invite_no_room" = "Unable to join this group because there are too many members in it already."; "lng_channel_public_link_copied" = "Link copied to clipboard."; @@ -528,6 +533,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_switch_stickers" = "Stickers"; "lng_switch_emoji" = "Emoji"; +"lng_box_remove" = "REMOVE"; + "lng_custom_stickers" = "Custom stickers"; "lng_stickers_remove_pack" = "Remove «{sticker_pack}»?"; "lng_stickers_add_pack" = "Add {count:_not_used_|# Sticker|# Stickers}"; @@ -547,10 +554,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_report_spam" = "Report Spam"; "lng_report_spam_hide" = "Hide"; "lng_report_spam_thanks" = "Thank you for your report!"; -"lng_report_spam_sure" = "Are you sure you want\nto report spam from this user?"; -"lng_report_spam_sure_group" = "Are you sure you want\nto report spam in this group?"; -"lng_report_spam_sure_channel" = "Are you sure you want\nto report spam in this channel?"; -"lng_report_spam_ok" = "Report"; +"lng_report_spam_sure" = "Are you sure you want to report spam from this user?"; +"lng_report_spam_sure_group" = "Are you sure you want to report spam in this group?"; +"lng_report_spam_sure_channel" = "Are you sure you want to report spam in this channel?"; +"lng_report_spam_ok" = "REPORT"; "lng_cant_send_to_not_contact" = "Sorry, you can only send messages to\nmutual contacts at the moment. {more_info}"; "lng_cant_invite_not_contact" = "Sorry, you can only add mutual contacts\nto groups at the moment. {more_info}"; "lng_cant_invite_not_contact_channel" = "Sorry, you can only add mutual contacts\nto channels at the moment. {more_info}"; @@ -572,7 +579,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_channel_unmute" = "Unmute"; "lng_open_this_link" = "Open this link?"; -"lng_open_link" = "Open"; +"lng_open_link" = "OPEN"; "lng_bot_start" = "Start"; "lng_bot_choose_group" = "Choose Group"; @@ -662,8 +669,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_forward_share_contact" = "Share contact to {recipient}?"; "lng_forward_send_file_confirm" = "Send «{name}» to {recipient}?"; "lng_forward_send_files_confirm" = "Send selected files to {recipient}?"; -"lng_forward" = "Forward"; -"lng_forward_send" = "Send"; +"lng_forward_send" = "SEND"; "lng_forward_messages" = "{count:_not_used_|Forwarded message|# forwarded messages}"; "lng_forwarding_from" = "{user} and {count:_not_used_|# other|# others}"; "lng_forwarding_from_two" = "{user} and {second_user}"; @@ -701,7 +707,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_selected_cancel_sure_this" = "Do you want to cancel this upload?"; "lng_selected_delete_sure_this" = "Do you want to delete this message?"; "lng_selected_delete_sure" = "Do you want to delete {count:_not_used_|# message|# messages}?"; -"lng_selected_delete_confirm" = "Delete"; +"lng_box_delete" = "DELETE"; +"lng_box_leave" = "LEAVE"; "lng_about_version" = "Version {version}"; "lng_about_text" = "Official free messaging app based on [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] and\n[a href=\"https://core.telegram.org/api\"]Telegram API[/a] for speed and security\n\nThis software is licensed under [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] version 3,\nsource code is available on [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a]."; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 0bb12fa882..427f1fffc8 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -91,6 +91,40 @@ dialogsSearchField: InputField(defaultInputField) { width: 240px; height: 34px; } + +boxWidth: 320px; +boxWideWidth: 364px; +boxPadding: margins(26px, 30px, 26px, 16px); +boxMaxListHeight: 600px; +boxFontSize: 13px; +boxTextFont: font(boxFontSize); +boxTitleFont: font(boxFontSize semibold); +boxButtonFont: font(boxFontSize semibold); +boxTitleHeight: 54px; +defaultBoxButton: BoxButton { + textFg: #2f9fea; + textFgOver: #2f9fea; + textBg: white; + textBgOver: #edf7ff; + + width: -24px; + height: 36px; + + textTop: 9px; + + font: boxButtonFont; + duration: 200; +} +cancelBoxButton: BoxButton(defaultBoxButton) { + textFg: #aeaeae; +} +attentionBoxButton: BoxButton(defaultBoxButton) { + textFg: #ea4b2f; + textFgOver: #ea4b2f; + textBgOver: #fff0ed; +} +boxButtonPadding: margins(12px, 16px, 22px, 16px); + titleBG: #6389a8; titleColor: #0f8dcc;//rgb(20, 136, 210); titleHeight: 39px; @@ -936,6 +970,9 @@ defaultTextStyle: textStyle { selectOverlay: msgSelectOverlay; lineHeight: 0px; } +boxTextStyle: textStyle(defaultTextStyle) { + lineHeight: 22px; +} serviceTextStyle: textStyle(defaultTextStyle) { lnkFlags: msgServiceFont; lnkOverFlags: font(fsize semibold underline); @@ -1207,18 +1244,14 @@ layerHideDuration: 200; layerPadding: margins(10px, 10px, 10px, 10px); boxFont: font(16px); -boxPadding: margins(18px, 18px, 18px, 18px); boxVerticalMargin: 10px; -boxWidth: 364px; -boxMaxListHeight: 600px; - boxBG: white; boxGrayTitle: #777; -boxTitlePos: point(20px, 15px); -boxTitleFont: font(17px); -boxTitleHeight: 52px; +old_boxTitlePos: point(20px, 15px); +old_boxTitleFont: font(17px); +old_boxTitleHeight: 52px; confirmMaxHeight: 320px; confirmCompressedSkip: 10px; @@ -1229,6 +1262,9 @@ inpAddContact: flatInput(inpDefGray) { textMrg: margins(10px, 5px, 10px, 5px); font: font(15px); } +contactUserIcon: sprite(120px, 90px, 18px, 18px); +contactPhoneIcon: sprite(138px, 90px, 18px, 18px); +contactAddIcon: sprite(307px, 248px, 22px, 16px); btnNewGroup: iconedButton(btnDefIconed) { icon: sprite(189px, 118px, 18px, 17px); @@ -1280,7 +1316,6 @@ notifyHeight: 80px; notifyDeltaX: 6px; notifyDeltaY: 7px; -cropBoxWidth: 364px; cropPointSize: 10px; cropMinSize: 20px; @@ -1331,10 +1366,11 @@ btnShareContact: flatButton(btnDefNext, btnDefBig) { overFont: font(17px); } profileMinBtnPadding: 10px; +inviteCheckIcon: sprite(187px, 61px, 18px, 14px); +inviteCheckActiveIcon: sprite(187px, 75px, 18px, 14px); membersPadding: margins(0px, 10px, 0px, 10px); -forwardWidth: 364px; forwardMargins: margins(30px, 10px, 30px, 10px); forwardFont: font(16px); forwardBg: rgba(0, 0, 0, 76); @@ -1431,7 +1467,7 @@ newGroupName: flatInput(inpDefGray) { newGroupLink: flatInput(inpDefFlat) { width: 340px; height: 42px; - font: font(15px); + font: boxTextFont; textMrg: margins(12px, 4px, 12px, 4px); bgColor: transparent; bgActive: transparent; @@ -1559,7 +1595,7 @@ aboutCloseButton: flatButton(contactsClose) { downTextTop: 16px; } btnInfoClose: flatButton(aboutCloseButton) { - width: boxWidth; + width: boxWideWidth; } emojiTextFont: font(16px); @@ -1839,7 +1875,6 @@ stickerIconPadding: 5px; stickerIconOpacity: 0.7; stickerIconSel: 2px; stickerIconSelColor: #58b2ed; -stickerIconRecent: sprite(342px, 50px, 21px, 22px); stickerIconLeft: sprite(342px, 72px, 40px, 1px); stickerIconRight: sprite(342px, 73px, 40px, 1px); stickerIconMove: 400; @@ -2114,7 +2149,7 @@ sessionsHeight: 440px; sessionHeight: 70px; sessionPadding: margins(20px, 10px, 20px, 0); sessionsCloseButton: flatButton(aboutCloseButton) { - width: boxWidth; + width: boxWideWidth; } sessionNameFont: msgNameFont; sessionActiveFont: msgDateFont; diff --git a/Telegram/Resources/style_classes.txt b/Telegram/Resources/style_classes.txt index c5e24ba340..ca8281e74d 100644 --- a/Telegram/Resources/style_classes.txt +++ b/Telegram/Resources/style_classes.txt @@ -268,6 +268,21 @@ botKeyboardButton { downTextTop: number; } +BoxButton { + textFg: color; + textFgOver: color; + textBg: color; // rect of textBg with rounded rect of textBgOver upon it + textBgOver: color; + + width: number; + height: number; + + textTop: number; + + font: font; + duration: number; +} + InputField { textFg: color; textMargins: margins; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index f66d8d2afc..86a0ec74d4 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -93,7 +93,15 @@ namespace { QPixmap *sprite = 0, *emojis = 0, *emojisLarge = 0; - QPixmap *corners[RoundCornersCount][4] = { { 0 } }; + struct CornersPixmaps { + CornersPixmaps() { + memset(p, 0, sizeof(p)); + } + QPixmap *p[4]; + }; + CornersPixmaps corners[RoundCornersCount]; + typedef QMap CornersMap; + CornersMap cornersMap; QImage *cornersMask[4] = { 0 }; typedef QMap EmojisMap; @@ -1887,9 +1895,11 @@ namespace App { cors[1] = rect.copy(r * 2, 0, r, r); cors[2] = rect.copy(0, r * 2, r, r + (shadow ? s : 0)); cors[3] = rect.copy(r * 2, r * 2, r, r + (shadow ? s : 0)); - for (int i = 0; i < 4; ++i) { - ::corners[index][i] = new QPixmap(QPixmap::fromImage(cors[i], Qt::ColorOnly)); - ::corners[index][i]->setDevicePixelRatio(cRetinaFactor()); + if (index != NoneCorners) { + for (int i = 0; i < 4; ++i) { + ::corners[index].p[i] = new QPixmap(QPixmap::fromImage(cors[i], Qt::ColorOnly)); + ::corners[index].p[i]->setDevicePixelRatio(cRetinaFactor()); + } } } @@ -1916,7 +1926,7 @@ namespace App { } QImage mask[4]; - prepareCorners(MaskCorners, st::msgRadius, st::white, 0, mask); + prepareCorners(NoneCorners, st::msgRadius, st::white, 0, mask); for (int i = 0; i < 4; ++i) { ::cornersMask[i] = new QImage(mask[i].convertToFormat(QImage::Format_ARGB32_Premultiplied)); ::cornersMask[i]->setDevicePixelRatio(cRetinaFactor()); @@ -1968,10 +1978,16 @@ namespace App { ::emojisLarge = 0; for (int32 j = 0; j < 4; ++j) { for (int32 i = 0; i < RoundCornersCount; ++i) { - delete ::corners[i][j]; ::corners[i][j] = 0; + delete ::corners[i].p[j]; ::corners[i].p[j] = 0; } delete ::cornersMask[j]; ::cornersMask[j] = 0; } + for (CornersMap::const_iterator i = ::cornersMap.cbegin(), e = ::cornersMap.cend(); i != e; ++i) { + for (int32 j = 0; j < 4; ++j) { + delete i->p[j]; + } + } + ::cornersMap.clear(); mainEmojisMap.clear(); otherEmojisMap.clear(); @@ -2394,13 +2410,8 @@ namespace App { QImage **cornersMask() { return ::cornersMask; } - QPixmap **corners(RoundCorners index) { - return ::corners[index]; - } - - void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *sh) { - QPixmap **c = ::corners[index]; - int32 cw = c[0]->width() / cIntRetinaFactor(), ch = c[0]->height() / cIntRetinaFactor(); + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, const CornersPixmaps &c, const style::color *sh) { + int32 cw = c.p[0]->width() / cIntRetinaFactor(), ch = c.p[0]->height() / cIntRetinaFactor(); if (w < 2 * cw || h < 2 * ch) return; if (w > 2 * cw) { p.fillRect(QRect(x + cw, y, w - 2 * cw, ch), bg->b); @@ -2410,20 +2421,41 @@ namespace App { if (h > 2 * ch) { p.fillRect(QRect(x, y + ch, w, h - 2 * ch), bg->b); } - p.drawPixmap(QPoint(x, y), *c[0]); - p.drawPixmap(QPoint(x + w - cw, y), *c[1]); - p.drawPixmap(QPoint(x, y + h - ch), *c[2]); - p.drawPixmap(QPoint(x + w - cw, y + h - ch), *c[3]); + p.drawPixmap(QPoint(x, y), *c.p[0]); + p.drawPixmap(QPoint(x + w - cw, y), *c.p[1]); + p.drawPixmap(QPoint(x, y + h - ch), *c.p[2]); + p.drawPixmap(QPoint(x + w - cw, y + h - ch), *c.p[3]); + } + + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *sh) { + roundRect(p, x, y, w, h, bg, ::corners[index], sh); } void roundShadow(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &sh, RoundCorners index) { - QPixmap **c = App::corners(index); - int32 cw = c[0]->width() / cIntRetinaFactor(), ch = c[0]->height() / cIntRetinaFactor(); + const CornersPixmaps &c = ::corners[index]; + int32 cw = c.p[0]->width() / cIntRetinaFactor(), ch = c.p[0]->height() / cIntRetinaFactor(); p.fillRect(x + cw, y + h, w - 2 * cw, st::msgShadow, sh->b); p.fillRect(x, y + h - ch, cw, st::msgShadow, sh->b); p.fillRect(x + w - cw, y + h - ch, cw, st::msgShadow, sh->b); - p.drawPixmap(x, y + h - ch + st::msgShadow, *c[2]); - p.drawPixmap(x + w - cw, y + h - ch + st::msgShadow, *c[3]); + p.drawPixmap(x, y + h - ch + st::msgShadow, *c.p[2]); + p.drawPixmap(x + w - cw, y + h - ch + st::msgShadow, *c.p[3]); + } + + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg) { + uint32 colorKey = ((uint32(bg->c.alpha()) & 0xFF) << 24) | ((uint32(bg->c.red()) & 0xFF) << 16) | ((uint32(bg->c.green()) & 0xFF) << 8) | ((uint32(bg->c.blue()) & 0xFF) << 24); + CornersMap::const_iterator i = cornersMap.find(colorKey); + if (i == cornersMap.cend()) { + QImage images[4]; + prepareCorners(NoneCorners, st::msgRadius, bg, 0, images); + + CornersPixmaps pixmaps; + for (int j = 0; j < 4; ++j) { + pixmaps.p[j] = new QPixmap(QPixmap::fromImage(images[j], Qt::ColorOnly)); + pixmaps.p[j]->setDevicePixelRatio(cRetinaFactor()); + } + i = cornersMap.insert(colorKey, pixmaps); + } + roundRect(p, x, y, w, h, bg, i.value(), 0); } void initBackground(int32 id, const QImage &p, bool nowrite) { diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 97fc159a93..f01cbf1c45 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -44,7 +44,7 @@ struct ReplyMarkup { }; enum RoundCorners { - MaskCorners = 0x00, // for images + NoneCorners = 0x00, // for images BlackCorners, ServiceCorners, ServiceSelectedCorners, @@ -260,7 +260,6 @@ namespace App { void openLocalUrl(const QString &url); QImage **cornersMask(); - QPixmap **corners(RoundCorners index); void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *sh = 0); inline void roundRect(Painter &p, const QRect &rect, const style::color &bg, RoundCorners index, const style::color *sh = 0) { return roundRect(p, rect.x(), rect.y(), rect.width(), rect.height(), bg, index, sh); @@ -269,6 +268,10 @@ namespace App { inline void roundShadow(Painter &p, const QRect &rect, const style::color &sh, RoundCorners index) { return roundShadow(p, rect.x(), rect.y(), rect.width(), rect.height(), sh, index); } + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg); + inline void roundRect(Painter &p, const QRect &rect, const style::color &bg) { + return roundRect(p, rect.x(), rect.y(), rect.width(), rect.height(), bg); + } void initBackground(int32 id = DefaultChatBackground, const QImage &p = QImage(), bool nowrite = false); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index db3f756b2b40d40e9078a9dac3b961fe7c31d1f9..59ccef9780c59b5d384a3519e4a86e5fabc46f6d 100644 GIT binary patch delta 57027 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

?s3EYS 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 delta 56353 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

{$`da@@}v#03;T6zo` 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�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⋙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

Y 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 R_hJMd7G?)b^NgLt{sUDA-9Z2V diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 685131f9ea..a9eca94287 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -32,8 +32,8 @@ _text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle) { _version.move(0, st::aboutVersionTop); _text.move(0, st::aboutTextTop); - _headerWidth = st::aboutHeaderFont->m.width(qsl("Telegram ")); - _subheaderWidth = st::aboutSubheaderFont->m.width(qsl("Desktop")); + _headerWidth = st::aboutHeaderFont->width(qsl("Telegram ")); + _subheaderWidth = st::aboutSubheaderFont->width(qsl("Desktop")); _done.move(0, height() - _done.height()); diff --git a/Telegram/SourceFiles/boxes/abstractbox.cpp b/Telegram/SourceFiles/boxes/abstractbox.cpp index ef0e69c5eb..e18f9faef2 100644 --- a/Telegram/SourceFiles/boxes/abstractbox.cpp +++ b/Telegram/SourceFiles/boxes/abstractbox.cpp @@ -24,8 +24,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "mainwidget.h" #include "window.h" -AbstractBox::AbstractBox() : _maxHeight(0), _hiding(false), a_opacity(0, 1) { - resize(st::boxWidth, 0); +AbstractBox::AbstractBox(int32 w) : _maxHeight(0), _hiding(false), a_opacity(0, 1) { + resize(w, 0); } void AbstractBox::prepare() { @@ -65,20 +65,20 @@ bool AbstractBox::paint(QPainter &p) { void AbstractBox::paintTitle(Painter &p, const QString &title, bool withShadow) { if (withShadow) { // paint shadow - p.fillRect(0, st::boxTitleHeight, width(), st::scrollDef.topsh, st::scrollDef.shColor->b); + p.fillRect(0, st::old_boxTitleHeight, width(), st::scrollDef.topsh, st::scrollDef.shColor->b); } // paint box title - p.setFont(st::boxTitleFont->f); + p.setFont(st::old_boxTitleFont->f); p.setPen(st::black->p); - p.drawTextLeft(st::boxTitlePos.x(), st::boxTitlePos.y(), width(), title); + p.drawTextLeft(st::old_boxTitlePos.x(), st::old_boxTitlePos.y(), width(), title); } void AbstractBox::paintGrayTitle(QPainter &p, const QString &title) { // draw box title p.setFont(st::boxFont->f); p.setPen(st::boxGrayTitle->p); - p.drawText(QRect(st::boxTitlePos.x(), st::boxTitlePos.y(), width() - 2 * st::boxTitlePos.x(), st::boxFont->height), title, style::al_top); + p.drawText(QRect(st::old_boxTitlePos.x(), st::old_boxTitlePos.y(), width() - 2 * st::old_boxTitlePos.x(), st::boxFont->height), title, style::al_top); } void AbstractBox::paintEvent(QPaintEvent *e) { @@ -134,7 +134,7 @@ void AbstractBox::startHide() { } ScrollableBox::ScrollableBox(const style::flatScroll &scroll) : AbstractBox(), -_scroll(this, scroll), _innerPtr(0), _topSkip(st::boxTitleHeight), _bottomSkip(0) { +_scroll(this, scroll), _innerPtr(0), _topSkip(st::old_boxTitleHeight), _bottomSkip(0) { } void ScrollableBox::resizeEvent(QResizeEvent *e) { diff --git a/Telegram/SourceFiles/boxes/abstractbox.h b/Telegram/SourceFiles/boxes/abstractbox.h index b50f2a1338..3f03916cc9 100644 --- a/Telegram/SourceFiles/boxes/abstractbox.h +++ b/Telegram/SourceFiles/boxes/abstractbox.h @@ -24,7 +24,7 @@ class AbstractBox : public LayeredWidget { public: - AbstractBox(); + AbstractBox(int32 w = st::boxWideWidth); void parentResized(); void animStep(float64 ms); void keyPressEvent(QKeyEvent *e); @@ -73,7 +73,7 @@ public: protected: - void init(QWidget *inner, int32 bottomSkip = 0, int32 topSkip = st::boxTitleHeight); + void init(QWidget *inner, int32 bottomSkip = 0, int32 topSkip = st::old_boxTitleHeight); virtual void hideAll(); virtual void showAll(); @@ -92,4 +92,4 @@ public: ItemListBox(const style::flatScroll &scroll); -}; \ No newline at end of file +}; diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index c467a64125..758b084586 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -63,15 +63,15 @@ void AddContactBox::initBox() { if (_peer) { if (_peer->isUser()) { _boxTitle = lang(_peer == App::self() ? lng_edit_self_title : lng_edit_contact_title); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 2 * _firstInput.height() + 1 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 2 * _firstInput.height() + 1 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); } else if (_peer->isChat()) { _boxTitle = lang(lng_edit_group_title); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 1 * _firstInput.height() + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 1 * _firstInput.height() + st::addContactPadding.bottom() + _addButton.height()); } } else { bool readyToAdd = !_phoneInput.text().isEmpty() && (!_firstInput.text().isEmpty() || !_lastInput.text().isEmpty()); _boxTitle = lang(readyToAdd ? lng_confirm_contact_data : lng_enter_contact_data); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); } _retryButton.hide(); @@ -169,7 +169,7 @@ void AddContactBox::paintEvent(QPaintEvent *e) { } else { // draw box text p.setPen(st::black->p); - p.setFont(st::boxTitleFont->f); + p.setFont(st::old_boxTitleFont->f); int32 h = size().height() - st::boxPadding.top() * 2 - _retryButton.height() - st::boxPadding.bottom(); p.drawText(QRect(st::boxPadding.left(), st::boxPadding.top(), width() - st::boxPadding.left() - st::boxPadding.right(), h), lng_contact_not_joined(lt_name, _sentName), style::al_topleft); } @@ -183,11 +183,11 @@ void AddContactBox::paintEvent(QPaintEvent *e) { void AddContactBox::resizeEvent(QResizeEvent *e) { if (_invertOrder) { - _lastInput.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _lastInput.height()); + _lastInput.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _lastInput.height()); _firstInput.setGeometry(st::addContactPadding.left(), _lastInput.y() + _lastInput.height() + st::addContactDelta, _lastInput.width(), _lastInput.height()); _phoneInput.setGeometry(st::addContactPadding.left(), _firstInput.y() + _firstInput.height() + st::addContactDelta, _lastInput.width(), _lastInput.height()); } else { - _firstInput.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _firstInput.height()); + _firstInput.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _firstInput.height()); _lastInput.setGeometry(st::addContactPadding.left(), _firstInput.y() + _firstInput.height() + st::addContactDelta, _firstInput.width(), _firstInput.height()); _phoneInput.setGeometry(st::addContactPadding.left(), _lastInput.y() + _lastInput.height() + st::addContactDelta, _lastInput.width(), _lastInput.height()); } @@ -309,7 +309,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { _lastInput.hide(); _phoneInput.hide(); _retryButton.show(); - int32 theight = st::boxTitleFont->m.boundingRect(0, 0, width() - st::boxPadding.left() - st::boxPadding.right(), 1, Qt::TextWordWrap, lng_contact_not_joined(lt_name, _sentName)).height(); + int32 theight = st::old_boxTitleFont->m.boundingRect(0, 0, width() - st::boxPadding.left() - st::boxPadding.right(), 1, Qt::TextWordWrap, lng_contact_not_joined(lt_name, _sentName)).height(); int32 h = st::boxPadding.top() * 2 + theight + _retryButton.height() + st::boxPadding.bottom(); setMaxHeight(h); update(); @@ -342,7 +342,7 @@ void AddContactBox::onRetry() { _phoneInput.setDisabled(false); _retryButton.hide(); _firstInput.setFocus(); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); update(); } @@ -473,7 +473,7 @@ QRect EditChannelBox::descriptionRect() const { } void EditChannelBox::updateMaxHeight() { - int32 h = st::boxTitleHeight + st::newGroupPadding.top() + _title.height(); + int32 h = st::old_boxTitleHeight + st::newGroupPadding.top() + _title.height(); h += st::newGroupDescriptionSkip + st::newGroupDescriptionPadding.top() + _description.height() + st::newGroupDescriptionPadding.bottom(); h += st::newGroupPublicLinkSkip + _publicLink.height(); h += st::newGroupPadding.bottom() + _saveButton.height(); @@ -497,7 +497,7 @@ bool EditChannelBox::eventFilter(QObject *obj, QEvent *e) { void EditChannelBox::resizeEvent(QResizeEvent *e) { _title.resize(width() - st::newGroupPadding.left() - st::newGroupPadding.right(), _title.height()); - _title.moveToLeft(st::newGroupPadding.left(), st::boxTitleHeight + st::newGroupPadding.top(), width()); + _title.moveToLeft(st::newGroupPadding.left(), st::old_boxTitleHeight + st::newGroupPadding.top(), width()); _description.moveToLeft(st::newGroupPadding.left() + st::newGroupDescriptionPadding.left(), _title.y() + _title.height() + st::newGroupDescriptionSkip + st::newGroupDescriptionPadding.top(), width()); diff --git a/Telegram/SourceFiles/boxes/autolockbox.cpp b/Telegram/SourceFiles/boxes/autolockbox.cpp index ec6ad7c5c4..d73131e906 100644 --- a/Telegram/SourceFiles/boxes/autolockbox.cpp +++ b/Telegram/SourceFiles/boxes/autolockbox.cpp @@ -32,9 +32,9 @@ _done(this, lang(lng_about_done), st::langsCloseButton) { int32 opts[] = { 60, 300, 3600, 18000 }, cnt = sizeof(opts) / sizeof(opts[0]); - resizeMaxHeight(st::langsWidth, st::boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + cnt * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); + resizeMaxHeight(st::langsWidth, st::old_boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + cnt * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); - int32 y = st::boxTitleHeight + st::langsPadding.top(); + int32 y = st::old_boxTitleHeight + st::langsPadding.top(); _options.reserve(cnt); for (int32 i = 0; i < cnt; ++i) { int32 v = opts[i]; diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 407b099293..1d97c13d38 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -31,42 +31,38 @@ TextParseOptions _confirmBoxTextOptions = { Qt::LayoutDirectionAuto, // dir }; -ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const QString &cancelText, const style::flatButton &doneStyle, const style::flatButton &cancelStyle) : _infoMsg(false), -_confirm(this, doneText.isEmpty() ? lang(lng_continue) : doneText, doneStyle), -_cancel(this, cancelText.isEmpty() ? lang(lng_cancel) : cancelText, cancelStyle), -_close(this, QString(), st::btnInfoClose), -_text(100) { +ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, const QString &cancelText, const style::BoxButton &cancelStyle) : AbstractBox(st::boxWidth), +_informative(false), +_text(100), +_confirm(this, doneText.isEmpty() ? lang(lng_box_ok) : doneText, doneStyle), +_cancel(this, cancelText.isEmpty() ? lang(lng_box_cancel) : cancelText, cancelStyle) { init(text); } -ConfirmBox::ConfirmBox(const QString &text, bool noDone, const QString &cancelText) : _infoMsg(true), -_confirm(this, QString(), st::btnSelectDone), -_cancel(this, QString(), st::btnSelectCancel), -_close(this, cancelText.isEmpty() ? lang(lng_close) : cancelText, st::btnInfoClose), -_text(100) { +ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, bool informative) : AbstractBox(st::boxWidth), +_informative(true), +_text(100), +_confirm(this, doneText.isEmpty() ? lang(lng_box_ok) : doneText, doneStyle), +_cancel(this, QString(), st::cancelBoxButton) { init(text); } void ConfirmBox::init(const QString &text) { - _text.setText(st::boxFont, text, (_infoMsg ? _confirmBoxTextOptions : _textPlainOptions)); + _text.setText(st::boxTextFont, text, _informative ? _confirmBoxTextOptions : _textPlainOptions); - _textWidth = st::boxWidth + 10 - st::boxPadding.left() - st::boxPadding.right(); - _textHeight = qMin(_text.countHeight(_textWidth), 16 * st::boxFont->height); - setMaxHeight(st::boxPadding.top() + _textHeight + st::boxPadding.bottom() + (_infoMsg ? _close.height() : _confirm.height())); + textstyleSet(&st::boxTextStyle); + _textWidth = st::boxWidth - st::boxPadding.left() - st::boxPadding.right(); + _textHeight = qMin(_text.countHeight(_textWidth), 16 * int(st::boxTextStyle.lineHeight)); + setMaxHeight(st::boxPadding.top() + _textHeight + st::boxPadding.bottom() + st::boxButtonPadding.top() + _confirm.height() + st::boxButtonPadding.bottom()); + textstyleRestore(); - if (_infoMsg) { - _confirm.hide(); + connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed())); + connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel())); + if (_informative) { _cancel.hide(); - - connect(&_close, SIGNAL(clicked()), this, SLOT(onCancel())); - - setMouseTracking(_text.hasLinks()); - } else { - _close.hide(); - - connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed())); - connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel())); + connect(this, SIGNAL(confirmed()), this, SLOT(onCancel())); } + setMouseTracking(_text.hasLinks()); prepare(); } @@ -121,7 +117,9 @@ void ConfirmBox::updateLink() { void ConfirmBox::updateHover() { QPoint m(mapFromGlobal(_lastMousePos)); bool wasMy = (_myLink == textlnkOver()); + textstyleSet(&st::boxTextStyle); _myLink = _text.link(m.x() - st::boxPadding.left(), m.y() - st::boxPadding.top(), _textWidth, (_text.maxWidth() < width()) ? style::al_center : style::al_left); + textstyleRestore(); if (_myLink != textlnkOver()) { if (wasMy || _myLink || rect().contains(m)) { textlnkOver(_myLink); @@ -138,12 +136,11 @@ void ConfirmBox::closePressed() { void ConfirmBox::hideAll() { _confirm.hide(); _cancel.hide(); - _close.hide(); } void ConfirmBox::showAll() { - if (_infoMsg) { - _close.show(); + if (_informative) { + _confirm.show(); } else { _confirm.show(); _cancel.show(); @@ -162,27 +159,16 @@ void ConfirmBox::paintEvent(QPaintEvent *e) { QPainter p(this); if (paint(p)) return; - if (!_infoMsg) { - // paint shadows - p.fillRect(0, height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); - - // paint button sep - p.fillRect(st::btnSelectCancel.width, height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); - } - // draw box title / text - p.setFont(st::boxFont->f); p.setPen(st::black->p); - _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, (_text.maxWidth() < width()) ? style::al_center : style::al_left); + textstyleSet(&st::boxTextStyle); + _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, style::al_left); + textstyleRestore(); } void ConfirmBox::resizeEvent(QResizeEvent *e) { - if (_infoMsg) { - _close.move(0, st::boxPadding.top() + _textHeight + st::boxPadding.bottom()); - } else { - _confirm.move(width() - _confirm.width(), st::boxPadding.top() + _textHeight + st::boxPadding.bottom()); - _cancel.move(0, st::boxPadding.top() + _textHeight + st::boxPadding.bottom()); - } + _confirm.moveToRight(st::boxButtonPadding.right(), height() - st::boxButtonPadding.bottom() - _confirm.height(), width()); + _cancel.moveToRight(st::boxButtonPadding.right() + _confirm.width() + st::boxButtonPadding.left(), _confirm.y(), width()); } ConfirmLinkBox::ConfirmLinkBox(const QString &url) : ConfirmBox(lang(lng_open_this_link) + qsl("\n\n") + url, lang(lng_open_link)), _url(url) { @@ -198,16 +184,16 @@ void ConfirmLinkBox::onOpenLink() { App::wnd()->hideLayer(); } -MaxInviteBox::MaxInviteBox(const QString &link) : -_close(this, lang(lng_close), st::btnInfoClose), -_text(st::boxFont, lng_participant_invite_sorry(lt_count, QString::number(cMaxGroupCount())), _confirmBoxTextOptions), +MaxInviteBox::MaxInviteBox(const QString &link) : AbstractBox(st::boxWidth), +_close(this, lang(lng_box_ok), st::defaultBoxButton), +_text(st::boxTextFont, lng_participant_invite_sorry(lt_count, cMaxGroupCount()), _confirmBoxTextOptions, st::boxWidth - st::boxPadding.left() - st::boxPadding.right()), _link(link), _linkOver(false), a_goodOpacity(0, 0), a_good(animFunc(this, &MaxInviteBox::goodAnimStep)) { setMouseTracking(true); - _textWidth = st::boxWidth + 10 - st::boxPadding.left() - st::boxPadding.right(); - _textHeight = qMin(_text.countHeight(_textWidth), 16 * st::boxFont->height); - setMaxHeight(st::boxPadding.top() + _textHeight + st::newGroupLinkPadding.top() + st::newGroupLink.height + st::newGroupLinkPadding.bottom() + _close.height()); + _textWidth = st::boxWidth - st::boxPadding.left() - st::boxPadding.right(); + _textHeight = qMin(_text.countHeight(_textWidth), 16 * int(st::boxTextStyle.lineHeight)); + setMaxHeight(st::boxPadding.top() + _textHeight + st::newGroupLinkPadding.top() + st::newGroupLink.height + st::newGroupLinkPadding.bottom() + _close.height() + st::boxButtonPadding.bottom()); connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); @@ -269,9 +255,8 @@ void MaxInviteBox::paintEvent(QPaintEvent *e) { if (paint(p)) return; // draw box title / text - p.setFont(st::boxFont->f); p.setPen(st::black->p); - _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, (_text.maxWidth() < width()) ? style::al_center : style::al_left); + _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, style::al_left); QTextOption option(style::al_left); option.setWrapMode(QTextOption::WrapAnywhere); @@ -288,6 +273,6 @@ void MaxInviteBox::paintEvent(QPaintEvent *e) { } void MaxInviteBox::resizeEvent(QResizeEvent *e) { - _close.move(0, height() - _close.height()); + _close.moveToRight(st::boxButtonPadding.right(), height() - st::boxButtonPadding.bottom() - _close.height(), width()); _invitationLink = QRect(st::newGroupPadding.left(), st::boxPadding.top() + _textHeight + st::newGroupLinkPadding.top() + (st::newGroupLink.height / 2) - st::newGroupLinkFont->height, width() - st::newGroupPadding.left() - st::newGroupPadding.right(), 2 * st::newGroupLinkFont->height); } diff --git a/Telegram/SourceFiles/boxes/confirmbox.h b/Telegram/SourceFiles/boxes/confirmbox.h index c6f1e7b5ed..1b56babf5c 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.h +++ b/Telegram/SourceFiles/boxes/confirmbox.h @@ -19,13 +19,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "abstractbox.h" +class InformBox; class ConfirmBox : public AbstractBox { Q_OBJECT public: - ConfirmBox(const QString &text, const QString &doneText = QString(), const QString &cancelText = QString(), const style::flatButton &doneStyle = st::btnSelectDone, const style::flatButton &cancelStyle = st::btnSelectCancel); - ConfirmBox(const QString &text, bool noDone, const QString &cancelText = QString()); + ConfirmBox(const QString &text, const QString &doneText = QString(), const style::BoxButton &doneStyle = st::defaultBoxButton, const QString &cancelText = QString(), const style::BoxButton &cancelStyle = st::cancelBoxButton); void keyPressEvent(QKeyEvent *e); void paintEvent(QPaintEvent *e); void resizeEvent(QResizeEvent *e); @@ -53,12 +53,13 @@ protected: private: + ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, bool informative); + friend class InformBox; + void init(const QString &text); - bool _infoMsg; + bool _informative; - FlatButton _confirm, _cancel; - BottomButton _close; Text _text; int32 _textWidth, _textHeight; @@ -66,6 +67,14 @@ private: QPoint _lastMousePos; TextLinkPtr _myLink; + + BoxButton _confirm, _cancel; +}; + +class InformBox : public ConfirmBox { +public: + InformBox(const QString &text, const QString &doneText = QString(), const style::BoxButton &doneStyle = st::defaultBoxButton) : ConfirmBox(text, doneText, doneStyle, true) { + } }; class ConfirmLinkBox : public ConfirmBox { @@ -108,7 +117,7 @@ private: void updateSelected(const QPoint &cursorGlobalPosition); bool goodAnimStep(float64 ms); - BottomButton _close; + BoxButton _close; Text _text; int32 _textWidth, _textHeight; diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index fca3a99e34..73690f8f3e 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -69,7 +69,7 @@ void ConnectionBox::showAll() { _tcpProxyRadio.show(); _tryIPv6.show(); - int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip + st::lineWidth + st::connectionSkip + _tryIPv6.height() + st::connectionSkip; + int32 h = st::old_boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip + st::lineWidth + st::connectionSkip + _tryIPv6.height() + st::connectionSkip; if (_httpProxyRadio.checked() || _tcpProxyRadio.checked()) { h += 2 * st::boxPadding.top() + 2 * _hostInput.height(); _hostInput.show(); @@ -113,7 +113,7 @@ void ConnectionBox::paintEvent(QPaintEvent *e) { } void ConnectionBox::resizeEvent(QResizeEvent *e) { - _autoRadio.move(st::boxPadding.left(), st::boxTitleHeight + st::connectionSkip); + _autoRadio.move(st::boxPadding.left(), st::old_boxTitleHeight + st::connectionSkip); _httpProxyRadio.move(st::boxPadding.left(), _autoRadio.y() + _autoRadio.height() + st::connectionSkip); int32 inputy = 0; diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 7978ebd01e..0e8aacce8c 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -322,15 +322,15 @@ void ContactsInner::paintDialog(Painter &p, PeerData *peer, ContactData *data, b if (uname && !data->inchat && !data->check && !_lastQuery.isEmpty() && peer->userName().startsWith(_lastQuery, Qt::CaseInsensitive)) { int32 availw = width() - (left + st::profileListPhotoSize + st::profileListPadding.width() * 2); QString first = '@' + peer->userName().mid(0, _lastQuery.size()), second = peer->userName().mid(_lastQuery.size()); - int32 w = st::profileSubFont->m.width(first); + int32 w = st::profileSubFont->width(first); if (w >= availw || second.isEmpty()) { p.setPen(st::profileOnlineColor->p); - p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->m.elidedText(first, Qt::ElideRight, availw)); + p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->elided(first, availw)); } else { p.setPen(st::profileOnlineColor->p); p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, first); p.setPen(st::profileOfflineColor->p); - p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width() + w, st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->m.elidedText(second, Qt::ElideRight, availw - w)); + p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width() + w, st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->elided(second, availw - w)); } } else { if (data->inchat || data->check) { @@ -1300,7 +1300,7 @@ void ContactsBox::paintEvent(QPaintEvent *e) { if (!addingAdmin) { p.setPen(st::newGroupLimitFg); - p.drawTextLeft(st::boxTitlePos.x() + st::boxTitleFont->m.width(title) + st::addContactDelta, st::boxTitlePos.y(), width(), QString("%1 / %2").arg(_inner.selectedCount()).arg(cMaxGroupCount())); + p.drawTextLeft(st::old_boxTitlePos.x() + st::old_boxTitleFont->width(title) + st::addContactDelta, st::old_boxTitlePos.y(), width(), QString("%1 / %2").arg(_inner.selectedCount()).arg(cMaxGroupCount())); // paint button sep p.fillRect(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); @@ -1421,7 +1421,7 @@ bool ContactsBox::creationFail(const RPCError &error) { _filter.notaBene(); return true; } else if (error.type() == "PEER_FLOOD") { - App::wnd()->replaceLayer(new ConfirmBox(lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); + App::wnd()->replaceLayer(new InformBox(lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); return true; } return false; @@ -1430,7 +1430,7 @@ bool ContactsBox::creationFail(const RPCError &error) { MembersInner::MembersInner(ChannelData *channel, MembersFilter filter) : _channel(channel), _filter(filter), _kickText(lang(lng_profile_kick)), _time(0), -_kickWidth(st::normalFont->m.width(_kickText)), +_kickWidth(st::normalFont->width(_kickText)), _sel(-1), _kickSel(-1), _kickDown(-1), @@ -1667,6 +1667,7 @@ QMap MembersInner::already() const { } void MembersInner::clearSel() { + updateSelectedRow(); _sel = _kickSel = _kickDown = -1; _lastMousePos = QCursor::pos(); updateSel(); @@ -1938,8 +1939,7 @@ void MembersBox::onAdd() { } ContactsBox *box = new ContactsBox(_inner.channel(), _inner.filter(), _inner.already()); if (_inner.filter() == MembersFilterRecent) { - App::wnd()->hideLayer(true); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(box); } else { _addBox = box; connect(_addBox, SIGNAL(adminAdded()), this, SLOT(onAdminAdded())); @@ -1971,6 +1971,7 @@ void MembersBox::showAll() { } void MembersBox::showDone() { + _inner.clearSel(); setFocus(); } @@ -1978,7 +1979,7 @@ NewGroupBox::NewGroupBox() : AbstractBox(), _group(this, qsl("group_type"), 0, lang(lng_create_group_title), true), _channel(this, qsl("group_type"), 1, lang(lng_create_channel_title)), _aboutGroupWidth(width() - st::newGroupPadding.left() - st::newGroupPadding.right() - st::rbDefFlat.textLeft), -_aboutGroup(st::normalFont, lng_create_group_about(lt_count, QString::number(cMaxGroupCount())), _defaultOptions, _aboutGroupWidth), +_aboutGroup(st::normalFont, lng_create_group_about(lt_count, cMaxGroupCount()), _defaultOptions, _aboutGroupWidth), _aboutChannel(st::normalFont, lang(lng_create_channel_about), _defaultOptions, _aboutGroupWidth), _next(this, lang(lng_create_group_next), st::btnSelectDone), _cancel(this, lang(lng_cancel), st::btnSelectCancel) { @@ -2304,7 +2305,7 @@ bool GroupInfoBox::creationFail(const RPCError &error) { _name.notaBene(); return true; } else if (error.type() == "PEER_FLOOD") { - App::wnd()->replaceLayer(new ConfirmBox(lng_cant_invite_not_contact_channel(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); + App::wnd()->replaceLayer(new InformBox(lng_cant_invite_not_contact_channel(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); return true; } return false; @@ -2315,8 +2316,7 @@ void GroupInfoBox::exportDone(const MTPExportedChatInvite &result) { if (result.type() == mtpc_chatInviteExported) { _createdChannel->invitationUrl = qs(result.c_chatInviteExported().vlink); } - App::wnd()->hideLayer(true); - App::wnd()->showLayer(new SetupChannelBox(_createdChannel), true); + App::wnd()->showLayer(new SetupChannelBox(_createdChannel)); } void GroupInfoBox::onDescriptionResized() { @@ -2395,7 +2395,7 @@ a_goodOpacity(0, 0), a_good(animFunc(this, &SetupChannelBox::goodAnimStep)) { _checkRequestId = MTP::send(MTPchannels_CheckUsername(_channel->inputChannel, MTP_string("preston")), RPCDoneHandlerPtr(), rpcFail(&SetupChannelBox::onFirstCheckFail)); - _link.setTextMargin(style::margins(st::newGroupLink.textMrg.left() + st::newGroupLink.font->m.width(_linkPlaceholder), st::newGroupLink.textMrg.top(), st::newGroupLink.textMrg.right(), st::newGroupLink.textMrg.bottom())); + _link.setTextMargin(style::margins(st::newGroupLink.textMrg.left() + st::newGroupLink.font->width(_linkPlaceholder), st::newGroupLink.textMrg.top(), st::newGroupLink.textMrg.right(), st::newGroupLink.textMrg.bottom())); _aboutPublicHeight = _aboutPublic.countHeight(_aboutPublicWidth); setMaxHeight(st::newGroupPadding.top() + _public.height() + _aboutPublicHeight + st::newGroupSkip + _private.height() + _aboutPrivate.countHeight(_aboutPublicWidth)/* + st::newGroupSkip + _comments.height() + _aboutComments.countHeight(_aboutPublicWidth)*/ + st::newGroupPadding.bottom() + st::newGroupLinkPadding.top() + _link.height() + st::newGroupLinkPadding.bottom() + _save.height()); @@ -2569,7 +2569,7 @@ bool SetupChannelBox::goodAnimStep(float64 ms) { void SetupChannelBox::closePressed() { if (!_existing) { - App::wnd()->showLayer(new ContactsBox(_channel), true); + App::wnd()->showLayer(new ContactsBox(_channel)); } } @@ -2654,7 +2654,7 @@ void SetupChannelBox::onPrivacyChange() { if (_public.checked()) { if (_tooMuchUsernames) { _private.setChecked(true); - App::wnd()->replaceLayer(new ConfirmBox(lang(lng_channels_too_much_public), true)); + App::wnd()->replaceLayer(new InformBox(lang(lng_channels_too_much_public))); return; } _link.show(); @@ -2715,8 +2715,7 @@ bool SetupChannelBox::onCheckFail(const RPCError &error) { QString err(error.type()); if (err == "CHANNELS_ADMIN_PUBLIC_TOO_MUCH") { if (_existing) { - App::wnd()->hideLayer(true); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channels_too_much_public_existing), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_channels_too_much_public_existing))); } else { _tooMuchUsernames = true; _private.setChecked(true); @@ -2744,8 +2743,7 @@ bool SetupChannelBox::onFirstCheckFail(const RPCError &error) { QString err(error.type()); if (err == "CHANNELS_ADMIN_PUBLIC_TOO_MUCH") { if (_existing) { - App::wnd()->hideLayer(true); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channels_too_much_public_existing), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_channels_too_much_public_existing))); } else { _tooMuchUsernames = true; _private.setChecked(true); diff --git a/Telegram/SourceFiles/boxes/contactsbox.h b/Telegram/SourceFiles/boxes/contactsbox.h index 45e872bb87..c508274401 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.h +++ b/Telegram/SourceFiles/boxes/contactsbox.h @@ -274,6 +274,7 @@ public: bool isLoaded() const { return !_loading; } + void clearSel(); QMap already() const; @@ -298,7 +299,6 @@ public slots: private: void updateSelectedRow(); - void clearSel(); MemberData *data(int32 index); void membersReceived(const MTPchannels_ChannelParticipants &result, mtpRequestId req); diff --git a/Telegram/SourceFiles/boxes/downloadpathbox.cpp b/Telegram/SourceFiles/boxes/downloadpathbox.cpp index eaff7eedd9..9191b35355 100644 --- a/Telegram/SourceFiles/boxes/downloadpathbox.cpp +++ b/Telegram/SourceFiles/boxes/downloadpathbox.cpp @@ -70,7 +70,7 @@ void DownloadPathBox::showAll() { _saveButton.show(); _cancelButton.show(); - int32 h = st::boxTitleHeight + st::downloadSkip + _defaultRadio.height() + st::downloadSkip + _tempRadio.height() + st::downloadSkip + _dirRadio.height(); + int32 h = st::old_boxTitleHeight + st::downloadSkip + _defaultRadio.height() + st::downloadSkip + _tempRadio.height() + st::downloadSkip + _dirRadio.height(); if (_dirRadio.checked()) h += st::boxPadding.top() + _dirInput.height(); h += st::downloadSkip + _saveButton.height(); @@ -91,7 +91,7 @@ void DownloadPathBox::paintEvent(QPaintEvent *e) { } void DownloadPathBox::resizeEvent(QResizeEvent *e) { - _defaultRadio.move(st::boxPadding.left(), st::boxTitleHeight + st::downloadSkip); + _defaultRadio.move(st::boxPadding.left(), st::old_boxTitleHeight + st::downloadSkip); _tempRadio.move(st::boxPadding.left(), _defaultRadio.y() + _defaultRadio.height() + st::downloadSkip); _dirRadio.move(st::boxPadding.left(), _tempRadio.y() + _tempRadio.height() + st::downloadSkip); int32 inputy = _dirRadio.y() + _dirRadio.height() + st::boxPadding.top(); diff --git a/Telegram/SourceFiles/boxes/languagebox.cpp b/Telegram/SourceFiles/boxes/languagebox.cpp index 45e2b5fae7..40648c0f4f 100644 --- a/Telegram/SourceFiles/boxes/languagebox.cpp +++ b/Telegram/SourceFiles/boxes/languagebox.cpp @@ -32,7 +32,7 @@ _done(this, lang(lng_about_done), st::langsCloseButton) { bool haveTestLang = (cLang() == languageTest); - int32 y = st::boxTitleHeight + st::langsPadding.top(); + int32 y = st::old_boxTitleHeight + st::langsPadding.top(); _langs.reserve(languageCount + (haveTestLang ? 1 : 0)); if (haveTestLang) { _langs.push_back(new FlatRadiobutton(this, qsl("lang"), languageTest, qsl("Custom Lang"), (cLang() == languageTest), st::langButton)); @@ -54,7 +54,7 @@ _done(this, lang(lng_about_done), st::langsCloseButton) { connect(_langs.back(), SIGNAL(changed()), this, SLOT(onChange())); } - resizeMaxHeight(st::langsWidth, st::boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + (languageCount + (haveTestLang ? 1 : 0)) * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); + resizeMaxHeight(st::langsWidth, st::old_boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + (languageCount + (haveTestLang ? 1 : 0)) * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); connect(&_done, SIGNAL(clicked()), this, SLOT(onClose())); @@ -80,16 +80,16 @@ void LanguageBox::mousePressEvent(QMouseEvent *e) { for (int32 i = 1; i < languageCount; ++i) { LangLoaderPlain loader(qsl(":/langs/lang_") + LanguageCodes[i] + qsl(".strings"), LangLoaderRequest(lngkeys_cnt)); if (!loader.errors().isEmpty()) { - App::wnd()->showLayer(new ConfirmBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" error :(\n\nError: ") + loader.errors(), true, lang(lng_close))); + App::wnd()->showLayer(new InformBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" error :(\n\nError: ") + loader.errors())); return; } else if (!loader.warnings().isEmpty()) { QString warn = loader.warnings(); if (warn.size() > 256) warn = warn.mid(0, 254) + qsl(".."); - App::wnd()->showLayer(new ConfirmBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" warnings :(\n\nWarnings: ") + warn, true, lang(lng_close))); + App::wnd()->showLayer(new InformBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" warnings :(\n\nWarnings: ") + warn)); return; } } - App::wnd()->showLayer(new ConfirmBox(qsl("Everything seems great in all %1 languages!").arg(languageCount - 1), true, lang(lng_close))); + App::wnd()->showLayer(new InformBox(qsl("Everything seems great in all %1 languages!").arg(languageCount - 1))); } } @@ -112,16 +112,16 @@ void LanguageBox::onChange() { if (_langs[i]->checked() && langId != cLang()) { LangLoaderResult result; if (langId > 0) { - LangLoaderPlain loader(qsl(":/langs/lang_") + LanguageCodes[langId] + qsl(".strings"), LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + LangLoaderPlain loader(qsl(":/langs/lang_") + LanguageCodes[langId] + qsl(".strings"), LangLoaderRequest(lng_sure_save_language, lng_box_cancel, lng_box_ok)); result = loader.found(); } else if (langId == languageTest) { - LangLoaderPlain loader(cLangFile(), LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + LangLoaderPlain loader(cLangFile(), LangLoaderRequest(lng_sure_save_language, lng_box_cancel, lng_box_ok)); result = loader.found(); } QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), - save = result.value(lng_continue, langOriginal(lng_continue)), - cancel = result.value(lng_cancel, langOriginal(lng_cancel)); - ConfirmBox *box = new ConfirmBox(text, save, cancel); + save = result.value(lng_box_ok, langOriginal(lng_box_ok)), + cancel = result.value(lng_box_cancel, langOriginal(lng_box_cancel)); + ConfirmBox *box = new ConfirmBox(text, save, st::defaultBoxButton, cancel); connect(box, SIGNAL(confirmed()), this, SLOT(onSave())); connect(box, SIGNAL(closed()), this, SLOT(onRestore())); App::wnd()->replaceLayer(box); diff --git a/Telegram/SourceFiles/boxes/passcodebox.cpp b/Telegram/SourceFiles/boxes/passcodebox.cpp index 0dad83cccd..0d8e920362 100644 --- a/Telegram/SourceFiles/boxes/passcodebox.cpp +++ b/Telegram/SourceFiles/boxes/passcodebox.cpp @@ -25,8 +25,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" PasscodeBox::PasscodeBox(bool turningOff) : _replacedBy(0), _turningOff(turningOff), _cloudPwd(false), -_setRequest(0), _hasRecovery(false), _aboutHeight(0), -_about(st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right()), +_setRequest(0), _hasRecovery(false), _skipEmailWarning(false), _aboutHeight(0), +_about(st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right()), _saveButton(this, lang(_turningOff ? lng_passcode_remove_button : lng_settings_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _oldPasscode(this, st::inpAddContact, lang(lng_passcode_enter_old)), @@ -40,8 +40,8 @@ _recover(this, lang(lng_signin_recover)) { } PasscodeBox::PasscodeBox(const QByteArray &newSalt, const QByteArray &curSalt, bool hasRecovery, const QString &hint, bool turningOff) : _replacedBy(0), _turningOff(turningOff), _cloudPwd(true), -_setRequest(0), _newSalt(newSalt), _curSalt(curSalt), _hasRecovery(hasRecovery), _hint(hint), _aboutHeight(0), -_about(st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right()), +_setRequest(0), _newSalt(newSalt), _curSalt(curSalt), _hasRecovery(hasRecovery), _skipEmailWarning(false), _hint(hint), _aboutHeight(0), +_about(st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right()), _saveButton(this, lang(_turningOff ? lng_passcode_remove_button : lng_settings_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _oldPasscode(this, st::inpAddContact, lang(lng_cloud_password_enter_old)), @@ -57,24 +57,24 @@ _recover(this, lang(lng_signin_recover)) { void PasscodeBox::init() { _about.setRichText(st::usernameFont, lang(_cloudPwd ? lng_cloud_password_about : lng_passcode_about)); if (!_hint.isEmpty()) _hintText.setText(st::usernameFont, lng_signin_hint(lt_password_hint, _hint)); - _aboutHeight = _about.countHeight(st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right()); + _aboutHeight = _about.countHeight(st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right()); _oldPasscode.setEchoMode(QLineEdit::Password); _newPasscode.setEchoMode(QLineEdit::Password); _reenterPasscode.setEchoMode(QLineEdit::Password); if (_turningOff) { _oldPasscode.show(); _boxTitle = lang(_cloudPwd ? lng_cloud_password_remove : lng_passcode_remove); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 1 * _oldPasscode.height() + st::usernameSkip + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 1 * _oldPasscode.height() + st::usernameSkip + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); } else { bool has = _cloudPwd ? (!_curSalt.isEmpty()) : cHasPasscode(); if (has) { _oldPasscode.show(); _boxTitle = lang(_cloudPwd ? lng_cloud_password_change : lng_passcode_change); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 3 * _oldPasscode.height() + st::usernameSkip * 2 + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 3 * _oldPasscode.height() + st::usernameSkip * 2 + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); } else { _oldPasscode.hide(); _boxTitle = lang(_cloudPwd ? lng_cloud_password_create : lng_passcode_create); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 2 * _oldPasscode.height() + st::usernameSkip + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_cloudPwd ? st::addContactDelta + _recoverEmail.height() + st::usernameSkip : st::addContactPadding.bottom()) + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 2 * _oldPasscode.height() + st::usernameSkip + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_cloudPwd ? st::addContactDelta + _recoverEmail.height() + st::usernameSkip : st::addContactPadding.bottom()) + _saveButton.height()); } } @@ -220,7 +220,7 @@ void PasscodeBox::paintEvent(QPaintEvent *e) { void PasscodeBox::resizeEvent(QResizeEvent *e) { bool has = _cloudPwd ? (!_curSalt.isEmpty()) : cHasPasscode(); - _oldPasscode.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _oldPasscode.height()); + _oldPasscode.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _oldPasscode.height()); _newPasscode.setGeometry(st::addContactPadding.left(), _oldPasscode.y() + ((_turningOff || has) ? (_oldPasscode.height() + st::usernameSkip) : 0), _oldPasscode.width(), _oldPasscode.height()); _reenterPasscode.setGeometry(st::addContactPadding.left(), _newPasscode.y() + _newPasscode.height() + st::addContactDelta, _newPasscode.width(), _newPasscode.height()); _passwordHint.setGeometry(st::addContactPadding.left(), _reenterPasscode.y() + _reenterPasscode.height() + st::usernameSkip, _reenterPasscode.width(), _reenterPasscode.height()); @@ -241,18 +241,21 @@ void PasscodeBox::resizeEvent(QResizeEvent *e) { } void PasscodeBox::showDone() { - if (_oldPasscode.isHidden()) { + if (_skipEmailWarning && !_recoverEmail.isHidden()) { + _recoverEmail.setFocus(); + } else if (_oldPasscode.isHidden()) { _newPasscode.setFocus(); } else { _oldPasscode.setFocus(); } + _skipEmailWarning = false; } void PasscodeBox::setPasswordDone(const MTPBool &result) { _setRequest = 0; emit reloadPassword(); - ConfirmBox *box = new ConfirmBox(lang(_reenterPasscode.isHidden() ? lng_cloud_password_removed : (_oldPasscode.isHidden() ? lng_cloud_password_was_set : lng_cloud_password_updated)), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + ConfirmBox *box = new InformBox(lang(_reenterPasscode.isHidden() ? lng_cloud_password_removed : (_oldPasscode.isHidden() ? lng_cloud_password_was_set : lng_cloud_password_updated))); + App::wnd()->showLayer(box); } bool PasscodeBox::setPasswordFail(const RPCError &error) { @@ -280,8 +283,7 @@ bool PasscodeBox::setPasswordFail(const RPCError &error) { _recoverEmail.notaBene(); update(); } else if (err == "EMAIL_UNCONFIRMED") { - ConfirmBox *box = new ConfirmBox(lang(lng_cloud_password_almost), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(new InformBox(lang(lng_cloud_password_almost))); emit reloadPassword(); } else if (error.type().startsWith(qsl("FLOOD_WAIT_"))) { if (_oldPasscode.isHidden()) return false; @@ -349,7 +351,8 @@ void PasscodeBox::onSave(bool force) { return; } if (!_recoverEmail.isHidden() && email.isEmpty() && !force) { - _replacedBy = new ConfirmBox(lang(lng_cloud_password_about_recover)); + _skipEmailWarning = true; + _replacedBy = new ConfirmBox(lang(lng_cloud_password_about_recover), lang(lng_cloud_password_skip_email), st::attentionBoxButton); connect(_replacedBy, SIGNAL(confirmed()), this, SLOT(onForceNoMail())); connect(_replacedBy, SIGNAL(destroyed(QObject*)), this, SLOT(onBoxDestroyed(QObject*))); App::wnd()->replaceLayer(_replacedBy); @@ -459,11 +462,11 @@ bool PasscodeBox::recoverStartFail(const RPCError &error) { } RecoverBox::RecoverBox(const QString &pattern) : -_submitRequest(0), _pattern(st::usernameFont->m.elidedText(lng_signin_recover_hint(lt_recover_email, pattern), Qt::ElideRight, st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right())), +_submitRequest(0), _pattern(st::usernameFont->elided(lng_signin_recover_hint(lt_recover_email, pattern), st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right())), _saveButton(this, lang(lng_passcode_submit), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _recoverCode(this, st::inpAddContact, lang(lng_signin_code)) { - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + st::usernameSkip + _recoverCode.height() + st::usernameSkip + st::addContactPadding.bottom() + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + st::usernameSkip + _recoverCode.height() + st::usernameSkip + st::addContactPadding.bottom() + _saveButton.height()); connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSubmit())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose())); @@ -521,7 +524,7 @@ void RecoverBox::paintEvent(QPaintEvent *e) { } void RecoverBox::resizeEvent(QResizeEvent *e) { - _recoverCode.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top() + st::usernameSkip, width() - st::addContactPadding.left() - st::addContactPadding.right(), _recoverCode.height()); + _recoverCode.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top() + st::usernameSkip, width() - st::addContactPadding.left() - st::addContactPadding.right(), _recoverCode.height()); int32 buttonTop = height() - _cancelButton.height(); _cancelButton.move(0, buttonTop); @@ -553,8 +556,7 @@ void RecoverBox::codeSubmitDone(bool recover, const MTPauth_Authorization &resul _submitRequest = 0; emit reloadPassword(); - ConfirmBox *box = new ConfirmBox(lang(lng_cloud_password_removed), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(new InformBox(lang(lng_cloud_password_removed))); } bool RecoverBox::codeSubmitFail(const RPCError &error) { @@ -563,8 +565,7 @@ bool RecoverBox::codeSubmitFail(const RPCError &error) { const QString &err = error.type(); if (err == "PASSWORD_EMPTY") { emit reloadPassword(); - ConfirmBox *box = new ConfirmBox(lang(lng_cloud_password_removed), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(new InformBox(lang(lng_cloud_password_removed))); return true; } else if (err == "PASSWORD_RECOVERY_NA") { onClose(); diff --git a/Telegram/SourceFiles/boxes/passcodebox.h b/Telegram/SourceFiles/boxes/passcodebox.h index efc167c7f6..516728adfd 100644 --- a/Telegram/SourceFiles/boxes/passcodebox.h +++ b/Telegram/SourceFiles/boxes/passcodebox.h @@ -69,7 +69,7 @@ private: mtpRequestId _setRequest; QByteArray _newSalt, _curSalt; - bool _hasRecovery; + bool _hasRecovery, _skipEmailWarning; QString _hint; int32 _aboutHeight; diff --git a/Telegram/SourceFiles/boxes/photocropbox.cpp b/Telegram/SourceFiles/boxes/photocropbox.cpp index c3f15771b1..804bc5a641 100644 --- a/Telegram/SourceFiles/boxes/photocropbox.cpp +++ b/Telegram/SourceFiles/boxes/photocropbox.cpp @@ -43,7 +43,7 @@ PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer, bool upload) : connect(this, SIGNAL(ready(const QImage &)), this, SLOT(onReady(const QImage &))); } - int32 s = st::cropBoxWidth - st::boxPadding.left() - st::boxPadding.right(); + int32 s = st::boxWideWidth - st::boxPadding.left() - st::boxPadding.right(); _thumb = QPixmap::fromImage(img.scaled(s, s, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); _thumbw = _thumb.width(); _thumbh = _thumb.height(); @@ -55,11 +55,11 @@ PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer, bool upload) : _cropx = (_thumbw - _cropw) / 2; _cropy = (_thumbh - _cropw) / 2; - _thumbx = (st::cropBoxWidth - _thumbw) / 2; + _thumbx = (st::boxWideWidth - _thumbw) / 2; _thumby = st::boxPadding.top() * 2 + st::boxFont->height; setMouseTracking(true); - resizeMaxHeight(st::cropBoxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.top() + st::boxPadding.bottom() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.top() + st::boxPadding.bottom() + _sendButton.height()); } void PhotoCropBox::mousePressEvent(QMouseEvent *e) { diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index 7b4010c95d..4389add89c 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -59,7 +59,7 @@ PhotoSendBox::PhotoSendBox(const ReadyLocalMedia &img) : _img(new ReadyLocalMedi _thumbw = 10; } } - resizeMaxHeight(st::boxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height()); _thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw * cIntRetinaFactor(), _thumbh * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); _thumb.setDevicePixelRatio(cRetinaFactor()); @@ -84,12 +84,12 @@ PhotoSendBox::PhotoSendBox(const ReadyLocalMedia &img) : _img(new ReadyLocalMedi _thumb = QPixmap::fromImage(_thumb.toImage().scaledToWidth(_thumbw * cIntRetinaFactor(), Qt::SmoothTransformation), Qt::ColorOnly); _thumb.setDevicePixelRatio(cRetinaFactor()); } - resizeMaxHeight(st::boxWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); _name = _img->filename; - _namew = st::mediaFont->m.width(_name); + _namew = st::mediaFont->width(_name); _size = formatSizeText(_img->filesize); - _textw = qMax(_namew, st::mediaFont->m.width(_size)); + _textw = qMax(_namew, st::mediaFont->width(_size)); } prepare(); } @@ -106,11 +106,11 @@ _phone(phone), _fname(fname), _lname(lname), _replyTo(replyTo) { _compressed.hide(); _name = lng_full_name(lt_first_name, _fname, lt_last_name, _lname); - _namew = st::mediaFont->m.width(_name); + _namew = st::mediaFont->width(_name); _size = _phone; - _textw = qMax(_namew, st::mediaFont->m.width(_size)); + _textw = qMax(_namew, st::mediaFont->width(_size)); - resizeMaxHeight(st::boxWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); prepare(); } @@ -161,7 +161,7 @@ void PhotoSendBox::paintEvent(QPaintEvent *e) { p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _namew) { - p.drawText(x + tleft, y + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + p.drawText(x + tleft, y + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_name, twidth)); } else { p.drawText(x + tleft, y + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } diff --git a/Telegram/SourceFiles/boxes/sessionsbox.cpp b/Telegram/SourceFiles/boxes/sessionsbox.cpp index 2cf7fe6b17..2a1844d5dd 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.cpp +++ b/Telegram/SourceFiles/boxes/sessionsbox.cpp @@ -69,7 +69,7 @@ void SessionsInner::onTerminate() { _terminating = i.key(); if (_terminateBox) _terminateBox->deleteLater(); - _terminateBox = new ConfirmBox(lang(lng_settings_reset_one_sure), lang(lng_settings_reset_button)); + _terminateBox = new ConfirmBox(lang(lng_settings_reset_one_sure), lang(lng_settings_reset_button), st::attentionBoxButton); connect(_terminateBox, SIGNAL(confirmed()), this, SLOT(onTerminateSure())); connect(_terminateBox, SIGNAL(destroyed(QObject*)), this, SLOT(onNoTerminateBox(QObject*))); App::wnd()->replaceLayer(_terminateBox); @@ -161,7 +161,7 @@ _terminateAll(this, lang(lng_sessions_terminate_all)), _terminateBox(0), _shortP connect(App::wnd(), SIGNAL(newAuthorization()), this, SLOT(onNewAuthorization())); connect(&_shortPollTimer, SIGNAL(timeout()), this, SLOT(onShortPollAuthorizations())); - init(&_inner, _done.height(), st::boxTitleHeight + st::sessionHeight + st::boxTitleHeight); + init(&_inner, _done.height(), st::old_boxTitleHeight + st::sessionHeight + st::old_boxTitleHeight); _inner.resize(width(), st::noContactsHeight); prepare(); @@ -173,7 +173,7 @@ _terminateAll(this, lang(lng_sessions_terminate_all)), _terminateBox(0), _shortP void SessionsBox::resizeEvent(QResizeEvent *e) { ScrollableBox::resizeEvent(e); _done.move(0, height() - _done.height()); - _terminateAll.moveToRight(st::sessionPadding.left(), st::boxTitleHeight + st::sessionHeight + st::boxTitlePos.y() + st::boxTitleFont->ascent - st::linkFont->ascent, width()); + _terminateAll.moveToRight(st::sessionPadding.left(), st::old_boxTitleHeight + st::sessionHeight + st::old_boxTitlePos.y() + st::old_boxTitleFont->ascent - st::linkFont->ascent, width()); } void SessionsBox::hideAll() { @@ -202,7 +202,7 @@ void SessionsBox::paintEvent(QPaintEvent *e) { if (paint(p)) return; paintTitle(p, lang(lng_sessions_header), true); - p.translate(0, st::boxTitleHeight); + p.translate(0, st::old_boxTitleHeight); if (_loading) { p.setFont(st::noContactsFont->f); @@ -231,10 +231,10 @@ void SessionsBox::paintEvent(QPaintEvent *e) { p.setFont(st::sessionInfoFont->f); p.setPen(st::sessionInfoColor->p); - p.drawText(QRect(st::sessionPadding.left(), st::boxTitleHeight + st::boxTitlePos.y(), width() - st::sessionPadding.left() - st::sessionPadding.right(), _scroll.height()), lang(lng_sessions_other_desc), style::al_topleft); + p.drawText(QRect(st::sessionPadding.left(), st::old_boxTitleHeight + st::old_boxTitlePos.y(), width() - st::sessionPadding.left() - st::sessionPadding.right(), _scroll.height()), lang(lng_sessions_other_desc), style::al_topleft); // paint shadow - p.fillRect(0, height() - st::sessionsCloseButton.height - st::scrollDef.bottomsh - st::sessionHeight - st::boxTitleHeight, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); + p.fillRect(0, height() - st::sessionsCloseButton.height - st::scrollDef.bottomsh - st::sessionHeight - st::old_boxTitleHeight, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); } else { paintTitle(p, lang(lng_sessions_other_header), false); } @@ -245,7 +245,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { _loading = false; _shortPollRequest = 0; - int32 availCurrent = st::boxWidth - st::sessionPadding.left() - st::sessionTerminateSkip; + int32 availCurrent = st::boxWideWidth - st::sessionPadding.left() - st::sessionTerminateSkip; int32 availOther = availCurrent - st::sessionTerminate.iconPos.x();// -st::sessionTerminate.width - st::sessionTerminateSkip; _list.clear(); @@ -282,7 +282,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { } data.name = appName; if (!appVer.isEmpty()) data.name += ' ' + appVer; - data.nameWidth = st::sessionNameFont->m.width(data.name); + data.nameWidth = st::sessionNameFont->width(data.name); QString country = qs(d.vcountry), platform = qs(d.vplatform); //CountriesByISO2::const_iterator j = countries.constFind(country); @@ -297,18 +297,18 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { data.active = QString(); data.activeWidth = 0; if (data.nameWidth > availCurrent) { - data.name = st::sessionNameFont->m.elidedText(data.name, Qt::ElideRight, availCurrent); - data.nameWidth = st::sessionNameFont->m.width(data.name); + data.name = st::sessionNameFont->elided(data.name, availCurrent); + data.nameWidth = st::sessionNameFont->width(data.name); } - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.infoWidth = st::sessionInfoFont->width(data.info); if (data.infoWidth > availCurrent) { - data.info = st::sessionInfoFont->m.elidedText(data.info, Qt::ElideRight, availCurrent); - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.info = st::sessionInfoFont->elided(data.info, availCurrent); + data.infoWidth = st::sessionInfoFont->width(data.info); } - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ipWidth = st::sessionInfoFont->width(data.ip); if (data.ipWidth > availCurrent) { - data.ip = st::sessionInfoFont->m.elidedText(data.ip, Qt::ElideRight, availCurrent); - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ip = st::sessionInfoFont->elided(data.ip, availCurrent); + data.ipWidth = st::sessionInfoFont->width(data.ip); } _current = data; } else { @@ -322,21 +322,21 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { } else { data.active = lastDate.toString(qsl("d.MM.yy")); } - data.activeWidth = st::sessionActiveFont->m.width(data.active); + data.activeWidth = st::sessionActiveFont->width(data.active); int32 availForName = availOther - st::sessionPadding.right() - data.activeWidth; if (data.nameWidth > availForName) { - data.name = st::sessionNameFont->m.elidedText(data.name, Qt::ElideRight, availForName); - data.nameWidth = st::sessionNameFont->m.width(data.name); + data.name = st::sessionNameFont->elided(data.name, availForName); + data.nameWidth = st::sessionNameFont->width(data.name); } - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.infoWidth = st::sessionInfoFont->width(data.info); if (data.infoWidth > availOther) { - data.info = st::sessionInfoFont->m.elidedText(data.info, Qt::ElideRight, availOther); - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.info = st::sessionInfoFont->elided(data.info, availOther); + data.infoWidth = st::sessionInfoFont->width(data.info); } - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ipWidth = st::sessionInfoFont->width(data.ip); if (data.ipWidth > availOther) { - data.ip = st::sessionInfoFont->m.elidedText(data.ip, Qt::ElideRight, availOther); - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ip = st::sessionInfoFont->elided(data.ip, availOther); + data.ipWidth = st::sessionInfoFont->width(data.ip); } _list.push_back(data); @@ -359,7 +359,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { void SessionsBox::onTerminateAll() { if (_terminateBox) _terminateBox->deleteLater(); - _terminateBox = new ConfirmBox(lang(lng_settings_reset_sure), lang(lng_settings_reset_button)); + _terminateBox = new ConfirmBox(lang(lng_settings_reset_sure), lang(lng_settings_reset_button), st::attentionBoxButton); connect(_terminateBox, SIGNAL(confirmed()), this, SLOT(onTerminateAllSure())); connect(_terminateBox, SIGNAL(destroyed(QObject*)), this, SLOT(onNoTerminateBox(QObject*))); App::wnd()->replaceLayer(_terminateBox); diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 5c05b7471b..5a0350ff73 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -58,7 +58,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { if (d.vset.type() == mtpc_stickerSet) { const MTPDstickerSet &s(d.vset.c_stickerSet()); _setTitle = qs(s.vtitle); - _title = st::boxTitleFont->m.elidedText(_setTitle, Qt::ElideRight, width() - st::btnStickersClose.width - st::boxTitlePos.x()); + _title = st::old_boxTitleFont->elided(_setTitle, width() - st::btnStickersClose.width - st::old_boxTitlePos.x()); _setShortName = qs(s.vshort_name); _setId = s.vid.v; _setAccess = s.vaccess_hash.v; @@ -69,7 +69,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { } if (_pack.isEmpty()) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_not_found))); } else { int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0); resize(st::stickersPadding + StickerPanPerRow * st::stickersSize.width(), rows * st::stickersSize.height() + st::stickersAddOrShare); @@ -87,7 +87,7 @@ bool StickerSetInner::failedSet(const RPCError &error) { _loaded = true; - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_not_found))); return true; } @@ -134,7 +134,7 @@ void StickerSetInner::installDone(const MTPBool &result) { bool StickerSetInner::installFailed(const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_not_found))); return true; } @@ -261,7 +261,7 @@ void StickerSetBox::onAddStickers() { void StickerSetBox::onShareStickers() { QString url = qsl("https://telegram.me/addstickers/") + _inner.shortName(); QApplication::clipboard()->setText(url); - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_copied), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_copied))); } void StickerSetBox::onUpdateButtons() { diff --git a/Telegram/SourceFiles/boxes/usernamebox.cpp b/Telegram/SourceFiles/boxes/usernamebox.cpp index 3e7815b391..2ecded4769 100644 --- a/Telegram/SourceFiles/boxes/usernamebox.cpp +++ b/Telegram/SourceFiles/boxes/usernamebox.cpp @@ -27,14 +27,14 @@ UsernameBox::UsernameBox() : _saveButton(this, lang(lng_settings_save), st::usernameDone), _cancelButton(this, lang(lng_cancel), st::usernameCancel), _usernameInput(this, st::inpAddContact, qsl("@username"), App::self()->username), -_saveRequest(0), _checkRequest(0), _about(st::usernameWidth - 2 * st::boxTitlePos.x()) { +_saveRequest(0), _checkRequest(0), _about(st::usernameWidth - 2 * st::old_boxTitlePos.x()) { _about.setRichText(st::usernameFont, lang(lng_username_about)); _goodText = App::self()->username.isEmpty() ? QString() : lang(lng_username_available); initBox(); } void UsernameBox::initBox() { - resizeMaxHeight(st::usernameWidth, st::boxTitleHeight + st::addContactPadding.top() + _usernameInput.height() + st::addContactPadding.bottom() + _about.countHeight(st::usernameWidth - 2 * st::boxTitlePos.x()) + st::usernameSkip + _saveButton.height()); + resizeMaxHeight(st::usernameWidth, st::old_boxTitleHeight + st::addContactPadding.top() + _usernameInput.height() + st::addContactPadding.bottom() + _about.countHeight(st::usernameWidth - 2 * st::old_boxTitlePos.x()) + st::usernameSkip + _saveButton.height()); connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose())); @@ -85,20 +85,20 @@ void UsernameBox::paintEvent(QPaintEvent *e) { if (!_errorText.isEmpty()) { p.setPen(st::setErrColor->p); p.setFont(st::setErrFont->f); - int32 w = st::setErrFont->m.width(_errorText); + int32 w = st::setErrFont->width(_errorText); p.drawText((width() - w) / 2, _usernameInput.y() + _usernameInput.height() + ((st::usernameSkip - st::setErrFont->height) / 2) + st::setErrFont->ascent, _errorText); } else if (!_goodText.isEmpty()) { p.setPen(st::setGoodColor->p); p.setFont(st::setErrFont->f); - int32 w = st::setErrFont->m.width(_goodText); + int32 w = st::setErrFont->width(_goodText); p.drawText((width() - w) / 2, _usernameInput.y() + _usernameInput.height() + ((st::usernameSkip - st::setErrFont->height) / 2) + st::setErrFont->ascent, _goodText); } p.setPen(st::usernameColor->p); - _about.draw(p, st::boxTitlePos.x(), _usernameInput.y() + _usernameInput.height() + st::usernameSkip, width() - 2 * st::boxTitlePos.x()); + _about.draw(p, st::old_boxTitlePos.x(), _usernameInput.y() + _usernameInput.height() + st::usernameSkip, width() - 2 * st::old_boxTitlePos.x()); } void UsernameBox::resizeEvent(QResizeEvent *e) { - _usernameInput.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _usernameInput.height()); + _usernameInput.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _usernameInput.height()); int32 buttonTop = height() - _cancelButton.height(); _cancelButton.move(0, buttonTop); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 7bfe73c9be..04b16b533c 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -115,13 +115,13 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO } QString first = (_hashtagFilter.size() < 2) ? QString() : ('#' + hashtagResults.at(from).mid(0, _hashtagFilter.size() - 1)), second = (_hashtagFilter.size() < 2) ? ('#' + hashtagResults.at(from)) : hashtagResults.at(from).mid(_hashtagFilter.size() - 1); - int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); + int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second); if (htagwidth < firstwidth + secondwidth) { if (htagwidth < firstwidth + st::mentionFont->elidew) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); + first = st::mentionFont->elided(first + second, htagwidth); second = QString(); } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); + second = st::mentionFont->elided(second, htagwidth - firstwidth); } } @@ -251,19 +251,19 @@ void DialogsInner::peopleResultPaint(PeerData *peer, Painter &p, int32 w, bool a QString username = peer->userName(); if (!act && username.toLower().startsWith(peopleQuery)) { QString first = '@' + username.mid(0, peopleQuery.size()), second = username.mid(peopleQuery.size()); - int32 w = st::dlgHistFont->m.width(first); + int32 w = st::dlgHistFont->width(first); if (w >= tr.width()) { p.setPen(st::dlgSystemColor->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText(first, Qt::ElideRight, tr.width())); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(first, tr.width())); } else { p.setPen(st::dlgSystemColor->p); p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, first); p.setPen(st::dlgTextColor->p); - p.drawText(tr.left() + w, tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText(second, Qt::ElideRight, tr.width() - w)); + p.drawText(tr.left() + w, tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(second, tr.width() - w)); } } else { p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText('@' + username, Qt::ElideRight, tr.width())); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided('@' + username, tr.width())); } p.setPen((act ? st::dlgActiveColor : st::dlgNameColor)->p); @@ -293,7 +293,7 @@ void DialogsInner::searchInPeerPaint(Painter &p, int32 w, bool onlyBackground) c QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height); p.setFont(st::dlgHistFont->f); p.setPen(st::dlgTextColor->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText(lang(lng_dlg_search_chat), Qt::ElideRight, tr.width())); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(lang(lng_dlg_search_chat), tr.width())); p.setPen(st::dlgNameColor->p); _searchInPeer->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); @@ -484,7 +484,7 @@ void DialogsInner::dlgUpdated(DialogRow *row) { } } -void DialogsInner::dlgUpdated(History *history) { +void DialogsInner::dlgUpdated(History *history, MsgId msgId) { if (_state == DefaultState) { DialogRow *row = 0; DialogsList::RowByPeer::iterator i = dialogs.list.rowByPeer.find(history->peer->id); @@ -518,7 +518,7 @@ void DialogsInner::dlgUpdated(History *history) { if (!searchResults.isEmpty()) { int32 cnt = 0, add = searchedOffset(); for (SearchResults::const_iterator i = searchResults.cbegin(), e = searchResults.cend(); i != e; ++i) { - if ((*i)->_item->history() == history) { + if ((*i)->_item->history() == history && (*i)->_item->id == msgId) { update(0, add + cnt * st::dlgHeight, fullWidth(), st::dlgHeight); break; } @@ -1558,8 +1558,8 @@ void DialogsWidget::dlgUpdated(DialogRow *row) { _inner.dlgUpdated(row); } -void DialogsWidget::dlgUpdated(History *row) { - _inner.dlgUpdated(row); +void DialogsWidget::dlgUpdated(History *row, MsgId msgId) { + _inner.dlgUpdated(row, msgId); } void DialogsWidget::dialogsToUp() { diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 5f55958af1..321f3a898f 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -57,7 +57,7 @@ public: void createDialog(History *history); void moveDialogToTop(const History::DialogLinks &links); void dlgUpdated(DialogRow *row); - void dlgUpdated(History *row); + void dlgUpdated(History *row, MsgId msgId); void removePeer(PeerData *peer); void removeContact(UserData *user); @@ -200,7 +200,7 @@ public: void loadDialogs(); void createDialog(History *history); void dlgUpdated(DialogRow *row); - void dlgUpdated(History *row); + void dlgUpdated(History *row, MsgId msgId); void dialogsToUp(); diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index de572f5849..87d6a0034e 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -1772,9 +1772,9 @@ void EmojiPanel::updateText() { } } else { QString switchText = lang((_setId != NoneStickerSetId) ? lng_switch_emoji : lng_switch_stickers); - availw -= st::emojiSwitchSkip + st::emojiPanHeaderFont->m.width(switchText); + availw -= st::emojiSwitchSkip + st::emojiPanHeaderFont->width(switchText); } - _text = st::emojiPanHeaderFont->m.elidedText(_fullText, Qt::ElideRight, availw); + _text = st::emojiPanHeaderFont->elided(_fullText, availw); update(); } @@ -1805,7 +1805,7 @@ void EmojiPanel::paintEvent(QPaintEvent *e) { EmojiSwitchButton::EmojiSwitchButton(QWidget *parent, bool toStickers) : Button(parent), _toStickers(toStickers), _text(lang(_toStickers ? lng_switch_stickers : lng_switch_emoji)), -_textWidth(st::emojiPanHeaderFont->m.width(_text)) { +_textWidth(st::emojiPanHeaderFont->width(_text)) { int32 w = st::emojiSwitchSkip + _textWidth + (st::emojiSwitchSkip - st::emojiSwitchImgSkip); setCursor(style::cur_pointer); resize(w, st::emojiPanHeader); @@ -2613,7 +2613,7 @@ void EmojiPan::onRemoveSet(quint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); if (it != cStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) { _removingSetId = it->id; - ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title)); + ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title), lang(lng_box_remove)); connect(box, SIGNAL(confirmed()), this, SLOT(onRemoveSetSure())); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onDelayedHide())); App::wnd()->showLayer(box); @@ -2662,7 +2662,7 @@ MentionsInner::MentionsInner(MentionsDropdown *parent, MentionRows *rows, Hashta void MentionsInner::paintEvent(QPaintEvent *e) { QPainter p(this); - int32 atwidth = st::mentionFont->m.width('@'), hashwidth = st::mentionFont->m.width('#'); + int32 atwidth = st::mentionFont->width('@'), hashwidth = st::mentionFont->width('#'); int32 mentionleft = 2 * st::mentionPadding.left() + st::mentionPhotoSize; int32 mentionwidth = width() - mentionleft - 2 * st::mentionPadding.right(); int32 htagleft = st::btnAttachPhoto.width + st::taMsgField.textMrg.left() - st::dlgShadow, htagwidth = width() - st::mentionPadding.right() - htagleft - st::mentionScroll.width; @@ -2683,19 +2683,19 @@ void MentionsInner::paintEvent(QPaintEvent *e) { if (!_rows->isEmpty()) { 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); - int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); + int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); if (mentionwidth < unamewidth + namewidth) { namewidth = (mentionwidth * namewidth) / (namewidth + unamewidth); unamewidth = mentionwidth - namewidth; if (firstwidth < unamewidth + st::mentionFont->elidew) { if (firstwidth < unamewidth) { - first = st::mentionFont->m.elidedText(first, Qt::ElideRight, unamewidth); + first = st::mentionFont->elided(first, unamewidth); } else if (!second.isEmpty()) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, unamewidth); + first = st::mentionFont->elided(first + second, unamewidth); second = QString(); } } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, unamewidth - firstwidth); + second = st::mentionFont->elided(second, unamewidth - firstwidth); } } user->photo->load(); @@ -2712,13 +2712,13 @@ void MentionsInner::paintEvent(QPaintEvent *e) { } else if (!_hrows->isEmpty()) { 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->width(first), secondwidth = st::mentionFont->width(second); if (htagwidth < firstwidth + secondwidth) { if (htagwidth < firstwidth + st::mentionFont->elidew) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); + first = st::mentionFont->elided(first + second, htagwidth); second = QString(); } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); + second = st::mentionFont->elided(second, htagwidth - firstwidth); } } @@ -2747,13 +2747,13 @@ void MentionsInner::paintEvent(QPaintEvent *e) { int32 addleft = 0, widthleft = mentionwidth; QString first = (_parent->filter().size() < 2) ? QString() : ('/' + toHighlight.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('/' + toHighlight) : toHighlight.mid(_parent->filter().size() - 1); - int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); + int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second); if (widthleft < firstwidth + secondwidth) { if (widthleft < firstwidth + st::mentionFont->elidew) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, widthleft); + first = st::mentionFont->elided(first + second, widthleft); second = QString(); } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, widthleft - firstwidth); + second = st::mentionFont->elided(second, widthleft - firstwidth); } } p.setFont(st::mentionFont->f); diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index e79ec8e0a4..1f7de652a5 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -431,8 +431,6 @@ private: }; class EmojiSwitchButton : public Button { - Q_OBJECT - public: EmojiSwitchButton(QWidget *parent, bool toStickers); // otherwise toEmoji diff --git a/Telegram/SourceFiles/gui/countryinput.cpp b/Telegram/SourceFiles/gui/countryinput.cpp index ec85de36e9..a53d410418 100644 --- a/Telegram/SourceFiles/gui/countryinput.cpp +++ b/Telegram/SourceFiles/gui/countryinput.cpp @@ -199,7 +199,7 @@ void CountryInput::onFinishCountry() { } void CountryInput::setText(const QString &newText) { - _text = _st.font->m.elidedText(newText, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right()); + _text = _st.font->elided(newText, width() - _st.textMrg.left() - _st.textMrg.right()); } CountryInput::~CountryInput() { @@ -315,7 +315,7 @@ void CountryList::paintEvent(QPaintEvent *e) { } p.setFont(_st.font->f); p.setPen(_st.color->p); - p.drawText(textRect, _st.font->m.elidedText(QString::fromUtf8((*countriesNow)[i]->name), Qt::ElideRight, width() - 2 * _st.margin - _st.codeWidth), QTextOption(style::al_left)); + p.drawText(textRect, _st.font->elided(QString::fromUtf8((*countriesNow)[i]->name), width() - 2 * _st.margin - _st.codeWidth), QTextOption(style::al_left)); p.setFont(_st.codeFont->f); p.setPen(_st.codeColor->p); p.drawText(textRect, QString("+") + (*countriesNow)[i]->code, QTextOption(style::al_right)); @@ -495,8 +495,8 @@ void CountrySelect::paintEvent(QPaintEvent *e) { // draw box title / text p.setPen(st::black->p); - p.setFont(st::boxTitleFont->f); - p.drawText(_innerLeft + st::boxTitlePos.x(), _innerTop + st::boxTitlePos.y() + st::boxTitleFont->ascent, lang(lng_country_select)); + p.setFont(st::old_boxTitleFont->f); + p.drawText(_innerLeft + st::old_boxTitlePos.x(), _innerTop + st::old_boxTitlePos.y() + st::old_boxTitleFont->ascent, lang(lng_country_select)); } } } diff --git a/Telegram/SourceFiles/gui/flatbutton.cpp b/Telegram/SourceFiles/gui/flatbutton.cpp index ac36eb12cb..cfb0580933 100644 --- a/Telegram/SourceFiles/gui/flatbutton.cpp +++ b/Telegram/SourceFiles/gui/flatbutton.cpp @@ -69,7 +69,7 @@ void FlatButton::setAutoFontSize(int32 padding, const QString &txt) { } int32 FlatButton::textWidth() const { - return _st.font->m.width(_text); + return _st.font->width(_text); } void FlatButton::resizeEvent(QResizeEvent *e) { @@ -77,7 +77,7 @@ void FlatButton::resizeEvent(QResizeEvent *e) { _autoFont = _st.font; for (int32 s = _st.font->f.pixelSize(); s >= st::fsize; --s) { _autoFont = style::font(s, _st.font->flags(), _st.font->family()); - if (2 * _autoFontPadding + _autoFont->m.width(_textForAutoSize) <= width()) { + if (2 * _autoFontPadding + _autoFont->width(_textForAutoSize) <= width()) { break; } } @@ -149,7 +149,7 @@ void BottomButton::paintEvent(QPaintEvent *e) { LinkButton::LinkButton(QWidget *parent, const QString &text, const style::linkButton &st) : Button(parent), _text(text), _st(st) { connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); - resize(_st.font->m.width(_text), _st.font->height); + resize(_st.font->width(_text), _st.font->height); setCursor(style::cur_pointer); } @@ -162,7 +162,7 @@ void LinkButton::paintEvent(QPaintEvent *e) { void LinkButton::setText(const QString &text) { _text = text; - resize(_st.font->m.width(_text), _st.font->height); + resize(_st.font->width(_text), _st.font->height); update(); } @@ -177,9 +177,9 @@ IconedButton::IconedButton(QWidget *parent, const style::iconedButton &st, const _text(text), _st(st), _width(_st.width), a_opacity(_st.opacity), a_bg(_st.bgColor->c), _opacity(1) { if (_width < 0) { - _width = _st.font->m.width(text) - _width; + _width = _st.font->width(text) - _width; } else if (!_width) { - _width = _st.font->m.width(text) + _st.height - _st.font->height; + _width = _st.font->width(text) + _st.height - _st.font->height; } connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); resize(_width, _st.height); @@ -195,9 +195,9 @@ void IconedButton::setText(const QString &text) { if (_text != text) { _text = text; if (_st.width < 0) { - _width = _st.font->m.width(text) - _st.width; + _width = _st.font->width(text) - _st.width; } else if (!_st.width) { - _width = _st.font->m.width(text) + _st.height - _st.font->height; + _width = _st.font->width(text) + _st.height - _st.font->height; } resize(_width, _st.height); update(); @@ -291,3 +291,70 @@ void MaskedButton::paintEvent(QPaintEvent *e) { p.drawPixmap(t, App::sprite(), i); } } + +BoxButton::BoxButton(QWidget *parent, const QString &text, const style::BoxButton &st) : Button(parent), +_text(text), _fullText(text), _textWidth(st.font->width(text)), +_st(st), +a_textBgOverOpacity(0), a_textFg(st.textFg->c), _a_over(animFunc(this, &BoxButton::animStep_over)) { + if (_st.width <= 0) { + resize(_textWidth - _st.width, _st.height); + } else if (_st.width < _textWidth + (_st.height - _st.font->height)) { + _text = _st.font->elided(_fullText, qMax(_st.width - (_st.height - _st.font->height), 1.)); + _textWidth = _st.font->width(_text); + } + + connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); + + setCursor(style::cur_pointer); + + setAttribute(Qt::WA_OpaquePaintEvent); +} + +void BoxButton::paintEvent(QPaintEvent *e) { + Painter p(this); + + p.fillRect(rect(), _st.textBg->b); + + float64 o = a_textBgOverOpacity.current(); + if (o > 0) { + p.setOpacity(o); + App::roundRect(p, rect(), _st.textBgOver); + p.setOpacity(1); + p.setPen(a_textFg.current()); + } else { + p.setPen(_st.textFg); + } + p.setFont(_st.font); + p.drawText((width() - _textWidth) / 2, _st.textTop + _st.font->ascent, _text); +} + +bool BoxButton::animStep_over(float64 ms) { + float64 dt = ms / _st.duration; + bool res = true; + if (dt >= 1) { + a_textFg.finish(); + a_textBgOverOpacity.finish(); + res = false; + } else { + a_textFg.update(dt, anim::linear); + a_textBgOverOpacity.update(dt, anim::linear); + } + update(); + return res; +} + +void BoxButton::onStateChange(int oldState, ButtonStateChangeSource source) { + float64 textBgOverOpacity = (_state & StateOver) ? 1 : 0; + style::color textFg = (_state & StateOver) ? (_st.textFgOver) : _st.textFg; + + a_textBgOverOpacity.start(textBgOverOpacity); + a_textFg.start(textFg->c); + if (source == ButtonByUser || source == ButtonByPress) { + _a_over.stop(); + a_textBgOverOpacity.finish(); + a_textFg.finish(); + update(); + } else { + _a_over.start(); + } +} diff --git a/Telegram/SourceFiles/gui/flatbutton.h b/Telegram/SourceFiles/gui/flatbutton.h index 98779f4d42..de0b1b1523 100644 --- a/Telegram/SourceFiles/gui/flatbutton.h +++ b/Telegram/SourceFiles/gui/flatbutton.h @@ -136,3 +136,30 @@ public: void paintEvent(QPaintEvent *e); }; + +class BoxButton : public Button { + Q_OBJECT + +public: + + BoxButton(QWidget *parent, const QString &text, const style::BoxButton &st); + + void paintEvent(QPaintEvent *e); + + bool animStep_over(float64 ms); + +public slots: + + void onStateChange(int oldState, ButtonStateChangeSource source); + +private: + + QString _text, _fullText; + int32 _textWidth; + + const style::BoxButton &_st; + + anim::fvalue a_textBgOverOpacity; + anim::cvalue a_textFg; + Animation _a_over; +}; diff --git a/Telegram/SourceFiles/gui/flatcheckbox.cpp b/Telegram/SourceFiles/gui/flatcheckbox.cpp index 9fbecbea9c..9ea4601bd5 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/gui/flatcheckbox.cpp @@ -27,7 +27,7 @@ FlatCheckbox::FlatCheckbox(QWidget *parent, const QString &text, bool checked, c connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); setCursor(_st.cursor); int32 w = _st.width, h = _st.height; - if (w <= 0) w = _st.textLeft + _st.font->m.width(_text) + 2; + if (w <= 0) w = _st.textLeft + _st.font->width(_text) + 2; if (h <= 0) h = qMax(_st.font->height, _st.imageRect.pxHeight()); resize(QSize(w, h)); } diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index 8a3a364c99..fd0ea5a00d 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -191,8 +191,8 @@ void FlatInput::focusOutEvent(QFocusEvent *e) { void FlatInput::resizeEvent(QResizeEvent *e) { int32 availw = width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1; - if (_st.font->m.width(_fullph) > availw) { - _ph = _st.font->m.elidedText(_fullph, Qt::ElideRight, availw); + if (_st.font->width(_fullph) > availw) { + _ph = _st.font->elided(_fullph, availw); } else { _ph = _fullph; } @@ -455,7 +455,7 @@ _replacingEmojis(false) { _inner.setFont(_st->font->f); _inner.setAlignment(cRtl() ? Qt::AlignRight : Qt::AlignLeft); - _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); + _placeholder = _st->font->elided(_placeholderFull, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); QPalette p(palette()); p.setColor(QPalette::Text, _st->textFg->c); @@ -1057,7 +1057,7 @@ void InputField::InputFieldInner::paintEvent(QPaintEvent *e) { } void InputField::resizeEvent(QResizeEvent *e) { - _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); + _placeholder = _st->font->elided(_placeholderFull, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); _inner.setGeometry(rect().marginsRemoved(_st->textMargins)); TWidget::resizeEvent(e); } diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 0f0a215e5b..de35124094 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -806,7 +806,7 @@ const QString &FlatTextarea::getLastText() const { void FlatTextarea::setPlaceholder(const QString &ph) { _ph = ph; - _phelided = _st.font->m.elidedText(_ph, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); + _phelided = _st.font->elided(_ph, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); if (_phVisible) update(); } @@ -893,7 +893,7 @@ void FlatTextarea::keyPressEvent(QKeyEvent *e) { } void FlatTextarea::resizeEvent(QResizeEvent *e) { - _phelided = _st.font->m.elidedText(_ph, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); + _phelided = _st.font->elided(_ph, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); QTextEdit::resizeEvent(e); checkContentHeight(); } diff --git a/Telegram/SourceFiles/gui/phoneinput.cpp b/Telegram/SourceFiles/gui/phoneinput.cpp index f49a5d26eb..1b92f01c1a 100644 --- a/Telegram/SourceFiles/gui/phoneinput.cpp +++ b/Telegram/SourceFiles/gui/phoneinput.cpp @@ -35,7 +35,7 @@ void PhoneInput::paintEvent(QPaintEvent *e) { if (!ph.isEmpty()) { p.setClipRect(rect()); QRect phRect(placeholderRect()); - int tw = phFont()->m.width(t); + int tw = phFont()->width(t); if (tw < phRect.width()) { phRect.setLeft(phRect.left() + tw); phPrepare(p); diff --git a/Telegram/SourceFiles/gui/style_core.cpp b/Telegram/SourceFiles/gui/style_core.cpp index 11ad9bf1c1..354314c862 100644 --- a/Telegram/SourceFiles/gui/style_core.cpp +++ b/Telegram/SourceFiles/gui/style_core.cpp @@ -41,8 +41,8 @@ namespace style { height = m.height(); ascent = m.ascent(); descent = m.descent(); - spacew = m.width(QLatin1Char(' ')); - elidew = m.width(QLatin1Char('.')) * 3; + spacew = width(QLatin1Char(' ')); + elidew = width(QLatin1Char('.')) * 3; } Font FontData::bold(bool set) const { diff --git a/Telegram/SourceFiles/gui/style_core.h b/Telegram/SourceFiles/gui/style_core.h index 4421091f74..7256cc6c89 100644 --- a/Telegram/SourceFiles/gui/style_core.h +++ b/Telegram/SourceFiles/gui/style_core.h @@ -104,8 +104,17 @@ namespace style { class FontData { public: - int32 width(const QString &str, int32 from, int32 to) { - return m.width(str.mid(from, to)); + int32 width(const QString &str) const { + return m.width(str); + } + int32 width(const QString &str, int32 from, int32 to) const { + return width(str.mid(from, to)); + } + int32 width(QChar ch) const { + return m.width(ch); + } + QString elided(const QString &str, int32 width, Qt::TextElideMode mode = Qt::ElideRight) const { + return m.elidedText(str, mode, width); } Font bold(bool set = true) const; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 55b27fad0e..f428fb6b6f 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -330,7 +330,7 @@ public: } else { QUrl url(original), good(url.isValid() ? url.toEncoded() : ""); QString readable = good.isValid() ? good.toDisplayString() : original; - result = _t->_font->m.elidedText(readable, Qt::ElideRight, st::linkCropLimit); + result = _t->_font->elided(readable, st::linkCropLimit); fullDisplayed = (result == readable) ? 1 : 0; } } @@ -1569,7 +1569,7 @@ public: line.length = lineLength; eShapeLine(line); - int32 elideWidth = _f->m.width(_Elide); + int32 elideWidth = _f->width(_Elide); _wLeft = _w - elideWidth - _elideRemoveFromEnd; int firstItem = engine.findItem(line.from), lastItem = engine.findItem(line.from + line.length - 1); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index c021b224c1..dbc3cce8bd 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -190,7 +190,7 @@ void DialogRow::paint(Painter &p, int32 w, bool act, bool sel, bool onlyBackgrou } else { dt = lastDate.toString(qsl("d.MM.yy")); } - int32 dtWidth = st::dlgDateFont->m.width(dt); + int32 dtWidth = st::dlgDateFont->width(dt); rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); p.setFont(st::dlgDateFont->f); p.setPen((act ? st::dlgActiveDateColor : st::dlgDateColor)->p); @@ -216,7 +216,7 @@ void DialogRow::paint(Painter &p, int32 w, bool act, bool sel, bool onlyBackgrou int32 lastWidth = namewidth, unread = history->unreadCount; if (unread) { QString unreadStr = QString::number(unread); - int32 unreadWidth = st::dlgUnreadFont->m.width(unreadStr); + int32 unreadWidth = st::dlgUnreadFont->width(unreadStr); int32 unreadRectWidth = unreadWidth + 2 * st::dlgUnreadPaddingHor; int32 unreadRectHeight = st::dlgUnreadFont->height + 2 * st::dlgUnreadPaddingVer; int32 unreadRectLeft = w - st::dlgPaddingHor - unreadRectWidth; @@ -274,7 +274,7 @@ void FakeDialogRow::paint(Painter &p, int32 w, bool act, bool sel, bool onlyBack } else { dt = lastDate.toString(qsl("d.MM.yy")); } - int32 dtWidth = st::dlgDateFont->m.width(dt); + int32 dtWidth = st::dlgDateFont->width(dt); rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); p.setFont(st::dlgDateFont->f); p.setPen((act ? st::dlgActiveDateColor : st::dlgDateColor)->p); @@ -395,6 +395,12 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { changed = true; } } + if (changed && App::main()) { + if (!dialogs.isEmpty()) App::main()->dlgUpdated(dialogs[0]); + if (App::main()->historyPeer() == peer) { + App::main()->topBar()->update(); + } + } return changed; } @@ -1291,10 +1297,7 @@ bool Histories::animStep(float64) { uint64 ms = getms(true); for (TypingHistories::iterator i = typing.begin(), e = typing.end(); i != e;) { uint32 typingFrame = (ms - i.value()) / 150; - if (i.key()->updateTyping(ms, typingFrame)) { - App::main()->dlgUpdated(i.key()); - App::main()->topBar()->update(); - } + i.key()->updateTyping(ms, typingFrame); if (i.key()->typing.isEmpty() && i.key()->sendActions.isEmpty()) { i = typing.erase(i); } else { @@ -1712,23 +1715,19 @@ HistoryItem *History::addNewItem(HistoryBlock *to, bool newBlock, HistoryItem *a } void History::unregTyping(UserData *from) { - bool update = false; uint64 updateAtMs = 0; TypingUsers::iterator i = typing.find(from); if (i != typing.end()) { updateAtMs = getms(true); i.value() = updateAtMs; - update = true; } SendActionUsers::iterator j = sendActions.find(from); if (j != sendActions.end()) { if (!updateAtMs) updateAtMs = getms(true); j.value().until = updateAtMs; - update = true; } if (updateAtMs) { updateTyping(updateAtMs, 0, true); - App::main()->topBar()->update(); } } @@ -2129,9 +2128,8 @@ MsgId History::inboxRead(MsgId upTo) { if (!upTo) upTo = msgIdForRead(); inboxReadBefore = qMax(inboxReadBefore, upTo + 1); - if (!dialogs.isEmpty()) { - if (App::main()) App::main()->dlgUpdated(dialogs[0]); - } + if (!dialogs.isEmpty() && App::main()) App::main()->dlgUpdated(dialogs[0]); + showFrom = 0; App::wnd()->notifyClear(this); clearNotifications(); @@ -2192,7 +2190,7 @@ void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { App::histories().unreadMuted += newMute ? unreadCount : (-unreadCount); mute = newMute; if (App::wnd()) App::wnd()->updateCounter(); - if (App::main()) App::main()->dlgUpdated(this); + if (!dialogs.isEmpty() && App::main()) App::main()->dlgUpdated(dialogs[0]); } } @@ -2709,6 +2707,11 @@ void HistoryItem::destroy() { if (history()->lastMsg == this) { history()->fixLastMessage(wasAtBottom); } + if (history()->lastKeyboardId == id) { + history()->lastKeyboardId = 0; + history()->lastKeyboardFrom = 0; + if (App::main()) App::main()->updateBotKeyboard(); + } HistoryMedia *m = getMedia(true); MediaOverviewType t = m ? mediaToOverviewType(m->type()) : OverviewCount; if (t != OverviewCount) { @@ -3170,9 +3173,9 @@ HistoryVideo::HistoryVideo(const MTPDvideo &video, const QString &caption, Histo _size = formatDurationAndSizeText(data->duration, data->size); if (!_openWithWidth) { - _downloadWidth = st::mediaSaveButton.font->m.width(lang(lng_media_download)); - _openWithWidth = st::mediaSaveButton.font->m.width(lang(lng_media_open_with)); - _cancelWidth = st::mediaSaveButton.font->m.width(lang(lng_media_cancel)); + _downloadWidth = st::mediaSaveButton.font->width(lang(lng_media_download)); + _openWithWidth = st::mediaSaveButton.font->width(lang(lng_media_open_with)); + _cancelWidth = st::mediaSaveButton.font->width(lang(lng_media_cancel)); _buttonWidth = (st::mediaSaveButton.width > 0) ? st::mediaSaveButton.width : ((_downloadWidth > _openWithWidth ? (_downloadWidth > _cancelWidth ? _downloadWidth : _cancelWidth) : _openWithWidth) - st::mediaSaveButton.width); } @@ -3479,7 +3482,7 @@ void HistoryVideo::draw(Painter &p, const HistoryItem *parent, bool selected, in int32 texty = skipy + st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->height; p.drawText(tleft, texty + st::mediaFont->ascent, statusText); if (parent->isMediaUnread()) { - int32 w = st::mediaFont->m.width(statusText); + int32 w = st::mediaFont->width(statusText); if (w + st::mediaUnreadSkip + st::mediaUnreadSize <= twidth) { p.setRenderHint(QPainter::HighQualityAntialiasing, true); p.setPen(Qt::NoPen); @@ -3551,9 +3554,9 @@ HistoryAudio::HistoryAudio(const MTPDaudio &audio) : HistoryMedia() _size = formatDurationAndSizeText(data->duration, data->size); if (!_openWithWidth) { - _downloadWidth = st::mediaSaveButton.font->m.width(lang(lng_media_download)); - _openWithWidth = st::mediaSaveButton.font->m.width(lang(lng_media_open_with)); - _cancelWidth = st::mediaSaveButton.font->m.width(lang(lng_media_cancel)); + _downloadWidth = st::mediaSaveButton.font->width(lang(lng_media_download)); + _openWithWidth = st::mediaSaveButton.font->width(lang(lng_media_open_with)); + _cancelWidth = st::mediaSaveButton.font->width(lang(lng_media_cancel)); _buttonWidth = (st::mediaSaveButton.width > 0) ? st::mediaSaveButton.width : ((_downloadWidth > _openWithWidth ? (_downloadWidth > _cancelWidth ? _downloadWidth : _cancelWidth) : _openWithWidth) - st::mediaSaveButton.width); } } @@ -3712,7 +3715,7 @@ void HistoryAudio::draw(Painter &p, const HistoryItem *parent, bool selected, in int32 texty = skipy + st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->height; p.drawText(tleft, texty + st::mediaFont->ascent, statusText); if (parent->isMediaUnread()) { - int32 w = st::mediaFont->m.width(statusText); + int32 w = st::mediaFont->width(statusText); if (w + st::mediaUnreadSkip + st::mediaUnreadSize <= twidth) { p.setRenderHint(QPainter::HighQualityAntialiasing, true); p.setPen(Qt::NoPen); @@ -3849,15 +3852,15 @@ HistoryDocument::HistoryDocument(DocumentData *document) : HistoryMedia() , _dldDone(0) , _uplDone(0) { - _namew = st::mediaFont->m.width(_name.isEmpty() ? qsl("Document") : _name); + _namew = st::mediaFont->width(_name.isEmpty() ? qsl("Document") : _name); _size = document->song() ? formatDurationAndSizeText(document->song()->duration, data->size) : formatSizeText(data->size); _height = _minh = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); if (!_openWithWidth) { - _downloadWidth = st::mediaSaveButton.font->m.width(lang(lng_media_download)); - _openWithWidth = st::mediaSaveButton.font->m.width(lang(lng_media_open_with)); - _cancelWidth = st::mediaSaveButton.font->m.width(lang(lng_media_cancel)); + _downloadWidth = st::mediaSaveButton.font->width(lang(lng_media_download)); + _openWithWidth = st::mediaSaveButton.font->width(lang(lng_media_open_with)); + _cancelWidth = st::mediaSaveButton.font->width(lang(lng_media_cancel)); _buttonWidth = (st::mediaSaveButton.width > 0) ? st::mediaSaveButton.width : ((_downloadWidth > _openWithWidth ? (_downloadWidth > _cancelWidth ? _downloadWidth : _cancelWidth) : _openWithWidth) - st::mediaSaveButton.width); } @@ -4073,7 +4076,7 @@ void HistoryDocument::draw(Painter &p, const HistoryItem *parent, bool selected, p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _namew) { - p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_name, twidth)); } else { p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } @@ -4185,7 +4188,7 @@ void HistoryDocument::drawInPlaylist(Painter &p, const HistoryItem *parent, bool p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _namew) { - p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_name, twidth)); } else { p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } @@ -4513,7 +4516,7 @@ HistoryContact::HistoryContact(int32 userId, const QString &first, const QString _maxw = st::mediaMaxWidth; name.setText(st::mediaFont, lng_full_name(lt_first_name, first, lt_last_name, last).trimmed(), _textNameOptions); - phonew = st::mediaFont->m.width(phone); + phonew = st::mediaFont->width(phone); if (contact) { contact->photo->load(); @@ -4530,7 +4533,7 @@ HistoryContact::HistoryContact(int32 userId, const QString &fullname, const QStr _maxw = st::mediaMaxWidth; name.setText(st::mediaFont, fullname.trimmed(), _textNameOptions); - phonew = st::mediaFont->m.width(phone); + phonew = st::mediaFont->width(phone); if (contact) { contact->photo->load(); @@ -4685,7 +4688,7 @@ void HistoryContact::draw(Painter &p, const HistoryItem *parent, bool selected, p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < phonew) { - p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(phone, Qt::ElideRight, twidth)); + p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(phone, twidth)); } else { p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, phone); } @@ -4734,7 +4737,7 @@ HistoryWebPage::HistoryWebPage(WebPageData *data) : HistoryMedia() void HistoryWebPage::initDimensions(const HistoryItem *parent) { if (data->pendingTill) { _maxw = _minh = _height = 0; - //_maxw = st::webPageLeft + st::linkFont->m.width(lang((data->pendingTill < 0) ? lng_attach_failed : lng_profile_loading)); + //_maxw = st::webPageLeft + st::linkFont->width(lang((data->pendingTill < 0) ? lng_attach_failed : lng_profile_loading)); //_minh = st::replyHeight; //_height = _minh; return; @@ -4796,7 +4799,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { } _docName = documentName(data->doc); _docSize = data->doc->song() ? formatDurationAndSizeText(data->doc->song()->duration, data->doc->size) : formatSizeText(data->doc->size); - _docNameWidth = st::mediaFont->m.width(_docName.isEmpty() ? qsl("Document") : _docName); + _docNameWidth = st::mediaFont->width(_docName.isEmpty() ? qsl("Document") : _docName); if (parent == animated.msg) { _maxw = st::webPageLeft + (animated.w / cIntRetinaFactor()) + parent->skipBlockWidth(); @@ -4812,7 +4815,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { } if (!data->siteName.isEmpty()) { - _siteNameWidth = st::webPageTitleFont->m.width(data->siteName); + _siteNameWidth = st::webPageTitleFont->width(data->siteName); if (_asArticle) { _maxw = qMax(_maxw, int32(st::webPageLeft + _siteNameWidth + st::webPagePhotoDelta + st::webPagePhotoSize)); } else { @@ -4854,7 +4857,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { } if (data->type == WebPageVideo && data->duration) { _duration = formatDurationText(data->duration); - _durationWidth = st::msgDateFont->m.width(_duration); + _durationWidth = st::msgDateFont->width(_duration); } _height = _minh; } @@ -4924,7 +4927,7 @@ void HistoryWebPage::draw(Painter &p, const HistoryItem *parent, bool selected, } p.setFont(st::webPageTitleFont->f); p.setPen(semibold->p); - p.drawText(0, st::webPageTitleFont->ascent, (availw >= _siteNameWidth) ? data->siteName : st::webPageTitleFont->m.elidedText(data->siteName, Qt::ElideRight, availw)); + p.drawText(0, st::webPageTitleFont->ascent, (availw >= _siteNameWidth) ? data->siteName : st::webPageTitleFont->elided(data->siteName, availw)); p.translate(0, st::webPageTitleFont->height); --articleLines; } @@ -5103,7 +5106,7 @@ void HistoryWebPage::draw(Painter &p, const HistoryItem *parent, bool selected, p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _docNameWidth) { - p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_docName, Qt::ElideRight, twidth)); + p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_docName, twidth)); } else { p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, _docName); } @@ -5876,12 +5879,12 @@ void HistoryImageLink::draw(Painter &p, const HistoryItem *parent, bool selected p.setPen(st::msgDateImgColor->p); int32 titleWidth = width - 2 * st::msgDateImgPadding.x(); if (!data->duration.isEmpty()) { - int32 durationWidth = st::msgDateFont->m.width(data->duration); + int32 durationWidth = st::msgDateFont->width(data->duration); p.drawText(skipx + width - st::msgDateImgPadding.x() - durationWidth, skipy + st::msgDateImgPadding.y() + st::msgDateFont->ascent, data->duration); titleWidth -= durationWidth + st::msgDateImgPadding.x(); } if (!data->title.isEmpty()) { - p.drawText(skipx + st::msgDateImgPadding.x(), skipy + st::msgDateImgPadding.y() + st::msgDateFont->ascent, st::msgDateFont->m.elidedText(data->title, Qt::ElideRight, titleWidth)); + p.drawText(skipx + st::msgDateImgPadding.x(), skipy + st::msgDateImgPadding.y() + st::msgDateFont->ascent, st::msgDateFont->elided(data->title, titleWidth)); } } } @@ -6103,10 +6106,10 @@ QString formatViewsCount(int32 views) { void HistoryMessage::initTime() { _timeText = date.toString(cTimeFormat()); - _timeWidth = st::msgDateFont->m.width(_timeText); + _timeWidth = st::msgDateFont->width(_timeText); _viewsText = (_views >= 0) ? formatViewsCount(_views) : QString(); - _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->m.width(_viewsText); + _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->width(_viewsText); } void HistoryMessage::initMedia(const MTPMessageMedia *media, QString ¤tText) { @@ -6377,7 +6380,7 @@ void HistoryMessage::setViewsCount(int32 count) { int32 was = _viewsWidth; _views = count; _viewsText = (_views >= 0) ? formatViewsCount(_views) : QString(); - _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->m.width(_viewsText); + _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->width(_viewsText); if (was == _viewsWidth) { if (App::main()) App::main()->msgUpdated(history()->peer->id, this); } else { @@ -6738,7 +6741,7 @@ HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const , fwdDate(::date(msg.vfwd_date)) , fwdFrom(App::peer(peerFromMTP(msg.vfwd_from_id))) , fwdFromVersion(fwdFrom->nameVersion) -, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) +, fromWidth(st::msgServiceFont->width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) { fwdNameUpdated(); } @@ -6747,7 +6750,7 @@ HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId , fwdDate(msg->dateForwarded()) , fwdFrom(msg->fromForwarded()) , fwdFromVersion(fwdFrom->nameVersion) -, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) +, fromWidth(st::msgServiceFont->width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) { fwdNameUpdated(); } @@ -6793,7 +6796,7 @@ void HistoryForwarded::drawForwardedFrom(Painter &p, int32 x, int32 y, int32 w, p.setFont(serviceName->f); fwdFromName.drawElided(p, x + fromWidth, y, w - fromWidth); } else { - p.drawText(x, y + serviceFont->ascent, serviceFont->m.elidedText(lang(lng_forwarded_from), Qt::ElideRight, w)); + p.drawText(x, y + serviceFont->ascent, serviceFont->elided(lang(lng_forwarded_from), w)); } } @@ -6986,7 +6989,7 @@ QString HistoryReply::selectedText(uint32 selection) const { void HistoryReply::initDimensions() { if (!replyToMsg) { - _maxReplyWidth = st::msgReplyBarSkip + st::msgDateFont->m.width(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message)) + st::msgPadding.left() + st::msgPadding.right(); + _maxReplyWidth = st::msgReplyBarSkip + st::msgDateFont->width(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message)) + st::msgPadding.left() + st::msgPadding.right(); } HistoryMessage::initDimensions(); if (replyToMsg) { @@ -7117,7 +7120,7 @@ void HistoryReply::drawReplyTo(Painter &p, int32 x, int32 y, int32 w, bool selec } else { p.setPen(date->p); } - p.drawText(x + st::msgReplyBarSkip, y + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->m.elidedText(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message), Qt::ElideRight, w - st::msgReplyBarSkip)); + p.drawText(x + st::msgReplyBarSkip, y + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->elided(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message), w - st::msgReplyBarSkip)); } } } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index f516c32315..3b65aa854e 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1104,7 +1104,7 @@ int32 HistoryInner::recountHeight(HistoryItem *resizedItem) { int32 tw = scrollArea->width() - st::msgMargin.left() - st::msgMargin.right(); if (tw > st::msgMaxWidth) tw = st::msgMaxWidth; tw -= st::msgPadding.left() + st::msgPadding.right(); - int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->m.width(lang(lng_bot_description))); + int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->width(lang(lng_bot_description))); if (tw > mw) tw = mw; botDescWidth = tw; @@ -1138,7 +1138,7 @@ void HistoryInner::updateBotInfo(bool recount) { int32 tw = scrollArea->width() - st::msgMargin.left() - st::msgMargin.right(); if (tw > st::msgMaxWidth) tw = st::msgMaxWidth; tw -= st::msgPadding.left() + st::msgPadding.right(); - int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->m.width(lang(lng_bot_description))); + int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->width(lang(lng_bot_description))); if (tw > mw) tw = mw; botDescWidth = tw; @@ -1837,7 +1837,8 @@ void BotKeyboard::mouseReleaseEvent(QMouseEvent *e) { updateSelected(); if (_sel == down && down >= 0) { int row = (down / MatrixRowShift), col = down % MatrixRowShift; - App::sendBotCommand(_btns.at(row).at(col).cmd, _wasForMsgId.msg); + QString cmd(_btns.at(row).at(col).cmd); + App::sendBotCommand(cmd, _wasForMsgId.msg); } } @@ -2032,11 +2033,10 @@ HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(p , _sharedContact(0) , _forwardSelected(forwardSelected) , _sendPath(false) -, forwardButton(this, lang(lng_forward), st::btnSelectDone) -, cancelButton(this, lang(lng_cancel), st::btnSelectCancel) +, _send(this, lang(lng_forward_send), st::defaultBoxButton) +, _cancel(this, lang(lng_box_cancel), st::cancelBoxButton) , offered(0) -, aOpacity(0, 1) -, aOpacityFunc(anim::easeOutCirc) +, a_opacity(0, 1) , hiding(false) , _forwardRequest(0) , toTextWidth(0) @@ -2049,11 +2049,10 @@ HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidge , _sharedContact(sharedContact) , _forwardSelected(false) , _sendPath(false) -, forwardButton(this, lang(lng_forward_send), st::btnSelectDone) -, cancelButton(this, lang(lng_cancel), st::btnSelectCancel) +, _send(this, lang(lng_forward_send), st::defaultBoxButton) +, _cancel(this, lang(lng_box_cancel), st::cancelBoxButton) , offered(0) -, aOpacity(0, 1) -, aOpacityFunc(anim::easeOutCirc) +, a_opacity(0, 1) , hiding(false) , _forwardRequest(0) , toTextWidth(0) @@ -2066,11 +2065,10 @@ HistoryHider::HistoryHider(MainWidget *parent) : QWidget(parent) , _sharedContact(0) , _forwardSelected(false) , _sendPath(true) -, forwardButton(this, lang(lng_forward_send), st::btnSelectDone) -, cancelButton(this, lang(lng_cancel), st::btnSelectCancel) +, _send(this, lang(lng_forward_send), st::defaultBoxButton) +, _cancel(this, lang(lng_box_cancel), st::cancelBoxButton) , offered(0) -, aOpacity(0, 1) -, aOpacityFunc(anim::easeOutCirc) +, a_opacity(0, 1) , hiding(false) , _forwardRequest(0) , toTextWidth(0) @@ -2080,11 +2078,11 @@ HistoryHider::HistoryHider(MainWidget *parent) : QWidget(parent) } void HistoryHider::init() { - connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); - connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); + connect(&_send, SIGNAL(clicked()), this, SLOT(forward())); + connect(&_cancel, SIGNAL(clicked()), this, SLOT(startHide())); connect(App::wnd()->getTitle(), SIGNAL(hiderClicked()), this, SLOT(startHide())); - _chooseWidth = st::forwardFont->m.width(lang(lng_forward_choose)); + _chooseWidth = st::forwardFont->width(lang(lng_forward_choose)); resizeEvent(0); anim::start(this); @@ -2094,17 +2092,15 @@ bool HistoryHider::animStep(float64 ms) { float64 dt = ms / 200; bool res = true; if (dt >= 1) { - aOpacity.finish(); + a_opacity.finish(); if (hiding) { QTimer::singleShot(0, this, SLOT(deleteLater())); } res = false; } else { - aOpacity.update(dt, aOpacityFunc); + a_opacity.update(dt, anim::linear); } - App::wnd()->getTitle()->setHideLevel(aOpacity.current()); - forwardButton.setOpacity(aOpacity.current()); - cancelButton.setOpacity(aOpacity.current()); + App::wnd()->getTitle()->setHideLevel(a_opacity.current()); update(); return res; } @@ -2116,9 +2112,9 @@ bool HistoryHider::withConfirm() const { void HistoryHider::paintEvent(QPaintEvent *e) { Painter p(this); if (!hiding || !cacheForAnim.isNull() || !offered) { - p.setOpacity(aOpacity.current() * st::layerAlpha); - p.fillRect(0, st::titleShadow, width(), height() - st::titleShadow, st::layerBG->b); - p.setOpacity(aOpacity.current()); + p.setOpacity(a_opacity.current() * st::layerAlpha); + p.fillRect(rect(), st::layerBG->b); + p.setOpacity(a_opacity.current()); } if (cacheForAnim.isNull() || !offered) { p.setFont(st::forwardFont->f); @@ -2128,14 +2124,8 @@ void HistoryHider::paintEvent(QPaintEvent *e) { // fill bg p.fillRect(box, st::boxBG->b); - // paint shadows - p.fillRect(box.x(), box.y() + box.height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, box.width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); - - // paint button sep - p.fillRect(box.x() + st::btnSelectCancel.width, box.y() + box.height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); - p.setPen(st::black->p); - toText.drawElided(p, box.left() + (box.width() - toTextWidth) / 2, box.top() + st::boxPadding.top(), toTextWidth + 1); + toText.drawElided(p, box.left() + st::boxPadding.left(), box.top() + st::boxPadding.top(), toTextWidth + 2); } else { int32 w = st::forwardMargins.left() + _chooseWidth + st::forwardMargins.right(), h = st::forwardMargins.top() + st::forwardFont->height + st::forwardMargins.bottom(); App::roundRect(p, (width() - w) / 2, (height() - h) / 2, w, h, st::forwardBg, ForwardCorners); @@ -2179,7 +2169,9 @@ void HistoryHider::startHide() { if (cWideMode()) { if (offered) cacheForAnim = myGrab(this, box); if (_forwardRequest) MTP::cancel(_forwardRequest); - aOpacity.start(0); + a_opacity.start(0); + _send.hide(); + _cancel.hide(); anim::start(this); } else { QTimer::singleShot(0, this, SLOT(deleteLater())); @@ -2209,24 +2201,27 @@ MainWidget *HistoryHider::parent() { } void HistoryHider::resizeEvent(QResizeEvent *e) { - int32 w = st::forwardWidth, h = st::boxPadding.top() + st::forwardFont->height + st::boxPadding.bottom(); + int32 w = st::boxWidth, h = st::boxPadding.top() + st::boxPadding.bottom(); if (offered) { - forwardButton.show(); - cancelButton.show(); - h += forwardButton.height() + st::scrollDef.bottomsh; + if (!hiding) { + _send.show(); + _cancel.show(); + } + h += st::boxTextFont->height + st::boxButtonPadding.top() + _send.height() + st::boxButtonPadding.bottom(); } else { - forwardButton.hide(); - cancelButton.hide(); + h += st::forwardFont->height; + _send.hide(); + _cancel.hide(); } box = QRect((width() - w) / 2, (height() - h) / 2, w, h); - cancelButton.move(box.x(), box.y() + h - cancelButton.height()); - forwardButton.move(box.x() + box.width() - forwardButton.width(), cancelButton.y()); + _send.moveToRight(width() - (box.x() + box.width()) + st::boxButtonPadding.right(), box.y() + h - st::boxButtonPadding.bottom() - _send.height(), width()); + _cancel.moveToRight(width() - (box.x() + box.width()) + st::boxButtonPadding.right() + _send.width() + st::boxButtonPadding.left(), _send.y(), width()); } bool HistoryHider::offerPeer(PeerId peer) { if (!peer) { offered = 0; - toText.setText(st::boxFont, QString()); + toText.setText(st::boxTextFont, QString()); toTextWidth = 0; resizeEvent(0); return false; @@ -2255,7 +2250,7 @@ bool HistoryHider::offerPeer(PeerId peer) { return false; } - toText.setText(st::boxFont, phrase, _textNameOptions); + toText.setText(st::boxTextFont, phrase, _textNameOptions); toTextWidth = toText.maxWidth(); if (toTextWidth > box.width() - st::boxPadding.left() - st::boxPadding.right()) { toTextWidth = box.width() - st::boxPadding.left() - st::boxPadding.right(); @@ -2342,7 +2337,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _recording(false), _inRecord(false), _inField(false), _inReply(false) , a_recordingLevel(0, 0), _recordingSamples(0) , 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->width(lang(lng_record_cancel))) , _kbShown(false) , _kbWasHidden(false) , _kbReplyTo(0) @@ -2842,7 +2837,7 @@ void HistoryWidget::fastShowAtEnd(History *h) { clearAllLoadRequests(); - _showAtMsgId = ShowAtTheEndMsgId; + setMsgId(ShowAtUnreadMsgId); _histInited = false; if (h->isReadyFor(_showAtMsgId, _fixedInScrollMsgId, _fixedInScrollMsgTop)) { @@ -2854,6 +2849,9 @@ void HistoryWidget::fastShowAtEnd(History *h) { } void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { + MsgId wasMsgId = _showAtMsgId; + History *wasHistory = _history; + if (_history) { if (_peer->id == peerId) { _history->lastWidth = 0; @@ -2881,7 +2879,9 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { historyLoaded(); } - emit peerShown(_peer); + App::main()->dlgUpdated(wasHistory, wasMsgId); + emit historyShown(_history, _showAtMsgId); + App::main()->topBar()->update(); update(); return; @@ -2915,8 +2915,6 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { if (_history->unreadBar) { _history->unreadBar->destroy(); } - - App::main()->dlgUpdated(_history); _history = 0; } @@ -2994,9 +2992,6 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { firstLoadMessages(); doneShow(); } - if (_history) { - App::main()->dlgUpdated(_history); - } App::main()->peerUpdated(_peer); @@ -3038,7 +3033,9 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { if (App::wnd()) App::wnd()->setInnerFocus(); - emit peerShown(_peer); + App::main()->dlgUpdated(wasHistory, wasMsgId); + emit historyShown(_history, _showAtMsgId); + App::main()->topBar()->update(); update(); } @@ -3422,7 +3419,7 @@ bool HistoryWidget::messagesFailed(const RPCError &error, mtpRequestId requestId if (error.type() == qstr("CHANNEL_PRIVATE")) { App::main()->showDialogs(); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_not_accessible), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_not_accessible))); return true; } @@ -3541,7 +3538,8 @@ void HistoryWidget::messagesReceived(PeerData *peer, const MTPmessages_Messages calcNextReplyReturn(); } - _showAtMsgId = _delayedShowAtMsgId; + setMsgId(_delayedShowAtMsgId); + _histInited = false; if (_history->isChannel() && wasOnlyImportant != _history->asChannelHistory()->onlyImportant()) { @@ -3877,7 +3875,7 @@ bool HistoryWidget::joinFail(const RPCError &error, mtpRequestId req) { if (_unblockRequest == req) _unblockRequest = 0; if (error.type() == qstr("CHANNEL_PRIVATE")) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_not_accessible), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_not_accessible))); return true; } return false; @@ -3943,10 +3941,23 @@ void HistoryWidget::onSendPaths(const PeerId &peer) { uploadMedias(cSendPaths(), ToPrepareDocument); } +History *HistoryWidget::history() const { + return _history; +} + PeerData *HistoryWidget::peer() const { return _peer; } +void HistoryWidget::setMsgId(MsgId showAtMsgId) { // sometimes _showAtMsgId is set directly + if (_showAtMsgId != showAtMsgId) { + MsgId wasMsgId = _showAtMsgId; + _showAtMsgId = showAtMsgId; + App::main()->dlgUpdated(_history, wasMsgId); + emit historyShown(_history, _showAtMsgId); + } +} + MsgId HistoryWidget::msgId() const { return _showAtMsgId; } @@ -4637,7 +4648,7 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { } if (_titlePeerText != text) { _titlePeerText = text; - _titlePeerTextWidth = st::dlgHistFont->m.width(_titlePeerText); + _titlePeerTextWidth = st::dlgHistFont->width(_titlePeerText); if (App::main()) { App::main()->topBar()->update(); } @@ -5078,7 +5089,7 @@ void HistoryWidget::onAudioFailed(const FullMsgId &newId) { } void HistoryWidget::onReportSpamClicked() { - ConfirmBox *box = new ConfirmBox(lang(_peer->isUser() ? lng_report_spam_sure : (_peer->isChat() ? lng_report_spam_sure_group : lng_report_spam_sure_channel)), lang(lng_report_spam_ok)); + ConfirmBox *box = new ConfirmBox(lang(_peer->isUser() ? lng_report_spam_sure : (_peer->isChat() ? lng_report_spam_sure_group : lng_report_spam_sure_channel)), lang(lng_report_spam_ok), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onReportSpamSure())); App::wnd()->showLayer(box); _clearPeer = _peer; @@ -5323,7 +5334,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, } else if (initial && _showAtMsgId > 0) { HistoryItem *item = App::histItemById(_channel, _showAtMsgId); if (!item || item->detached()) { - _showAtMsgId = 0; + setMsgId(0); _histInited = false; return updateListSize(addToY, initial); } else { @@ -5354,7 +5365,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (item) { toY = qMax(firstItemY + item->y + item->block()->y - _fixedInScrollMsgTop, 0); } else { - _showAtMsgId = ShowAtUnreadMsgId; + setMsgId(ShowAtUnreadMsgId); _fixedInScrollMsgId = 0; _fixedInScrollMsgTop = 0; _histInited = false; @@ -5370,7 +5381,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (toY < _scroll.scrollTopMax() + st::unreadBarHeight) { _history->addUnreadBar(); if (_history->unreadBar) { - _showAtMsgId = ShowAtUnreadMsgId; + setMsgId(ShowAtUnreadMsgId); _histInited = false; return updateListSize(0, true); } @@ -6131,7 +6142,7 @@ void HistoryWidget::drawField(Painter &p) { } else { p.setFont(st::msgDateFont->f); p.setPen(st::msgInDateColor->p); - p.drawText(replyLeft, backy + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->m.elidedText(lang(lng_profile_loading), Qt::ElideRight, width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right())); + p.drawText(replyLeft, backy + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->elided(lang(lng_profile_loading), width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right())); } } } else if (from && text) { @@ -6204,7 +6215,7 @@ void HistoryWidget::drawRecording(Painter &p) { p.setPen(st::black->p); p.drawText(_attachPhoto.x() + _attachEmoji.width(), _attachPhoto.y() + st::recordTextTop + st::recordFont->ascent, duration); - int32 left = _attachPhoto.x() + _attachEmoji.width() + st::recordFont->m.width(duration) + ((_send.width() - st::btnRecordAudio.pxWidth()) / 2); + int32 left = _attachPhoto.x() + _attachEmoji.width() + st::recordFont->width(duration) + ((_send.width() - st::btnRecordAudio.pxWidth()) / 2); int32 right = width() - _send.width(); p.setPen(a_recordCancel.current()); @@ -6271,7 +6282,7 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { } } else { style::font font(st::msgServiceFont); - int32 w = font->m.width(lang(lng_willbe_history)) + st::msgPadding.left() + st::msgPadding.right(), h = font->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + 2; + int32 w = font->width(lang(lng_willbe_history)) + st::msgPadding.left() + st::msgPadding.right(), h = font->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + 2; QRect tr((width() - w) / 2, (height() - _field.height() - 2 * st::sendPadding - h) / 2, w, h); App::roundRect(p, tr, App::msgServiceBg(), ServiceCorners); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index f5b4c583f0..4d8251f3ed 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -351,11 +351,9 @@ private: UserData *_sharedContact; bool _forwardSelected, _sendPath; - FlatButton forwardButton; - FlatButton cancelButton; + BoxButton _send, _cancel; PeerData *offered; - anim::fvalue aOpacity; - anim::transition aOpacityFunc; + anim::fvalue a_opacity; QRect box; bool hiding; @@ -456,7 +454,9 @@ public: void shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId = 0); + History *history() const; PeerData *peer() const; + void setMsgId(MsgId showAtMsgId); MsgId msgId() const; HistoryItem *atTopImportantMsg(int32 &bottomUnderScrollTop) const; @@ -541,7 +541,7 @@ public: signals: void cancelled(); - void peerShown(PeerData *); + void historyShown(History *history, MsgId atMsgId); public slots: diff --git a/Telegram/SourceFiles/intro/intropwdcheck.cpp b/Telegram/SourceFiles/intro/intropwdcheck.cpp index 4dc59c8b68..94ebb890c5 100644 --- a/Telegram/SourceFiles/intro/intropwdcheck.cpp +++ b/Telegram/SourceFiles/intro/intropwdcheck.cpp @@ -249,7 +249,7 @@ bool IntroPwdCheck::codeSubmitFail(const RPCError &error) { } void IntroPwdCheck::recoverStarted(const MTPauth_PasswordRecovery &result) { - _emailPattern = st::introFont->m.elidedText(lng_signin_recover_hint(lt_recover_email, qs(result.c_auth_passwordRecovery().vemail_pattern)), Qt::ElideRight, textRect.width()); + _emailPattern = st::introFont->elided(lng_signin_recover_hint(lt_recover_email, qs(result.c_auth_passwordRecovery().vemail_pattern)), textRect.width()); update(); } @@ -283,14 +283,14 @@ void IntroPwdCheck::onToRecover() { } update(); } else { - ConfirmBox *box = new ConfirmBox(lang(lng_signin_no_email_forgot), true); + ConfirmBox *box = new InformBox(lang(lng_signin_no_email_forgot)); App::wnd()->showLayer(box); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onToReset())); } } void IntroPwdCheck::onToPassword() { - ConfirmBox *box = new ConfirmBox(lang(lng_signin_no_email_forgot), true); + ConfirmBox *box = new InformBox(lang(lng_signin_cant_email_forgot)); App::wnd()->showLayer(box); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onToReset())); } @@ -312,7 +312,7 @@ void IntroPwdCheck::onToReset() { void IntroPwdCheck::onReset() { if (sentRequest) return; - ConfirmBox *box = new ConfirmBox(lang(lng_sigin_sure_reset), lang(lng_sigin_reset), QString(), st::btnRedDone); + ConfirmBox *box = new ConfirmBox(lang(lng_signin_sure_reset), lang(lng_signin_reset), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onResetSure())); App::wnd()->showLayer(box); } diff --git a/Telegram/SourceFiles/intro/introsteps.cpp b/Telegram/SourceFiles/intro/introsteps.cpp index 6b87c08f62..ce7a7f61d9 100644 --- a/Telegram/SourceFiles/intro/introsteps.cpp +++ b/Telegram/SourceFiles/intro/introsteps.cpp @@ -49,7 +49,7 @@ _next(this, lang(lng_start_msgs), st::btnIntroNext) { _changeLang.show(); } - _headerWidth = st::introHeaderFont->m.width(qsl("Telegram Desktop")); + _headerWidth = st::introHeaderFont->width(qsl("Telegram Desktop")); setGeometry(parent->innerRect()); diff --git a/Telegram/SourceFiles/layerwidget.h b/Telegram/SourceFiles/layerwidget.h index bf23ac43e5..74a3a51dc6 100644 --- a/Telegram/SourceFiles/layerwidget.h +++ b/Telegram/SourceFiles/layerwidget.h @@ -19,7 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "gui/boxshadow.h" -class LayeredWidget : public QWidget { +class LayeredWidget : public TWidget { Q_OBJECT public: diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index ff123dfa1e..e5db85d195 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -96,7 +96,7 @@ void TopBarWidget::onDeleteContact() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; UserData *u = p ? p->asUser() : 0; if (u) { - ConfirmBox *box = new ConfirmBox(lng_sure_delete_contact(lt_contact, p->name)); + ConfirmBox *box = new ConfirmBox(lng_sure_delete_contact(lt_contact, p->name), lang(lng_box_delete)); connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteContactSure())); App::wnd()->showLayer(box); } @@ -116,7 +116,7 @@ void TopBarWidget::onDeleteAndExit() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; ChatData *c = p ? p->asChat() : 0; if (c) { - ConfirmBox *box = new ConfirmBox(lng_sure_delete_and_exit(lt_group, p->name)); + ConfirmBox *box = new ConfirmBox(lng_sure_delete_and_exit(lt_group, p->name), lang(lng_box_leave), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteAndExitSure())); App::wnd()->showLayer(box); } @@ -359,7 +359,7 @@ void TopBarWidget::showSelected(uint32 selCount, bool canDelete) { _selCount = selCount; _canDelete = canDelete; _selStr = (_selCount > 0) ? lng_selected_count(lt_count, _selCount) : QString(); - _selStrWidth = st::btnDefLink.font->m.width(_selStr); + _selStrWidth = st::btnDefLink.font->width(_selStr); setCursor((!p && _selCount) ? style::cur_default : style::cur_pointer); showAll(); } @@ -400,7 +400,7 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _handlingChannelDifference(false) connect(_api, SIGNAL(fullPeerUpdated(PeerData*)), this, SLOT(onFullPeerUpdated(PeerData*))); connect(this, SIGNAL(peerUpdated(PeerData*)), &history, SLOT(peerUpdated(PeerData*))); connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick())); - connect(&history, SIGNAL(peerShown(PeerData*)), this, SLOT(onPeerShown(PeerData*))); + connect(&history, SIGNAL(historyShown(History*,MsgId)), this, SLOT(onHistoryShown(History*,MsgId))); connect(&updateNotifySettingTimer, SIGNAL(timeout()), this, SLOT(onUpdateNotifySettings())); connect(this, SIGNAL(showPeerAsync(quint64,qint32)), this, SLOT(showPeerHistory(quint64,qint32)), Qt::QueuedConnection); if (audioPlayer()) { @@ -444,7 +444,7 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _handlingChannelDifference(false) bool MainWidget::onForward(const PeerId &peer, ForwardWhatMessages what) { PeerData *p = App::peer(peer); if (!peer || (p->isChannel() && !p->asChannel()->canPublish() && p->asChannel()->isBroadcast()) || (p->isChat() && (p->asChat()->haveLeft || p->asChat()->isForbidden)) || (p->isUser() && p->asUser()->access == UserNoAccess)) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_forward_cant), true)); + App::wnd()->showLayer(new InformBox(lang(lng_forward_cant))); return false; } history.cancelReply(); @@ -655,7 +655,7 @@ void MainWidget::noHider(HistoryHider *destroyed) { _forwardConfirm->startHide(); _forwardConfirm = 0; } - onPeerShown(history.peer()); + onHistoryShown(history.history(), history.msgId()); if (profile || overview || (history.peer() && history.peer()->id)) { dialogs.enableShadow(false); QPixmap animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)), @@ -700,7 +700,7 @@ void MainWidget::hiderLayer(HistoryHider *h) { dialogs.enableShadow(); _topBar.enableShadow(); - onPeerShown(0); + onHistoryShown(0, 0); if (overview) { overview->hide(); } else if (profile) { @@ -721,7 +721,7 @@ void MainWidget::forwardLayer(int32 forwardSelected) { void MainWidget::deleteLayer(int32 selectedCount) { QString str((selectedCount < 0) ? lang(selectedCount < -1 ? lng_selected_cancel_sure_this : lng_selected_delete_sure_this) : lng_selected_delete_sure(lt_count, selectedCount)); - ConfirmBox *box = new ConfirmBox((selectedCount < 0) ? str : str.arg(selectedCount), lang(lng_selected_delete_confirm)); + ConfirmBox *box = new ConfirmBox((selectedCount < 0) ? str : str.arg(selectedCount), lang(lng_box_delete)); if (selectedCount < 0) { connect(box, SIGNAL(confirmed()), overview ? overview : static_cast(&history), SLOT(onDeleteContextSure())); } else { @@ -741,7 +741,7 @@ bool MainWidget::selectingPeer(bool withConfirm) { void MainWidget::offerPeer(PeerId peer) { App::wnd()->hideLayer(); if (_hider->offerPeer(peer) && !cWideMode()) { - _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward_send)); connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); connect(_forwardConfirm, SIGNAL(destroyed(QObject*)), this, SLOT(onForwardCancel(QObject*))); @@ -879,7 +879,7 @@ bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { } else if (error.type() == "PEER_FLOOD") { text = lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))); } - App::wnd()->showLayer(new ConfirmBox(text, true)); + App::wnd()->showLayer(new InformBox(text)); return false; } @@ -893,7 +893,7 @@ bool MainWidget::addParticipantsFail(const RPCError &error) { } else if (error.type() == "PEER_FLOOD") { text = lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))); } - App::wnd()->showLayer(new ConfirmBox(text, true)); + App::wnd()->showLayer(new InformBox(text)); return false; } @@ -1015,7 +1015,7 @@ bool MainWidget::sendMessageFail(const RPCError &error) { if (mtpIsFlood(error)) return false; if (error.type() == qsl("PEER_FLOOD")) { - App::wnd()->showLayer(new ConfirmBox(lng_cant_send_to_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))), true)); + App::wnd()->showLayer(new InformBox(lng_cant_send_to_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); return true; } return false; @@ -2631,11 +2631,13 @@ QRect MainWidget::historyRect() const { } void MainWidget::dlgUpdated(DialogRow *row) { + if (!row) return; dialogs.dlgUpdated(row); } -void MainWidget::dlgUpdated(History *row) { - dialogs.dlgUpdated(row); +void MainWidget::dlgUpdated(History *row, MsgId msgId) { + if (!row) return; + dialogs.dlgUpdated(row, msgId); } void MainWidget::windowShown() { @@ -2757,7 +2759,7 @@ void MainWidget::hideAll() { void MainWidget::showAll() { if (cPasswordRecovered()) { cSetPasswordRecovered(false); - App::wnd()->showLayer(new ConfirmBox(lang(lng_signin_password_removed), true, lang(lng_continue))); + App::wnd()->showLayer(new InformBox(lang(lng_signin_password_removed))); } if (cWideMode()) { if (_hider) { @@ -2783,7 +2785,7 @@ void MainWidget::showAll() { if (_hider) { _hider->hide(); if (!_forwardConfirm && _hider->wasOffered()) { - _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward_send)); connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); App::wnd()->showLayer(_forwardConfirm, true); @@ -2922,8 +2924,8 @@ void MainWidget::onTopBarClick() { } } -void MainWidget::onPeerShown(PeerData *peer) { - if ((cWideMode() || !selectingPeer()) && (profile || overview || (peer && peer->id))) { +void MainWidget::onHistoryShown(History *history, MsgId atMsgId) { + if ((cWideMode() || !selectingPeer()) && (profile || overview || history)) { _topBar.show(); } else { _topBar.hide(); @@ -2932,6 +2934,7 @@ void MainWidget::onPeerShown(PeerData *peer) { if (animating()) { _topBar.hide(); } + dlgUpdated(history, atMsgId); } void MainWidget::searchInPeer(PeerData *peer) { @@ -3609,7 +3612,7 @@ bool MainWidget::usernameResolveFail(QString name, const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; if (error.code() == 400) { - App::wnd()->showLayer(new ConfirmBox(lng_username_not_found(lt_user, name), true)); + App::wnd()->showLayer(new InformBox(lng_username_not_found(lt_user, name))); } return true; } @@ -3646,7 +3649,7 @@ bool MainWidget::inviteCheckFail(const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; if (error.code() == 400) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_bad_link), true)); + App::wnd()->showLayer(new InformBox(lang(lng_group_invite_bad_link))); } return true; } @@ -3684,7 +3687,7 @@ bool MainWidget::inviteImportFail(const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; if (error.code() == 400) { - App::wnd()->showLayer(new ConfirmBox(lang(error.type() == qsl("USERS_TOO_MUCH") ? lng_group_invite_no_room : lng_group_invite_bad_link), true), App::wnd()->layerShown()); + App::wnd()->showLayer(new InformBox(lang(error.type() == qsl("USERS_TOO_MUCH") ? lng_group_invite_no_room : lng_group_invite_bad_link))); } return true; } @@ -4281,7 +4284,14 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { // update before applying skipped PeerId id = peerFromMTP(d.vpeer); App::feedOutboxRead(id, d.vmax_id.v); - if (history.peer() && history.peer()->id == id) history.update(); + if (history.peer() && history.peer()->id == id) { + history.update(); + } + if (History *h = App::historyLoaded(id)) { + if (h->lastMsg->out() && h->lastMsg->id <= d.vmax_id.v) { + dlgUpdated(h, h->lastMsg->id); + } + } ptsApplySkippedUpdates(); } break; @@ -4494,7 +4504,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateServiceNotification: { const MTPDupdateServiceNotification &d(update.c_updateServiceNotification()); if (d.vpopup.v) { - App::wnd()->showLayer(new ConfirmBox(qs(d.vmessage), true)); + App::wnd()->showLayer(new InformBox(qs(d.vmessage))); App::wnd()->serviceNotification(qs(d.vmessage), d.vmedia); } else { App::wnd()->serviceNotification(qs(d.vmessage), d.vmedia); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index b9a44d4ec0..31c44242de 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -219,7 +219,7 @@ public: void createDialog(History *history); void dlgUpdated(DialogRow *row); - void dlgUpdated(History *row); + void dlgUpdated(History *row, MsgId msgId); void windowShown(); @@ -443,7 +443,7 @@ public slots: void showPeerHistory(quint64 peer, qint32 msgId, bool back = false); void onTopBarClick(); - void onPeerShown(PeerData *peer); + void onHistoryShown(History *history, MsgId atMsgId); void searchInPeer(PeerData *peer); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 087f8c1e2e..4b23af4a58 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -229,11 +229,11 @@ void MediaView::updateDocSize() { } else { _docSize = formatSizeText(_doc->size); } - _docSizeWidth = st::mvFont->m.width(_docSize); + _docSizeWidth = st::mvFont->width(_docSize); int32 maxw = st::mvDocSize.width() - st::mvDocBlue.pxWidth() - st::mvDocPadding * 3; if (_docSizeWidth > maxw) { - _docSize = st::mvFont->m.elidedText(_docSize, Qt::ElideRight, maxw); - _docSizeWidth = st::mvFont->m.width(_docSize); + _docSize = st::mvFont->elided(_docSize, maxw); + _docSizeWidth = st::mvFont->width(_docSize); } } @@ -292,10 +292,10 @@ void MediaView::updateControls() { if (_from) { _fromName.setText(st::mvFont, _from->name); _nameNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height); - _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); + _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->width(_dateText), st::mvFont->height); } else { _nameNav = QRect(); - _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); + _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->width(_dateText), st::mvFont->height); } updateHeader(); if (_photo || (_history && _overview == OverviewPhotos)) { @@ -912,18 +912,18 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty _docName = (!_doc || _doc->name.isEmpty()) ? lang(_doc ? (_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : lng_message_empty) : _doc->name; int32 lastDot = _docName.lastIndexOf('.'); _docExt = _doc ? ((lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1)) : QString(); - _docNameWidth = st::mvDocNameFont->m.width(_docName); + _docNameWidth = st::mvDocNameFont->width(_docName); if (_docNameWidth > maxw) { - _docName = st::mvDocNameFont->m.elidedText(_docName, Qt::ElideMiddle, maxw); - _docNameWidth = st::mvDocNameFont->m.width(_docName); + _docName = st::mvDocNameFont->elided(_docName, maxw, Qt::ElideMiddle); + _docNameWidth = st::mvDocNameFont->width(_docName); } int32 extmaxw = (st::mvDocBlue.pxWidth() - st::mvDocExtPadding * 2); - _docExtWidth = st::mvDocExtFont->m.width(_docExt); + _docExtWidth = st::mvDocExtFont->width(_docExt); if (_docExtWidth > extmaxw) { - _docExt = st::mvDocNameFont->m.elidedText(_docExt, Qt::ElideMiddle, extmaxw); - _docExtWidth = st::mvDocNameFont->m.width(_docExt); + _docExt = st::mvDocNameFont->elided(_docExt, extmaxw, Qt::ElideMiddle); + _docExtWidth = st::mvDocNameFont->width(_docExt); } _docRadialFirst = _docRadialLast = _docRadialStart = 0; @@ -1953,75 +1953,13 @@ void MediaView::updateHeader() { } } _headerHasLink = (_overview != OverviewCount) && _history; - int32 hwidth = st::mvThickFont->m.width(_headerText); + int32 hwidth = st::mvThickFont->width(_headerText); if (hwidth > width() / 3) { hwidth = width() / 3; - _headerText = st::mvThickFont->m.elidedText(_headerText, Qt::ElideMiddle, hwidth); + _headerText = st::mvThickFont->elided(_headerText, hwidth, Qt::ElideMiddle); } _headerNav = myrtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height); } -// -//void MediaView::updatePolaroid() { -// if (_doc) { -// _polaroidIn = _polaroidOut = QRect(0, 0, _avail.width(), _avail.height() - st::medviewBottomBar); -// int32 minus1 = width() - _delete.x(), minus2 = _overview.x() + st::medviewHeaderFont->m.width(_header) - st::medviewOverview.width; -// if (minus2 > minus1) minus1 = minus2; -// -// int32 dateWidth = st::medviewDateFont->m.width(_dateText), maxWidth = width() - 2 * minus1; -// if (_from) { -// int32 nameWidth = _fromName.maxWidth(); -// if (maxWidth < dateWidth) { -// maxWidth = dateWidth; -// } -// if (nameWidth > maxWidth) { -// nameWidth = maxWidth; -// } -// _nameNav = QRect((_avail.width() - nameWidth) / 2, _avail.y() + _avail.height() - ((st::medviewPolaroid.bottom() + st::medviewBottomBar) / 2) + st::medviewNameTop, nameWidth, st::medviewNameFont->height); -// _dateNav = QRect((_avail.width() - dateWidth) / 2, _avail.y() + _avail.height() - ((st::medviewPolaroid.bottom() + st::medviewBottomBar) / 2) + st::medviewDateTop, dateWidth, st::medviewDateFont->height); -// } else { -// _nameNav = QRect(_avail.x() - 1, _avail.y() - 1, 0, 0); -// _dateNav = QRect((_avail.width() - dateWidth) / 2, _avail.y() + _avail.height() - ((st::medviewPolaroid.bottom() + st::medviewBottomBar) / 2) + ((st::medviewNameTop + st::medviewDateTop) / 2), dateWidth, st::medviewDateFont->height); -// } -// } else { -// int32 pminw = qMin(st::medviewPolaroidMin.width(), int(_avail.width() - 2 * st::medviewNavBarWidth)); -// -// int32 pl = _x - st::medviewPolaroid.left(), plw = st::medviewPolaroid.left(); -// if (pl < st::medviewNavBarWidth) pl = st::medviewNavBarWidth; -// int32 pr = _x + _w + st::medviewPolaroid.right(), prw = st::medviewPolaroid.right(); -// if (pr > _avail.width() - st::medviewNavBarWidth) pr = _avail.width() - st::medviewNavBarWidth; -// -// if (_w + st::medviewPolaroid.left() + st::medviewPolaroid.right() < pminw) { -// pl = (_avail.width() - pminw) / 2; -// plw = _x - pl; -// pr = pl + pminw; -// prw = pr - (_x + _w); -// } -// -// int32 pminh = qMin(st::medviewPolaroidMin.height(), int(_avail.height() - st::medviewBottomBar)); -// -// int32 pt = _y - st::medviewPolaroid.top(), pth = st::medviewPolaroid.top(); -// if (pt < 0) pt = 0; -// int32 pb = _y + _h + st::medviewPolaroid.bottom(), pbh = st::medviewPolaroid.bottom(); -// if (pb > _avail.height() - st::medviewBottomBar) pb = _avail.height() - st::medviewBottomBar; -// -// if (_h + st::medviewPolaroid.top() + st::medviewPolaroid.bottom() < pminh) { -// pt = (_avail.height() - st::medviewBottomBar - pminh) / 2; -// pth = _y - pt; -// pb = pt + pminh; -// pbh = pb - (_y + _h); -// } -// -// _polaroidOut = QRect(pl, pt, pr - pl, pb - pt); -// _polaroidIn = QRect(pl + plw, pt + pth, pr - pl - prw - plw, pb - pt - pbh - pth); -// -// int32 nameWidth = _fromName.maxWidth(), maxWidth = _polaroidOut.width() - st::medviewPolaroid.left() - st::medviewPolaroid.right(), dateWidth = st::medviewDateFont->m.width(_dateText); -// if (nameWidth > maxWidth) { -// nameWidth = maxWidth; -// } -// _nameNav = QRect(_polaroidIn.x() + ((_polaroidIn.width() - nameWidth) / 2), _polaroidOut.y() + _polaroidOut.height() - st::medviewPolaroid.bottom() + st::medviewNameTop, nameWidth, st::medviewNameFont->height); -// _dateNav = QRect(_polaroidIn.x() + ((_polaroidIn.width() - dateWidth) / 2), _polaroidOut.y() + _polaroidOut.height() - st::medviewPolaroid.bottom() + st::medviewDateTop, dateWidth, st::medviewDateFont->height); -// } -//} QColor MediaView::overColor(const QColor &a, float64 ca, const QColor &b, float64 cb) { QColor res; diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index 2cf1f3b322..66909baa10 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -728,36 +728,29 @@ textSerializeFull += '\ttypes.reserve(20); vtypes.reserve(20); stages.reserve(20 textSerializeFull += '\ttypes.push_back(mtpTypeId(cons)); vtypes.push_back(mtpTypeId(vcons)); stages.push_back(0); flags.push_back(0);\n\n'; textSerializeFull += '\tconst mtpPrime *start = from;\n'; textSerializeFull += '\tmtpTypeId type = cons, vtype = vcons;\n'; -textSerializeFull += '\tint32 stage = 0, flag = 0;\n'; -textSerializeFull += '\ttry {\n'; -textSerializeFull += '\t\twhile (!types.isEmpty()) {\n'; -textSerializeFull += '\t\t\ttype = types.back();\n'; -textSerializeFull += '\t\t\tvtype = vtypes.back();\n'; -textSerializeFull += '\t\t\tstage = stages.back();\n'; -textSerializeFull += '\t\t\tflag = flags.back();\n'; -textSerializeFull += '\t\t\tif (!type) {\n'; -textSerializeFull += '\t\t\t\tif (from >= end) {\n'; -textSerializeFull += '\t\t\t\t\tthrow Exception("from >= end");\n'; -textSerializeFull += '\t\t\t\t} else if (stage) {\n'; -textSerializeFull += '\t\t\t\t\tthrow Exception("unknown type on stage > 0");\n'; -textSerializeFull += '\t\t\t\t}\n'; -textSerializeFull += '\t\t\t\ttypes.back() = type = *from;\n'; -textSerializeFull += '\t\t\t\tstart = ++from;\n'; -textSerializeFull += '\t\t\t}\n\n'; -textSerializeFull += '\t\t\tint32 lev = level + types.size() - 1;\n'; -textSerializeFull += '\t\t\tTextSerializers::const_iterator it = _serializers.constFind(type);\n'; -textSerializeFull += '\t\t\tif (it != _serializers.cend()) {\n'; -textSerializeFull += '\t\t\t\t(*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag);\n'; -textSerializeFull += '\t\t\t} else {\n'; -textSerializeFull += '\t\t\t\tmtpTextSerializeCore(to, from, end, type, lev, vtype);\n'; -textSerializeFull += '\t\t\t\ttypes.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();\n'; -textSerializeFull += '\t\t\t\t}\n'; +textSerializeFull += '\tint32 stage = 0, flag = 0;\n\n'; +textSerializeFull += '\twhile (!types.isEmpty()) {\n'; +textSerializeFull += '\t\ttype = types.back();\n'; +textSerializeFull += '\t\tvtype = vtypes.back();\n'; +textSerializeFull += '\t\tstage = stages.back();\n'; +textSerializeFull += '\t\tflag = flags.back();\n'; +textSerializeFull += '\t\tif (!type) {\n'; +textSerializeFull += '\t\t\tif (from >= end) {\n'; +textSerializeFull += '\t\t\t\tthrow Exception("from >= end");\n'; +textSerializeFull += '\t\t\t} else if (stage) {\n'; +textSerializeFull += '\t\t\t\tthrow Exception("unknown type on stage > 0");\n'; +textSerializeFull += '\t\t\t}\n'; +textSerializeFull += '\t\t\ttypes.back() = type = *from;\n'; +textSerializeFull += '\t\t\tstart = ++from;\n'; +textSerializeFull += '\t\t}\n\n'; +textSerializeFull += '\t\tint32 lev = level + types.size() - 1;\n'; +textSerializeFull += '\t\tTextSerializers::const_iterator it = _serializers.constFind(type);\n'; +textSerializeFull += '\t\tif (it != _serializers.cend()) {\n'; +textSerializeFull += '\t\t\t(*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag);\n'; +textSerializeFull += '\t\t} else {\n'; +textSerializeFull += '\t\t\tmtpTextSerializeCore(to, from, end, type, lev, vtype);\n'; +textSerializeFull += '\t\t\ttypes.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();\n'; textSerializeFull += '\t\t}\n'; -textSerializeFull += '\t} catch (Exception &e) {\n'; -textSerializeFull += '\t\tto.add("[ERROR] ");\n'; -textSerializeFull += '\t\tto.add("(").add(e.what()).add("), cons: 0x").add(mtpWrapNumber(type, 16));\n'; -textSerializeFull += '\t\tif (vtype) to.add(", vcons: 0x").add(mtpWrapNumber(vtype));\n'; -textSerializeFull += '\t\tto.add(", ").add(mb(start, (end - start) * sizeof(mtpPrime)).str());\n'; textSerializeFull += '\t}\n'; textSerializeFull += '}\n'; diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 71f87f590b..90ea87a463 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -206,7 +206,7 @@ typedef QMap mtpResponseMap; class mtpErrorUnexpected : public Exception { public: - mtpErrorUnexpected(mtpTypeId typeId, const QString &type) : Exception(QString("MTP Unexpected type id %1 read in %2").arg(typeId).arg(type), false) { // maybe api changed?.. + mtpErrorUnexpected(mtpTypeId typeId, const QString &type) : Exception(QString("MTP Unexpected type id #%1 read in %2").arg(uint32(typeId), 0, 16).arg(type), false) { // maybe api changed?.. } }; @@ -1005,7 +1005,11 @@ void mtpTextSerializeCore(MTPStringLogger &to, const mtpPrime *&from, const mtpP inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end) { MTPStringLogger to; - mtpTextSerializeType(to, from, end, mtpc_core_message); + try { + mtpTextSerializeType(to, from, end, mtpc_core_message); + } catch (Exception &e) { + to.add("[ERROR] (").add(e.what()).add(")"); + } return QString::fromUtf8(to.p, to.size); } diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index eaad1d8a79..00f44522e9 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -7467,36 +7467,30 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP const mtpPrime *start = from; mtpTypeId type = cons, vtype = vcons; int32 stage = 0, flag = 0; - try { - while (!types.isEmpty()) { - type = types.back(); - vtype = vtypes.back(); - stage = stages.back(); - flag = flags.back(); - if (!type) { - if (from >= end) { - throw Exception("from >= end"); - } else if (stage) { - throw Exception("unknown type on stage > 0"); - } - types.back() = type = *from; - start = ++from; - } - int32 lev = level + types.size() - 1; - TextSerializers::const_iterator it = _serializers.constFind(type); - if (it != _serializers.cend()) { - (*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag); - } else { - mtpTextSerializeCore(to, from, end, type, lev, vtype); - types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); - } + while (!types.isEmpty()) { + type = types.back(); + vtype = vtypes.back(); + stage = stages.back(); + flag = flags.back(); + if (!type) { + if (from >= end) { + throw Exception("from >= end"); + } else if (stage) { + throw Exception("unknown type on stage > 0"); + } + types.back() = type = *from; + start = ++from; + } + + int32 lev = level + types.size() - 1; + TextSerializers::const_iterator it = _serializers.constFind(type); + if (it != _serializers.cend()) { + (*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag); + } else { + mtpTextSerializeCore(to, from, end, type, lev, vtype); + types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); } - } catch (Exception &e) { - to.add("[ERROR] "); - to.add("(").add(e.what()).add("), cons: 0x").add(mtpWrapNumber(type, 16)); - if (vtype) to.add(", vcons: 0x").add(mtpWrapNumber(vtype)); - to.add(", ").add(mb(start, (end - start) * sizeof(mtpPrime)).str()); } } diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 2525ae8d33..b90f41bd49 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -116,7 +116,7 @@ OverviewInner::CachedLink::CachedLink(HistoryItem *item) : titleWidth(0), page(0 } } } - titleWidth = st::webPageTitleFont->m.width(title); + titleWidth = st::webPageTitleFont->width(title); } int32 OverviewInner::CachedLink::countHeight(int32 w) { @@ -1187,7 +1187,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) { p.setPen(st::black->p); p.setFont(st::webPageTitleFont->f); if (!lnk->title.isEmpty()) { - p.drawText(left, top + st::webPageTitleFont->ascent, (_linksWidth - left < lnk->titleWidth) ? st::webPageTitleFont->m.elidedText(lnk->title, Qt::ElideRight, _linksWidth - left) : lnk->title); + p.drawText(left, top + st::webPageTitleFont->ascent, (_linksWidth - left < lnk->titleWidth) ? st::webPageTitleFont->elided(lnk->title, _linksWidth - left) : lnk->title); top += st::webPageTitleFont->height; } p.setFont(st::msgFont->f); @@ -1200,7 +1200,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) { for (int32 j = 0, c = lnk->urls.size(); j < c; ++j) { bool sel = (_mousedItem == _items[i].msgid && j + 1 == _lnkOverIndex); if (sel) p.setFont(st::msgFont->underline()->f); - p.drawText(left, top + st::msgFont->ascent, (_linksWidth - left < lnk->urls[j].width) ? st::msgFont->m.elidedText(lnk->urls[j].text, Qt::ElideRight, _linksWidth - left) : lnk->urls[j].text); + p.drawText(left, top + st::msgFont->ascent, (_linksWidth - left < lnk->urls[j].width) ? st::msgFont->elided(lnk->urls[j].text, _linksWidth - left) : lnk->urls[j].text); if (sel) p.setFont(st::msgFont->f); top += st::msgFont->height; } @@ -1257,7 +1257,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) { int32 left = st::msgServiceMargin.left(), width = _width - st::msgServiceMargin.left() - st::msgServiceMargin.left(), height = st::msgServiceFont->height + st::msgServicePadding.top() + st::msgServicePadding.bottom(); if (width < 1) return; - int32 strwidth = st::msgServiceFont->m.width(str) + st::msgServicePadding.left() + st::msgServicePadding.right(); + int32 strwidth = st::msgServiceFont->width(str) + st::msgServicePadding.left() + st::msgServicePadding.right(); QRect trect(QRect(left, st::msgServiceMargin.top(), width, height).marginsAdded(-st::msgServicePadding)); left += (width - strwidth) / 2; diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 7a7926e9d3..5047a65e2b 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -154,7 +154,7 @@ private: struct Link { Link() : width(0) { } - Link(const QString &url, const QString &text) : url(url), text(text), width(st::msgFont->m.width(text)) { + Link(const QString &url, const QString &text) : url(url), text(text), width(st::msgFont->width(text)) { } QString url, text; int32 width; diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index 273e444546..cbe30ec229 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -201,7 +201,7 @@ void PlayerWidget::updateDownTime() { QString time = formatDurationText(qRound(_downDuration * _downProgress) / _downFrequency); if (time != _time) { _time = time; - _timeWidth = st::linkFont->m.width(_time); + _timeWidth = st::linkFont->width(_time); rtlupdate(_infoRect); } } @@ -583,7 +583,7 @@ void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, if (time != _time || showPause != _showPause) { if (_time != time) { _time = time; - _timeWidth = st::linkFont->m.width(_time); + _timeWidth = st::linkFont->width(_time); } _showPause = showPause; if (duration != _duration || position != _position || loaded != _loaded) { diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 5970be2a0a..df035b73b8 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -75,7 +75,7 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // participants _pHeight(st::profileListPhotoSize + st::profileListPadding.height() * 2), - _kickWidth(st::linkFont->m.width(lang(lng_profile_kick))), + _kickWidth(st::linkFont->width(lang(lng_profile_kick))), _selectedRow(-1), _lastPreload(0), _contactId(0), _kickOver(0), _kickDown(0), _kickConfirm(0), @@ -276,7 +276,7 @@ void ProfileInner::onUpdatePhoto() { void ProfileInner::onClearHistory() { if (_peerChannel) return; - ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : lng_sure_delete_group_history(lt_group, _peer->name)); + ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : lng_sure_delete_group_history(lt_group, _peer->name), lang(lng_box_delete), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onClearHistorySure())); App::wnd()->showLayer(box); } @@ -287,7 +287,7 @@ void ProfileInner::onClearHistorySure() { } void ProfileInner::onDeleteConversation() { - ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : (_peer->isChat() ? lng_sure_delete_and_exit(lt_group, _peer->name) : lang(lng_sure_leave_channel))); + ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : (_peer->isChat() ? lng_sure_delete_and_exit(lt_group, _peer->name) : lang(lng_sure_leave_channel)), lang(_peer->isUser() ? lng_box_delete : lng_box_leave), _peer->isChannel() ? st::defaultBoxButton : st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteConversationSure())); App::wnd()->showLayer(box); } @@ -308,7 +308,7 @@ void ProfileInner::onDeleteConversationSure() { void ProfileInner::onDeleteChannel() { if (!_peerChannel) return; - ConfirmBox *box = new ConfirmBox(lang(lng_sure_delete_channel), lang(lng_selected_delete_confirm), QString(), st::btnRedDone); + ConfirmBox *box = new ConfirmBox(lang(lng_sure_delete_channel), lang(lng_box_delete), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteChannelSure())); App::wnd()->showLayer(box); } @@ -398,7 +398,7 @@ void ProfileInner::onInvitationLink() { if (!_peerChat && !_peerChannel) return; QApplication::clipboard()->setText(_peerChat ? _peerChat->invitationUrl : (_peerChannel ? _peerChannel->invitationUrl : QString())); - App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_copied), true)); + App::wnd()->showLayer(new InformBox(lang(lng_group_invite_copied))); } void ProfileInner::onPublicLink() { @@ -406,7 +406,7 @@ void ProfileInner::onPublicLink() { if (_peerChannel->isPublic()) { QApplication::clipboard()->setText(qsl("https://telegram.me/") + _peerChannel->username); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_public_link_copied), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_public_link_copied))); } else { App::wnd()->showLayer(new SetupChannelBox(_peerChannel, true)); } @@ -716,7 +716,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top += st::profileButtonTop; if (_peerChat && _peerChat->isForbidden) { - int32 w = st::btnShareContact.font->m.width(lang(lng_profile_chat_unaccessible)); + int32 w = st::btnShareContact.font->width(lang(lng_profile_chat_unaccessible)); p.setFont(st::btnShareContact.font->f); p.setPen(st::profileOfflineColor->p); p.drawText(_left + (_width - w) / 2, top + st::btnShareContact.textTop + st::btnShareContact.font->ascent, lang(lng_profile_chat_unaccessible)); @@ -952,7 +952,7 @@ void ProfileInner::mouseReleaseEvent(QMouseEvent *e) { updateSelected(); if (_kickDown && _kickDown == _kickOver) { _kickConfirm = _kickOver; - ConfirmBox *box = new ConfirmBox(lng_profile_sure_kick(lt_user, _kickOver->firstName)); + ConfirmBox *box = new ConfirmBox(lng_profile_sure_kick(lt_user, _kickOver->firstName), lang(lng_box_remove)); connect(box, SIGNAL(confirmed()), this, SLOT(onKickConfirm())); App::wnd()->showLayer(box); } @@ -1142,10 +1142,10 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { top += st::profileHeaderSkip; // invite link stuff - int32 _inviteLinkTextWidth(st::linkFont->m.width(lang(lng_group_invite_link)) + st::linkFont->spacew); + int32 _inviteLinkTextWidth(st::linkFont->width(lang(lng_group_invite_link)) + st::linkFont->spacew); if (_amCreator && (!_peerChannel || !_peerChannel->isPublic())) { if (!_invitationText.isEmpty()) { - _invitationLink.setText(st::linkFont->m.elidedText(_invitationText, Qt::ElideRight, _width - _inviteLinkTextWidth)); + _invitationLink.setText(st::linkFont->elided(_invitationText, _width - _inviteLinkTextWidth)); } if ((_peerChat && !_peerChat->invitationUrl.isEmpty()) || (_peerChannel && !_peerChannel->invitationUrl.isEmpty())) { _invitationLink.move(_left + _inviteLinkTextWidth, top); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 0c7a40eb47..1b7a922309 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -157,7 +157,7 @@ void _placeCounter(QImage &img, int size, int count, style::color bg, style::col fontSize = 16; } style::font f(fontSize); - int32 w = f->m.width(cnt), d, r; + int32 w = f->width(cnt), d, r; if (size == 22) { d = (cntSize < 2) ? 3 : 2; r = (cntSize < 2) ? 6 : 5; diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index e96490a3ae..815528f624 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -144,10 +144,10 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _dpiAutoScale(this, lng_settings_scale_auto(lt_cur, scaleLabel(cScreenScale())), (cConfigScale() == dbisAuto)), _dpiSlider(this, st::dpiSlider, dbisScaleCount - 1, cEvalScale(cConfigScale()) - 1), - _dpiWidth1(st::dpiFont1->m.width(scaleLabel(dbisOne))), - _dpiWidth2(st::dpiFont2->m.width(scaleLabel(dbisOneAndQuarter))), - _dpiWidth3(st::dpiFont3->m.width(scaleLabel(dbisOneAndHalf))), - _dpiWidth4(st::dpiFont4->m.width(scaleLabel(dbisTwo))), + _dpiWidth1(st::dpiFont1->width(scaleLabel(dbisOne))), + _dpiWidth2(st::dpiFont2->width(scaleLabel(dbisOneAndQuarter))), + _dpiWidth3(st::dpiFont3->width(scaleLabel(dbisOneAndHalf))), + _dpiWidth4(st::dpiFont4->width(scaleLabel(dbisTwo))), // chat options _replaceEmojis(this, lang(lng_settings_replace_emojis), cReplaceEmojis()), @@ -157,12 +157,12 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _ctrlEnterSend(this, qsl("send_key"), 1, lang((cPlatform() == dbipMac) ? lng_settings_send_cmdenter : lng_settings_send_ctrlenter), cCtrlEnter()), _dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath()), - _downloadPathWidth(st::linkFont->m.width(lang(lng_download_path_label)) + st::linkFont->spacew), - _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_default) : ((cDownloadPath() == qsl("tmp")) ? lang(lng_download_path_temp) : st::linkFont->m.elidedText(QDir::toNativeSeparators(cDownloadPath()), Qt::ElideRight, st::setWidth - st::setVersionLeft - _downloadPathWidth))), + _downloadPathWidth(st::linkFont->width(lang(lng_download_path_label)) + st::linkFont->spacew), + _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_default) : ((cDownloadPath() == qsl("tmp")) ? lang(lng_download_path_temp) : st::linkFont->elided(QDir::toNativeSeparators(cDownloadPath()), st::setWidth - st::setVersionLeft - _downloadPathWidth))), _downloadPathClear(this, lang(lng_download_path_clear)), - _tempDirClearingWidth(st::linkFont->m.width(lang(lng_download_path_clearing))), - _tempDirClearedWidth(st::linkFont->m.width(lang(lng_download_path_cleared))), - _tempDirClearFailedWidth(st::linkFont->m.width(lang(lng_download_path_clear_failed))), + _tempDirClearingWidth(st::linkFont->width(lang(lng_download_path_clearing))), + _tempDirClearedWidth(st::linkFont->width(lang(lng_download_path_cleared))), + _tempDirClearFailedWidth(st::linkFont->width(lang(lng_download_path_clear_failed))), // chat background _backFromGallery(this, lang(lng_settings_bg_from_gallery)), @@ -173,22 +173,22 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), // local storage _localStorageClear(this, lang(lng_local_storage_clear)), _localStorageHeight(1), - _storageClearingWidth(st::linkFont->m.width(lang(lng_local_storage_clearing))), - _storageClearedWidth(st::linkFont->m.width(lang(lng_local_storage_cleared))), - _storageClearFailedWidth(st::linkFont->m.width(lang(lng_local_storage_clear_failed))), + _storageClearingWidth(st::linkFont->width(lang(lng_local_storage_clearing))), + _storageClearedWidth(st::linkFont->width(lang(lng_local_storage_cleared))), + _storageClearFailedWidth(st::linkFont->width(lang(lng_local_storage_clear_failed))), // advanced _passcodeEdit(this, lang(cHasPasscode() ? lng_passcode_change : lng_passcode_turn_on)), _passcodeTurnOff(this, lang(lng_passcode_turn_off)), _autoLock(this, (cAutoLock() % 3600) ? lng_passcode_autolock_minutes(lt_count, cAutoLock() / 60) : lng_passcode_autolock_hours(lt_count, cAutoLock() / 3600)), _autoLockText(lang(psIdleSupported() ? lng_passcode_autolock_away : lng_passcode_autolock_inactive) + ' '), - _autoLockWidth(st::linkFont->m.width(_autoLockText)), + _autoLockWidth(st::linkFont->width(_autoLockText)), _passwordEdit(this, lang(lng_cloud_password_set)), _passwordTurnOff(this, lang(lng_passcode_turn_off)), _hasPasswordRecovery(false), _connectionType(this, lang(lng_connection_auto_connecting)), _connectionTypeText(lang(lng_connection_type) + ' '), - _connectionTypeWidth(st::linkFont->m.width(_connectionTypeText)), + _connectionTypeWidth(st::linkFont->width(_connectionTypeText)), _showSessions(this, lang(lng_settings_show_sessions)), _askQuestion(this, lang(lng_settings_ask_question)), _telegramFAQ(this, lang(lng_settings_faq)), @@ -248,9 +248,9 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_dpiSlider, SIGNAL(changed(int32)), this, SLOT(onScaleChange())); _curVersionText = lng_settings_current_version(lt_version, QString::fromWCharArray(AppVersionStr) + (cDevVersion() ? " dev" : "")) + ' '; - _curVersionWidth = st::linkFont->m.width(_curVersionText); + _curVersionWidth = st::linkFont->width(_curVersionText); _newVersionText = lang(lng_settings_update_ready) + ' '; - _newVersionWidth = st::linkFont->m.width(_newVersionText); + _newVersionWidth = st::linkFont->width(_newVersionText); #ifndef TDESKTOP_DISABLE_AUTOUPDATE connect(App::app(), SIGNAL(updateChecking()), this, SLOT(onUpdateChecking())); @@ -921,7 +921,7 @@ void SettingsInner::gotPassword(const MTPaccount_Password &result) { if (!pattern.isEmpty()) _waitingConfirm = lng_cloud_password_waiting(lt_email, pattern); } break; } - _waitingConfirm = st::linkFont->m.elidedText(_waitingConfirm, Qt::ElideRight, st::setWidth - _passwordTurnOff.width()); + _waitingConfirm = st::linkFont->elided(_waitingConfirm, st::setWidth - _passwordTurnOff.width()); _passwordEdit.setText(lang(_curPasswordSalt.isEmpty() ? lng_cloud_password_set : lng_cloud_password_edit)); showAll(); update(); @@ -1175,7 +1175,7 @@ void SettingsInner::onShowSessions() { void SettingsInner::onAskQuestion() { if (!App::self()) return; - ConfirmBox *box = new ConfirmBox(lang(lng_settings_ask_sure), lang(lng_settings_ask_ok), lang(lng_settings_faq_button)); + ConfirmBox *box = new ConfirmBox(lang(lng_settings_ask_sure), lang(lng_settings_ask_ok), st::defaultBoxButton, lang(lng_settings_faq_button)); connect(box, SIGNAL(confirmed()), this, SLOT(onAskQuestionSure())); connect(box, SIGNAL(cancelPressed()), this, SLOT(onTelegramFAQ())); App::wnd()->showLayer(box); @@ -1204,17 +1204,17 @@ void SettingsInner::chooseCustomLang() { QByteArray arr; if (filedialogGetOpenFile(file, arr, qsl("Choose language .strings file"), qsl("Language files (*.strings)"))) { _testlang = QFileInfo(file).absoluteFilePath(); - LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_box_cancel, lng_box_ok)); if (loader.errors().isEmpty()) { LangLoaderResult result = loader.found(); QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), - save = result.value(lng_continue, langOriginal(lng_continue)), - cancel = result.value(lng_cancel, langOriginal(lng_cancel)); - ConfirmBox *box = new ConfirmBox(text, save, cancel); + save = result.value(lng_box_ok, langOriginal(lng_box_ok)), + cancel = result.value(lng_box_cancel, langOriginal(lng_box_cancel)); + ConfirmBox *box = new ConfirmBox(text, save, st::defaultBoxButton, cancel); connect(box, SIGNAL(confirmed()), this, SLOT(onSaveTestLang())); App::wnd()->showLayer(box); } else { - App::wnd()->showLayer(new ConfirmBox("Custom lang failed :(\n\nError: " + loader.errors(), true, lang(lng_close))); + App::wnd()->showLayer(new InformBox("Custom lang failed :(\n\nError: " + loader.errors())); } } } @@ -1438,7 +1438,7 @@ void SettingsInner::setScale(DBIScale newScale) { _dpiSlider.setSelected(newScale - 1); } if (cEvalScale(cConfigScale()) != cEvalScale(cRealScale())) { - ConfirmBox *box = new ConfirmBox(lang(lng_settings_need_restart), lang(lng_settings_restart_now), lang(lng_settings_restart_later)); + ConfirmBox *box = new ConfirmBox(lang(lng_settings_need_restart), lang(lng_settings_restart_now), st::defaultBoxButton, lang(lng_settings_restart_later)); connect(box, SIGNAL(confirmed()), this, SLOT(onRestartNow())); App::wnd()->showLayer(box); } @@ -1626,7 +1626,7 @@ void SettingsInner::onDownloadPathEdited() { } else if (cDownloadPath() == qsl("tmp")) { path = lang(lng_download_path_temp); } else { - path = st::linkFont->m.elidedText(QDir::toNativeSeparators(cDownloadPath()), Qt::ElideRight, st::setWidth - st::setVersionLeft - _downloadPathWidth); + path = st::linkFont->elided(QDir::toNativeSeparators(cDownloadPath()), st::setWidth - st::setVersionLeft - _downloadPathWidth); } _downloadPathEdit.setText(path); showAll(); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 7bb04408df..7be6904b82 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -960,7 +960,7 @@ void PeerLink::onClick(Qt::MouseButton button) const { if (button == Qt::LeftButton && App::main()) { if (peer() && peer()->isChannel() && App::main()->historyPeer() != peer()) { if (!peer()->asChannel()->isPublic() && !peer()->asChannel()->amIn()) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_not_accessible), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_not_accessible))); } else { App::main()->showPeerHistory(peer()->id, ShowAtUnreadMsgId); } diff --git a/Telegram/SourceFiles/sysbuttons.cpp b/Telegram/SourceFiles/sysbuttons.cpp index 039dbb8835..5609f7b547 100644 --- a/Telegram/SourceFiles/sysbuttons.cpp +++ b/Telegram/SourceFiles/sysbuttons.cpp @@ -27,7 +27,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org SysBtn::SysBtn(QWidget *parent, const style::sysButton &st, const QString &text) : Button(parent), _st(st), a_color(_st.color->c), _overLevel(0), _text(text) { - int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->m.width(_text))); + int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->width(_text))); resize(w, _st.size.height()); setCursor(style::cur_default); connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); @@ -35,7 +35,7 @@ _st(st), a_color(_st.color->c), _overLevel(0), _text(text) { void SysBtn::setText(const QString &text) { _text = text; - int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->m.width(_text))); + int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->width(_text))); resize(w, _st.size.height()); } diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index b5db91a42e..ebec9fe925 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -42,7 +42,7 @@ ConnectingWidget::ConnectingWidget(QWidget *parent, const QString &text, const Q void ConnectingWidget::set(const QString &text, const QString &reconnect) { _text = text; - _textWidth = st::linkFont->m.width(_text) + st::linkFont->spacew; + _textWidth = st::linkFont->width(_text) + st::linkFont->spacew; int32 _reconnectWidth = 0; if (reconnect.isEmpty()) { _reconnect.hide(); @@ -187,7 +187,7 @@ void NotifyWindow::updateNotifyDisplay() { QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); QDate nowDate(now.date()), lastDate(lastTime.date()); QString dt = lastTime.toString(cTimeFormat()); - int32 dtWidth = st::dlgHistFont->m.width(dt); + int32 dtWidth = st::dlgHistFont->width(dt); rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); p.setFont(st::dlgDateFont->f); p.setPen(st::dlgDateColor->p); @@ -212,7 +212,7 @@ void NotifyWindow::updateNotifyDisplay() { p.drawText(r.left(), r.top() + st::dlgHistFont->ascent, lng_forward_messages(lt_count, fwdCount)); } } else { - static QString notifyText = st::dlgHistFont->m.elidedText(lang(lng_notification_preview), Qt::ElideRight, itemWidth); + static QString notifyText = st::dlgHistFont->elided(lang(lng_notification_preview), itemWidth); p.setPen(st::dlgSystemColor->p); p.drawText(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height + st::dlgHistFont->ascent, notifyText); } @@ -222,7 +222,7 @@ void NotifyWindow::updateNotifyDisplay() { history->peer->dialogName().drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } else { p.setFont(st::msgNameFont->f); - static QString notifyTitle = st::msgNameFont->m.elidedText(qsl("Telegram Desktop"), Qt::ElideRight, rectForName.width()); + static QString notifyTitle = st::msgNameFont->elided(qsl("Telegram Desktop"), rectForName.width()); p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle); } } @@ -770,7 +770,8 @@ void Window::showDocument(DocumentData *doc, HistoryItem *item) { _mediaView->setFocus(); } -void Window::showLayer(LayeredWidget *w, bool fast) { +void Window::showLayer(LayeredWidget *w, bool forceFast) { + bool fast = forceFast || layerShown(); hideLayer(true); layerBG = new BackgroundWidget(this, w); if (fast) { @@ -1059,7 +1060,7 @@ void Window::onShowNewChannel() { void Window::onLogout() { if (isHidden()) showFromTray(); - ConfirmBox *box = new ConfirmBox(lang(lng_sure_logout)); + ConfirmBox *box = new ConfirmBox(lang(lng_sure_logout), lang(lng_box_logout), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onLogoutSure())); App::wnd()->showLayer(box); } @@ -1638,7 +1639,7 @@ void Window::placeSmallCounter(QImage &img, int size, int count, style::color bg fontSize = (cntSize < 2) ? 22 : 22; } style::font f(fontSize); - int32 w = f->m.width(cnt), d, r; + int32 w = f->width(cnt), d, r; if (size == 16) { d = (cntSize < 2) ? 2 : 1; r = (cntSize < 2) ? 4 : 3; @@ -1687,7 +1688,7 @@ QImage Window::iconWithCounter(int size, int count, style::color bg, bool smallI fontSize = (cntSize < 2) ? 22 : ((cntSize < 3) ? 20 : 16); } style::font f(fontSize); - int32 w = f->m.width(cnt), d, r; + int32 w = f->width(cnt), d, r; if (size == 16) { d = (cntSize < 2) ? 5 : ((cntSize < 3) ? 2 : 1); r = (cntSize < 2) ? 8 : ((cntSize < 3) ? 7 : 3); diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index be20c0b4b5..66cb679016 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -178,7 +178,7 @@ public: void showPhoto(PhotoData *photo, HistoryItem *item); void showPhoto(PhotoData *photo, PeerData *item); void showDocument(DocumentData *doc, HistoryItem *item); - void showLayer(LayeredWidget *w, bool fast = false); + void showLayer(LayeredWidget *w, bool forceFast = false); void replaceLayer(LayeredWidget *w); void hideLayer(bool fast = false); bool hideInnerLayer(); From 605b18aa270ccbbc9bfd6bec97e51809b7affff6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 3 Oct 2015 14:33:51 +0300 Subject: [PATCH 2/4] added some checks --- Telegram/SourceFiles/app.cpp | 4 ++-- Telegram/SourceFiles/boxes/aboutbox.cpp | 3 +++ Telegram/SourceFiles/boxes/aboutbox.h | 3 +++ Telegram/SourceFiles/boxes/addcontactbox.cpp | 4 ++-- Telegram/SourceFiles/dialogswidget.cpp | 2 +- Telegram/SourceFiles/dropdown.cpp | 10 +++++----- Telegram/SourceFiles/history.cpp | 6 +++--- Telegram/SourceFiles/historywidget.cpp | 16 +++++++++------- Telegram/SourceFiles/localstorage.cpp | 2 +- Telegram/SourceFiles/mainwidget.cpp | 4 ++-- Telegram/SourceFiles/profilewidget.cpp | 6 +++--- Telegram/SourceFiles/structs.cpp | 8 +++++--- 12 files changed, 39 insertions(+), 29 deletions(-) diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 86a0ec74d4..52b90ac81b 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -626,7 +626,7 @@ namespace App { } else { if (i.key()->botInfo) { 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()) App::api()->requestFullPeer(i.key()); } if (!found && i.key()->id == h->lastKeyboardFrom) { found = true; @@ -676,7 +676,7 @@ namespace App { chat->count++; if (user->botInfo) { chat->botStatus = (chat->botStatus > 0/* || !user->botInfo->readsAllHistory*/) ? 2 : 1; - if (!user->botInfo->inited) App::api()->requestFullPeer(user); + if (!user->botInfo->inited && App::api()) App::api()->requestFullPeer(user); } } } else { diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index a9eca94287..1a7a2b8490 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -12,6 +12,9 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org */ diff --git a/Telegram/SourceFiles/boxes/aboutbox.h b/Telegram/SourceFiles/boxes/aboutbox.h index 35d3dd2105..cfc1d3352b 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.h +++ b/Telegram/SourceFiles/boxes/aboutbox.h @@ -12,6 +12,9 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org */ diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 758b084586..3b5a3636a4 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -577,7 +577,7 @@ bool EditChannelBox::onSaveFail(const RPCError &error, mtpRequestId req) { _saveDescriptionRequestId = 0; if (err == qstr("CHAT_ABOUT_NOT_MODIFIED")) { _channel->about = _sentDescription; - emit App::api()->fullPeerUpdated(_channel); + if (App::api()) emit App::api()->fullPeerUpdated(_channel); onClose(); } else { _description.setFocus(); @@ -595,6 +595,6 @@ void EditChannelBox::onSaveTitleDone(const MTPUpdates &updates) { void EditChannelBox::onSaveDescriptionDone(const MTPBool &result) { _saveDescriptionRequestId = 0; _channel->about = _sentDescription; - emit App::api()->fullPeerUpdated(_channel); + if (App::api()) emit App::api()->fullPeerUpdated(_channel); onClose(); } diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 04b16b533c..df2d4d79ef 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -796,7 +796,7 @@ void DialogsInner::dialogsReceived(const QVector &added) { history->peer->asChannel()->ptsReceived(d.vpts.v); if (!history->peer->asChannel()->amCreator()) { if (HistoryItem *top = App::histItemById(history->channelId(), d.vtop_important_message.v)) { - if (top->date <= date(history->peer->asChannel()->date)) { + if (top->date <= date(history->peer->asChannel()->date) && App::api()) { App::api()->requestSelfParticipant(history->peer->asChannel()); } } diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 87d6a0034e..3b71add492 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2976,7 +2976,7 @@ void MentionsDropdown::updateFiltered(bool toDown) { QMultiMap ordered; rows.reserve(_chat->participants.isEmpty() ? _chat->lastAuthors.size() : _chat->participants.size()); if (_chat->participants.isEmpty()) { - if (_chat->count > 0) { + if (_chat->count > 0 && App::api()) { App::api()->requestFullPeer(_chat); } } else { @@ -3015,7 +3015,7 @@ void MentionsDropdown::updateFiltered(bool toDown) { int32 cnt = 0; if (_chat) { if (_chat->participants.isEmpty()) { - if (_chat->count > 0) { + if (_chat->count > 0 && App::api()) { App::api()->requestFullPeer(_chat); } } else { @@ -3023,14 +3023,14 @@ void MentionsDropdown::updateFiltered(bool toDown) { for (ChatData::Participants::const_iterator i = _chat->participants.cbegin(), e = _chat->participants.cend(); i != e; ++i) { UserData *user = i.key(); if (!user->botInfo) continue; - if (!user->botInfo->inited) App::api()->requestFullPeer(user); + if (!user->botInfo->inited && App::api()) App::api()->requestFullPeer(user); if (user->botInfo->commands.isEmpty()) continue; bots.insert(user, true); cnt += user->botInfo->commands.size(); } } } else if (_user && _user->botInfo) { - if (!_user->botInfo->inited) App::api()->requestFullPeer(_user); + if (!_user->botInfo->inited && App::api()) App::api()->requestFullPeer(_user); cnt = _user->botInfo->commands.size(); bots.insert(_user, true); } @@ -3042,7 +3042,7 @@ void MentionsDropdown::updateFiltered(bool toDown) { UserData *user = *i; if (!user->botInfo) continue; if (!bots.contains(user)) continue; - if (!user->botInfo->inited) App::api()->requestFullPeer(user); + if (!user->botInfo->inited && App::api()) App::api()->requestFullPeer(user); if (user->botInfo->commands.isEmpty()) continue; bots.remove(user); for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index dbc3cce8bd..2bda94d12a 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -6963,7 +6963,7 @@ HistoryReply::HistoryReply(History *history, HistoryBlock *block, const MTPDmess , replyToVersion(0) , _maxReplyWidth(0) { - if (!updateReplyTo()) { + if (!updateReplyTo() && App::api()) { App::api()->requestReplyTo(this, history->peer->asChannel(), replyToMsgId); } } @@ -6974,7 +6974,7 @@ HistoryReply::HistoryReply(History *history, HistoryBlock *block, MsgId msgId, i , replyToVersion(0) , _maxReplyWidth(0) { - if (!updateReplyTo()) { + if (!updateReplyTo() && App::api()) { App::api()->requestReplyTo(this, history->peer->asChannel(), replyToMsgId); } } @@ -7285,7 +7285,7 @@ void HistoryReply::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, i HistoryReply::~HistoryReply() { if (replyToMsg) { App::historyUnregReply(this, replyToMsg); - } else if (replyToMsgId) { + } else if (replyToMsgId && App::api()) { App::api()->itemRemoved(this); } } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 3b65aa854e..98ce73bd8d 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -75,7 +75,7 @@ HistoryInner::HistoryInner(HistoryWidget *historyWidget, ScrollArea *scroll, His _trippleClickTimer.setSingleShot(true); - if (botInfo && !botInfo->inited) { + if (botInfo && !botInfo->inited && App::api()) { App::api()->requestFullPeer(hist->peer); } @@ -2746,7 +2746,7 @@ void HistoryWidget::stickersGot(const MTPmessages_AllStickers &stickers) { } } - if (!setsToRequest.isEmpty()) { + if (!setsToRequest.isEmpty() && App::api()) { for (QMap::const_iterator i = setsToRequest.cbegin(), e = setsToRequest.cend(); i != e; ++i) { App::api()->scheduleStickerSetRequest(i.key(), i.value()); } @@ -3018,7 +3018,7 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { } if (_replyToId) { updateReplyTo(); - if (!_replyTo) App::api()->requestReplyTo(0, _peer->asChannel(), _replyToId); + if (!_replyTo && App::api()) App::api()->requestReplyTo(0, _peer->asChannel(), _replyToId); } resizeEvent(0); if (!_previewCancelled) { @@ -5914,10 +5914,12 @@ void HistoryWidget::peerUpdated(PeerData *data) { if (data && data == _peer) { updateListSize(); if (_peer->isChannel()) updateReportSpamStatus(); - if (data->isChat() && data->asChat()->count > 0 && data->asChat()->participants.isEmpty()) { - App::api()->requestFullPeer(data); - } else if (data->isUser() && data->asUser()->blocked == UserBlockUnknown) { - App::api()->requestFullPeer(data); + if (App::api()) { + if (data->isChat() && data->asChat()->count > 0 && data->asChat()->participants.isEmpty()) { + App::api()->requestFullPeer(data); + } else if (data->isUser() && data->asUser()->blocked == UserBlockUnknown) { + App::api()->requestFullPeer(data); + } } if (!_showAnim.animating()) { bool resize = (_unblock.isHidden() == isBlocked() || (!isBlocked() && _joinChannel.isHidden() == isJoinChannel())); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index ab33cec92b..8d528ea484 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -3112,7 +3112,7 @@ namespace Local { peers.push_back(peer); } App::emitPeerUpdated(); - App::api()->requestPeers(peers); + if (App::api()) App::api()->requestPeers(peers); } void addSavedPeer(PeerData *peer, const QDateTime &position) { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index e5db85d195..676324548a 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -4109,7 +4109,7 @@ void MainWidget::feedUpdates(const MTPUpdates &updates, uint64 randomId) { bool noFrom = !App::userLoaded(d.vfrom_id.v); if (!App::chatLoaded(d.vchat_id.v) || noFrom || (d.has_fwd_from_id() && !App::peerLoaded(peerFromMTP(d.vfwd_from_id)))) { MTP_LOG(0, ("getDifference { good - getting user for updateShortChatMessage }%1").arg(cTestMode() ? " TESTMODE" : "")); - if (noFrom) App::api()->requestFullPeer(App::chatLoaded(d.vchat_id.v)); + if (noFrom && App::api()) App::api()->requestFullPeer(App::chatLoaded(d.vchat_id.v)); return getDifference(); } @@ -4524,7 +4524,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { deleteConversation(channel, false); } else if (!channel->amCreator() && App::history(channel->id)) { // create history _updatedChannels.insert(channel, true); - App::api()->requestSelfParticipant(channel); + if (App::api()) App::api()->requestSelfParticipant(channel); } } } break; diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index df035b73b8..513b46885c 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -93,7 +93,7 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); } if ((_peerUser->botInfo && !_peerUser->botInfo->inited) || (_peerUser->photoId == UnknownPeerPhotoId) || (_peerUser->photoId && !userPhoto->date) || (_peerUser->blocked == UserBlockUnknown)) { - App::api()->requestFullPeer(_peer); + if (App::api()) App::api()->requestFullPeer(_peer); } } else if (_peerChat) { PhotoData *chatPhoto = (_peerChat->photoId && _peerChat->photoId != UnknownPeerPhotoId) ? App::photo(_peerChat->photoId) : 0; @@ -101,7 +101,7 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee _photoLink = TextLinkPtr(new PhotoLink(chatPhoto, _peer)); } if (_peerChat->photoId == UnknownPeerPhotoId) { - App::api()->requestFullPeer(_peer); + if (App::api()) App::api()->requestFullPeer(_peer); } } else if (_peerChannel) { PhotoData *chatPhoto = (_peerChannel->photoId && _peerChannel->photoId != UnknownPeerPhotoId) ? App::photo(_peerChannel->photoId) : 0; @@ -607,7 +607,7 @@ void ProfileInner::reorderParticipants() { } } if (_peerChat->count > 0 && _participants.isEmpty()) { - App::api()->requestFullPeer(_peer); + if (App::api()) App::api()->requestFullPeer(_peer); if (_onlineText.isEmpty()) _onlineText = lng_chat_status_members(lt_count, _peerChat->count); } else if (onlineCount && !onlyMe) { _onlineText = lng_chat_status_members_online(lt_count, _participants.size(), lt_count_online, onlineCount); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 7be6904b82..73b482941e 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -385,7 +385,7 @@ void ChannelData::setPhoto(const MTPChatPhoto &p, const PhotoId &phId) { // see photoId = newPhotoId; photo = newPhoto; photoLoc = newPhotoLoc; - emit App::main()->peerPhotoChanged(this); + if (App::main()) emit App::main()->peerPhotoChanged(this); } } @@ -397,8 +397,10 @@ void ChannelData::setName(const QString &newName, const QString &usern) { void ChannelData::updateFull(bool force) { if (!_lastFullUpdate || force || getms(true) > _lastFullUpdate + UpdateFullChannelTimeout) { - App::api()->requestFullPeer(this); - if (!amCreator() && !inviter) App::api()->requestSelfParticipant(this); + if (App::api()) { + App::api()->requestFullPeer(this); + if (!amCreator() && !inviter) App::api()->requestSelfParticipant(this); + } } } From d16865cb0581dc48a520d799775342981a66d183 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 3 Oct 2015 14:34:56 +0300 Subject: [PATCH 3/4] license openssl exception added --- LICENSE | 17 +++++++++++++++-- README.md | 4 ++-- Telegram/Deploy.sh | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/LICENSE b/LICENSE index 70566f2d0e..77e1f6119f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,17 @@ -GNU GENERAL PUBLIC LICENSE +Telegram Desktop is licensed under the GNU General Public License +version 3 with the addition of the following special exception: + +In addition, as a special exception, the copyright holders give +permission to link the code of portions of this program with the OpenSSL +library. +You must obey the GNU General Public License in all respects for all of +the code used other than OpenSSL. If you modify file(s) with this +exception, you may extend this exception to your version of the file(s), +but you are not obligated to do so. If you do not wish to do so, delete +this exception statement from your version. If you delete this exception +statement from all source files in the program, then also delete it here. + + GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. @@ -671,4 +684,4 @@ into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. \ No newline at end of file +. diff --git a/README.md b/README.md index 152906b8ea..c9f43ea9d1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This is the complete source code and the build instructions for the alpha version of the official desktop client for the [Telegram][telegram] messenger, based on the [Telegram API][telegram_api] and the [MTProto][telegram_proto] secure protocol. -The source code is published under GPLv3, the license is available [here][license]. +The source code is published under GPLv3 with OpenSSL exception, the license is available [here][license]. ## Supported systems @@ -23,7 +23,7 @@ The source code is published under GPLv3, the license is available [here][licens * OpenAL Soft ([LGPL](http://kcat.strangesoft.net/openal.html)) * Opus codec ([BSD license](http://www.opus-codec.org/license/)) * FFmpeg ([LGPL](https://www.ffmpeg.org/legal.html)) -* Open Sans font ([Apache License](http://www.apache.org/licenses/LICENSE-2.0.html)) +* Open Sans font ([Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)) ## Build instructions diff --git a/Telegram/Deploy.sh b/Telegram/Deploy.sh index d01a68def7..f5e4a4df46 100755 --- a/Telegram/Deploy.sh +++ b/Telegram/Deploy.sh @@ -45,7 +45,7 @@ elif [ "$BuildTarget" == "mac" ]; then WinDeployPath="./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStrFull" WinUpdateFile="tupdate$AppVersion" WinSetupFile="tsetup.$AppVersionStrFull.exe" - WinPortableFile="tportable.$AppVersionStr.zip" + WinPortableFile="tportable.$AppVersionStrFull.zip" WinRemoteFolder="tsetup" DropboxPath="./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" DropboxDeployPath="$DropboxPath/$AppVersionStrFull" From 015e9356ab098f086d196a62f4bbcaf698dfe9f2 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 3 Oct 2015 16:16:42 +0300 Subject: [PATCH 4/4] license header updated --- Telegram/Resources/lang.strings | 5 +++- Telegram/Resources/style.txt | 5 +++- Telegram/Resources/style_classes.txt | 5 +++- Telegram/SourceFiles/_other/genemoji.cpp | 10 ++++++-- Telegram/SourceFiles/_other/genemoji.h | 5 +++- Telegram/SourceFiles/_other/genlang.cpp | 15 ++++++++--- Telegram/SourceFiles/_other/genlang.h | 5 +++- Telegram/SourceFiles/_other/genstyles.cpp | 25 +++++++++++++++---- Telegram/SourceFiles/_other/genstyles.h | 5 +++- Telegram/SourceFiles/_other/memain.cpp | 5 +++- Telegram/SourceFiles/_other/memain.h | 5 +++- Telegram/SourceFiles/_other/mlmain.cpp | 5 +++- Telegram/SourceFiles/_other/mlmain.h | 5 +++- Telegram/SourceFiles/_other/msmain.cpp | 5 +++- Telegram/SourceFiles/_other/msmain.h | 5 +++- Telegram/SourceFiles/_other/packer.cpp | 5 +++- Telegram/SourceFiles/_other/packer.h | 5 +++- Telegram/SourceFiles/_other/updater.cpp | 5 +++- Telegram/SourceFiles/_other/updater.h | 5 +++- Telegram/SourceFiles/_other/updater_linux.cpp | 5 +++- Telegram/SourceFiles/_other/updater_osx.m | 5 +++- Telegram/SourceFiles/apiwrap.cpp | 5 +++- Telegram/SourceFiles/apiwrap.h | 5 +++- Telegram/SourceFiles/app.cpp | 5 +++- Telegram/SourceFiles/app.h | 5 +++- Telegram/SourceFiles/application.cpp | 5 +++- Telegram/SourceFiles/application.h | 5 +++- Telegram/SourceFiles/audio.cpp | 5 +++- Telegram/SourceFiles/audio.h | 5 +++- Telegram/SourceFiles/autoupdater.cpp | 5 +++- Telegram/SourceFiles/autoupdater.h | 5 +++- Telegram/SourceFiles/boxes/aboutbox.cpp | 2 +- Telegram/SourceFiles/boxes/aboutbox.h | 2 +- Telegram/SourceFiles/boxes/abstractbox.cpp | 5 +++- Telegram/SourceFiles/boxes/abstractbox.h | 5 +++- Telegram/SourceFiles/boxes/addcontactbox.cpp | 5 +++- Telegram/SourceFiles/boxes/addcontactbox.h | 5 +++- Telegram/SourceFiles/boxes/autolockbox.cpp | 5 +++- Telegram/SourceFiles/boxes/autolockbox.h | 5 +++- Telegram/SourceFiles/boxes/backgroundbox.cpp | 5 +++- Telegram/SourceFiles/boxes/backgroundbox.h | 5 +++- Telegram/SourceFiles/boxes/confirmbox.cpp | 5 +++- Telegram/SourceFiles/boxes/confirmbox.h | 5 +++- Telegram/SourceFiles/boxes/connectionbox.cpp | 5 +++- Telegram/SourceFiles/boxes/connectionbox.h | 5 +++- Telegram/SourceFiles/boxes/contactsbox.cpp | 5 +++- Telegram/SourceFiles/boxes/contactsbox.h | 5 +++- .../SourceFiles/boxes/downloadpathbox.cpp | 5 +++- Telegram/SourceFiles/boxes/downloadpathbox.h | 5 +++- Telegram/SourceFiles/boxes/emojibox.cpp | 5 +++- Telegram/SourceFiles/boxes/emojibox.h | 5 +++- Telegram/SourceFiles/boxes/languagebox.cpp | 5 +++- Telegram/SourceFiles/boxes/languagebox.h | 5 +++- Telegram/SourceFiles/boxes/passcodebox.cpp | 5 +++- Telegram/SourceFiles/boxes/passcodebox.h | 5 +++- Telegram/SourceFiles/boxes/photocropbox.cpp | 5 +++- Telegram/SourceFiles/boxes/photocropbox.h | 5 +++- Telegram/SourceFiles/boxes/photosendbox.cpp | 5 +++- Telegram/SourceFiles/boxes/photosendbox.h | 5 +++- Telegram/SourceFiles/boxes/sessionsbox.cpp | 5 +++- Telegram/SourceFiles/boxes/sessionsbox.h | 5 +++- Telegram/SourceFiles/boxes/stickersetbox.cpp | 5 +++- Telegram/SourceFiles/boxes/stickersetbox.h | 5 +++- Telegram/SourceFiles/boxes/usernamebox.cpp | 5 +++- Telegram/SourceFiles/boxes/usernamebox.h | 5 +++- Telegram/SourceFiles/config.h | 5 +++- Telegram/SourceFiles/countries.h | 5 +++- Telegram/SourceFiles/dialogswidget.cpp | 5 +++- Telegram/SourceFiles/dialogswidget.h | 5 +++- Telegram/SourceFiles/dropdown.cpp | 5 +++- Telegram/SourceFiles/dropdown.h | 5 +++- Telegram/SourceFiles/fileuploader.cpp | 5 +++- Telegram/SourceFiles/fileuploader.h | 5 +++- Telegram/SourceFiles/gui/animation.cpp | 5 +++- Telegram/SourceFiles/gui/animation.h | 5 +++- Telegram/SourceFiles/gui/boxshadow.cpp | 5 +++- Telegram/SourceFiles/gui/boxshadow.h | 5 +++- Telegram/SourceFiles/gui/button.cpp | 5 +++- Telegram/SourceFiles/gui/button.h | 5 +++- Telegram/SourceFiles/gui/contextmenu.cpp | 2 +- Telegram/SourceFiles/gui/contextmenu.h | 2 +- Telegram/SourceFiles/gui/countryinput.cpp | 5 +++- Telegram/SourceFiles/gui/countryinput.h | 5 +++- Telegram/SourceFiles/gui/emoji_config.cpp | 5 +++- Telegram/SourceFiles/gui/emoji_config.h | 5 +++- Telegram/SourceFiles/gui/filedialog.cpp | 5 +++- Telegram/SourceFiles/gui/filedialog.h | 5 +++- Telegram/SourceFiles/gui/flatbutton.cpp | 5 +++- Telegram/SourceFiles/gui/flatbutton.h | 5 +++- Telegram/SourceFiles/gui/flatcheckbox.cpp | 5 +++- Telegram/SourceFiles/gui/flatcheckbox.h | 5 +++- Telegram/SourceFiles/gui/flatinput.cpp | 5 +++- Telegram/SourceFiles/gui/flatinput.h | 5 +++- Telegram/SourceFiles/gui/flatlabel.cpp | 5 +++- Telegram/SourceFiles/gui/flatlabel.h | 5 +++- Telegram/SourceFiles/gui/flattextarea.cpp | 5 +++- Telegram/SourceFiles/gui/flattextarea.h | 5 +++- Telegram/SourceFiles/gui/images.cpp | 5 +++- Telegram/SourceFiles/gui/images.h | 5 +++- Telegram/SourceFiles/gui/phoneinput.cpp | 5 +++- Telegram/SourceFiles/gui/phoneinput.h | 5 +++- Telegram/SourceFiles/gui/scrollarea.cpp | 5 +++- Telegram/SourceFiles/gui/scrollarea.h | 5 +++- Telegram/SourceFiles/gui/style_core.cpp | 5 +++- Telegram/SourceFiles/gui/style_core.h | 5 +++- Telegram/SourceFiles/gui/switcher.cpp | 5 +++- Telegram/SourceFiles/gui/switcher.h | 5 +++- Telegram/SourceFiles/gui/text.cpp | 5 +++- Telegram/SourceFiles/gui/text.h | 5 +++- Telegram/SourceFiles/gui/twidget.cpp | 5 +++- Telegram/SourceFiles/gui/twidget.h | 5 +++- Telegram/SourceFiles/history.cpp | 5 +++- Telegram/SourceFiles/history.h | 5 +++- Telegram/SourceFiles/historywidget.cpp | 5 +++- Telegram/SourceFiles/historywidget.h | 5 +++- Telegram/SourceFiles/intro/intro.cpp | 5 +++- Telegram/SourceFiles/intro/intro.h | 5 +++- Telegram/SourceFiles/intro/introcode.cpp | 5 +++- Telegram/SourceFiles/intro/introcode.h | 5 +++- Telegram/SourceFiles/intro/introphone.cpp | 5 +++- Telegram/SourceFiles/intro/introphone.h | 5 +++- Telegram/SourceFiles/intro/intropwdcheck.cpp | 5 +++- Telegram/SourceFiles/intro/intropwdcheck.h | 5 +++- Telegram/SourceFiles/intro/introsignup.cpp | 5 +++- Telegram/SourceFiles/intro/introsignup.h | 5 +++- Telegram/SourceFiles/intro/introsteps.cpp | 5 +++- Telegram/SourceFiles/intro/introsteps.h | 5 +++- Telegram/SourceFiles/lang.cpp | 5 +++- Telegram/SourceFiles/lang.h | 5 +++- Telegram/SourceFiles/langloaderplain.cpp | 5 +++- Telegram/SourceFiles/langloaderplain.h | 5 +++- Telegram/SourceFiles/langs/lang_de.strings | 5 +++- Telegram/SourceFiles/langs/lang_es.strings | 5 +++- Telegram/SourceFiles/langs/lang_it.strings | 5 +++- Telegram/SourceFiles/langs/lang_ko.strings | 5 +++- Telegram/SourceFiles/langs/lang_nl.strings | 5 +++- Telegram/SourceFiles/langs/lang_pt_BR.strings | 5 +++- Telegram/SourceFiles/layerwidget.cpp | 5 +++- Telegram/SourceFiles/layerwidget.h | 5 +++- Telegram/SourceFiles/localimageloader.cpp | 5 +++- Telegram/SourceFiles/localimageloader.h | 5 +++- Telegram/SourceFiles/localstorage.cpp | 5 +++- Telegram/SourceFiles/localstorage.h | 5 +++- Telegram/SourceFiles/logs.cpp | 5 +++- Telegram/SourceFiles/logs.h | 5 +++- Telegram/SourceFiles/main.cpp | 5 +++- Telegram/SourceFiles/mainwidget.cpp | 5 +++- Telegram/SourceFiles/mainwidget.h | 5 +++- Telegram/SourceFiles/mediaview.cpp | 5 +++- Telegram/SourceFiles/mediaview.h | 5 +++- Telegram/SourceFiles/mtproto/generate.py | 6 +++++ Telegram/SourceFiles/mtproto/mtp.cpp | 5 +++- Telegram/SourceFiles/mtproto/mtp.h | 5 +++- Telegram/SourceFiles/mtproto/mtpAuthKey.h | 5 +++- .../SourceFiles/mtproto/mtpConnection.cpp | 5 +++- Telegram/SourceFiles/mtproto/mtpConnection.h | 5 +++- Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp | 5 +++- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 5 +++- Telegram/SourceFiles/mtproto/mtpDC.cpp | 5 +++- Telegram/SourceFiles/mtproto/mtpDC.h | 5 +++- .../SourceFiles/mtproto/mtpFileLoader.cpp | 5 +++- Telegram/SourceFiles/mtproto/mtpFileLoader.h | 5 +++- Telegram/SourceFiles/mtproto/mtpPublicRSA.h | 5 +++- Telegram/SourceFiles/mtproto/mtpRPC.cpp | 5 +++- Telegram/SourceFiles/mtproto/mtpRPC.h | 5 +++- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 2 +- Telegram/SourceFiles/mtproto/mtpScheme.h | 5 +++- Telegram/SourceFiles/mtproto/mtpSession.cpp | 5 +++- Telegram/SourceFiles/mtproto/mtpSession.h | 5 +++- Telegram/SourceFiles/mtproto/mtpSessionImpl.h | 5 +++- Telegram/SourceFiles/numbers.h | 5 +++- Telegram/SourceFiles/overviewwidget.cpp | 5 +++- Telegram/SourceFiles/overviewwidget.h | 5 +++- Telegram/SourceFiles/passcodewidget.cpp | 5 +++- Telegram/SourceFiles/passcodewidget.h | 5 +++- Telegram/SourceFiles/playerwidget.cpp | 5 +++- Telegram/SourceFiles/playerwidget.h | 5 +++- Telegram/SourceFiles/profilewidget.cpp | 5 +++- Telegram/SourceFiles/profilewidget.h | 5 +++- Telegram/SourceFiles/pspecific.h | 5 +++- Telegram/SourceFiles/pspecific_linux.cpp | 2 +- Telegram/SourceFiles/pspecific_linux.h | 2 +- Telegram/SourceFiles/pspecific_mac.cpp | 2 +- Telegram/SourceFiles/pspecific_mac.h | 2 +- Telegram/SourceFiles/pspecific_mac_p.h | 2 +- Telegram/SourceFiles/pspecific_mac_p.mm | 2 +- Telegram/SourceFiles/pspecific_wnd.cpp | 5 +++- Telegram/SourceFiles/pspecific_wnd.h | 5 +++- Telegram/SourceFiles/settings.cpp | 5 +++- Telegram/SourceFiles/settings.h | 5 +++- Telegram/SourceFiles/settingswidget.cpp | 5 +++- Telegram/SourceFiles/settingswidget.h | 5 +++- Telegram/SourceFiles/stdafx.cpp | 5 +++- Telegram/SourceFiles/stdafx.h | 5 +++- Telegram/SourceFiles/structs.cpp | 5 +++- Telegram/SourceFiles/structs.h | 5 +++- Telegram/SourceFiles/style.h | 5 +++- Telegram/SourceFiles/sysbuttons.cpp | 5 +++- Telegram/SourceFiles/sysbuttons.h | 5 +++- Telegram/SourceFiles/title.cpp | 5 +++- Telegram/SourceFiles/title.h | 5 +++- Telegram/SourceFiles/types.cpp | 5 +++- Telegram/SourceFiles/types.h | 5 +++- Telegram/SourceFiles/window.cpp | 5 +++- Telegram/SourceFiles/window.h | 5 +++- 205 files changed, 817 insertions(+), 211 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 00030fa49d..308aa32269 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ "lng_language_name" = "English"; "lng_switch_to_this" = "Switch to English"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 427f1fffc8..b7f9ccbecc 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ defaultFontFamily: 'Open Sans'; semibold: 'Open Sans Semibold'; diff --git a/Telegram/Resources/style_classes.txt b/Telegram/Resources/style_classes.txt index ca8281e74d..715c5a7d8a 100644 --- a/Telegram/Resources/style_classes.txt +++ b/Telegram/Resources/style_classes.txt @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ textStyle { lnkFlags: font; diff --git a/Telegram/SourceFiles/_other/genemoji.cpp b/Telegram/SourceFiles/_other/genemoji.cpp index 6a61c2e4f8..a258bd5301 100644 --- a/Telegram/SourceFiles/_other/genemoji.cpp +++ b/Telegram/SourceFiles/_other/genemoji.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "genemoji.h" @@ -1533,8 +1536,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ +In addition, as a special exception, the copyright holders give permission\n\ +to link the code of portions of this program with the OpenSSL library.\n\ +\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ -Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org\n\ */\n"; tcpp << "#include \"stdafx.h\"\n#include \"gui/emoji_config.h\"\n\n"; diff --git a/Telegram/SourceFiles/_other/genemoji.h b/Telegram/SourceFiles/_other/genemoji.h index 91420feee3..2198d66d61 100644 --- a/Telegram/SourceFiles/_other/genemoji.h +++ b/Telegram/SourceFiles/_other/genemoji.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include #include diff --git a/Telegram/SourceFiles/_other/genlang.cpp b/Telegram/SourceFiles/_other/genlang.cpp index bc69f7e962..6f37418056 100644 --- a/Telegram/SourceFiles/_other/genlang.cpp +++ b/Telegram/SourceFiles/_other/genlang.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "genlang.h" @@ -416,8 +419,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ +In addition, as a special exception, the copyright holders give permission\n\ +to link the code of portions of this program with the OpenSSL library.\n\ +\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ -Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org\n\ */\n"; th << "#pragma once\n\n"; @@ -497,8 +503,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ +In addition, as a special exception, the copyright holders give permission\n\ +to link the code of portions of this program with the OpenSSL library.\n\ +\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ -Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org\n\ */\n"; tcpp << "#include \"stdafx.h\"\n#include \"lang.h\"\n\n"; tcpp << "namespace {\n"; diff --git a/Telegram/SourceFiles/_other/genlang.h b/Telegram/SourceFiles/_other/genlang.h index e352d3b35e..7f273bb430 100644 --- a/Telegram/SourceFiles/_other/genlang.h +++ b/Telegram/SourceFiles/_other/genlang.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include #include diff --git a/Telegram/SourceFiles/_other/genstyles.cpp b/Telegram/SourceFiles/_other/genstyles.cpp index 5f705afb5d..edaac42602 100644 --- a/Telegram/SourceFiles/_other/genstyles.cpp +++ b/Telegram/SourceFiles/_other/genstyles.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "genstyles.h" @@ -374,8 +377,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ +In addition, as a special exception, the copyright holders give permission\n\ +to link the code of portions of this program with the OpenSSL library.\n\ +\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ -Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org\n\ */\n"; tout << "#pragma once\n\n#include \"style.h\"\n\nnamespace style {\n"; for (int i = 0, l = byIndex.size(); i < l; ++i) { @@ -1537,8 +1543,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ +In addition, as a special exception, the copyright holders give permission\n\ +to link the code of portions of this program with the OpenSSL library.\n\ +\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ -Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org\n\ */\n"; tout << "#pragma once\n\n#include \"style.h\"\n\nnamespace st {\n"; tcpp << "\ @@ -1560,8 +1569,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ +In addition, as a special exception, the copyright holders give permission\n\ +to link the code of portions of this program with the OpenSSL library.\n\ +\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ -Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org\n\ */\n"; tcpp << "#include \"stdafx.h\"\n#include \"style_auto.h\"\n\nnamespace {\n"; for (int i = 0, l = scalars.size(); i < l; ++i) { @@ -1934,8 +1946,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ +In addition, as a special exception, the copyright holders give permission\n\ +to link the code of portions of this program with the OpenSSL library.\n\ +\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ -Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org\n\ */\n"; tnum << "#include \"stdafx.h\"\n#include \"numbers.h\"\n\n"; tnum << "QVector phoneNumberParse(const QString &number) {\n"; diff --git a/Telegram/SourceFiles/_other/genstyles.h b/Telegram/SourceFiles/_other/genstyles.h index 05c0339706..ac959eb1bd 100644 --- a/Telegram/SourceFiles/_other/genstyles.h +++ b/Telegram/SourceFiles/_other/genstyles.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include #include diff --git a/Telegram/SourceFiles/_other/memain.cpp b/Telegram/SourceFiles/_other/memain.cpp index 02d7d57029..6daade312c 100644 --- a/Telegram/SourceFiles/_other/memain.cpp +++ b/Telegram/SourceFiles/_other/memain.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "memain.h" diff --git a/Telegram/SourceFiles/_other/memain.h b/Telegram/SourceFiles/_other/memain.h index 18416ffd80..c2faceb850 100644 --- a/Telegram/SourceFiles/_other/memain.h +++ b/Telegram/SourceFiles/_other/memain.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include diff --git a/Telegram/SourceFiles/_other/mlmain.cpp b/Telegram/SourceFiles/_other/mlmain.cpp index f37e75a196..490ce50efe 100644 --- a/Telegram/SourceFiles/_other/mlmain.cpp +++ b/Telegram/SourceFiles/_other/mlmain.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "mlmain.h" diff --git a/Telegram/SourceFiles/_other/mlmain.h b/Telegram/SourceFiles/_other/mlmain.h index 150d3330f0..a909bb5025 100644 --- a/Telegram/SourceFiles/_other/mlmain.h +++ b/Telegram/SourceFiles/_other/mlmain.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include diff --git a/Telegram/SourceFiles/_other/msmain.cpp b/Telegram/SourceFiles/_other/msmain.cpp index 8719d58400..e9bbff0f9c 100644 --- a/Telegram/SourceFiles/_other/msmain.cpp +++ b/Telegram/SourceFiles/_other/msmain.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "msmain.h" #include diff --git a/Telegram/SourceFiles/_other/msmain.h b/Telegram/SourceFiles/_other/msmain.h index ecc391757d..f0e13771a2 100644 --- a/Telegram/SourceFiles/_other/msmain.h +++ b/Telegram/SourceFiles/_other/msmain.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include diff --git a/Telegram/SourceFiles/_other/packer.cpp b/Telegram/SourceFiles/_other/packer.cpp index bd1a7df10c..a8839df97b 100644 --- a/Telegram/SourceFiles/_other/packer.cpp +++ b/Telegram/SourceFiles/_other/packer.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "packer.h" diff --git a/Telegram/SourceFiles/_other/packer.h b/Telegram/SourceFiles/_other/packer.h index 071c6f9847..b82ccd71c2 100644 --- a/Telegram/SourceFiles/_other/packer.h +++ b/Telegram/SourceFiles/_other/packer.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/_other/updater.cpp b/Telegram/SourceFiles/_other/updater.cpp index 69d6438647..d78f215bf1 100644 --- a/Telegram/SourceFiles/_other/updater.cpp +++ b/Telegram/SourceFiles/_other/updater.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "updater.h" diff --git a/Telegram/SourceFiles/_other/updater.h b/Telegram/SourceFiles/_other/updater.h index f3b443234e..6afd341a33 100644 --- a/Telegram/SourceFiles/_other/updater.h +++ b/Telegram/SourceFiles/_other/updater.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/_other/updater_linux.cpp b/Telegram/SourceFiles/_other/updater_linux.cpp index c616c727df..35d67072c9 100644 --- a/Telegram/SourceFiles/_other/updater_linux.cpp +++ b/Telegram/SourceFiles/_other/updater_linux.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include #include diff --git a/Telegram/SourceFiles/_other/updater_osx.m b/Telegram/SourceFiles/_other/updater_osx.m index b27329095b..4c3e7c4fbb 100644 --- a/Telegram/SourceFiles/_other/updater_osx.m +++ b/Telegram/SourceFiles/_other/updater_osx.m @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #import diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 905639570d..ad156f5e75 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index 3295df9ce0..03b5d98a79 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 52b90ac81b..d87e883425 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index f01cbf1c45..9fdcfaa6c0 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 7a8d81f7fe..8e410f1ff3 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "application.h" diff --git a/Telegram/SourceFiles/application.h b/Telegram/SourceFiles/application.h index b4e1f0effe..09fb85c223 100644 --- a/Telegram/SourceFiles/application.h +++ b/Telegram/SourceFiles/application.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 4b7b10bdcd..a512c4ac98 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "audio.h" diff --git a/Telegram/SourceFiles/audio.h b/Telegram/SourceFiles/audio.h index 323613c723..7a4da6e8f1 100644 --- a/Telegram/SourceFiles/audio.h +++ b/Telegram/SourceFiles/audio.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/autoupdater.cpp b/Telegram/SourceFiles/autoupdater.cpp index a84b3ca54f..3f4910e0c0 100644 --- a/Telegram/SourceFiles/autoupdater.cpp +++ b/Telegram/SourceFiles/autoupdater.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/autoupdater.h b/Telegram/SourceFiles/autoupdater.h index f8580c6b33..f8f7f87174 100644 --- a/Telegram/SourceFiles/autoupdater.h +++ b/Telegram/SourceFiles/autoupdater.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 1a7a2b8490..71bc8e3049 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -16,7 +16,7 @@ In addition, as a special exception, the copyright holders give permission to link the code of portions of this program with the OpenSSL library. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/aboutbox.h b/Telegram/SourceFiles/boxes/aboutbox.h index cfc1d3352b..36ab712804 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.h +++ b/Telegram/SourceFiles/boxes/aboutbox.h @@ -16,7 +16,7 @@ In addition, as a special exception, the copyright holders give permission to link the code of portions of this program with the OpenSSL library. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/abstractbox.cpp b/Telegram/SourceFiles/boxes/abstractbox.cpp index e18f9faef2..3aad571fc3 100644 --- a/Telegram/SourceFiles/boxes/abstractbox.cpp +++ b/Telegram/SourceFiles/boxes/abstractbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/abstractbox.h b/Telegram/SourceFiles/boxes/abstractbox.h index 3f03916cc9..6029a65e06 100644 --- a/Telegram/SourceFiles/boxes/abstractbox.h +++ b/Telegram/SourceFiles/boxes/abstractbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 3b5a3636a4..f426106a9f 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/addcontactbox.h b/Telegram/SourceFiles/boxes/addcontactbox.h index b7c20ec58d..29f452a611 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.h +++ b/Telegram/SourceFiles/boxes/addcontactbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/autolockbox.cpp b/Telegram/SourceFiles/boxes/autolockbox.cpp index d73131e906..0f271b6c61 100644 --- a/Telegram/SourceFiles/boxes/autolockbox.cpp +++ b/Telegram/SourceFiles/boxes/autolockbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/autolockbox.h b/Telegram/SourceFiles/boxes/autolockbox.h index bef0d18d1f..12edab8e43 100644 --- a/Telegram/SourceFiles/boxes/autolockbox.h +++ b/Telegram/SourceFiles/boxes/autolockbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/backgroundbox.cpp b/Telegram/SourceFiles/boxes/backgroundbox.cpp index 7341fad737..7c523c157d 100644 --- a/Telegram/SourceFiles/boxes/backgroundbox.cpp +++ b/Telegram/SourceFiles/boxes/backgroundbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/backgroundbox.h b/Telegram/SourceFiles/boxes/backgroundbox.h index c53b8f5301..ea3f1aa616 100644 --- a/Telegram/SourceFiles/boxes/backgroundbox.h +++ b/Telegram/SourceFiles/boxes/backgroundbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 1d97c13d38..bbb158c6bd 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/confirmbox.h b/Telegram/SourceFiles/boxes/confirmbox.h index 1b56babf5c..f2a23bf407 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.h +++ b/Telegram/SourceFiles/boxes/confirmbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index 73690f8f3e..b1b69c7961 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/connectionbox.h b/Telegram/SourceFiles/boxes/connectionbox.h index 0f5168620a..b15060a78c 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.h +++ b/Telegram/SourceFiles/boxes/connectionbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 0e8aacce8c..86b86da3cb 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/contactsbox.h b/Telegram/SourceFiles/boxes/contactsbox.h index c508274401..67a7ce5d99 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.h +++ b/Telegram/SourceFiles/boxes/contactsbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/downloadpathbox.cpp b/Telegram/SourceFiles/boxes/downloadpathbox.cpp index 9191b35355..bbbf26de19 100644 --- a/Telegram/SourceFiles/boxes/downloadpathbox.cpp +++ b/Telegram/SourceFiles/boxes/downloadpathbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/downloadpathbox.h b/Telegram/SourceFiles/boxes/downloadpathbox.h index 7219612efa..cb09f70169 100644 --- a/Telegram/SourceFiles/boxes/downloadpathbox.h +++ b/Telegram/SourceFiles/boxes/downloadpathbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/emojibox.cpp b/Telegram/SourceFiles/boxes/emojibox.cpp index 13d894e91a..50cfa112a2 100644 --- a/Telegram/SourceFiles/boxes/emojibox.cpp +++ b/Telegram/SourceFiles/boxes/emojibox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/emojibox.h b/Telegram/SourceFiles/boxes/emojibox.h index a20a4ac32b..8e613576c3 100644 --- a/Telegram/SourceFiles/boxes/emojibox.h +++ b/Telegram/SourceFiles/boxes/emojibox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/languagebox.cpp b/Telegram/SourceFiles/boxes/languagebox.cpp index 40648c0f4f..238a40aa5c 100644 --- a/Telegram/SourceFiles/boxes/languagebox.cpp +++ b/Telegram/SourceFiles/boxes/languagebox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/languagebox.h b/Telegram/SourceFiles/boxes/languagebox.h index c5cb8e5da2..aeb08bb456 100644 --- a/Telegram/SourceFiles/boxes/languagebox.h +++ b/Telegram/SourceFiles/boxes/languagebox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/passcodebox.cpp b/Telegram/SourceFiles/boxes/passcodebox.cpp index 0d8e920362..b4d02dcdea 100644 --- a/Telegram/SourceFiles/boxes/passcodebox.cpp +++ b/Telegram/SourceFiles/boxes/passcodebox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/passcodebox.h b/Telegram/SourceFiles/boxes/passcodebox.h index 516728adfd..246d99c9a7 100644 --- a/Telegram/SourceFiles/boxes/passcodebox.h +++ b/Telegram/SourceFiles/boxes/passcodebox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/photocropbox.cpp b/Telegram/SourceFiles/boxes/photocropbox.cpp index 804bc5a641..c47da34c7c 100644 --- a/Telegram/SourceFiles/boxes/photocropbox.cpp +++ b/Telegram/SourceFiles/boxes/photocropbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/boxes/photocropbox.h b/Telegram/SourceFiles/boxes/photocropbox.h index ce0c0f45de..7fdb74fbf3 100644 --- a/Telegram/SourceFiles/boxes/photocropbox.h +++ b/Telegram/SourceFiles/boxes/photocropbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index 4389add89c..e7e5af9be3 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/boxes/photosendbox.h b/Telegram/SourceFiles/boxes/photosendbox.h index be6d67df84..935faefe90 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.h +++ b/Telegram/SourceFiles/boxes/photosendbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/sessionsbox.cpp b/Telegram/SourceFiles/boxes/sessionsbox.cpp index 2a1844d5dd..8968575012 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.cpp +++ b/Telegram/SourceFiles/boxes/sessionsbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/sessionsbox.h b/Telegram/SourceFiles/boxes/sessionsbox.h index d2859bbfae..e49ec799f4 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.h +++ b/Telegram/SourceFiles/boxes/sessionsbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 5a0350ff73..f893d801f4 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/stickersetbox.h b/Telegram/SourceFiles/boxes/stickersetbox.h index 4adcf4550a..65171e09d3 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.h +++ b/Telegram/SourceFiles/boxes/stickersetbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/boxes/usernamebox.cpp b/Telegram/SourceFiles/boxes/usernamebox.cpp index 2ecded4769..17f8e76f48 100644 --- a/Telegram/SourceFiles/boxes/usernamebox.cpp +++ b/Telegram/SourceFiles/boxes/usernamebox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/boxes/usernamebox.h b/Telegram/SourceFiles/boxes/usernamebox.h index 481ca17d84..1f7f7e28db 100644 --- a/Telegram/SourceFiles/boxes/usernamebox.h +++ b/Telegram/SourceFiles/boxes/usernamebox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 6cff306119..894e4ec7e9 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/countries.h b/Telegram/SourceFiles/countries.h index 2df097ee18..6255464ef3 100644 --- a/Telegram/SourceFiles/countries.h +++ b/Telegram/SourceFiles/countries.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index df2d4d79ef..05c48d2ad2 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 321f3a898f..20d882c25b 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 3b71add492..f023a8d5c3 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index 1f7de652a5..aa20f40b11 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/fileuploader.cpp b/Telegram/SourceFiles/fileuploader.cpp index 881a3cfbea..7894ff8873 100644 --- a/Telegram/SourceFiles/fileuploader.cpp +++ b/Telegram/SourceFiles/fileuploader.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "fileuploader.h" diff --git a/Telegram/SourceFiles/fileuploader.h b/Telegram/SourceFiles/fileuploader.h index b0fd9ef371..7c698cccf3 100644 --- a/Telegram/SourceFiles/fileuploader.h +++ b/Telegram/SourceFiles/fileuploader.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/animation.cpp b/Telegram/SourceFiles/gui/animation.cpp index 62ba39b0cd..b05b16b0d9 100644 --- a/Telegram/SourceFiles/gui/animation.cpp +++ b/Telegram/SourceFiles/gui/animation.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/gui/animation.h b/Telegram/SourceFiles/gui/animation.h index 1181f05ed5..7ed62ca0da 100644 --- a/Telegram/SourceFiles/gui/animation.h +++ b/Telegram/SourceFiles/gui/animation.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/boxshadow.cpp b/Telegram/SourceFiles/gui/boxshadow.cpp index ee83064800..7752ae93c1 100644 --- a/Telegram/SourceFiles/gui/boxshadow.cpp +++ b/Telegram/SourceFiles/gui/boxshadow.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/gui/boxshadow.h b/Telegram/SourceFiles/gui/boxshadow.h index 8d82c720a5..1ff90ef686 100644 --- a/Telegram/SourceFiles/gui/boxshadow.h +++ b/Telegram/SourceFiles/gui/boxshadow.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/button.cpp b/Telegram/SourceFiles/gui/button.cpp index 6e1653eb2b..53f0e19507 100644 --- a/Telegram/SourceFiles/gui/button.cpp +++ b/Telegram/SourceFiles/gui/button.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "button.h" diff --git a/Telegram/SourceFiles/gui/button.h b/Telegram/SourceFiles/gui/button.h index 232fb4de95..652fea137d 100644 --- a/Telegram/SourceFiles/gui/button.h +++ b/Telegram/SourceFiles/gui/button.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/contextmenu.cpp b/Telegram/SourceFiles/gui/contextmenu.cpp index 07eb5279a9..10b4a6f862 100644 --- a/Telegram/SourceFiles/gui/contextmenu.cpp +++ b/Telegram/SourceFiles/gui/contextmenu.cpp @@ -13,7 +13,7 @@ GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE - Copyright (c) 2014 John Preston, https://desktop.telegram.org + Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/gui/contextmenu.h b/Telegram/SourceFiles/gui/contextmenu.h index a3c25dcfab..0bd427c9c2 100644 --- a/Telegram/SourceFiles/gui/contextmenu.h +++ b/Telegram/SourceFiles/gui/contextmenu.h @@ -13,7 +13,7 @@ GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE - Copyright (c) 2014 John Preston, https://desktop.telegram.org + Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/countryinput.cpp b/Telegram/SourceFiles/gui/countryinput.cpp index a53d410418..fcb06074e3 100644 --- a/Telegram/SourceFiles/gui/countryinput.cpp +++ b/Telegram/SourceFiles/gui/countryinput.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/gui/countryinput.h b/Telegram/SourceFiles/gui/countryinput.h index 2a3a2a46d6..4f356edc0c 100644 --- a/Telegram/SourceFiles/gui/countryinput.h +++ b/Telegram/SourceFiles/gui/countryinput.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/emoji_config.cpp b/Telegram/SourceFiles/gui/emoji_config.cpp index 9c5e843266..f6f79aaf07 100644 --- a/Telegram/SourceFiles/gui/emoji_config.cpp +++ b/Telegram/SourceFiles/gui/emoji_config.cpp @@ -16,8 +16,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "gui/emoji_config.h" diff --git a/Telegram/SourceFiles/gui/emoji_config.h b/Telegram/SourceFiles/gui/emoji_config.h index 9a7a5de944..600a42e2a3 100644 --- a/Telegram/SourceFiles/gui/emoji_config.h +++ b/Telegram/SourceFiles/gui/emoji_config.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/filedialog.cpp b/Telegram/SourceFiles/gui/filedialog.cpp index 8dd7487476..8d8ea291ed 100644 --- a/Telegram/SourceFiles/gui/filedialog.cpp +++ b/Telegram/SourceFiles/gui/filedialog.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "gui/filedialog.h" diff --git a/Telegram/SourceFiles/gui/filedialog.h b/Telegram/SourceFiles/gui/filedialog.h index bf5fd2084e..58791f512c 100644 --- a/Telegram/SourceFiles/gui/filedialog.h +++ b/Telegram/SourceFiles/gui/filedialog.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/flatbutton.cpp b/Telegram/SourceFiles/gui/flatbutton.cpp index cfb0580933..3c495805d1 100644 --- a/Telegram/SourceFiles/gui/flatbutton.cpp +++ b/Telegram/SourceFiles/gui/flatbutton.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "gui/flatbutton.h" diff --git a/Telegram/SourceFiles/gui/flatbutton.h b/Telegram/SourceFiles/gui/flatbutton.h index de0b1b1523..3a90686a5b 100644 --- a/Telegram/SourceFiles/gui/flatbutton.h +++ b/Telegram/SourceFiles/gui/flatbutton.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/flatcheckbox.cpp b/Telegram/SourceFiles/gui/flatcheckbox.cpp index 9ea4601bd5..48df0deae9 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/gui/flatcheckbox.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/gui/flatcheckbox.h b/Telegram/SourceFiles/gui/flatcheckbox.h index c80b8ce35c..840c5d8182 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.h +++ b/Telegram/SourceFiles/gui/flatcheckbox.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index fd0ea5a00d..aaa1889fcc 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/gui/flatinput.h b/Telegram/SourceFiles/gui/flatinput.h index 94438b2302..f9ddf0fe1b 100644 --- a/Telegram/SourceFiles/gui/flatinput.h +++ b/Telegram/SourceFiles/gui/flatinput.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/flatlabel.cpp b/Telegram/SourceFiles/gui/flatlabel.cpp index 1774996a8e..42860323e4 100644 --- a/Telegram/SourceFiles/gui/flatlabel.cpp +++ b/Telegram/SourceFiles/gui/flatlabel.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/gui/flatlabel.h b/Telegram/SourceFiles/gui/flatlabel.h index 280516eff5..28acee067c 100644 --- a/Telegram/SourceFiles/gui/flatlabel.h +++ b/Telegram/SourceFiles/gui/flatlabel.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index de35124094..e6a88a72a2 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/gui/flattextarea.h b/Telegram/SourceFiles/gui/flattextarea.h index 9cbdd2c712..02d3cb139e 100644 --- a/Telegram/SourceFiles/gui/flattextarea.h +++ b/Telegram/SourceFiles/gui/flattextarea.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/images.cpp b/Telegram/SourceFiles/gui/images.cpp index a03cd513cd..c155e512fe 100644 --- a/Telegram/SourceFiles/gui/images.cpp +++ b/Telegram/SourceFiles/gui/images.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "gui/images.h" diff --git a/Telegram/SourceFiles/gui/images.h b/Telegram/SourceFiles/gui/images.h index a77ae6ee89..407821b954 100644 --- a/Telegram/SourceFiles/gui/images.h +++ b/Telegram/SourceFiles/gui/images.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/phoneinput.cpp b/Telegram/SourceFiles/gui/phoneinput.cpp index 1b92f01c1a..facb894609 100644 --- a/Telegram/SourceFiles/gui/phoneinput.cpp +++ b/Telegram/SourceFiles/gui/phoneinput.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/gui/phoneinput.h b/Telegram/SourceFiles/gui/phoneinput.h index 55adba6eac..f89bd91c35 100644 --- a/Telegram/SourceFiles/gui/phoneinput.h +++ b/Telegram/SourceFiles/gui/phoneinput.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/scrollarea.cpp b/Telegram/SourceFiles/gui/scrollarea.cpp index 048e23035c..8523c0491d 100644 --- a/Telegram/SourceFiles/gui/scrollarea.cpp +++ b/Telegram/SourceFiles/gui/scrollarea.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/gui/scrollarea.h b/Telegram/SourceFiles/gui/scrollarea.h index 9d1999b27a..4029ffc25c 100644 --- a/Telegram/SourceFiles/gui/scrollarea.h +++ b/Telegram/SourceFiles/gui/scrollarea.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/style_core.cpp b/Telegram/SourceFiles/gui/style_core.cpp index 354314c862..95e0f3441f 100644 --- a/Telegram/SourceFiles/gui/style_core.cpp +++ b/Telegram/SourceFiles/gui/style_core.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/gui/style_core.h b/Telegram/SourceFiles/gui/style_core.h index 7256cc6c89..c64a8f99c2 100644 --- a/Telegram/SourceFiles/gui/style_core.h +++ b/Telegram/SourceFiles/gui/style_core.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/switcher.cpp b/Telegram/SourceFiles/gui/switcher.cpp index 410e82152a..e0e9173c3e 100644 --- a/Telegram/SourceFiles/gui/switcher.cpp +++ b/Telegram/SourceFiles/gui/switcher.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "switcher.h" diff --git a/Telegram/SourceFiles/gui/switcher.h b/Telegram/SourceFiles/gui/switcher.h index 046b3d295c..5b633514ab 100644 --- a/Telegram/SourceFiles/gui/switcher.h +++ b/Telegram/SourceFiles/gui/switcher.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index f428fb6b6f..7ef4cf0370 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "text.h" diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 77342dba6d..27e964b5ae 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/gui/twidget.cpp b/Telegram/SourceFiles/gui/twidget.cpp index 8583ccba60..5c69e7d1ae 100644 --- a/Telegram/SourceFiles/gui/twidget.cpp +++ b/Telegram/SourceFiles/gui/twidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/gui/twidget.h b/Telegram/SourceFiles/gui/twidget.h index 15b1890feb..11ff79b6c6 100644 --- a/Telegram/SourceFiles/gui/twidget.h +++ b/Telegram/SourceFiles/gui/twidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 2bda94d12a..73ce23ec28 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index df916ccb11..811d88171e 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 98ce73bd8d..3d07462cf8 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 4d8251f3ed..d52f5cb468 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/intro/intro.cpp b/Telegram/SourceFiles/intro/intro.cpp index 245349d0bd..4b2472ca07 100644 --- a/Telegram/SourceFiles/intro/intro.cpp +++ b/Telegram/SourceFiles/intro/intro.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/intro/intro.h b/Telegram/SourceFiles/intro/intro.h index af7f11d0f5..924e510f92 100644 --- a/Telegram/SourceFiles/intro/intro.h +++ b/Telegram/SourceFiles/intro/intro.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/intro/introcode.cpp b/Telegram/SourceFiles/intro/introcode.cpp index 9b8848b887..caabe3768e 100644 --- a/Telegram/SourceFiles/intro/introcode.cpp +++ b/Telegram/SourceFiles/intro/introcode.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/intro/introcode.h b/Telegram/SourceFiles/intro/introcode.h index b171d0574b..d9cf7b18fd 100644 --- a/Telegram/SourceFiles/intro/introcode.h +++ b/Telegram/SourceFiles/intro/introcode.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index 9c11960679..803a06a9f2 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/intro/introphone.h b/Telegram/SourceFiles/intro/introphone.h index 2eaee4580b..e100c35477 100644 --- a/Telegram/SourceFiles/intro/introphone.h +++ b/Telegram/SourceFiles/intro/introphone.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/intro/intropwdcheck.cpp b/Telegram/SourceFiles/intro/intropwdcheck.cpp index 94ebb890c5..ee75a96d13 100644 --- a/Telegram/SourceFiles/intro/intropwdcheck.cpp +++ b/Telegram/SourceFiles/intro/intropwdcheck.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/intro/intropwdcheck.h b/Telegram/SourceFiles/intro/intropwdcheck.h index 175d94957d..7925c31482 100644 --- a/Telegram/SourceFiles/intro/intropwdcheck.h +++ b/Telegram/SourceFiles/intro/intropwdcheck.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/intro/introsignup.cpp b/Telegram/SourceFiles/intro/introsignup.cpp index ee24a75136..538b70107a 100644 --- a/Telegram/SourceFiles/intro/introsignup.cpp +++ b/Telegram/SourceFiles/intro/introsignup.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/intro/introsignup.h b/Telegram/SourceFiles/intro/introsignup.h index 9d68fa10d8..c3ec33e543 100644 --- a/Telegram/SourceFiles/intro/introsignup.h +++ b/Telegram/SourceFiles/intro/introsignup.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/intro/introsteps.cpp b/Telegram/SourceFiles/intro/introsteps.cpp index ce7a7f61d9..69ec1d1cc7 100644 --- a/Telegram/SourceFiles/intro/introsteps.cpp +++ b/Telegram/SourceFiles/intro/introsteps.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/intro/introsteps.h b/Telegram/SourceFiles/intro/introsteps.h index 0ec8706ba8..dc8dc3ed3c 100644 --- a/Telegram/SourceFiles/intro/introsteps.h +++ b/Telegram/SourceFiles/intro/introsteps.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/lang.cpp b/Telegram/SourceFiles/lang.cpp index 0857788d75..db2cb4dc7c 100644 --- a/Telegram/SourceFiles/lang.cpp +++ b/Telegram/SourceFiles/lang.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/lang.h b/Telegram/SourceFiles/lang.h index 9091f28068..508fcdb23c 100644 --- a/Telegram/SourceFiles/lang.h +++ b/Telegram/SourceFiles/lang.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/langloaderplain.cpp b/Telegram/SourceFiles/langloaderplain.cpp index 94843061c0..3760077b69 100644 --- a/Telegram/SourceFiles/langloaderplain.cpp +++ b/Telegram/SourceFiles/langloaderplain.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "langloaderplain.h" diff --git a/Telegram/SourceFiles/langloaderplain.h b/Telegram/SourceFiles/langloaderplain.h index 8b03afb1c6..ad25438c5c 100644 --- a/Telegram/SourceFiles/langloaderplain.h +++ b/Telegram/SourceFiles/langloaderplain.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index 5d122a2f02..0a44d54745 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ "lng_language_name" = "Deutsch"; "lng_switch_to_this" = "Auf Deutsch zurücksetzen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index 7857ad42e7..58d0e67679 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ "lng_language_name" = "Español"; "lng_switch_to_this" = "Cambiar al idioma español"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 64df4353d2..2fab7dbe00 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ "lng_language_name" = "Italiano"; "lng_switch_to_this" = "Passa all'italiano"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 9271353621..a079f1e212 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ "lng_language_name" = "한국어"; "lng_switch_to_this" = "한국어로 변경"; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index dca1305e35..4ca9db6407 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ "lng_language_name" = "Nederlands"; "lng_switch_to_this" = "Overschakelen naar Nederlands"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 5780d74e0d..1a6d27d6cb 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ "lng_language_name" = "Português (Brasil)"; "lng_switch_to_this" = "Trocar para Português (Brasil)"; diff --git a/Telegram/SourceFiles/layerwidget.cpp b/Telegram/SourceFiles/layerwidget.cpp index 286ede18a0..abddad43dc 100644 --- a/Telegram/SourceFiles/layerwidget.cpp +++ b/Telegram/SourceFiles/layerwidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/layerwidget.h b/Telegram/SourceFiles/layerwidget.h index 74a3a51dc6..dc25d1d6cb 100644 --- a/Telegram/SourceFiles/layerwidget.h +++ b/Telegram/SourceFiles/layerwidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index 2b3ccc62a2..042786e8b3 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "localimageloader.h" diff --git a/Telegram/SourceFiles/localimageloader.h b/Telegram/SourceFiles/localimageloader.h index e77d4c4de7..d741274ec4 100644 --- a/Telegram/SourceFiles/localimageloader.h +++ b/Telegram/SourceFiles/localimageloader.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 8d528ea484..232c633919 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "localstorage.h" diff --git a/Telegram/SourceFiles/localstorage.h b/Telegram/SourceFiles/localstorage.h index b6789065a3..c653bf85f3 100644 --- a/Telegram/SourceFiles/localstorage.h +++ b/Telegram/SourceFiles/localstorage.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index c723b2d682..7da4da0322 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include diff --git a/Telegram/SourceFiles/logs.h b/Telegram/SourceFiles/logs.h index 83c6606446..56595b7a6d 100644 --- a/Telegram/SourceFiles/logs.h +++ b/Telegram/SourceFiles/logs.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index 7ac4e739fc..e45f1e109f 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "application.h" diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 676324548a..ee8d9b1d89 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 31c44242de..d43bcaaea1 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 4b23af4a58..3441b1eb8a 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/mediaview.h b/Telegram/SourceFiles/mediaview.h index 8bdfe54deb..eed80e15b5 100644 --- a/Telegram/SourceFiles/mediaview.h +++ b/Telegram/SourceFiles/mediaview.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index 66909baa10..8997a4812f 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -12,6 +12,9 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org ''' @@ -54,6 +57,9 @@ out.write('but WITHOUT ANY WARRANTY; without even the implied warranty of\n'); out.write('MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n'); out.write('GNU General Public License for more details.\n'); out.write('\n'); +out.write('In addition, as a special exception, the copyright holders give permission\n'); +out.write('to link the code of portions of this program with the OpenSSL library.\n'); +out.write('\n'); out.write('Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n'); out.write('Copyright (c) 2014 John Preston, https://desktop.telegram.org\n'); out.write('*/\n'); diff --git a/Telegram/SourceFiles/mtproto/mtp.cpp b/Telegram/SourceFiles/mtproto/mtp.cpp index ac558f308f..b13f61f0e9 100644 --- a/Telegram/SourceFiles/mtproto/mtp.cpp +++ b/Telegram/SourceFiles/mtproto/mtp.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "mtp.h" diff --git a/Telegram/SourceFiles/mtproto/mtp.h b/Telegram/SourceFiles/mtproto/mtp.h index bb93446573..3cde3f3931 100644 --- a/Telegram/SourceFiles/mtproto/mtp.h +++ b/Telegram/SourceFiles/mtproto/mtp.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpAuthKey.h b/Telegram/SourceFiles/mtproto/mtpAuthKey.h index e9431935f4..372f1b3e97 100644 --- a/Telegram/SourceFiles/mtproto/mtpAuthKey.h +++ b/Telegram/SourceFiles/mtproto/mtpAuthKey.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 2e4a771144..939c2f8e2d 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index b0630e2f3a..6ccbe46da7 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp b/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp index 90e535c5c4..fec958aad2 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "mtpCoreTypes.h" diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 90ea87a463..459c989220 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpDC.cpp b/Telegram/SourceFiles/mtproto/mtpDC.cpp index d3d77695ac..326cc20fc5 100644 --- a/Telegram/SourceFiles/mtproto/mtpDC.cpp +++ b/Telegram/SourceFiles/mtproto/mtpDC.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "mtpDC.h" diff --git a/Telegram/SourceFiles/mtproto/mtpDC.h b/Telegram/SourceFiles/mtproto/mtpDC.h index 403dc8615a..1ed240ff8c 100644 --- a/Telegram/SourceFiles/mtproto/mtpDC.h +++ b/Telegram/SourceFiles/mtproto/mtpDC.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp index 22929f3fee..4d2a5aafd1 100644 --- a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp +++ b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "mainwidget.h" diff --git a/Telegram/SourceFiles/mtproto/mtpFileLoader.h b/Telegram/SourceFiles/mtproto/mtpFileLoader.h index d0ec0aa0bf..4cbed0a84e 100644 --- a/Telegram/SourceFiles/mtproto/mtpFileLoader.h +++ b/Telegram/SourceFiles/mtproto/mtpFileLoader.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpPublicRSA.h b/Telegram/SourceFiles/mtproto/mtpPublicRSA.h index 0383c87077..fd8b39f113 100644 --- a/Telegram/SourceFiles/mtproto/mtpPublicRSA.h +++ b/Telegram/SourceFiles/mtproto/mtpPublicRSA.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpRPC.cpp b/Telegram/SourceFiles/mtproto/mtpRPC.cpp index c92d21c22f..2f8daa3b41 100644 --- a/Telegram/SourceFiles/mtproto/mtpRPC.cpp +++ b/Telegram/SourceFiles/mtproto/mtpRPC.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "mtproto/mtpRPC.h" diff --git a/Telegram/SourceFiles/mtproto/mtpRPC.h b/Telegram/SourceFiles/mtproto/mtpRPC.h index e214ff51a0..1093b04b39 100644 --- a/Telegram/SourceFiles/mtproto/mtpRPC.h +++ b/Telegram/SourceFiles/mtproto/mtpRPC.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index 00f44522e9..457d33d35a 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -17,7 +17,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "mtpScheme.h" diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index b6a10aaf34..f4c2cea4b5 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -16,8 +16,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpSession.cpp b/Telegram/SourceFiles/mtproto/mtpSession.cpp index 89c3fa6237..d6dd6c1119 100644 --- a/Telegram/SourceFiles/mtproto/mtpSession.cpp +++ b/Telegram/SourceFiles/mtproto/mtpSession.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include diff --git a/Telegram/SourceFiles/mtproto/mtpSession.h b/Telegram/SourceFiles/mtproto/mtpSession.h index 3743f247df..95085fdceb 100644 --- a/Telegram/SourceFiles/mtproto/mtpSession.h +++ b/Telegram/SourceFiles/mtproto/mtpSession.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/mtproto/mtpSessionImpl.h b/Telegram/SourceFiles/mtproto/mtpSessionImpl.h index 033cab32d4..b2772c43c8 100644 --- a/Telegram/SourceFiles/mtproto/mtpSessionImpl.h +++ b/Telegram/SourceFiles/mtproto/mtpSessionImpl.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/numbers.h b/Telegram/SourceFiles/numbers.h index 02424f9e7c..c9b734ca56 100644 --- a/Telegram/SourceFiles/numbers.h +++ b/Telegram/SourceFiles/numbers.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index b90f41bd49..8838d6a830 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 5047a65e2b..02baada875 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/passcodewidget.cpp b/Telegram/SourceFiles/passcodewidget.cpp index 0c4bbd6294..00c1509cdf 100644 --- a/Telegram/SourceFiles/passcodewidget.cpp +++ b/Telegram/SourceFiles/passcodewidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/passcodewidget.h b/Telegram/SourceFiles/passcodewidget.h index 3dd795c2da..1b195939d2 100644 --- a/Telegram/SourceFiles/passcodewidget.h +++ b/Telegram/SourceFiles/passcodewidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index cbe30ec229..472c1759c3 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/playerwidget.h b/Telegram/SourceFiles/playerwidget.h index 9c07f01612..5fee6f57af 100644 --- a/Telegram/SourceFiles/playerwidget.h +++ b/Telegram/SourceFiles/playerwidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 513b46885c..9b3797f13c 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 667604e3db..691aaf18a2 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/pspecific.h b/Telegram/SourceFiles/pspecific.h index d23762fd47..47927ca8e5 100644 --- a/Telegram/SourceFiles/pspecific.h +++ b/Telegram/SourceFiles/pspecific.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 68f613bdd6..adec4309ad 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "pspecific.h" diff --git a/Telegram/SourceFiles/pspecific_linux.h b/Telegram/SourceFiles/pspecific_linux.h index 52e0711023..35885c475c 100644 --- a/Telegram/SourceFiles/pspecific_linux.h +++ b/Telegram/SourceFiles/pspecific_linux.h @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 1b7a922309..2050cd58c1 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "pspecific.h" diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index a2342610e5..4ba32f4583 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 1ed7626c03..b5ade3c858 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 3fbd37a5cb..623cdd05b4 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "pspecific_mac_p.h" diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index e55996eec6..544ecb171e 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "pspecific.h" diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index 98ee2cc40c..0f323f3a01 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -13,8 +13,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index f8e994e3ca..2bbab026ea 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "pspecific.h" diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 8f7aed552f..66800537c2 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 815528f624..e3a9269920 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 81de3b926f..a651250839 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/stdafx.cpp b/Telegram/SourceFiles/stdafx.cpp index e2d89d33bb..01ddf641e5 100644 --- a/Telegram/SourceFiles/stdafx.cpp +++ b/Telegram/SourceFiles/stdafx.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index e4e137875c..20e2aeeb09 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #define __HUGE #define PSAPI_VERSION 1 // fix WinXP diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 73b482941e..e9b50b557e 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 6cff40ea64..cda4ac21ca 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/style.h b/Telegram/SourceFiles/style.h index 819e0092a8..bcbbb5c08b 100644 --- a/Telegram/SourceFiles/style.h +++ b/Telegram/SourceFiles/style.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/sysbuttons.cpp b/Telegram/SourceFiles/sysbuttons.cpp index 5609f7b547..d84b6cdb7d 100644 --- a/Telegram/SourceFiles/sysbuttons.cpp +++ b/Telegram/SourceFiles/sysbuttons.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/sysbuttons.h b/Telegram/SourceFiles/sysbuttons.h index 49174154d4..4b4a616a93 100644 --- a/Telegram/SourceFiles/sysbuttons.h +++ b/Telegram/SourceFiles/sysbuttons.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index 47e23d5e29..c65425fa1b 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "lang.h" diff --git a/Telegram/SourceFiles/title.h b/Telegram/SourceFiles/title.h index 5a785ce091..1dc420a747 100644 --- a/Telegram/SourceFiles/title.h +++ b/Telegram/SourceFiles/title.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/types.cpp b/Telegram/SourceFiles/types.cpp index 22cef79265..e24c66977c 100644 --- a/Telegram/SourceFiles/types.cpp +++ b/Telegram/SourceFiles/types.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index a7447b9d38..0d9e7e4884 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #pragma once diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index ebec9fe925..e76739576c 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #include "stdafx.h" #include "style.h" diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index 66cb679016..0d91959478 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -12,8 +12,11 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org +Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org */ #ifndef MAINWINDOW_H #define MAINWINDOW_H