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 ddccd8bc2..00030fa49 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 0bb12fa88..427f1fffc 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 c5e24ba34..ca8281e74 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 f66d8d2af..86a0ec74d 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 97fc159a9..f01cbf1c4 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 685131f9e..a9eca9428 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 ef0e69c5e..e18f9faef 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 b50f2a133..3f03916cc 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 c467a6412..758b08458 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 ec6ad7c5c..d73131e90 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 407b09929..1d97c13d3 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 c6f1e7b5e..1b56babf5 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 fca3a99e3..73690f8f3 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 7978ebd01..0e8aacce8 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 45e872bb8..c50827440 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 eaff7eedd..9191b3535 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 45e2b5fae..40648c0f4 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 0dad83ccc..0d8e92036 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 efc167c7f..516728adf 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 c3f15771b..804bc5a64 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 7b4010c95..4389add89 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 2cf7fe6b1..2a1844d5d 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 5c05b7471..5a0350ff7 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 3e7815b39..2ecded476 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 7bfe73c9b..04b16b533 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 5f55958af..321f3a898 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 de572f584..87d6a0034 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 e79ec8e0a..1f7de652a 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 ec85de36e..a53d41041 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 ac36eb12c..cfb058093 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 98779f4d4..de0b1b152 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 9fbecbea9..9ea4601bd 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 8a3a364c9..fd0ea5a00 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 0f0a215e5..de3512409 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 f49a5d26e..1b92f01c1 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 11ad9bf1c..354314c86 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 4421091f7..7256cc6c8 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 55b27fad0..f428fb6b6 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 c021b224c..dbc3cce8b 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 f516c3231..3b65aa854 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 f5b4c583f..4d8251f3e 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 4dc59c8b6..94ebb890c 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 6b87c08f6..ce7a7f61d 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 bf23ac43e..74a3a51dc 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 ff123dfa1..e5db85d19 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 b9a44d4ec..31c44242d 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 087f8c1e2..4b23af4a5 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 2cf1f3b32..66909baa1 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 71f87f590..90ea87a46 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 eaad1d8a7..00f44522e 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 2525ae8d3..b90f41bd4 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 7a7926e9d..5047a65e2 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 273e44454..cbe30ec22 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 5970be2a0..df035b73b 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 0c7a40eb4..1b7a92230 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 e96490a3a..815528f62 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 7bb04408d..7be6904b8 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 039dbb883..5609f7b54 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 b5db91a42..ebec9fe92 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 be20c0b4b..66cb67901 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 86a0ec74d..52b90ac81 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 a9eca9428..1a7a2b849 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 35d3dd210..cfc1d3352 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 758b08458..3b5a3636a 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 04b16b533..df2d4d79e 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 87d6a0034..3b71add49 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 dbc3cce8b..2bda94d12 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 3b65aa854..98ce73bd8 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 ab33cec92..8d528ea48 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 e5db85d19..676324548 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 df035b73b..513b46885 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 7be6904b8..73b482941 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 70566f2d0..77e1f6119 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 152906b8e..c9f43ea9d 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 d01a68def..f5e4a4df4 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 00030fa49..308aa3226 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 427f1fffc..b7f9ccbec 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 ca8281e74..715c5a7d8 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 6a61c2e4f..a258bd530 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 91420feee..2198d66d6 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 bc69f7e96..6f3741805 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 e352d3b35..7f273bb43 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 5f705afb5..edaac4260 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 05c033970..ac959eb1b 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 02d7d5702..6daade312 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 18416ffd8..c2faceb85 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 f37e75a19..490ce50ef 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 150d3330f..a909bb502 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 8719d5840..e9bbff0f9 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 ecc391757..f0e13771a 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 bd1a7df10..a8839df97 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 071c6f984..b82ccd71c 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 69d643864..d78f215bf 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 f3b443234..6afd341a3 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 c616c727d..35d67072c 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 b27329095..4c3e7c4fb 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 905639570..ad156f5e7 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 3295df9ce..03b5d98a7 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 52b90ac81..d87e88342 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 f01cbf1c4..9fdcfaa6c 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 7a8d81f7f..8e410f1ff 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 b4e1f0eff..09fb85c22 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 4b7b10bdc..a512c4ac9 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 323613c72..7a4da6e8f 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 a84b3ca54..3f4910e0c 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 f8580c6b3..f8f7f8717 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 1a7a2b849..71bc8e304 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 cfc1d3352..36ab71280 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 e18f9faef..3aad571fc 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 3f03916cc..6029a65e0 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 3b5a3636a..f426106a9 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 b7c20ec58..29f452a61 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 d73131e90..0f271b6c6 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 bef0d18d1..12edab8e4 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 7341fad73..7c523c157 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 c53b8f530..ea3f1aa61 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 1d97c13d3..bbb158c6b 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 1b56babf5..f2a23bf40 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 73690f8f3..b1b69c796 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 0f5168620..b15060a78 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 0e8aacce8..86b86da3c 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 c50827440..67a7ce5d9 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 9191b3535..bbbf26de1 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 7219612ef..cb09f7016 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 13d894e91..50cfa112a 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 a20a4ac32..8e613576c 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 40648c0f4..238a40aa5 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 c5cb8e5da..aeb08bb45 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 0d8e92036..b4d02dcde 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 516728adf..246d99c9a 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 804bc5a64..c47da34c7 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 ce0c0f45d..7fdb74fbf 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 4389add89..e7e5af9be 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 be6d67df8..935faefe9 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 2a1844d5d..896857501 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 d2859bbfa..e49ec799f 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 5a0350ff7..f893d801f 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 4adcf4550..65171e09d 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 2ecded476..17f8e76f4 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 481ca17d8..1f7f7e28d 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 6cff30611..894e4ec7e 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 2df097ee1..6255464ef 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 df2d4d79e..05c48d2ad 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 321f3a898..20d882c25 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 3b71add49..f023a8d5c 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 1f7de652a..aa20f40b1 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 881a3cfbe..7894ff887 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 b0fd9ef37..7c698cccf 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 62ba39b0c..b05b16b0d 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 1181f05ed..7ed62ca0d 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 ee8306480..7752ae93c 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 8d82c720a..1ff90ef68 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 6e1653eb2..53f0e1950 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 232fb4de9..652fea137 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 07eb5279a..10b4a6f86 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 a3c25dcfa..0bd427c9c 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 a53d41041..fcb06074e 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 2a3a2a46d..4f356edc0 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 9c5e84326..f6f79aaf0 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 9a7a5de94..600a42e2a 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 8dd748747..8d8ea291e 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 bf5fd2084..58791f512 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 cfb058093..3c495805d 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 de0b1b152..3a90686a5 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 9ea4601bd..48df0deae 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 c80b8ce35..840c5d818 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 fd0ea5a00..aaa1889fc 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 94438b230..f9ddf0fe1 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 1774996a8..42860323e 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 280516eff..28acee067 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 de3512409..e6a88a72a 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 9cbdd2c71..02d3cb139 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 a03cd513c..c155e512f 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 a77ae6ee8..407821b95 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 1b92f01c1..facb89460 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 55adba6ea..f89bd91c3 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 048e23035..8523c0491 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 9d1999b27..4029ffc25 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 354314c86..95e0f3441 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 7256cc6c8..c64a8f99c 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 410e82152..e0e9173c3 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 046b3d295..5b633514a 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 f428fb6b6..7ef4cf037 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 77342dba6..27e964b5a 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 8583ccba6..5c69e7d1a 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 15b1890fe..11ff79b6c 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 2bda94d12..73ce23ec2 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 df916ccb1..811d88171 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 98ce73bd8..3d07462cf 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 4d8251f3e..d52f5cb46 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 245349d0b..4b2472ca0 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 af7f11d0f..924e510f9 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 9b8848b88..caabe3768 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 b171d0574..d9cf7b18f 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 9c1196067..803a06a9f 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 2eaee4580..e100c3547 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 94ebb890c..ee75a96d1 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 175d94957..7925c3148 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 ee24a7513..538b70107 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 9d68fa10d..c3ec33e54 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 ce7a7f61d..69ec1d1cc 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 0ec8706ba..dc8dc3ed3 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 0857788d7..db2cb4dc7 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 9091f2806..508fcdb23 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 94843061c..3760077b6 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 8b03afb1c..ad25438c5 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 5d122a2f0..0a44d5474 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 7857ad42e..58d0e6767 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 64df4353d..2fab7dbe0 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 927135362..a079f1e21 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 dca1305e3..4ca9db640 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 5780d74e0..1a6d27d6c 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 286ede18a..abddad43d 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 74a3a51dc..dc25d1d6c 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 2b3ccc62a..042786e8b 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 e77d4c4de..d741274ec 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 8d528ea48..232c63391 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 b6789065a..c653bf85f 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 c723b2d68..7da4da032 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 83c660644..56595b7a6 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 7ac4e739f..e45f1e109 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 676324548..ee8d9b1d8 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 31c44242d..d43bcaaea 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 4b23af4a5..3441b1eb8 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 8bdfe54de..eed80e15b 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 66909baa1..8997a4812 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 ac558f308..b13f61f0e 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 bb9344657..3cde3f393 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 e9431935f..372f1b3e9 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 2e4a77114..939c2f8e2 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 b0630e2f3..6ccbe46da 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 90e535c5c..fec958aad 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 90ea87a46..459c98922 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 d3d77695a..326cc20fc 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 403dc8615..1ed240ff8 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 22929f3fe..4d2a5aafd 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 d0ec0aa0b..4cbed0a84 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 0383c8707..fd8b39f11 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 c92d21c22..2f8daa3b4 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 e214ff51a..1093b04b3 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 00f44522e..457d33d35 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 b6a10aaf3..f4c2cea4b 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 89c3fa623..d6dd6c111 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 3743f247d..95085fdce 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 033cab32d..b2772c43c 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 02424f9e7..c9b734ca5 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 b90f41bd4..8838d6a83 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 5047a65e2..02baada87 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 0c4bbd629..00c1509cd 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 3dd795c2d..1b195939d 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 cbe30ec22..472c1759c 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 9c07f0161..5fee6f57a 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 513b46885..9b3797f13 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 667604e3d..691aaf18a 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 d23762fd4..47927ca8e 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 68f613bdd..adec4309a 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 52e071102..35885c475 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 1b7a92230..2050cd58c 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 a2342610e..4ba32f458 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 1ed7626c0..b5ade3c85 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 3fbd37a5c..623cdd05b 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 e55996eec..544ecb171 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 98ee2cc40..0f323f3a0 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 f8e994e3c..2bbab026e 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 8f7aed552..66800537c 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 815528f62..e3a926992 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 81de3b926..a65125083 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 e2d89d33b..01ddf641e 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 e4e137875..20e2aeeb0 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 73b482941..e9b50b557 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 6cff40ea6..cda4ac21c 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 819e0092a..bcbbb5c08 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 5609f7b54..d84b6cdb7 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 49174154d..4b4a616a9 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 47e23d5e2..c65425fa1 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 5a785ce09..1dc420a74 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 22cef7926..e24c66977 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 a7447b9d3..0d9e7e488 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 ebec9fe92..e76739576 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 66cb67901..0d9195947 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