From 11907318b208538c0634c4e62404422e556b2a13 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 15 Jun 2014 16:31:03 +0400 Subject: [PATCH 01/14] mac retina support improved, windows settings hidden, reply-from-notify done --- Telegram/Resources/lang.txt | 2 + Telegram/Resources/style.txt | 5 +- Telegram/SourceFiles/_other/genstyles.cpp | 37 +++++- Telegram/SourceFiles/app.cpp | 7 +- Telegram/SourceFiles/application.cpp | 15 ++- Telegram/SourceFiles/art/grid.png | Bin 2083 -> 2083 bytes Telegram/SourceFiles/art/grid_125x.png | Bin 2666 -> 2666 bytes Telegram/SourceFiles/art/grid_150x.png | Bin 3224 -> 3224 bytes Telegram/SourceFiles/art/grid_200x.png | Bin 4505 -> 4505 bytes Telegram/SourceFiles/art/segoeuib.ttf | Bin 0 -> 835176 bytes Telegram/SourceFiles/art/sprite_125x.png | Bin 59262 -> 59262 bytes Telegram/SourceFiles/art/sprite_150x.png | Bin 69851 -> 69851 bytes Telegram/SourceFiles/boxes/aboutbox.cpp | 2 +- .../SourceFiles/boxes/addparticipantbox.cpp | 2 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 4 +- Telegram/SourceFiles/boxes/emojibox.cpp | 2 +- Telegram/SourceFiles/boxes/newgroupbox.cpp | 4 +- Telegram/SourceFiles/dropdown.cpp | 2 +- Telegram/SourceFiles/gui/boxshadow.cpp | 2 +- Telegram/SourceFiles/gui/emoji_config.cpp | 4 +- Telegram/SourceFiles/gui/flatcheckbox.cpp | 2 +- Telegram/SourceFiles/gui/flatinput.cpp | 2 +- Telegram/SourceFiles/gui/images.cpp | 10 +- Telegram/SourceFiles/gui/style_core.h | 26 ++++ Telegram/SourceFiles/gui/text.cpp | 2 +- Telegram/SourceFiles/gui/text.h | 1 - Telegram/SourceFiles/history.cpp | 29 +++-- Telegram/SourceFiles/historywidget.cpp | 29 +---- Telegram/SourceFiles/historywidget.h | 5 +- Telegram/SourceFiles/intro/introsignup.cpp | 4 +- Telegram/SourceFiles/mainwidget.cpp | 50 ++++++- Telegram/SourceFiles/mainwidget.h | 11 +- Telegram/SourceFiles/profilewidget.cpp | 4 +- Telegram/SourceFiles/pspecific_mac.cpp | 13 +- Telegram/SourceFiles/pspecific_mac_p.h | 2 + Telegram/SourceFiles/pspecific_mac_p.mm | 11 +- Telegram/SourceFiles/settings.cpp | 1 + Telegram/SourceFiles/settings.h | 1 + Telegram/SourceFiles/settingswidget.cpp | 122 ++++++++++-------- Telegram/SourceFiles/sysbuttons.cpp | 4 +- Telegram/SourceFiles/telegram.qrc | 1 + Telegram/SourceFiles/title.cpp | 33 +++-- Telegram/SourceFiles/window.cpp | 12 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.xcodeproj/project.pbxproj | 21 +-- 45 files changed, 309 insertions(+), 177 deletions(-) create mode 100644 Telegram/SourceFiles/art/segoeuib.ttf diff --git a/Telegram/Resources/lang.txt b/Telegram/Resources/lang.txt index e3a010172..9f6b83a0d 100644 --- a/Telegram/Resources/lang.txt +++ b/Telegram/Resources/lang.txt @@ -161,6 +161,7 @@ lng_settings_view_emojis: "View list"; lng_settings_emoji_list: "List of supported emojis"; lng_settings_send_enter: "Send by Enter"; lng_settings_send_ctrlenter: "Send by Ctrl+Enter"; +lng_settings_send_cmdenter: "Send by Cmd+Enter"; lng_settings_cats_and_dogs: "Allow cats and dogs"; lng_download_path_dont_ask: "Don't ask download path for each file"; @@ -379,3 +380,4 @@ source code is available on [a href=\"https://github.com/telegramdesktop/tdeskto lng_about_done: "Done"; // Keys finished + diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 7df2b7ac3..5da0ec3f3 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -19,8 +19,9 @@ defaultFontFamily: 'Segoe UI'; //defaultFontFamily: 'ThoolikaTraditionalUnicode'; semibold: 'Segoe WP Semibold'; -spriteFile: ':/gui/art/sprite.png' / 2:':/gui/art/sprite_125x.png' / 3:':/gui/art/sprite_150x.png' / 4:':/gui/art/sprite_200x.png'; -emojisFile: ':/gui/art/emoji.png' / 2:':/gui/art/emoji_125x.png' / 3:':/gui/art/emoji_150x.png' / 4:':/gui/art/emoji_200x.png'; +spriteFile: ':/gui/art/sprite.png' / 2:':/gui/art/sprite_125x.png' / 3:':/gui/art/sprite_150x.png' / 4:':/gui/art/sprite_200x.png'; // exceptional value for retina +emojisFile: ':/gui/art/emoji.png' / 2:':/gui/art/emoji_125x.png' / 3:':/gui/art/emoji_150x.png' / 4:':/gui/art/emoji_200x.png'; // exceptional value for retina +emojiImgSize: 16px; // exceptional value for retina emojiSize: 16px; emojiPadding: 1px; diff --git a/Telegram/SourceFiles/_other/genstyles.cpp b/Telegram/SourceFiles/_other/genstyles.cpp index b2dddf68b..9c05054a4 100644 --- a/Telegram/SourceFiles/_other/genstyles.cpp +++ b/Telegram/SourceFiles/_other/genstyles.cpp @@ -60,7 +60,7 @@ string outputTypeNames[] = { "color", "point", "rect", - "rect", + "sprite", "size", "transition", "cursor", @@ -1302,7 +1302,11 @@ string prepareObject(const string &cls, Fields fields, const string &obj, int va } else if (f.value().first != j.value()) { throw Exception(QString("Bad type of field %1 while parsing %2").arg(j.key().c_str()).arg(obj.c_str())); } else { - result += findScalarVariant(f.value().second, variant); + if (variant == -1) { // retina + result += findScalarVariant(f.value().second, (j.value() == scSprite) ? 4 : 0); + } else { + result += findScalarVariant(f.value().second, variant); + } } fields.erase(f); if (++j != e) { @@ -1518,7 +1522,7 @@ GNU General Public License for more details.\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ */\n"; - tcpp << "#include \"stdafx.h\"\n#include \"style_auto.h\"\n\n"; + tcpp << "#include \"stdafx.h\"\n#include \"style_auto.h\"\n\nnamespace {\n"; for (int i = 0, l = scalars.size(); i < l; ++i) { Scalar &sc(scalars[i]); tout << "\textern const style::" << outputTypeNames[sc.second.first].c_str() << " &" << sc.first.c_str() << ";\n"; @@ -1531,7 +1535,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ tout << "\textern const style::" << obj.second.first.c_str() << " &" << obj.first.c_str() << ";\n"; tcpp << "\tstyle::" << obj.second.first.c_str() << " _" << obj.first.c_str() << prepareObject(obj.second.first, obj.second.second, obj.first, variant).c_str() << ";\n"; } - tout << "\n};\n"; + tout << "};\n"; + tcpp << "};\n"; tcpp << "\nnamespace st {\n"; for (int i = 0, l = scalars.size(); i < l; ++i) { @@ -1543,15 +1548,33 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ Object &obj(objects[i]); tcpp << "\tconst style::" << obj.second.first.c_str() << " &" << obj.first.c_str() << "(_" << obj.first.c_str() << ");\n"; } - tcpp << "\n};\n"; + tcpp << "};\n"; tcpp << "\nnamespace style {\n\n"; tcpp << "\tFontFamilies _fontFamilies;\n"; tcpp << "\tFontDatas _fontsMap;\n"; tcpp << "\tColorDatas _colorsMap;\n\n"; tcpp << "\tvoid startManager() {\n"; - - tcpp << "\n\t\tswitch (cScale()) {\n\n"; + + tcpp << "\n\t\tif (cRetina()) {\n"; + tcpp << "\t\t\tcSetRealScale(dbisOne);\n\n"; + for (int i = 0, l = scalars.size(); i < l; ++i) { + Scalar &sc(scalars[i]); + if (sc.second.first == scSprite || sc.first == "spriteFile" || sc.first == "emojisFile" || sc.first == "emojiImgSize") { + string v = findScalarVariant(sc.second.second, 4); + if (v != findScalarVariant(sc.second.second, 0)) { + tcpp << "\t\t\t_" << sc.first.c_str() << " = style::" << outputTypeNames[sc.second.first].c_str() << v.c_str() << ";\n"; + } + } + } + for (int i = 0, l = objects.size(); i < l; ++i) { + Object &obj(objects[i]); + string v = prepareObject(obj.second.first, obj.second.second, obj.first, -1); // retina + if (v != prepareObject(obj.second.first, obj.second.second, obj.first, 0)) { + tcpp << "\t\t\t_" << obj.first.c_str() << " = style::" << obj.second.first.c_str() << v.c_str() << ";\n"; + } + } + tcpp << "\t\t} else switch (cScale()) {\n\n"; for (int i = 1; i < variantsCount; ++i) { variant = variants[i]; const char *varName = variantNames[i]; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 6cb8f499e..2a240a0c9 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -1204,9 +1204,11 @@ namespace App { if (!::sprite) { ::sprite = new QPixmap(st::spriteFile); + if (cRetina()) ::sprite->setDevicePixelRatio(cRetinaFactor()); } if (!::emojis) { ::emojis = new QPixmap(st::emojisFile); + if (cRetina()) ::emojis->setDevicePixelRatio(cRetinaFactor()); } initEmoji(); } @@ -1300,12 +1302,13 @@ namespace App { EmojisMap *map = &(fontHeight == st::taDefFlat.font->height ? mainEmojisMap : otherEmojisMap[fontHeight]); EmojisMap::const_iterator i = map->constFind(emoji->code); if (i == map->cend()) { - QImage img(st::emojiSize + st::emojiPadding * 2, fontHeight, QImage::Format_ARGB32_Premultiplied); + QImage img(st::emojiImgSize + st::emojiPadding * cIntRetinaFactor() * 2, fontHeight * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + if (cRetina()) img.setDevicePixelRatio(cRetinaFactor()); { QPainter p(&img); p.setCompositionMode(QPainter::CompositionMode_Source); p.fillRect(0, 0, img.width(), img.height(), Qt::transparent); - p.drawPixmap(QPoint(st::emojiPadding, (fontHeight - st::emojiSize) / 2), App::emojis(), QRect(emoji->x, emoji->y, st::emojiSize, st::emojiSize)); + p.drawPixmap(QPoint(st::emojiPadding * cIntRetinaFactor(), (fontHeight * cIntRetinaFactor() - st::emojiImgSize) / 2), App::emojis(), QRect(emoji->x, emoji->y, st::emojiImgSize, st::emojiImgSize)); } i = map->insert(emoji->code, QPixmap::fromImage(img)); } diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 60309b673..f902fc4cb 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -82,9 +82,10 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), installEventFilter(new _DebugWaiter(this)); QFontDatabase::addApplicationFont(qsl(":/gui/art/segoe_ui.ttf")); + QFontDatabase::addApplicationFont(qsl(":/gui/art/segoeuib.ttf")); QFontDatabase::addApplicationFont(qsl(":/gui/art/segoe_ui_semibold.ttf")); - QFontDatabase::addApplicationFont(qsl(":/gui/art/segoe_wp_semibold.ttf")); - QFontDatabase::addApplicationFont(qsl(":/gui/art/ThoolikaTrditionalUnicode.ttf")); + QFontDatabase::addApplicationFont(qsl(":/gui/art/segoe_wp_semibold.ttf")); +// QFontDatabase::addApplicationFont(qsl(":/gui/art/ThoolikaTrditionalUnicode.ttf")); float64 dpi = primaryScreen()->logicalDotsPerInch(); if (dpi <= 108) { // 0-96-108 @@ -97,6 +98,12 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), cSetScreenScale(dbisTwo); } + if (devicePixelRatio() > 1) { + cSetRetina(true); + cSetRetinaFactor(devicePixelRatio()); + cSetIntRetinaFactor(int32(cRetinaFactor())); + } + if (!cLangFile().isEmpty()) { LangLoaderPlain loader(cLangFile()); if (!loader.errors().isEmpty()) { @@ -498,10 +505,6 @@ void Application::startApp() { App::writeUserConfig(); cSetNeedConfigResave(false); } - if (devicePixelRatio() > 1) { - cSetRetina(true); - cSetRetinaFactor(devicePixelRatio()); - } window->createWinId(); window->init(); diff --git a/Telegram/SourceFiles/art/grid.png b/Telegram/SourceFiles/art/grid.png index b886b374d75ca679ee40ce681c8c3966190c8542..07ab30f8b62c8553bf0ac266e959aa9b785b3ac7 100644 GIT binary patch delta 22 ecmZ21uvlP%HaE900|U1(Bg3pY5*y9lvI77+iv^Pa delta 22 ecmZ21uvlP%HaFi91_r((j8nDwq&J$qWd{IC%LbMJ diff --git a/Telegram/SourceFiles/art/grid_125x.png b/Telegram/SourceFiles/art/grid_125x.png index 40409c8b872829b64e2c31bf2a26eb5e79da5313..96ebd1ef01da1861fb150dd7a96f9d5a07982d88 100644 GIT binary patch delta 22 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

EQW`I8Ym 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 bsxsS@rD;lMAN=9+gSh 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

EPS4UktJCU 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

|{!(CQ!JuT=WOus2Pcly7ZwXJ~o!YDUdxrKl&} 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⁢wNm?WqJ zg+f>8_GYP;;j=#UiG=2s1yd{ITrcd0aUOnj=EGX_LsU!DqZI53(5w&K14+PH09F3ZSA+q_W?y-*?ay8f7B)!!c)f(zPcAdnW80=4Xxv{VZyxi6nWVW&%e{z&L<( zN~aL>8hBf>OEyo0%bi2^m{a`lJ@pbwBy&;1qnS|iyn$|iG?#7%6Lb!Ib{pHlfPMsy z!JplVKf9fPGaY}nltF87WZ>U^cH4Gvsj5&+&ogWXnMdh+K7%iU?SPZc$j;#h1KeP- z!Wr;y5SC0u?0>%hf}p`0_{pJV{m!?q$$$y+yL z!c#Bgi~$e8U|im1zwVjJe&5!#N5Bm4*?FJ0xD0(kFYlStI|VI-y)M5+E<=Ir@8sUz zU*7_V6tLR`uv-jKgvA-Ps?`Eo#cvl#sdievhUl`Fs*v3p01UQ$30J+v-i0Fy6tFdD z!||TYeu2U_1vDgkaiGxpZD8tWv&FS@phl>-dXuOi2_;do-uHT6Ml&#G)}rm-+*58~ z-<<(i*Y^FyPX^4W2~Uec-2@D#uv3vM!Q5%=)^Ck9J0na94*p4Ifz_%{27hrI+>o$~x|mi4iFjeoSi6LH74YQ(#S5-+cyq z7b?7_suk9h+bPK|nbdwQ>=yP5qW0992HTokB^xXW9pjX2zgOMSrN$vzkx5)NFOW`U zw@@012=L%o+ay}1qpq+rP zk+J*P2kah+R%8e7eS&TyFP&7xlQ_ze7xg*4{LvJuNZGW_ZKA0sggWg#VQATj(w^^_ z^*wvjQe(o#ny4K1cPta&@hAXOP6YH;Ikgjn*g@1TcI?t>?U7I+6x&1n3iLbz#-4`z zF|`0#Q04$EuBUnud;$d09RerC8|)8nNZk1k(3aOEE_{mbCOk(mfJhhLlEJ-O$O^w& z-=6PiqW5?}xu5SOS8^CeDQI_yz%Xwx2SHY~fY(5aR^U!LHcC{D?hGS`x&MYvIqlL3 z9kG~_fI;Y`=M=(u>=6d; z&>O+ZwZdw$I1AcIQle^ecWjfSi;6|02w-+uqtzJJ04z3uO}1Jmj_IEUxPP=6p??bC z!C9Fx=Ir!nm=yR03WV?kf%Gt1?f1D&3+FT}cxE=5lN}YEkr5r0&DJ50-+JJ;pa1wL z`#x2$Wz(iDo42po0=CT4cnyNMfL_o<4r=ly;o*MXpu195E~kqFIzq(L!&9we{0JTbYrByB!BA1y&i$b=f$+3f2(zW-+b zz8^n5Jh`YmF{P+1g$yfCNhvK$9##VA??mxv6xs^mu#>>{74&=T-A}JV?3McDTV&tc zg#WT6HLVo(_cSenh(wDQP-9R#w?B!h-QBTW5+t%x1@H48$YO#p>%ZUQKPS(?J))OW z63wA0@#Z;CQ)*-POY7He-?p|mB_T32InIn0CWo7nlfuGM*owcW*v75hFRb3mrsBUy zHie~tJp;6}i)RjTljFh&3z0#TT0(|2ncW&g(wY*?Aqfc~W@tKU6zdwjlu9X0OOvCb zq!|{AoljV&MoN1Gb~@Yjhby`G2}e<&YQOXhNFD=eX{>@^xX|NxB`#^Sz8J`up8XL_ zEL8(2?LOc+FW^W+gvc+W?D;zOHoG28K_Leo28x1v&mk8yhJ}fIEl2luu6%j#l1JS~ z_pDgCliKxcR!K!-a!JWBYFTl45`LnKud2yOiw#DrP%MmP-L|S`%u0~RgI0-rc;m)j zf4lkp&*mB9}E}y{1aqV2X=f2F@#71Yd#{X zJaRJFk#6;@LyCuxLlVrCStc`66i+FZx%scrfmvjW z`*MaO7;V;Mf|YlyiBo){b9lt=G>(%8f!KzKe1=)tP$l? zG7HZf+HvJVN_1TKgc@dfdEwR_(cu>~%eU^haAC*Rei%&H%423hc{G4Ta$NuJkieDr~p~Ef%=_ef^{NM{k(>H_4=0d8aMX|8O_fL?etS~C(jUw zx|-PV0AEj!KtFHPK4_4;KFH7eK3t377VPWIMg{sA^g#iJBXH-pd$6B3Sun`g;O!S+ z_;rxCH~vdjn~{-{l$M!cC8Q5a?TydK;+~+fIT>J`Al{Y(MDKB0cWgF@J>z`$U?L4kgu=wNVwe^9Vr zKrovX6yOu;8v^eMs&lfcDu(BkkIBxgEE_Sh3>~b=%Bd(Do?lj)pH)?!Q&Lc#2S0Q3 z%Fv;jtlaXl-2Aedtn8|a+>xbFW!XyaNAn;H&pP=Ep=uZMtD+)_069XJwAlhHg z9_3Gku3oDJ@I*!;El%Nu#pYt)%xwQ`m$(GCgyQUkgzRF9uav`05kU~_u$G{LHFy!1 z1KPfUEvSVGBLkGzY0V~T!1ICcEC0p&1OH~=^MQX)yEIh{OD}I)RFOBLV&Q=2XnSLM z`ml=miz-IsRX7j$1^d~6Up#Ui@PfTQ;LnT$e!&EvoHy^}n~N9!HTz^k!^t-mEuu%; z-s$=IL_@=gHy17Hxodley7Vu9ML^#+o6Eb*E9RnImII9FI3qg56CkL!6ImcOVQ)wB z?BKx{onj!00fkgx*TUTDAUtda&xOE;Is}vO7w1!hS#5wTJK%>&&bwUk$gaAY{Yon# zdHcCQD+fBPa8(GoRtzP@rvfxE_>)rjX#yB#kb@XXzkpM1Y7#ca)qVZlH@sKVfWP7f zW58MTHTUO`oCh@uSO|Yo2T1`M5SKp**JB5?|2fX7Fz}^>_o!FTo~=H5w7Ry@CIbnONO3wz{|a$#WD@U0wa?ZTtp~6E~9k zs66IJPJSjFV4yWbe~vqlle52|V1Lf={RMQ^jW^%CdGpOThjetTTL)jDT}IH)qCLzVsQlF);o(@J z@B~AGR{%~Oww9q~2QJUS{w!3=;^ZjWqxgCMp`Y!(Wu|9mP319nHlI4RIdgP%27K1v z=m}8V_X%h!Kioqg1Rj=yrV>Ga7ZO1KfIt8ZIl#m?CJvu{3HTdy6|PK&1F*ky02Bu4 zrp^jZ%Q+ILH!0O;a_I@n>~wkgrHN*Zpp<1Qd~{{z&N>|a7njG!lwQ~qC} zM*j#ks`&R{b5R!N4%8jWAmas|i(1@lCu!2y!GnNci>#RtieYY@VuhHJsF{^8$j%yP z!DYbx@gke!asg`raIJAcKt-Ly5tqr+d(ic5tj8wds1yVP9jxJ&7tt$U-+b8fS?|mA;#KU24LGh> z0+Bylmj&e?7NuU>C{j2z@_1SawaV2=wMs(U+)${mfGVB45O(5bJK}mQPcWiv!;B3c zVAv2a!UYdyGFIiiJ7LN*bJ*wig3m^j9M0c*Xv`9HdpCQHy+V{K0{|FNX z35>bNMFy_mTXHjH;?27i4LZ{9Njdu8A9%~#?8@- zFC8r9k&cz7ASWj}JcRP{^4R1{%Vf$;VkJT2U=HvXT+Iz%cw~07H4 zpoe=tf#0wxibp5eqFdOs7}zw43*kcXY*{|Xn-B&9xo7KRAdz{`-HW}>e%tvXk8#?HVd?)@6=V)M~1U5YPYr335nOgoGJQiTiQjVu z{eQrUkCeyY z*+9kT7re*J%2<_ExGLbp%e!AhK}nW~Y7>cq+9In1p)R0mP+(+YH zK28BEbX2f1vA__G`)d#78vhC~MDM#T5HLy-NMy%aUn@xZPj!9&uH9*mjn-ffMyvmc5ij+)Q~ zj#`}p$J{?9pF^IHqN;0Saz&D1F{K6e0$vUmfalHyYi{N7KHF7Jt$3d=4A^J;lYOqy zNrTmEV4pyq|9|`B4i4O*&Q-1A)_kt6)V5EmRy8q@+h~qnsz~R4T;^$x10jt#A|r?XKgXJC1g91&ml>ehtPrW1|`Zn`<-UR}FXNS0j(pnNK(B<7qrd)S zm$L7&SJ;&<(4~MOtA#QJq93y7C1MwC3&7RI!PNzY24ZTpqZqJ#9o&S0u$eCY6UexN zRe;QP9HOA%XUbQt*zls7y}V5J=;t+bU(<3j|yEucDZv9whXF=n{VQ0fc6 z`uH6?Ic$ts;1;YEtK_@(Q@I!eJ>P7RLhm!|z3+Rf1@^8a+$>TNVc#m?i3MGDQkktp z7;7k~AcbK0;}tk7$X4fE=rb{X`^((6evXTC57OGJqh3t>|urNAjNgC z4^N!$@>Dk|+~6UUQ+p&1%|Z{zaq^sw~xxYY)5tHh!G3A|FZe2s*& z&<4V5?Lm><1s(GkVD2(GXcl-1V7O@72C!XBe8<9bTgv9u^(wJeL_=oJhx7X;+td8P zx)o^pZAV9=yCF9@392}_JmP0w`)3?JL6Vh|hZi<;+*`!)i3aB7Yxz)%Ewxw5i6(os zd?omUl|o4+K5}3hHQ*L-dJ$)2aId2+PYiuGm~q1U;X_Bo!(u~|-HqkZS8qbq5tgMf z)j1m3pECK64-ZpYF#9~3#PJSW#PJUFn_KW$)>f&UXoYpV6jG{7DCxq-$K!RO#{1$w zU6o@eR4Ph|bG2ywhKIa$1?CT6Ir+IFPb+yKk>C6MFzIrS%l81k!pU_WxJiTaP?9E? zhiIp1Qi=(Cs7;iuKth^U32kRAc7Cw?23iEpSgcPTpRl&=T05wLFii9Kzh?jWz`EIA zYi<P+mSQk z4_lFvI6rb>^TzC}gTo!dR`;PFn0^DjfA#?e2E!)Tx50%h zyv5Zqa{_0~rXx0u-Mxo>YkTf^_B^fl3Guvobeg8-mq(VoccZt1jQz5qy7#nI!w9N@ zCwvH~?x34Jfgv252(715t5teJAfQR=(kwE<6f?fw$w4Kf95sqgDW_{d*$mJ&{mrZA zZSiYp+yAUEx5}v!0Rwzs3ctCz^SEi6R}c) zo%q7(^?)%$1Ptzgk@8!`LV=o4YFlNrLZaabS1VzJya4#bTEY)x0Gl6Q)oJR5A3+!4 zC3njJ^nu{h9tWVjJO?7>Uyg%@8$(U(y4x8KeW4HtW%VsxYD4yC>G zNfG-N{<_0fZE=BoA2bUylfci7g8OPSh+^&048HvG}X zxQCg%4_Cb+LrG{^`=iX@kfc;dN(3dR1qRV!ez8jSl&J>#39hhi)P0^C%=<3~e}zw! zlSa;ODI;bx&Wr)Pt0Y2w%u^N0#OeHD?g|&@gKq#fTxG9TNoc+ykO>bP3fJ1Zl3LSH zsQPiGwL{^pK}e zEN|Sz(FQ}+gs~&SoP*=Nql(iaHQK>xC6V6o!2pZ@sMezDJ!{+M)Q5-H&uLq`r@E+h zl)tMf&ch?l9|)`3tmez{mm!>iFMhaLj=xNDFFAwE zh#9j5{u{$Svi^iiRUT1&9Y}V2Ns+ z0Ugd9hiEt^f!S(2B^D%GBq0KU{9v=lh)qtYu;Bt+oSb>#=lESMHsGL|6rO58A7Npn z@H0HZhs!iFoT18Hz09{>;lcS?eBi~tmm0>MoW`rG<4rp`zG27CxzGP1tgquwJw3Le za{dQ{?GDb(TI`$FdnK!FP+Ho8+u?Qxs9ytGv*sQUMBQvoW0x2V*-LWM6Lm}3MM>#7 z9XSR=eMh=yTT1?lTtVcm<}`F_?g9Aq!kHfAsJ-(%yk@jH#^qE@;!i#~e%?#F=8k`5 z3U5-K@RzNPyIz_*{^V3<67|KR86IA94-QMxvF_HS7yk16+?_ib09SlWwBr*RUV5=%{Hs%Wb)+#p&3AFu+=F(Jx5+;n z_S;2#I6p0IP+QNym~Yoa+Vu7wdj-j+bHDVqH=?c}dqk(DuvXkWD%5I=&C_7*9HeUlbsKyeBL=I60)SM3yunlnZgU*E;8gM+p$kV$UF^)mt zyscWeQl7pxrl<98v^ z?Cu^EsCN&%dHt8aU5^ZMcMlA7*9S5ml@x4tF$^~L_!tKpTs9Y!pb_{b^#Oi~MzE*w zU*W&L*)#k4-+t*;;?KaJMS3{;IN0xEL<*g|ihSpfk8iG*NX?m=`SUfIW~pTT&5!^1 z5Ct+vFr!j~ z{bSOC_GLN$cNB!V*8fw|2i2&dp{CHGFh!rsYFdkHo_d435}7+LJ-8y){|#Y9Fo6f! zqWJEE97WEGmjP~Cq7lMHKlqhO<(*U>>75(kmhLSO^96!_rudHub$Uyz)Y(hzTj(8H z;P2q0qLA%ncwS&!ZHkxNL9I+(TR4zu{*Bz9{U75R9FGbFmH`tjkm7!*!Nga=`LC8h zmx(JF%kZoJx<-&kR)@znRK{pcndY#JAhmz>^RtR4M#{rR)Y%}esS!pUU*jMqNuCfU zhY0`WS-zDx@;}BIR<@wAvjol)Nr7wB&kxvR`fsxY`Yp4mIKn~XbL@Nh6qQ}Y|=QA zT7x(FUw5?7!@s9#YU6*5ru4j9?D&i8kq4&bighp)>>Ku*u8U|D(DYxQw7ZB`|HmXX zkis6f)e6I*6juuW;{sv*XD&oXy#MQ}_?o-FtAZ)cA38ZVBp`QcQsR_QM>mCt$CJ57 z2C?1Rlu)-|ce#V#V7>b=FIxPc5^a>0*73}&FoQ8`R!&Ci=txVtF{@y7%#gP3Q`4v@ zbF9ucROcGtDzO*&hC;4n1mw}`A-3v5)LQK935kn~%t`8eyzg^MfLNMJI3s6g2f3p{ zr&DQ_4oZbPyeWkNcM7S*fssfU2TH7_&?;Ox0TTrJyG(*g{o#Va$Vl#+97@)4DuR0f z;aNPp#>_y=4m1jeo4MGm9>;1SW=qBi8du8^sV-l6el~mWE%*<4_4M?R+3dcq%NRQ*bIzq{GvA#x^YW}2m#OEPOUoBLQ&!RVQ^U1}c{lLChU;?yJ0G#%P`%7% zsG=qij>h!p=nQ0UKa|_nasXLqb;ft$(>o~Gy z+}d*XI^^_+i*jejWR?{b8y6NfJzsjKbm8ARw)PRpSO02;wN9|NX*Z?=qS>%R2$bPn zK3Pl;_d|25g8gF+nBnb1*o=x8H$G<3=Gx4-mdMbEx-sm>cZ+K(s@Q!f6o0-b5(C z@C3cq+5m`zVg#7=T(Db}H_I@6T1 zyZY^tQ-dofFS$7*kLkE|d*q7;0!zwDCwGo1Ec%0exoveLYTg^wh3vY&L_V-q5X=&O z3D&|GuqA%`*8+q9zWG3#ekSJP{kY)78X-36sW|q>+)>j@0<|NCTk7M?MGG%jT0;`j z7Jt?>$edgDeIFA3{_L1(1;|1k${#+uksKN|ydzUNKks(`a zx?lV*GAcP6Aky{yMV|(UyZ|DZ!WK8NEeOJD6(@Xkq6~&+5u_YBy?U~AY@A0K^rnqW z7P?P8SoP}4i@&g6^?t;@-^_IM9`1eKJYnnfX`2FLGmFvZ1s5W6%QDppeKc}Q3_Ta4YPhV|2UDLUcs!yr16xSpVp6bsQq_uQf zf*0k?A2L|sS~VI?ZN2=={tqjU%$$889{3wM5KEYB`ZhH5;DRqMLW}{xAz}`T+#Qdw zDoN8BU9W@+k~d^6totMHn+%h7ugYsYJ8jC6V=W;D z$LI+QR*i|CIy|$2(Iy#RXXFxdQKZ4-w>D-2j-p z%M5|Jd<2a1u&u`>xwtq#)?4^0PmmK&k~E@(6=>+Wtmd@%A%YhtOy2m(!A(ETUwpTF zIs53_V*$(%md}QkY$+()I>^bXcFoo~&+Y7D|JwR8dw2P>$Q^CH21!TcNTe{Cuv;z2 z0hUdy`+!tX9F1p#a)O9&=%nzrv2nst6_RrOx|+xMW|xi~%YM!F-e*6bJiDv_3Ge>U z^KnFVQ&Ua&uI3q?EE!Tbe^SNLan+4Cc-(7nkiky|3pJQ(Bat zM|c`!T}P8|7$XC{T}Q^65-gxO_d<)E18OU#g6ViOtyBg4{}?{YQlFUdMhD z#cW!LPnO=kJIn-t#gUVJKn0coEN(cu&mH6j54qf$@WyAlDU>>z(O@~&K4TjazGRp* zIz2Fc;-t~vxcT{shAkPzRM&TrvG$I}sbRZN!k(zg_G8m~-z|yR_Gv;$YuWErg2yD5p5Y? zSCwBCP%?e%9DPdhc=^Uy^XaWLs@{Bke$c83k!XI#vQcDa^OT9MMjv`yNpxXRVnZ9- z=M*ZJ#(58#IeFx>yF}tiY~SI^ithL3v(ML^8t>y9QPq~~36$E|_dRnOU<3&9>;_j{ z(N7y7_s@fbC8i8lmW#C_er4t8fx^v$t5g>sxxBimBzztFXus>PnUiT%hHm7z_Q~m8 zqo$pm_g0TvbmGXB7k|4swz52{%8!1@dw4?5u)LbtDa-E7B2j*tST|)v(YWH(MKj;7 zWxscyHzKSkH@&!hb46v%$Q0iYjLEIUXY?>S9y*tF04JDUHcJjbVg_W}=wY*OwlBOn zo4s|DWgpbRQ9Griw4Uso`{v}yZ_a(=haWGN%$!+LH5JCPlEk-tuh9$>1o=d;78y|d za(9?%0iTGuQHx+Om$&t#qnUI2+1wKy9a~byu~p9cFmur0{Gm>J)}YC#zIk8anb&*Y zEfJG1^B2qr3rxz#{6DGh0t_Syf*DNk$woM{;U;7~CV9W@hP%^&;MjJf1R73%-~NCzsE>+UNi7NXYf{TK2E@=MS@A21Le& z$Ldgcc<3N+$7w@eoe0erSq?9@58YoLu)p1<>YWh<#}n0Vp5)i?>Fs?#(Y3tgxB>;i zH4p$lptj%aQrj%GP`IzT|3KhQ1@55LQrjcqLne2cHZE=Km^%ptv6m+{bkFL(l5v~; z3oi4D3!D1h9{KJi(H3SWd({FoHfsgyyupHj0jE}|w8&8L$+-{ivFH2tzmLRKqf&Ar$?dD#c3=4F z?PI+?-yS%Hc6Q{HrAL{e=a`6t-R)u$K|c~OCKZMzSj)ONaffa*HMaYp%V^hY``GW; z%elqFrUb`~)R3Ec+xM(C%pEp+DLRFoT_hw1 z-u|^es2~rGte-Y~_~g0~P4CT`cDZHFwYh&%Z?@Nr?pRz?+xGLEkJ}c0JiGDJ=Ie+D zy#6KJSHA!>Ccdu(&fBNdI`9B~4W~&ze}t0T0)jTZ@m5#uOXcORqYln2Du!~r_@RNR z&KQ-p~Eu@Q==k>0q*w0Du-Yd&ccFg95@E%KHb>wo()hZ zSZh&#oZO&wOb#nMQ1JHp?$<+H=TB}fS)UY_va&H}oN@Hn7anv_r#IaTDH&T+e6R4e zi?i*k3UjBmxK2r(vPAxs^UUvI)oHNmJy;c&|AP%_6=H1If%ss(fxQoSWqkov5>_Xa z-ZuKcGv9ZfVc%N%#^|r6%vhKcKPY|i_JlMkFxo{vd6!^a|-dkL)|?yyVtCKA+u&I z=147keg^Ch+m7-G8@0l%G{YpbZV2>0r!MFjIRQmSW)zeTulVi{gRA@CprV|P4K*cW zOPP(2MtFE(nr+kG{}#=0bd!9eeSQf$yJl(7Y#}r&`kb3G15CAG&h+2^=t11rQM4tEIgF%(S=_xFoo+@7 z8&?Mao<{;6q<{wp&RbA`ghLZ2hX#BC5^``u4DOT{E=aP%hejCBta|of)zkwYUOn&$ zLQC0)yLx|}Ony{7!MP?nEkA>DWkey~P%?>)vM19wdKTJ9^UMg5(in z0Vf9mCkL2o&=M&}~sNw`O3p0rqXXje!>4~j7pe%|0LZ2UCJ=qUSwpC?qF53J1 z!^7-%8$P?Uch4JSJvwoaO}*9fZhiK!gEw}gA(wBW&Bu! zR?Fw{fi|$Z=a-J(S9IN9((zkY*YArcx~0CZwY6^YGvu-M@7kXEe$m43Tid^DpVrYa zZQ9ah-~$Hs-K1|a_?|h?9E>-CeK9~c=Ye91!x;%a#AAk_`rc*_ot$~S_1T*8^!CbkzY6gQdgj{f88?@=Uz^d}+`k(2!F9HhJ)QYk`K9@S39n9> z_S)o`?-lj0hOoY1Zo|&7+UK^zX+>^?4BjA=)mv-*txq0r5zJpwo>tSn;P7k6;qIv8 z5u?s+JivY$G|1nV{Uo;5fBdxIC~sftjB$0`?5>|a{|mXKMz_4T@6q?PJUM&Bj2;i_ zo1ntTb<1Xq3DT%AH)?;skbG%WO32(WgnP zB7(XzhZI)<7tVr-GfQFj?%?l$yd%E%0CyCY1;4l->6|Ts6`4(wL2WQcZ_wq;((~a# zypP|!_;K~9y(iD*htW01=Dc#bv~Ul*roMb;S$sm})SSqef(awa(X18a(R!C{$1m*9 z`9F-k2V7Iv8!()6ZxS|y1PB|#3VTCjhYf;=vbTsJvJnJDrhr=!6~%#j@4f1*R$HsB zwpzEXtJPMmqqQpJ@IB`yApYO>{oY^HgmAt0InQ3_IqSm9kXq-$KvRqI!+F=g9JM+u z9bf6pw5X8!r$NnF~;*@u9P9H#$ebY-qVw@tX#%;|lz7$QTg-2MM@GOSe za_3yaqk5@a8>6XQN{5^DBJyS*{EKF=I2YM|7h>8Fr8v+xYbmczqXr)2H z08S#vgLsY2KnRoD2Fwrl=Nspc{e}xm%8zJ!rFy4MkJ;beakXq6(phl^nXi6}Bk@1M zPCm8{j>Z;#uR4(S7t6kE9%G>&H+{sU)fJapXTDvq0KeS&8aLmj&Kir&gd*@Ikv8~} zZ#dIn0uu|7-S#kLf_@+i#`ihXUiFs2m&mgJSN1P(1+W|fUE?8ytxKS?iArM$l_09J z{Gun}6|zW?;EY0~^soS5z>BH(yHMT~GLF#53GJV8;sE|>)T2DK4rFyLXyXD-ATv_} z@@x=%QQE}o;ty>telfENCk z$8IGji+(;4JL1cSKTrH|dPzPybKwHMR}wtNIV+E2`xt*5yR-P~ewOw#jr!E}{-FF{ zE_yq$ZM`0)iuDjod3`*^r*-sV$V^eBw!|F{>vM!&Y4FdPs9$1D{0YKkjF2+=LP2vL zM@eo8Jw!thz#ZOud-s~=BBZf5ygJ&_MPv57viw=qm#22WXvI5D21u=p?bwpuolb^E zjt<7g4&_s0XWEVrzdWkKPlfW{TDoXsMcubmbw5wXTWdoF0$mL~h}ogVP#_>$-6plzIa5g(XQVmjoc8i}_z`*Kw5_^=OeKC-Rwnc&Jpwpcz#x?}zH#G;9h-wLM!ElvR~qT$}Upd+l{VX!@XsAhtnV1_OSwoS+l890!Z zx}1?8F;({UoU$M0j2}TKH6S*oPF-Q}|B_=XOP{^ruiAxgtIE%tqc@N5KVHkA8x`Ka z4{HgNUE!Wp5;BqwbO-R|(oII9@nK{F8%7jcQWT({4Xh@DugMf@#ezBFv=IRtkA9CA zy~JgB_}4J&S$jX?ooulCAe{R6$anaC6P1KuqD@7j=;OW*gc%lz@P|i#;g)ZyEXoBn zQ`ShY@FHx3eF!7sP20c3V{t=Y1@b`-uiUYf96^8;J;2Iqz=|u&pCtu9NuD_bmVkX& z(1vFt*5z>(97;BG1CGE#GE4$VMRGLKpsDnhV{D9hpuU%rxtHn3z+qp1UHWaSc|;&R z_eoxfIIK2($)TXhxLl^(k()C)(mTN9|I}GojITH?+lpf5R z{dVySRDJnz?{Tyyy(%eWM2d!*HQ+4{zu_K(r#rB`Si!(egl`Pfpn zPi(uqV)m64ezuZ8e{VN0j_rp&w06Od6%nON(i@iyi);U0%(si_Ov%}pQoJ!6H{lgw z?sQXckBLoWP8FTxn>aiyGA0JpD@(WkG50M)c|TSJYdBZ|@h5elaQOj?a6HF1?h69p3n6h8>Qi|oHJo#{phAB{lbLJjT6489vMoD)?b-& z@~79Kz4hstS?R%nzEqUR%-F=*PqwtvIAiZmxhpd?xWV^37T+s7Ub?h!_BZz?EP7Mb zcEE&)*b4kT?wgKZQL)jf9F%WpZ-G`1l();!=wf6IZRj@O#5I6FrAD)Zb}))Q=V( zN%ISfdlu>E6)|b&k(|wAvZ@>>^b{N{20KZy4nVHj5l))4gb7&+@AZ>Ol1FP0P7ofG z2i)SJ4kY{SlJ(y{3p}=F^-=#HjwPq|7@O?Bd;59R@C)A77QWt~3OJe(*PFZV#wNti zSigQobc+AC-IYC&`}AT$GN#(Qc4tfTo%(KB`m3t?Svh%o0X+WwUvby7AA>LL3(*HO zoerr1l0=q}poBm~R3j90pzubE`LLZ^3=X{WV&Gonyuosh$=)YwPHa(eWK_ z-WwLQXBRu2I~ZEqR$J{4DWJ>Y==lD+FTD%kG-0J!XKP=7KpX2aa0{P(33fz5#3aX> zw+9@`K};H`LPqZ}?>3hk1EmEACmdbhG(H*K#}sd~tJND?eR$WLg(!#G)km{xOyG`P-F|{*lGu)HlFjjH+TH*@jq^x^U&*28X9wH6SCa87T?|Z9bT6TyZ}Bq zXDr+wGy{{$W>ka1qz#CKJg8PECoo?2U;k2lW#fo(sl(Hx8~yj^*PkBWaC_QOWVw1j zzP$Za!p@F0=TgJMM@H_5j>a7pMnh)N82;87TuLz+II9z_a>y=m1LD5RvUG;blvX-UzGf?v*=Nnn$FJY zAwqo>d(D8UwJyGv0d^6EG&_G=?c_D<@x%4kJM=%~7AMXhIcraHm`$SZ$}3JLx_q9j zxXe~8us4DvAxwoMm0nULN5Q?vh9XYfS$ot_fh( z1LoRB0KXH)CXO9nFre%RphU%siTW3V^CVvgskVZ4)724LGyf6>kULotF86I*YEn<$ z;cI5ap(o~T_+r=Oa~BJW+l!JOnBF_E=+OIqmBcVBw+!0I(Is)5S6`Z^iFb}pTMe~L zGAA^30Xbafu3CQGoKpw8F4eV9U3tjoA$R$a7|)S`m6$_OW}t{Bw~`{-f~iIj$T?SJw=d%> zYm-Je)>I2n+M3qZt>0W(*SbrhuKWtIrv{A_q**w5!|6o}5WThVuxC`j8{BVwVA1?T zlcox7%y%rIB6VSAr;R0?ih)><0gg7nDzL-QKBa+R3IJo!EE$vi7 zao+Z^H`mYJpLpk0uDQCW#2Sn^h4|n>B(X0l;F4P(kWD!$2uP4?lUq@Rco2tXNMeDL zB+K@R;E%5JU$7@_d2(i~GgTgEQ)aNZ_TrBpM3s+DYK@LCa!Ak@mr{&%REKY+b+MlB~;9B+$2jkdHza0j2_ale|04TJF^_s!Pb|bp|@Z z@?5$*v7jI^sh}XK=~hkMPmN7KO{u-{q$RIlYQwlOZL;QjZEbfO8t%5W-)$xuDiqJ; zzJQ(VOfFZXaPW!6CB*iCGb~vozC#dC5y^qjiu>Z@^GcE`r`K z;CA38cs`P2RsjyvTrgk>l!$jMpQ1)LoY;2a&-zI*aZ_*4+4~C`F(Rq?hmwNS59259 zMk(Lj+TcGbBer@ks!Dqs6PR48G&$_MRYi~U3-Rmahw!<5$mBPeLT_m@>*bO)cxU~% zwW#LQ1C(*G)N8JPaCBJjhd*Xr$Cv8ozXr_tV~YEiQVC3&06Pq5V_1MGU+*qkA&njp=H?X{-#x|0w_k-b9W`MT{ujf1U7OLu4`?CUgpIHZ{I&SCf6p+0{+B`W+ll1Z@)?hvj5`)l-oJleG2LFrDO-w&)s98L#!p+?PztJ+c36tR0LI=ly z;1Iv3F==`Gt3zhHD!b2@_}4h8xXcSY`c?IdujiD0FF~i!1CbA@B8-IIlN&?`#QAm>O&O1EzsRn>f_}SgbVQ$JXY5K2GlZztoomF)nEnYOioUZ z4T~UZai9jEu!A5=gl1yFkQ6<#PJ@n{`+qfLs%aM-t={wF%r^_qqmk!vEnbhiyWb`H z2P7o=`z4_nBa;y8w+?J=l5AGIC-2Ih>EBnL#OuF>uA0d;^vaMixxpc0#sD@mfJ?3c zEYQ~~mtjI}W^^HG=YzSAL`90cpxcrsQb@DkFEClg8kr$!@;k)GZ~j?5wem<-zK-mU zySF~xwr0nGV2^{NS!?kc{OB-y)5k|J>1@9dQg)a;f6=H_t5>7<_@6%+AqVL)>c6F= z3)1CFJOPDt5#eI;prn@biLi|2hX`mu=oytx+!y$Tk^sDap4`f?S2oOr3X$29y~ z7hZzTBi%p$K<@Q!C%%xYh$sJSId?Rry$&5ahssdZ+>rr=_4TvWEoDKTE$f!ycV9ft zBxl+D-TxQY4<=JGJ;4~sdqNM(mUhcblx?m^<_&oZ(5o?dqkgD;%#fgM6Fkt?CDRSA;W=+ zIzpzC2G+^g*CE13nrpb0#5jQ#C!rx2LZ&vPYe{Mj0);bAd<8nfBsn}RwIt>64zEdL zV@kCsere94jhmOrxT_B#x3pMFH7Y^uoVMG^apX}GdplDTTU+YloM352dT`R{eP`w_ z8a~|DJ8s1)JaWUvT`So0dN0Suj~sz~A_8Ygqwzyq6H{ATQ&aIEX5n-?$V38WiQ!}r zOZp*z1qaOwXna5}123T2QsIj-t|$=}0Gg^&oiaYVEqY!S?#H(uT$r#yXtbf={EeTl zP8$>ECK0RcBDJj-GtBl@h>i1)86U!(c7} z(1QCZK$bh)f+1cAhu^w%T26kwp#`#@Kg#dB)X3%QeDO#8C(1{)4OKeGPMCaX&o@6- zHAPMc9L0@lbMtS$3GKjW{@G zTBfbXv{UVq=IARK&m5k;HWeR(4n%Knv5f?xfq~VKIS!e?J#y?TNl2LTACSw*LzwIT zTr*J_&_YKn9m7pSLmTv>H7lo;a{Si?mH!6@de+9#nTo~AcG`J*i|srm>~-0#ZCU1O z|GC6}L&`y>K_a&C9tJHP z=l5<}ve{DDi58Z2_p=P~TR5ZX4Sw?U!sw~esfC%%6wd%D*?M~0*m(hT(98H2_YvnO z&}(5pp&?R=h_^>D{Yf75hDiTV@zEnWXd>@Sxr|ytL;(IGGaVxr7kdX2wQbtNhDrRi zbm|Io+Sbqi3%|bdMcy)9gZX2&ZW7pfIw05mYtdMuaXjp-eekOB$h2kSY{#sG$ptIB z#x}Us)=kT4=t6oQ-y(e?M>70oa(hHF+oQK?R`RJOI+0iak7;x_w zPy*FL8ZZ&|5PmnJdz8I2ry*qd`GA}zc-F1{zo9_V4VKd#o&`!AbkCrEAhVOmE`LU+ zkPIW7ej|bLFaQWiUwXK6xl8L_mXAHUci*9`Bt4r^dg2V%^dk3+)g$ipvkn{wf5;sb z$To$BgoIKfJMsSdO;uku^&C02W?Ze7Ly~2vr^|xz!PVIz2wg>jHQo3dyec3d5GaY_ z0S6u2NWcN9&<@dA)=ZwA=@&wf&V>92O)}7OPzgJ-*P1vvnV2{_BDMBETX*4i3!2fQ z0$*ermeSHcW5s-LyO9l56B<#now3|BdQLi8H04?Mt}WEv~2F<}_S8V+QknGr|;2jGtfQ*jtO0_~+7B{G%@(lQ_? zLN+r2PDkj?ly4afhQ7OX>+;?m1<+@gmYD3#Jw^*koCMP#k>}pKNLN%GV z$C&5N*Jzj%jD&s1g2JMG@fJJ7(9lpS1UTTkts5sMr&T72uU+gqkeuE1AdJJOI# zzE1AQrP;-uRttWft!k^q*YNhU+x>S-OGN_JmU> zz)KIeK_+X@Ofxk7IrCDSGo!4JoaW|gK!#o4QsCRTP{j*g6s7NxmHJIAD58Czdl z`xXs9a$~mFC_VdN&lP8vtRI$cX_mCQta7}wimOY?uzlZ_j!r2Y#L{KLkUJRm~!&*TWcWiq1w%FPTjGgAzS z=*cl5^yaos{$;`OvZ`axr`I6WGvg<^WqW)2hU8|(xeTA3A2rcG!Xr8>XP?8m#T9$% zN97Q{Ua2o|7nL>yBJbXhVIj7LVaQz?8Y-oX*Y?jYE#0)_*)!B#lEgY zi7aecP?A|W`s#&;h~K->Dk##)P&|x+m4t=JerIp4U73}0WWl=wr5TAedZUXlglETbrbL9Dg(43Q29+@jRkn+$zB2*M*$&-B#d4mCYd1` zfT=Xdr32YwArM8vd@ENtghYhAAiCCMLZ>zS4x&S-)^L@}!^>0Cig9jMV*T!Q$EiRY zCm}c4Mrv*rXl_1oseYcijd4~<)A+>hj0qn}8Ws`~M*W)L8ERzL zx7UMbgjNJfP4yjQ?Jmy9=x}0Sc0xs6-frtf6Q=Htxu>OL=I+$1uc@i8@7&JI%*ras zTAeZRc#(yL(B=0RqXGj1WkJ3w2KK?Wv+UG23%R2w;ST~2V$%bFd)EO@Tu6@$(t-Hf z#%rKC45V;CKuNZX@G=}Hzyx(bQ|M|_NGn(>sMtI^|6DUOc6=S*#M(bOed72@hbJJj zzng!Wsu>v)I>xgd887Xf9%^I@T2=3FeD%p`6rVhP%j|?!cf;bG?4q?$7yy{!Ds#0CB}JpCv#EJ~h{G#@|MCHw`g+|(u;rZ3$yytd?ZcF3H} z+4yPKQoJ2^b^%gZzxP+N55g0mdc+|<67d2Cw?+V`!4_UQp2@yW`lM)BK-8dWA~~U+k%$qY12~5 z%RGxtHlZS`?~RPjtjat*!wf9|2YdUcvR?v3761`Z1rjg@kOPFiHAqj9!YUwy(U218 zSIK_%fZG#D-9c4rV}8Wm_=QdQ&ePFrLv(T{))~Z6jeqDTBi|3IsVm7&w8YyL@gs8sb=a~wH`nf(fUCfP_68MmQmYaw3`#FV1xN`r@|r>y-e zdV0~=IjQzEVymgfgxhAhYjO_Dp2=)F&lI33NK=w~3b`U<(JB1wnj17Aje@(E^#8;0 zfc21_W_)rx;@H7%?17Drur7rqBl{simzcwbzDX*L-?TfFgj)y1+pnvOcz!(PKvl#3 z5#cFGbJk4`TljG*Bs*8Qu-joyU)bH~$`C6bS3BMKf|iuk-;Yc@Ru>cOoE()jt}d?X zVHf2>c@o|V1USZWjxhby6h*`rB4b5pL_vL?sfU0*rbqsZ$EKd zL{w_2@hj8vb1N#h_q~_Z4z)nwW=Qg3pn`+zkJ^E*a`E!BanFi_P#2? zd}MWBzoP+3U$rEDwFy}SM{nb{a9agX+}or%K3C7 z!Sf{ezx@9@OyqE7B>g{ND*vJst;UyROaB+FiQl(qV=l~K|NQQ77lvpAi$tBu1p=@j zVe@56@g=l++}Vn$H(MH?k3MJ98kIe*tstbq22p)|=%f1d?sxxeCm z*_6tHNj3SR3{PuoPx6=AZ&e*$-m|iN+D}uaeprsHmVKD|$K|x5p z8Gi)NOod)mHV7YLg#)%i09&A=2HkCj=al5mibOcj*TST{8;sWE#8;sR8PCzIOV67@I~Kv%!~0JE;TLe$r{lR*0yo+skp4B zY2yOM5bWgi|H8I|r<;(@Q|PlB;C-g#Kr-nARD-5E@H9X&C|nkn-cl4i$+&Fp?ChqE zGal5>yzdig3^#n3+xQkDe^JBre;Jgt5?A6;GixIAm;#LN(%sIrwSD+Y){v6ceQ zBmvK8F?+)pe`|nK__|7@ti&*iHaiJ_ct{xHO2;1``(6M$yg)Y};kOLo=e~e#o4=_e zmYnj47**Czz;_Vb88+()tYOx)kYlOM*@>QKB03W5W?&hIcfZ%K`se%XbCu-!Jt4|fzG#1B{P@C|}>8A^N@83ie6(T$NcSFU5 z>QpJYH>_wjV2;mZkeF_5$lVOEGn}KzAdQ4K9&q#C3)lNulWs4V_Dw0=ydQ4FCjjgJu5bJz@7V4A}-u4z5N|NR}*j=fM^Y z*d`J}fZ`FOO8d2v)(fRwi|boMea$k$MrOs$&e(Oe<;|L{AKH%Mqd&w~eb5lh?_Kuv2C%xo}GEOaRWYg`yTGNtOc|W0T_PgCPM8Z9r%O@7UKYbDkozi ziLW8A7bz*(h#A!mUF?8=0+W2dxlk_hq%H=t3COs8`S0LJDY+{F_2Ib-7C4(bM*B*V zByPjQBAhHlRwfQ1R`xutpipDoIg8iVRnKjo?KjTRbb3tl+%+x35=X>)`lKai1+3U% zH;lS!Ze(a2ZOctGoYC0(M(nDkudA(ZqHpI(XL(rIyGwWm6MX$z-1kfz-#)z(o!-C4 z-pkQr*NVQ5mgV}!`tYZ%hOH6i!IwE&*;=|-=c>WF?fPGEDZo9+Ij}z4-^D1;p^GGR zU}9K64(!zKV(G4m*RJ2Bcsx0c5InEWk$)_sX1GH%dXX*EAF+IgUmKho=}p| z`wQDVvA8%9Yk2Ie9Mdtkkrq!ok?-m`uHZyV@5AQ@;z(K=V$pAHznuBhBw)Ve)C6{Bl z)+El{kVSpU_K{>CEPjxE;BroKfO#91EyDc-=rI-7x5|NL7AcX2Y&r93k@eGubyO6u zpi}3~mPI(2o5Mlf<_;V<2*$@Lb55cc{z#VKwJ~$mS!M~)90tpdj~YETBkan+ve$nX z8In-k*;OFYk;d1y8sKts2j*5lqd!1mq_AGH?FRUQscn&d2SOW0W(VX0qSFC|sW5<0 za3-vSJg<6K*15sNbTLdXd=0zNuIx^qJu+)#ScaKj$h3x@CF>ScA90x@F!2MXx9{Ky z@d14096p1$HQb%`>qaU*gPL;P)ZielU6{Py6&?hC2$i_PqH%%ou6C{{5*cm^Q! zVJa+)Ohe@Ozk;3b9U{N%)e9DGU51ZXnK*`6{)f~WiUMr?WI97d_0*L4 zAL;dCGC49ExP$N;Ou4yde0?Z) z52WmYt0WwAu{96(8|P;Nt)tNhgZGv5msAGTglllKeSne8EeFs$R{w7jTxW=`P82wUP0pmt^F+mvwd*g&4m>k zGFl$b*mi=>o_n+#-&>l|Ibt5Nobwx=dvrE3J@h>qeHvc_i8;`(N?(I#koZQ2BHc@a zq9U*R4HRL?lZAR71KTzs?Bg++2R?nRpmTR(_}rvQeFGD|rly;=dD2K1k*P;U5JyXk zOY;Lp3pL!`tS8@?nLRs-mi~%I;J+8fOb#|qR?~MD8_#-sNvl2gOF?aI~qV09{ z1D)J5+o9D6)qXt<{{v7;SdHv>fRf=kV#SEPV{|U$nFPc(6XV7}C^vv0?tBJ3T^(9U ziO`JXpY+)A!s6Od2G-U*k%^JeWQ_X@8%N2ob?qbc)pVMzjl-R*uk}{XShKan$yqJT zNCnRO;(O##rozDU1aqRG7r5$c=$Yt(#dUR0;Li%M6B@Z$1rPVNHGynN9ACpZ+SNoOGD%N&nE2LB z({YwwiS|=wdL&IXHCHz?5yeqyHjU{tTSeK@$)?@xL&;Px%Yux}3j^HE1)(DkmaFs1 ze=4lWa?=+CI96>>KuIXw!pPEaQodyE!7JJxI{JhdtS|e&rq6Sl!B)$Ce+3Vb?kWN$ zaR(W~fMteizL;SynzGFa2%NNSe9!ud60xn$R3k$#KSNs!Ns6bhHm`=$yz+VJQ9KX7 znf2=TA5cuCI9W&NWFFEqe{s#+{itNmxf&A-9m4{6`evj{Kj6$`=2J0_kC?&bfVowI zTs?3H;FVNr2t0a1Qb*LIAEZbeV-0iz^5gR-OI$|&VGOe z*sdqv|H{bb01`+(3;a-qQ@OediW7nlKn7tdbw)gU^KUa%%64ex6#m0R`v>u^i-u|=;O=rU$A`vNiTOHo$HO(9uX2vA%1-K0sgRj@m^n{ zwJqOH;u05QYwYBtAME7hYEGKBS=s$>VaCe}rj`S}cYqcGgk1YEOh?*InZ6_dXuw1= zEszQqhtY~`KHCm2Xs%RKj}{qN=nHGDBTKgR%-f-^s;+HiIl6nSdF%)aO-JM0`62s} z>Rf7xEcev$z{Zl`HEnaNWR4DElTy_B_ftfjUKLwX7LYOi+S~2_wCn0QO6`Oa%OiL_ zK)MmM-y`5GlHmp}VoHmj36KCWfrQdWMg127^M?zVHq80WA5*7 z;T$p^d8>I2^N8UIb#mTlYug4Jo7UJ^85zWSPzMZRorXKT@(I;c*U%W|XO9f&BqKvN zYaKTar(b0&A!uzv!caXkvW<&%9ytC>fQvN7lb92xrdV1KG|Huy8selg0t>QDbfrQV zOeuP|$dT`*>K;1YD$w4*AvrrW#@5S3)7TJH$XY$IHuX-Y zrOW2yTgU~$c0+`2z+H{uu6pnTBSef#CGX;7G?o&&QGBuc^$h4gc)u%k?9|ykOJ>wm z(su%zU%)PXe8m;14_`NHdJk;Jq)@D^l(QM`X3R`Y1E+xL24%b&xqASD3P zRID#Ma{}L5%hhwVv9@!twswHE?1!gI;pygsYk>(z#H31eiS46kIW$BME1~`JRlR(< z=o&dAeayV4FIRlNy1(!pom&Tm&yAbFcc+n&Vwngnfal~ft7HvSvfv3UB@v$t_5l%7 z94}A5Yh18s#@y?h@K<4Y&K~s5nD(oE(DgyL+zXsW+cj5Dni2QsBJBD#Gza^dBF&$F zMjR_+{2ul!v07xM+==iE;_Wgb3Qh8iO9P~a!}Tb6dXn*jnY4^NGz2^2F@RT>7 z60MG(sYi#vVTMcIKT12%-L}HbeR~{^P#Q~iKLRf@t^CkI z2&>oDA@vmEZVxyc1E*#ZAA?8@eIIYa`_NQW{IqTPcelPBzPxSKi1M-FWQm{}p@qTPLZjtFwzn zylK~})5mG8|2qN+#%RFQYc`yL2|vK}aS_yWL{Qlh0bkbnEKkJ;W;~FhRiO{s@YmzF z&?fJ2VaHb#3|GguWKYj*La?t4AyweKXRt=F$kwFyiLF?j=O?lg?v@XNkT9pRTTw_A zPLxiA7AUJbmp2>|y%#v!_`1z%+PCiRx%+D~&Q5-Szu0;J#&Kz!Q90 z>$fP8I1I%~s#m>=k>(ck1ugcdx$qIc>17+N4EnloRYk$VIr!F{r2JLO@C~u)-@`z0 zQSbuYM6<3y*Si(>A~TnT?BfKRCWe4YTSUtA-d-Z`q=3_gHi0qi2nqqT1)syfjHuw7*#mceTw^kdWTDtq>1{rV^5FZUwOX=*}ij|H1%WS9mY>+KkN z8ToJW>z)88)LqE(=>u#)RS``4VC&;^$RB=Y!+e6L-22>zkT)lN!BF^sDP{wWf+9E; z6Py*fq6OQ=jC5o)6qp;iqX@QyGvxE9Y^1w4_kPok)UFYQ_EF<(@wss|<8~E{+gUJW zOg2OSBhyW@B5_TYG$boCG&r-bVc-+mm*nf8nCS1HP(3%#!!wP|wQhLDhx-u4rB6x*Ge+;itnPxE<;JY@Ux z2#cgtvk`qK68z;r(`JjBWq(nBBUK-F;V9xYM)p&eGb}1?67)xJ`I%jE_Q6o*-GwXcr~1wl{2D;=Fo%HTUt&UGK?~(3yLWcO$jG zq0?dKrf1&IJy#sZ#TS960&e~)t2+G?SjS?x<4m}tA+y(x5E*&~1(seS*e{_gBAcKn z!VsU8EIBi;Zv744&wh^*q9;-6_)0L?@#?a?nVsLh32<@>40Lh~MBz&=ps|0$ZY<+x zo31}w_zXYAAJV_=bP5P`ge!o8mB5p&KtU1lrUmc}A~_QIalj1S2v>r>Q21a&Q$UsN zM+;Ui_v;>s{0pjqYuSasjYyE1C=jDWz+*o zJwvO3oE36j4aw;HIPi(Ok8fVRif%Ep7s6t+))52*>OWk^&qTFv5Cjg2BkMBt3oe=x&NV=ygdr~YDOKM zI?@DS3sF_8s z&|$9l0j@~@k1N~q>F z=b7*IA)`~yd_PV8J#7x}6sw{CDWwVfk2Ihz?=3aZru9`-O^kFjK<#V5a3viU*9Z=% z<-(}~mxC_LkKMh@y9|fClCzCnJiZ}^dCMCYy_k%$rDB|~;-`kgw{IVgOHPg(c&9d< zShw!PoiM31jQ(x#BY~tEwV;IxNF1bsPmm~aHNY_kFaU<1nAiXF5zU@QqrPTxk@Yz`7@ErH+=a)!%QwzsLLcF zJSg|vf`Z%&FJE3@-(aVV7?Hxhb7lYjD{!}Jx*o0j_q*K(hX&0PZ6v0x=h z9Sl@exfWV_I+~5zTI%}74O}gFSz4(Y7-;FMFVfS~(&a7U({!g9IrkkvB+xM+x?I-g zBOf0Z7dUs@op)Y#&VvW%Op~LfKW&t@^n!}(;7b>JSeWtSHe%{v&Y7Iqv*)dDK|a_9 zHtJ4bSL5+?HC}t{GR)L}(0nTMgsaWiab@{4&=gr6dl6CsbNTTgo}~K2;XnQsLz53; z1zJNt*s!&V$5S!t(lfT!QeL8=uA*hv zMeE6r8HZ!jgID?if7=z&MjYYVB_B7TN+TdtloQ=qqDkze|Q7B&YZBm66cvd z+w%y&iAUq56^&3e67jN8q?BR+_4|YJ6CMHa27PAWE=g`Afl(HZU{L(a^9~YSm#! zvJ5N%c%e|+qRWV<+NEv$zre$ZD|{c|B$xkR$jQ2t=p=x;ard@mWd~AoPFKRLqc2|_ z#hcLCx<@r59;fa`J8o)n+Y75E`whb%on2r3y8Mxu@^ye%-x8bI)eUf~bu^=P5M==-L#}X$!UZTH3}-v~-o#y4VDfz|jOg z(Dib&^BHIgHS#%V^dZUsB@u1;2~zr^+MnMK zMK^-oH5Qi;Z_AhX;sE9!;m?r%EDo=smJUHZVyy)9$Fe=3SI0)mhX7EG;JydD1lx#*Hqnrtp!2%k^a+%)p$`Xx?4mvsk?&<@0!r(g?p9@ zaybW&1szH(r<_)v&d?1{ywkxH4Aag^Bqb+$b81#v!IOIb-dox81H6{UB<1{kwCK-g z<93B0CyBR*gY&S&v5j#{x9I5pWnt%H?-i4|YW#*Rrly4V!0%Kk1m4pFt7^*%mYVCS z8PXgpaOmv#e0z>A-D9g}WXUxHJ;bF2hz-We!y}0JUjU(p2eGrjW6Y1hbwE6z73nAf z6Gb-NOW+gytb}MAF%e<-rQ!pp6R#=2R6brusltRo6?H92nbJ^)tU(jP%&&s5@p5e? z_)>KxCt~0e3c_c=LC_NUi{KCS`eOkK`U;&u54~f|1I@7E;0K7`efodnhBMmJiPuCjai+FlcReqG7o=&%+Rh=`+gWpB+{rD#QP+HxP zXRl0oF6F4}Az+ChSTx~OA=qf%i>xenU|bi6Ag~t-su4vdmpTR?UX~=rAghNrm=8tv zlaL+SgqXzrFxTb`rtqyleS%F%B;gNPPa!uPUuTcMnAha29JRW%b2rLGdWVi|2zip7 zQWLH$J(`9N;Ty-6$4E2EWQ*nR$XiPrE^|Ct3l)kj^Gp(!=;jK|Vge6lZ#pwr!b&WH$&XBp z#Rk@=%Nbw@Rl*0kO5P~&8uCPSFg@VhE&NTaOqNfN`Fh=!vnMufxrmPr@BwEzzCUvx zF2P6fZk&6%8=pb%-oLqi{{#MU@h2Xj86LO^JRpL-f1a$d(qSxJ`*u}lRpVA`Rd{*3 zP1jVi>@w36cNy?>H3<)BYN~hh2UtK=mCfg|JeRT=5ryRuiZcWU6Y&|%2{ZTr!L9$3 z(9nX)^ce!>nYk6ZEU<5Kg42BE&||GD4=N~|_HAxncaU<>>c)SNIllH`$@R|1x9*hG z;KFi3-sKso>lQ1B>15|M%v*vVy~OxN<`Pm1fSSOC#tb=8iQNNADm5`y*@)#PHB@e- zwe)BuC1VpX$wo#%M7mR5pacmtAfbYSKs@B*0?LS?9u#nhv(7YVh(Uk{WtpKETED0Y zg~EV`(>|p>M4%~yPc-Ts$KAh_j_tb*b85d-(Qjd^QbySq`FXUP**qB z>d{49O+!PZt;ts-q!`e#;2~)v;>iJPfg};n-vi9GT&?~uDWdtR$|{;j4~@orxpo~& zjJ_N%e+S247kVvGn*T-#&S{{83CMer)CFp6b_P66PJ5jQ<$)5nnr@=U6E78rA`J|{ z66k5_s%x1L!kCyCb<;dz!9WWJfrx;NfP@g_yRfpd5NJbCha~0{FxrlRUqTux<(hFo zC4R#Bs<>O(=#a9uidqF4jtv;)w{)ul@n~%&kpcRwjVq4nFiJERqe*?NMLV|6ljB|X zWSU^=O)#ykt<|k-8EIZ;jqq!dW?F8I%TeIuFipKw&POHpeO*?E-qQx3VkIvQ401aW(YFZOrJGlh=B14PXSF} zftECaLam~rN8e(Q-?_W~DH3F4Fg6D$qpnFPv%UT96MQ3TR_jRrjIu>LHZ5pe8ZAu9 zAO;2~V-V~Gl))k=p$^VvEW#7l&-yfc7X&Y_p8!I%=2i>&|l`E7N1QY?rL00;s^ysr6^==>5QbmT^ zn*P2ipGgiwEAVrP+}Oh2@(;Jw zM0t+LG1Ayp$5yHmuR^J)(4bu1mofo06BcFpfNvo;G!8EEWX8F3FBHoL-ej!I|9BIh zhzK2okp1-{HdZ2m=`0ExL+t_|Vo;1??`92(nC#=|?-x&u35@YiFz_m8#Osqhy&NKE zy>ky8Hte&O_%~dr%lTwsk|EAM0KNh_*T4@pM>d)A8aSr#vQ%XmEfk3~08O0&fvT!< zCrN67q9A`EG9^9}!>B}K5MOt|EgC)ho^uWMOWI24z94NTsK>Y9_?!!O0 zQnteZ-Vt%6MTPW}!D%JSAu0@$S{P_+D+%=xi)AFxQfgFJRpzVYYH7*dtZ6=-nqi5W9c z=|&V)3=qXl)HGRce(IO>@B3f#d8R1er%7$U+FL2ceV8GLd5iSR}q8G7Wz$ zwcDGUksla=Lu{zF*FdRn7SQ|%o857B?%b=gZgdNq$sV9S3~?r8D;4-MgxJeMRb2ot zWfc{kmX(X5S2KGE5<$bKTk04POwE_!hqLhT>)#+z z>hBCD0nYY8+yzTTT#_MChLgzD)buDpn~tV7mtw0cE3?(rb#&QUkSGVEDvz)T-sC`j zf)O&S1X)5jjZ*;ddBKDYZBaX3H|j z86Vuw0OCIJnFT9T>dIHqF;dadQ8A)<+S>X;p_Q7FMI%sDmCA+ajju-Q7{VVz9h&BG zXnh41pk@WOvX>riI=47Kcz0j>-H zDOO?GOZ5<-l1-^8H*&cg6&56~XtapL)XcHTB;%+E`w^4v<-otRJtgSd2E9O`w7u*u z{zx5jp|xZ==S! z;)=94$mvK4f-X9D+a&=;EU8?@oXT2!aS)9}{I!QsDq^9rN4CkK zW&aHJM;r1jMo?2RBUpf58WSUan;hOqBiL=k)`7^zU@4oJp8tgx9G?M*$)kvY+54t1eWS0A58`~Z4BWYq zXlq|Q?(6^hM>r_s@AH?93t~e8rEYE$$=aewuM6N^0J&cqR)o}sZEd2_CRCknCWM!* zajU>2vO)uD1C(wTPmgU8sl+qrqU7j@K%X)FLl@^x!ZETl8v14+j|06sknSaAZum+b z+cU?TFbj)9p8p?hZvqfi+5L~tbMKuEhS?WpfPrC{8TM^hL_h`*Tu=mDzy(D`+|AuG zK}|F>HBm9kCCySRv$V|?+cYc7%B;-xdfV+S+ZUPZ|MT2C!(#e=-@f19-%$|e&b{ZH z=R9XW=ehK+_3qjI7OuKyrG-EH?M40_QvChDzL>p))l7G%+A~Z=sEUZ2?=9Z2bos;9 zcl{*hSCq&JuKe({6&Xb_Q4QkyC@)}rED}1Y9-J;wIhzv_Wcuc)sEo8`S&S;VO{3&c zlF(*i5f!HDU-%*bPFE&P3{U{lK%Ez7=@yp}n&-vRW)s(Gi6KA}UeEvbfUqE|Nxypu zGj2W!+Yt=W?B)GsuiQbSGkagXc=n|`_Z@%w?)@iUpM5Q6eimc$>)u6kZfFXIX=amc zzt9-X#gm`@apA-Fe&^4KYa>61wXp~>8sMd7>?@p3qhf{CnjF8v7{R#Or53G2o!B0# zLm1|2cuB+(IvQj_#jMaBAXHYOe2K=HkY9=s|EKk`%yap@Ub^KkbdS8rUs`uEGyB!m znAV5k0xbLE7qgldE%cwp@_f%(D+ZKTBDivie|K=d0TsmYO9yduJWJPR^U7_v2f{7q zU|GUe7Yq zpmFm1rKfl9Jk2HXx$pA7G7s~`pM6NJUMZizQ3{76Dm~Db5Vj)PYBtKl1v@RWU2C}p zl`cjI$7pSumeHE!j&?Xnv;`kJ682g>6*;GbI48B+{Fwky2u+J{nY`Enw66|M2Y|&Z z&`2ndT@cyag14Uk=+YaHkLRcIdde`N8XXgK5%xWd$Iw==QwWnnhbqGMRe4xLSDQxfYAJxjU>DJUg;c}s{t zQW8QN3CoZ2Jh;7ah(&Z#k`@g(*rEJUZ_P9_|EWqvRA(|skfitGurH95*OTujRhE~y z`@5g`oOvWj+R|&MP}*Mlj872i`0ViiihK?wI9HQsTon<`s#_%*i$$f0kVLm@RVLQe zF4GbXU2kfS3}eV5bXwYr&jJ8vJ)q??@mjc@_p9r78dA?;r5T z6RPHELVpPh{q`&w_R5S!Ani}ATA*tO&SgpyBjE%83yBWL^%`IvLC~R{&nb;i>Y-pRFLx~3<7X-aP;}bziPvf36y+r98<3`^Z z^bakE6XYV@b=?R~S(jVFA05U2{#s#WOrPlZ@qG`xHl(4nljs3HrbNGc&qI}C)FC7~ zH0;$`Ca^y=~ZkfmgmBE z7&-qlpTNAlY4eRY3OqlM-!B`ARk5OPx6+ruG)E)XuG7e)m6~X!GFroWT+Qa#HY=wH z)v{q>YGq`bS|>M9Y41hl0Q8h4k4B|~nQK&z{{d|@`WoEo+k2Xz$aEEF2m z?H-NiD#((iNn!Hrr*j|R`~Q2QuYNA%OACSI=T`=!@Y2KlHT)e0q zyG6xTO!M|pf#10uwXp6+O$|3`WTKan&_QEY+bDL z01L8S{!ucJn|Av7Zwd4IQ=>R)Me;+gUsN~s+WF(C93t|)MDt?@$=R^z;;K^{mAU}y!p?bI8=T$c+L@l$LS%t%?*D=!AgjlmVHi3l>R!C4=px3cB zn>4vClyfjrY%F)1l;&tp2pKbB16lG;Vdn=I3HCYC3MWL{+-c}s7Ay{?#aL+c9f)L$ zRtB;3T(0I%-rL)?MDUT9%$re3OpWE&)V};?O$ER9cK+v%y5Pd`1tfBR=R(m%JjA~{ zVGxIw%*YPZ;oQqCNwjmT)XTdiih$sD2T7p7$ekw@dgG{Z~15xV&T42oYNFfT5pL|D7r zp6H_PQ|=@}pjcR7J?(6z5{60^=54x?lNuW)k9_m#reWyrJU-5_a@Gxt z{Px+i_Z8+B9d6%R_1q}TcGqv7M;4w6EPBVYUCRwW1&LAa2~1+OLZU|-iLRL=c!gTS z!y`gkLM29&VTTa4RWEO&bz#&Qf(jS3H?YwKO9q6J5eSliL=?`cp;g{;g61X%N%`&k z*s6ww4*rp3lKuJD#PY?1M6#?foxg@DSst@>an)@%Ckkd*jKO? zW_S*EWteP*HViLGXh=x7d8I@d2B$5I4K*3sg>ZZjED-xLsAwEMz)lX*1))9Z{Hu4q zw`47;MUnmso7d&0dk5&4m+smB==%9Py(qrEd6sF~&=haF7qFn`n>zv;#lWI)>6b|( zZT1$J(o(!)%^2w!v%_K|mT^CMA7L*hdSx(CS?GsNQ z9Y>DxrN6_2{yW8w$(&=l+qC^3eL}7uu;ukKB;75;l(k^^g$;X^2dMmque^^dUsf zNeu=@r&mj1{m>*lb`*^WA!sEAtTK^e$u%I`YVcAP6GMB52|aixe}s%_KYTy`Lw_qL zQ&>oXkRaMvF;GKZU{7Go$B%x+_d^TH2eY63)%4+OfaKEGmvXsb+-Z1&fCPZZ7!9I( zMhVLp1W*{G-lUN-*xV<)MJKSUN!lp{8og)qVUoC z`Ong$IgZn7AeP}wZ!O&MGE>7WdXL=aZ`eO`fU_=}Y3`8R%dZ1X^vDEF(sKyaqKb50b11JRUw+0Ch_@VG$hdxWlRLBa4#~V5*-FMGR+l*fM&N!B?Nu1 zget{TOooVsG+l_&5;bJs1YEH$2D8yZqnrj=75`k$H+QFwPjwc%3hVXmyA>hmZ(-2l zB?SxdACr=GAyOHqevqW>l1t@M1`!;|#e+}09ir_p>W~#+>g**>W3)O-qxav%N&Jmz zrRC|&R{yn8g{cFQ(wLbP!%W`6oxA8LjQ5*M{>qIT%2G^EXIL5CK# zhIBF&908PHFdrmNOspC|YZMd1zxmX^_=otPXS_S3;jy+GZ`-!{dD7?f8F&E9(fmdE z+yR|#K;N>;NBD=hub=va_eUj=2zUIf@l$86CgmSIecwAO9dI)Ow`}f1;5NqR1#Ybr zHwnc}BH-5Q4s~u(I%Y?cXq8V@rD6goZb{IZt?fNgtk<5Z|8J3`vy?7JGEmNLVP?dQ zcI6DHEF<6X-`@8wf8v+=qxDsHt(mlXn)Ht)WWM`87wj z8$+nkNyCpubEu;|MonOgBF6&Lv#6e$E1mY|dV-Q7NiU;k!MthH=5a^QbSGyZju4<`i7ys$1WL`WP=c0NIAfZY zXw41;5CT*@RaE~`=Bdoi;6_(;!yv{Fkc0Z)#}8yp{>4H1^$Z|jH{J#BgH~FoB@Ukk z^$c20-9k9E3i^{SF!DSQAVSgy!cs6YAnoxN`4sXMjkqgVS*T1NO7ut;PvH~fb2{D$ z)5jU~cIK|X&`d!q(i1oAtSFrXq1l@B^3XcVm7 z@Fp4P-;V&oS^wMSN;lcvLHKywwE$Vld*N>+NQ!;2ki+0rFOjvsD(;1-T?TWTyamyF1dPN5NH3$f*@UC3ygHgvA2@ z)7G@0g%t=a1R)m&Z5sM+E?K;G_1ftRW-gvE6p)YJSO5I?x3sQ0%)jtQ+3vE#(Ge{R zr_Ve&b7n;XO4D7dHGz4C$Sg%RjI-Q7qBREETmUUf2-c95P z{}xGp^ZCbK`DE)D{#XB;hMFlKl9tlEq?EJ_=G#9S4?XeB!Hq9%;-BYV^N_S6(nMN% zmnQWZ(65R{o<2oA^9Ah2PKaA6#H+d>ZU@9$1c)PJwj!$_cq&(e7|m%V%btfn}tom^8~nwXlF!Pb0J^1!qE_pN)n8MyyuJWp+fDM4#q6i1uH85{@*?$+{I4xGSQJW|dJ(r6%*AsS5nh)| zra~;*6TOnc+pdXir|?Ebwkw4M0aaU_@Csq}&YlNau^WU}u)_2`;k^m)zW!6kzy3m3 z#uNM-j00PTE*vg7P$m-yR|sawjAvRe2UE4qKJ$Iq{xFmXkQ8jz+l zH!;hl_X5(2$0aIh$fE(;9+8GTM8Q2GWqf+ghS*)POzbV}9qa=v{%9ic>q7#$kE5#L z6s>6NNpCsm9WWro#^hkvPN(yY;u12$thO&+wxf09&LjK1W4&4RS$#`WlAMv|7^yLo z-6!Q%G+(#r*x{ExHyckzN6cE$SeNRINkcsVB14x-WeRYw4OKwU%u&)-q775a6mdHsAu@#(@KO7$|k)%Y3YT!x9j)|+>F!De@(d8?^?WYbQ8vra@O_C_>1zh zXMcM7=(@ec`2Albr{mdeErTbmxO3C$Hc)@%rBZejun3c+`z)a6hbE;((eM#6g14GQpL6K`Qs&ZzBFY_tHU8tx0)?l zoz0H%gaQPqa8a$CdzPoxnC)rgq`I%?< zMt-3{Gp7H?H%{~)V=B)ro8^BofDO+4utGTw@Og~dR-LU?CYKN;>cdfXrsOysXH>OY zw1^6t7>TW2E)_g+fqpb_j>6*Z2!L%N8#>py6I>x;OHq-kf{XhjhOG&0U9-=TVP)hb zT~j9Sd)m^)N$z}-AH^@D>xpEcgKGonka18b0U41>iITPG)vX#7l9*7#CvP`NXln43 z*MACLI1Ne$s46Zj;GxYx9&jG&=s-LQO)hhDYjmV3)0fqnl$I#~l0A!STgEE*4S2T!5=k7NjPg9UUFNEtW~a&?u?0%MekH- zWTtSlu{|oHi`j%YBQ*z*;1*O9$R_L$9TJzQh(nh*g-nbB!3Kb{+qqweDWGndKX#f1 znBw^7$+3?Qt+*zk(puBEbGNug41Sp_dQ?6cQnT4Peos046#fAlNh3 zT`?KD)Db&|Ke#kAyL=sgn0AbjVWM&xmmN?_7JkC6sBc|lbf8x(sG`2%B%Qj6p) ziGLpt8r-z`4ZaP{4;u`fgEMH@Pc*b(7zhY>SVZAELz(x!mOrxU&E1<{N*=PQk>_9I zJ{sM6UZq!Rob1;(bPGvpUphjI=dNLUnBlgGIfWAbdoHCxu&(NbnL2*`4Wm z+6|=dmZMj)AtZ||<7cCI?L~fh(}=An?%MkTt;XlJ^N1lo&p*T0lN}`SnXmi#r}BUL zPtpv$A5kPK<-g(A5vE@e5#dyaIaV;??IyEYV&9^WVlR1V%O;qWl97tZ z4D^!<+TLu*b;o%ym_mXKqr}O;gbGrPOyIvHVQ=QoO5t+(KOdVyR-A%s#J~0Hso9eo z=S-P8eYTav{`olp{g^R7tr@(Y|D1mYqeD-Un{T^!W!w5~Yp6tO;S*Q~R^Lo(XoyxD zu8?pmqzc1C6_H7}2nkwBso^9FAHlB@x@W}_8oIL~H^tsRNJ{b?8H7QD@Ekbz^2xen zT})Zbv^m7We@m$MaAfjSshodAr@lpyHT21-{V@nnR;x{Ta;sFKZ4cGTG*^AH3+Lws zWC{efP6&1c9*bHYuHslmRIkBJ3x56yPn4d0`VAHTVf3vx(6uOs4R$y90$d>(?2A`4 zhpU<)P)xB=;ZYnH70xEQnu$JK5v#z^JtlsmM$eH=aFqmJL1syxcM7Fu)G8CqbnrPf zc4;V-`c5XHXqX;ti0T5NEmBBY>gj5sqg;&Fm-0i{N2g7?mKfUjW8d<>^QYf=))3kI z=SAM6yzF&j7dO)W)JNiC>kIll_tK^lzkYmr+v2N6UsPK6lrl{~{g}ymX5~qkGBu>F5L^X3NM>qz;nOM(84JuVOvG9{AF1@P(*}HOK}mS(Dd*noTw;-?CIW>F%$_*uM!xL*-s9244mG0E&uN}Qur+tMVf%i zPuCWdR8mxEqwOOuhltAY-@8y@XHKk3ALcCxV$vTmqwVk^BY?>OpDR-8QmhD#)}!xl zMYJkfmEc;T30LSN^-`&twt8wpx2WO02Jr~4iBLBt?q&fGEG)7|0^D>Qg%F~qJ!EkX zwwv5x=aR&aPMh?@>d2!VGmfrvogJMGL8@}x*tDQ&&dN!g+7)hO7DqW5U0gc+M96GowxPqoeaNpl%b$Ot?!MZ| zuTDlq__7U?`B%_9#()39s~3~g`E#juvV;`fPTalmbj_tN*|%68@j^V^B0Sv|E?a@8 zqb!UK--2=R!p@^lf34foEtHYOrweNd<%KwsQ_CJB{QL9TZ(Ut*O+l~QhW*T+?o(j? zisirAJAd`I*mxd&4&h%ntj(ak-n4p|&RS4PTt2;`g~;WhTno#zNu>x+N@)3o7n=wV z#$KW=0K#6PWYuwb9n-}@3QT{tMi`!e=oEA5A|Jz5O8*Vrn<}aHB}f#l`q*f_3S$BF zTzdQ}t7~gybfnz8m1C16Ns)MIVk9B$8X9O1ChD}uGiiiOD?XQ|IZue$JMa!-SwL1E zG}mbLgviI#?S)QsbPWv3#fSdY`yin}DRH9L}>GV=l2y7jZawv;<4YUiIY3R`u93RXd_CisCh}0i* z2nF&GnyBv{!{m7!$Wf7uS8+1tZ~jBJxDfn^FUc4d6N(LKMi z<2%5#lD`=V653yo>xl$Zpa zu1+roL#d=6b@yNH;xF~|U1saQfc+j?x$dfQ~si&fyUqHB%v4-!y>DVQFx-gflll=ewF=$d!O0~ z1MoHemdJtCiKzbYo^ES^i{% z%=B61Mq`vpvw}!$8e2aVG`hasVpg_yt9zyUybC4+?IZ1k!X!cnPk|P{N-JVW>Nk&6 zH(ob$YdDGIzp$*INxLrI;Xg6=W9m*{NaufnzJ6ltWVBoSe4JWD1eS6G=w*R-Qs+z6 zN!S)^1YWV`sAgrT&ahD}vDh|;nnNrhN{d>lh>GM0QFGRqjVvwc0I5JcTD<}0fiOV+ zNriH)>sEa~m`WS5Eyi;7B# zP)Dl6!ZhAUPHEE0;@bsXCDdw&m;pUnwjnC7aB-Frn5+2-kT6VQ5TvrP@HgcjxZy4|6lltUr^~G!WH?lG9JtBNnrGF@KnU<<#{* zn+byW zwKvc;4fKGRp^Ix#am1MQ1_R45(cx-Y3lcxDEfgG%<}g{qL%9%hh*BA4Hfp4Dy$U7^ zL8E6xs+=)Md z4x4byghUu{8(MTWS%ddN$cZ#*j5XlZ-uk5MP~* zA%L%wjC~VDNzUkoiUR(YeQ9jAe@{7M;Y+X_9j`DGD*WG&rx9GeRg~?GO9hcXIImw#t_jSPX-NX|=FwYkQErI#&gK4mzz$)43wlYoZthwiN2X{I7XM7NhF{Jb;VH zShVag#*iyD(W6ym+}Q;vi@!avAg}?Gor^oZC5`$mL#Hx>T>f+9*j)aBe`8}X(_jid z;<>+a&QnXp^^n$LJ)$H|cz#X39GR-wt%;3|G#M2NqcPECk3fes0;2JGD4A^KUiJZriqHA_YI7i&(L>NP6 z0;3_xV@on(m&oN&hEVlpnq~5z2<~DLK>rDZZD?kMhV}f%#r9-_F!nwU;XGjqkzk8j zTqbCjz?i7c`Uj7cd^ey!dc&C6_YWvJGHTX}DL0Y#_&=LQVOrGp3*WA+J2`dk@~JQL zLz%X|1-CYw{3Ifhe>*j&s<_vf{5AUq_1!n~^!xGg#5Z8TkdoewLz}53h6w}g_1F^$ zl9|4Yc;bqda4XFQt5%!jYBhyeqkS54|LEx0t;B$BV~#f^n2cH@XH9U)hQ^`?mxMSWt1Iv)9^)6$2!xSicA$XpA!%!>?)>Sv=gEX-=*v_E6OkLDMNrNJ`W zvdqGzTYQ#JEUd*M3DaFLhZ=rGC{xCK2RJ{pW`xk#Nw`fB7umwviYZh&}=b^UihYXmu{1*T0QKLqanf?2-(<90z*&_1OX8MBaGJwey7sARLjEY9Mo#lG8lYiPa29L>^j<0$ydh1@amYU{6+pGV<&&{N0-vts-+kW z9r`YL851eKXCD6WGx7{DfF~@+)6uJy>I0t|^~-cRdjx5bs5l%_6{*)Lz)+N?Xf73f zIy_Ab1L%x$vF@?cuY*sA@;(?kcab8M!fGT{I5~7gSd3CGBTnAKzwgw_BJBM8yce$B z-kbNY$Y)>g$amj4?eS{X`d1TM(=>TeUB`o>$C*IB0$gI8szr!XVVXER^I)8cMi0f( z5gIh1pV42sr2GJ%@gSmLw!|V1sf>(FP^v8~8=((j?Fty=0xAM7v|3S^q7)p8)1yw0 z7AFdYl$|Au>@{B+;FE?aI`}8Zt7OtgC`II~f00qY%0s2drkx<={7U}zKSDxzSsb-G?*Ul0}I?WT!tMZxBgV?PXV2XMqPchSgkeunw z-Q#~;B0tP%k|jmi!j+f4liUA(rQ#N@99JqIVi|P`E)8C*y!Y~JarX;ctp9N$SFDqr z#%I)za%^~t_yl~ALW5_-Uj8{ilgCXLp^2l9pwMiH*v zuIRkyPdzZ~yl3y=m3?t#6;{#B;B;o;o?8R=yiK?#n-aVdaLV|L%$xp5_>g_B+? zK)MRozA4=<+z+SS;O=?!u8Q^SUx8~gIjV4kP0 zB|fCt5|39>Y_n9Guu0D9;>B*`K)5d;t*E?m#KyUCT!X`b@<0atjA)C?q=zJ?GERqZ z#0(Bz^Xk}L_wZkxoXvDF)lA3ill)ir+&F8-{<--ji}p79zi8aMs3d>x{u#5Ho+i3` znJ4{a_wqkH-NbF`nAfl6zDd*WzNUBYYwn&l>AseJ>^c!*N=e97CurBl=g=i^&GrPm zGSfrDTO?@(p(Hc}*|qd+3o73?(~a%_sQ#4jg^H=p*b^KWM4N)3Bil-6x#6%8lsg8o zV1xgmqXs$x&_7;Uy?IV)pIPm7rMrT7j7}R?6c=ASG_e#@2Lc%E815XlcG~pKV-xEJ z-f(czwEgo6{WamaBa6$1rfT>S#OS-IpCBp4iquOc`&@NtRgnoTCDqv_u>(SyO=%?q zOr`-PY23JiX6cZc$n1!M9FlW{yW|U%vsKmcr3u~=Qi7ik37FPr(lWmyzxbW%Ik7Mo zVJ+k+Xk-L6fPY^(PbZ??>EOaacsPt2ig>SHUsUC%Ph94-F5eYS9Vggh?Vuzm$#GJHR{{A;NY&dfAk8e*L-63rn z#G}EE-_H-rCb=W{b8q}U1`im>UnfKcahiwE7#hCJYPF-Qg~GsEOl?-WfH3w1=ZETU zKjKz6JlIS+g>-9`7$@Lj6{c}S@HW9XW;)6*fNpM2&yCh4v zAand5eV8=&Bf58m@51)Y#LOCzsVPrWX8xadF&wb&+u9i=90-XbDq&a8dYS+7zQ^;L z?wnJQH*3$-{9Uv6&(14auy4xL%DTPTd4&xnPIuYZyu27&Ol)}9{@&EzHGJLFshjGP zs)Le>|DbI6oyC@%y5h27Y1-n(`O%SfXg@jhfnV`Eq?Q`Ke~F|Pr@$_dv`E(beD%ib zCeNxJn3&t*X`VjO<|&_>UKP?@Xq@bsTUA(CHPa+47p;a*htl8ve~5%UP^V8&+0a zmt!fub9h532S*g8)>FY!;`H5R3+9uh8Z2~DEA@Q7t z(33909ztA#k))kMK^1kDvK^e~;yJt-e-~QDNVXR9tf)OgDM@={Jx(=C4=D8r zqeyeTYL=$M?P!RF=0#zdm#`c`j>EW;lN#zaS;kCgV(rp2&g2Mx~UmDskm| z)2&JUqbyc6E06Z&ky9N8eiNDb8nRnY`2EZyfD$$65{V_?q#Gmyz zpiB3*0AuZvD4ESyR!$m4FsuWLiU!DS*=gi`ewqkTZh7)UTM*f`!YNjXZ@dX~k+eK5?kY3#omf5n?fv|n?wmL@uQ4VJo{lZO_4n_tc zSCTI&0fI~ z7=IyU%012AY11ZW{0Ee3&OozWdV*ia-NJo@=wX_$8a;7hu>a^{pf65{aZvWpCEZqm zO-~*=YEqy6Ev5aJR}5J^Wo)K3r?@gBBXiL$2VVPmeG=UgSqt8H>b@%e0#=~*{P}}` zTNB|957p|i0+GpCR!q!Nu>6Ore)Ubmd(l0THh8?3;Xw93ALxYfe!!R~DTMAVyNvE4 zj7SuN_?^`M#{hdqXK~u7RObrc$b}X0A!WOtJh$YZKp&EUMz>Iwzu+vY%Sjqumh?A7 zxJ$oX`dG%Iz$6-TTqrIQ7h?4mdL*Twcj%BE^a`?emO#S*oy^Rjy&hzIlK8ePZT^k7 z55M-&#f7QE7Ouau7PBBM3!$qNSX<_TRZ* zJ8or)=L}7+*?980$!!fe5pqtcQV@eYM8=T=1FqXX42d$Luoq>Z>o&1!dp-*7ds+1Bc_-+tQ|N4eqeC}dt8Y6ruzl#o{do_XQQAO~PR2s$T9 ze3HI2UPVA)s!6)5nagmvD(swn;X~K?SP~Ljnr|PzBu19F@aAnp{*F)It7E}FI%M6k z1qr@nGk+ngB-I;^4%?n+@!ww=8IflwF7W}W)17B}qV!+$&Xw@_$6RzdM*lM}$t2hF z>*OP4+mN{%D5;dx;52GlP!zDHz(>@-mIftfCdxmAPP}oa|)flb6wB zTqk-%&Y%B1uYFY3jK!=re~aPJQifsp3v#tZYYJBh zyYGKS72WaRSp^4NOX1s$mW-23luQQCUX@9qg?eJ%X}kr!hAXTm!5fJBD z(y?Az#~nxXUX-+hy3q!f0`d&0Vw?q;Lz+vYC*IQEVEBB1y{Uu{SLqGi_G?cL7o^cucPrhYojCo|ox0)t`On1#{Kwn$ z;`3*uL#W~wF~E$*8@lb%o)}!tssAfv{>lElI$r<%=IlgJ;5`{D@LmyiXFo{=kQU6; zKCrtfyP-`h;8IeC6Z}bPlJ{X)>TFQyis4aicjr1`&A67aFTR;u-&|JN(mN$L^w42# z!|snai2Qao$d-$?)hDY|G45oGEj89SwtgC?cpvKp?}D1hCd0*5(JZ5>EwU;deu`4Ddj`L_le9^|30 zCguzcFMjLQ|44n1hM$-{*lXo4BxFFsCi;0UN%|#h*)FeBG=~IH8jMnlGu$9@`$!GJ zC^lFePDGHsso}sJ$(vYHoMK5GHorV$V#6qpJKd&~Ya>mc*d1{tWAnmG238Iz8f|(Z?cnI%+egVM>#2)sdbtb{#Uo}99KUHoMpna3a}s>sc&#a;cmL$b+$5Vm zsb77kZnT=*nfAebC`Y7}k4VU$R+Uz@bo-zoH%`c9Y*F6wM17<|Db?An247(c`Ab9q zngQ_N5BR&RAK2u8oDO-RymMtls3YC!*j)(~?*6Djvl3((Ye!ufrMZK0#tbgNC|6{4 zSygN?kM#RhQTv_0;4R82=!sy#w5rsI)B=aIq))CTJSEOdLavIXz;_~+qHIMLj&yoZ zBBEE|J?hCyyYrvf+@1e8mozLgBf(ly2RCZ&fUB~g&pfbsY$5+v4@N9m;p<#FvdrOi z>iG*9Io|BJtfDJ1bZ~3S@BdTJ8Y{*IG`ahCxl=emRX}Dx0@>4;Z4vU0V zoGVKKxFbd4N*xqPToDMw=Jc2OvaF0`@~22j$NBy zzac-x{kAd6ptKCQarWr@T8G%vdq*Y??B%Gt`@78@NtOhaE2CFdBY$HRF`DeTgVSQu z?-w--yFhJsrAC{gBO)~6USCz#xW_k*s$6$`(d0Mg4V*u2h&yXib!Kc%U#B@X(xx`$ zl#lLR-#%xMu~aIHcDvp4W^%TSh`9XZaOEF+1p9zSer{!^BXVyWE5)RHzi8wX25# z?4>j~@RT*=w5K`nO#PQwWRPnueO(Xp1GmT0CgfvTE1J z&CgD**;7%udQhL~LsH}>S5#atd(nWbF@59hnMK7#nf8ujlnOJiNQLX^-r{x$kzFc1 z{^8#0q`?1f8@(&y${#;}{(rk`{v1n@vkLJqx=Xm91G^;V3Y^$&mjK`^ZwS!;%IwcQ z8jNr<2k;b;-;=KJlq>Oj*W<3r+P4NCd{su~o~4oPWt4B(x4LYM{{!Cws{aFv@(}X> zdxqrZpF!s4LH{r8Q_NF{nZcr?EjL{$1nL>k{zOP}uOR8sOYaIq>gk44GtBwu0=r{a z!?a#y*Nx2b)?HiHcWEIZ`nc@a@1oOUkUv~Lr{h&)wA)ZtZ!enSj&PZkygg$`47D=j zhb$UWJbh52#jK6imag2eYuwIP*xeCPiFCH$D6 z-bIZ2pFr!**2t~NCF!=j5(^{c{t?(?pKs7u4I%u6C|gvH?K0qzY6pdD(Yfpfg$vN^ z00?PjKqlJGRFJ^|Lr1mf?|XtVzAk4!drVD5+|XHl9kQ~4Maw6boR%EKf5RqEwh=zL~os|9ULk}H9ah?JuoY(3ax~hS?StCb}y(HP#`t|*d zN@JvvecI{mWr|6(2K;${!){s&1ZX)1&?ZQFgTp(aMSxK-I0N8z^A|lrI;zt{qyi~- z+^|8evhl?(B_m}<^>7j&4jXv=!8wUF!$)N@Q+xV_{A~c*6secTWR=9qt*Rcr;f%*t zRwxWnCWi0s4Dy+PnM0q=I8Muc3W&u>sl*_}3K;}Tx3Pzf)_ zQiBFsP(iBY^6ZT7(`tvY1ny zanxXV(O(QP8^DzTuGxWT;?;2#?Ck#&n*FQ(AEC%!_-_%UnQ>VbQ!alDc9w*QR)C<} zEpk!q3&jJTTqa9z%P3EJ)0&`~jsKM;y=hAbn5pQT1*K=iSjTR7bXK(;N_W2`K1dKd+9&LUV9bf8G)wv zDlqUFe&m0ks^O|nWVT*`++kPv-BnhAa94zlW>wF~7P3wyO5m|B{Ur1L`P#Sw#-UJD z;=y9|5we69ISpOWRA*4O($E%`nyLH8Yw6$k-+si|=YPHY?^&Y$DZgN4{kxcZ!7swf zUY%q9AFS+$S6soXEi6tlmn|gm@&Qz*2%+lu^XFv?VZkwy0_?x&$lQ4Egu+^P&c2DZ|ZLuWWFROs-EJ)H}W`Givrcg;qXKs#fUY3^%KM6*7c) z5A`1u<}`1#dL^QF;v=L+!itAp_SpJPT{n)d$#{Ql?uXZV>*e}c+S zDAtNlvM!6%fPZo(BhLRuKjEwFhn~dSe z6KrN@5~KYuFO*eVT(CunM%RRcc4La{@qLoaro`f;qPj?FsP;`~baae0%c@TI|CiTM zZSkjn81n>HPgvtCQO|#>lX{d_7n1uG?}2(5n7}}rwW)>Ijbj7Fav)|mb1Ac+G6u$j z3PqLrxRT7Mh>X4osROg4A_^MHJi~H`li-jQl~Nz3Otc#0u~uzZc$|erIZ~elcU4JZ zcHM%aylGYGIuj|-r^H8wSt2z~%%Z&Xi|l$POc9BCZrXV(VFN=Y5Qzmu=+1_MbDGV$ zkc|lGs~SRU2lN{mI&p&j_S^O2NSG^Dx=kAAj&n(GlRD)~hg1%#9=~T#r86lx_IC%y z|A>2YA!AjzMCxEdhQoy&%vk+jksGkfzn%YqxP$#qGS(ms>1iZX4g{~-GM|3|S5bXG zgiKJ>BY!B-xo{qW$wel7_Z`1ezUPUyg$vuBxa=B&t};)y6cdMbe)k=jAXj#~%0Gro z!1FG@6aU~9uet0_yg7IkUC$xRPXbI~c)ak$Fs8?I$%dZKzdi6_7IJS0cSGQ_y30OI z1s(H~_{rcMI`*DFAH*VXm&f3l(fb5o2npUr+WqrHiYa0+`k6QB79 zyHZ%c?EiAZ@msLSCI97S(w)H?kLBkopCmq1f}w_yIywPA6VV>QbD&cK@jDhf$I&Ti zP|JX7MsG0iqkJ;9cwAxmj2QG1CWOc5XCx$L#^}vzX|%E5#oI^hAC^1*g~_ZlEF!8; zLup38oaE%p*oatz>=~8SWebl~bEK$d<4j*xA~sQIcw9nUxIWybNa$2|>@6lF7UtAt-3#6kyXeS^Ff{)`m zbYiehI3(S!W1aj?I$(uNAP4wioP=MA>(ErrZNmLRaX$=J6B_uCzT!50eTaYRfv+(W zMe^sxncSv7!HSsDjjI!-Mf7Ska5-@yzGgd_SJ8lcj{W1@N^b5svX>uqPV7OE9;7`b zmB|=#|3M9D?&AjdCh(vISv?99VG1Igyv~%YRpEIJxZ) zekpmGzxYN|({sJ!T`_T44lVQHDT@)qqCO{6_!@F1qAaE_pTV3W&-%w-SiM@`VTdf6 z*pEHH*JSiht|s^T^8kVN(oZrEs17?p$Q;>VVuGk*3P$+QAf6>*RL6s7iEc9!ff2AHsPo!le!%%ruAPSMqR4iloHN=LwK~R z-8gm6?A{?ChWx;k@SjGZlQ_dhqOfPdC$jfJ3o3cBvY=~>0W*e)gAPsYJTD4t^A~xu z_)!7HC-~+3v5M0-1dom4^;rFb7;>EFPhsX2l?RTF!X!e>S$Y_qy*A{xBrajmXjeKd z*AgDVQWqvzN=eTqQZwWQoHU8X=ml?$xOs9(7*4+v(LQ9Zn!Uc}@o7=n6{$G>DZM&B zW|9A}^z7{q_i$>^2cA9lz;2;%tpe`j{lC z!pfIFHoNeH*!=3$l#b@5bWg!o6VHZ~;P6iz04hh-lQ_RdAO<=Gb3M$n*UZ5ou0Ji= zIBNnE-F3#Ru*L3JDXpGxAHROazHzJk`oKA_;x7Af0iFQ4!rcfCM=*>&fekz%uyb+q zYlie9i{6@d!?al8RMyAEbzeJ){h_>;|8`RQm=y77R&cZDy^(a+@^uO+){*9t=`du` z9~N)ewPzrIfdNi7qy;HLriXp#*uLYh-^&v9bMV4YyUD64qv=&^KTDMp!*l%=1Xz^Qr_u$y!h~- z?L>ER4CaL4;3qBrV&`6EH}qcp$sM&dx4paa%X=Pt8t2G8V`3dWw&;Sv>t0+u_0bzE zD}SoPaWP4JGhH=MU@a&BKK>g8f^6I!bFOzc%!9I@^t~$1LAAgX@LkB#wFI_*09zPR zkmg-4(YB__u@h0Qfj`!%JqrJhW>BM$>-o!31X7X%n98IBhLH7WDn{cHrm*6H!c-$n zw>Uuho;*d4p5j0M`PA;ac$}E$e{mK+jQ^32Qexy!Oz`ifcUi^X%>4;?yY6D@ewS6G zVAri=48|b6xvp^@8lxrr&QbiX$NdM$0@Adzkf#zl1>4sl;~=}x4FM1^tc4Do7lSMo zlN%dUm&?3&f`8%8I}aSlpS5GcSR`Jzo?t#%=-)yfZ1}oi={HMjH#GG!{uX{W|HVQI zSMZ*+wTtpCy&wKj=U=#^+{zVIc8%Zv`tfaRbh*<;kvW6f zPOn_@@-2fIPv-E#SVv)PPR{WB81}9uNBYhhoG_SwXXOY}TuM>;3I6ngXI57XTydz0 z3|Hz3s>bIOOelAI%E#wF7SJOxSUD*=90OcJz$vnrj(cHo7%sj@Ef4AK7iaMFd{}bn zH^_$>s6oLRiL?mN17oW&6u`^PxP?Fd34i>STS&ntq~I2A+r>%ZzdH`&52a=mGWFld zMhd$jSbgS3UngxPu+T`UT_^{l={K%wP}R`e&aK+<$%ejplWwm0ckjlEq^zoO$)&Yf zrsM?niMp@X&U$+7kQvXBu-)tUFJB#XuzJ^#k2g%-Iw>Qu@9?Cmm0t0Q=h=s4A;?)G zA|(c%L*sMv-WjQk=P8_#)rp)-7WyHqGx>(Y(7hJDXoYW`A!|F;boCOFlQg+7q3d7#{9Q z(oaL%dcxYrW+r=vE*m*w$q<)}jqyK^G3$9zOv%OH!c?K~f~>J7EGlzJgXvJP2LTH> zSv(&ml@oUaozD_5m%66|5a{5B@eLJU-0z(}X;fbig~r)Gj^9bfKBEiel;O|$pA$gw zWLkaY7Okh69trc(i(&SRfsMt37FH$5q->MFtygvL!OWbCuTf~C;=@Br^W#-2%5~7M z3MoBxHbLY%6IG;Unw+4Gy)e)_yFRI2MJ7Y+uOIZ-?A!d0Oq~1_e{sk317&2wuvKHd z8Dm;&1}v`cqf!-)StPxEZsFi*&+$L++0UOpF|#1&?mi3mPrv4Y>wMn&*6MeLwvNsa zccJV@==XFX7Zu2pAk0IZ*6vFMg@Acuj?6w>Za~Fz9h@;P#~t50IXY}l*8NLg=q1fx zxnXU`Y$7f)KCkDc4}`2 z1q|4S(9E>frz;SxW>{f536*d{W=_jeyGCfHV`eUUW&NNbo8DNy^yIpV!ELWEp1nk) zN-5|cKX4W%%6`_+kkUKPI`HNfu3!4{%>yfLdT!y;S8o~2`nKLuk>|{H8}qX)-Y62y z&l)>6*OQn%iFdU&>eI}Ur9`cT9{ynzkFj^qEu|HA*+vC@pQk}Nku zt8q*RpD?6Xb|rZqpBux^=d!@%@I`Y2p&B8_8T30bwIFCj^=H#@Tn8}lC z?i@I~uDsaiPN~YJ^Losl?C8YeysU__lN)C5o{~Wa`&ivpmC2p$h{K6pwz#Uvts|yy zos_GH=$&RyIOk3(tE;Pu3_)udktFcfbN32TOd=e{fI=H5&QgMcFcG_y<}bLW*l9V3 zA4nQCc6{bt%*Xx_+#tU`cS2p&fHFs7QzF0HsDC1*A}8tz_8f-%UgR~t!8Lu8Fx44% zpLFR9@&dCF7JiWb1c4lgqZ311QCg%i+T(GmcIh2PZICXqY zge`9P==wx?R6=HiBQFU@gMsRjW8`%vjB2RPhH|l$haq}TNk(Lpx34F@FDQ{&cFdYm z=!`2&3b&>d#JUQT!|{3dr4!@<@+^&Vz^yZo2R8lIM4shkN$O=AYz;z>UN8@sBafvmzj%4eTlH6hGYpU0esask;uR107 zuZFP}rz_Pl=Xm0{rfFU#$=yFHBRxGLsVX`>F%cAykcUHmX4-^Rg2V{@87JZXOdkG_ zVv6@PeAjy#{sN=n1Md~cbT|W}9P@ibjt+`F7;;d>ICU^EUy?bLKEGf6#z{H7XWTY+ z;e^b_oMBV7u=w9oPZ`!YO;%*F^qSH(a^lWw@?)NfimI*JT{#R%Y$Bk&8cn-}DhhKUg^CU~p$fC(Z#ss6kgSGJ$+Bg;Y6}ZIXx1TEe;eYff zA$kXIZeWfPb&C+WqMgk`ZkaT`_+mt2PEKM{ZZ`j6QciASN_Ms^n(0%N?sli8x!vg* zF7Z2{vP&bGZHN?VaZgrIb2M0j!{NL*TyWbLiOXvHfa>rw@;5OSgj`Gc)gOAuc zz65=`-HD+TW_IIFN{Wr)@_SU$kMC#`puoqweUwO)vRG~eaG*jxRZ2@uFlXK^eDA}e z6kRHJ;zv2rr<7*7qb#AP!mQ4;*imLj*ehYS*mS2e-DwRw6>5ocXZ1~f+L>dllEn^M zxp-0Yn(A@4t!gPdH~9Wp6Sl5u=~uq=#@iaI*EBC$ymC-MW8z7yK$T3#ap1c+Jew{6 z4J5!n0tGtVh%V;iI56L^)s2P9YhQU~vHJgG?d^lCuFgH*{lj$PD4MpXGSOqVFB^i& z5m3Yspgs58)M)_~P+olHoU%l0ObF1lZo->Eu|ptD)4i#ho3hRy(K4x^^5PxnZt&dZ zc%;K24w09`D9L1Uxg5_)nvOM<%1nqs_WgW6nVC8@cV?>Y)Rg6?AJ$%b{nqb!p7pHt zTWkH+Zh3n1+{zP+o?g&;RdF*O_|$^MPsantGuv_Thuq}bv(`R1{)U57al=^)?!sD6 zqVl;MMZ}p!jIX#%-G9|9UNZN>g-;r;z3op&kN(r!8XN!c_u9`q{D1t@fAaBvDeGa& z8o^N>lvc{p*gpw<|Gm;K7XPI1Tr8gShr0bwm3QIU|Fz|P{LBAVdA0us-ThD1?{|Ox z-zaY{ws_?~+v1~# z6B9RHa`Ka(UAW}>Pk;M&&yxI4a{OUNJx%iuc`l3?^{HR}{_~%C_~Kvuk8@oz{lfmw zJbdA={>QnB?_GTCGY|j%kN!z6>VzffdG>Ox3uiv_@b8{I%42qE@5S5y+3;tcrZ2dL zC%6BdT=fhWZYVev<_~|Fo2|QQa_)wewl6l^IcbEQ*ryqkH2jNy@z4Kh6Q%v{QTWc3%9Cd;k1XgLkdzU-Rsn&rX}#zO#MZTkGj7qw~@`mzIhfzVX+k(iI~< z#x@IT@52W#w)s6V$+Pm;iNV$x1-hmI+GO9{B zmz7e^WtMZ9Y%-bgOcgGH1>4X}5BZa@B8b z=UZPWO|HEMoAKu_poj1f7XLzNP!1)fxS`ey%d#S0Fue-Lu;%f3I0j9Q!FJ)qT26|a zge}IDo;0OZc@;BiV@g%!*Ral*(r)EFa=?^h%E#pi`PR7xHl#4UZ|J;W29ICVs&oXDwbON8>Fwp@)7rjoRK+x{I3J#ECgcUnG0X`G(wS z$}ag9^P4xJv6MC_51W2OepowQx~aIN_93j3(Ioq5<;{LNR<`(QbbAx6HTgHeoAJRW zIF7mBo7o@N0H+X}ZZ1t_OnNhICVav?i{vWv>{Q+*56dHAaS11C-CWek8|W`?F3PgS zl!ZC{3B84n%SG(vyt$~DX9JqNx#%$GCfR99m+XeOpw%{bl^k8`K^}*P+*0}?n!knm z=j`7VOdrrXGoH=9gagwyWmxFG};)amd2r(eENhbi{#U$d_{g$ zE|p)C@#=BtYAyV(@*9@9)9>z*hiK{JY|GI>t)q4cgsEUP16rpheMoqF}^e?kNN3wc|v}O7mY8SqZN;*??|1```ru5 zpD15cu0^J24=RC8{y&}v_Zg%tGmly&W~L@;wOC~xo+rkRr^n$QiKY2;i=}NfeVgo& z+sQM5Uj7bP#xv8qj)P;c;{^O997jBxfS*L3Bq!HaBYz32O`v^!8&2ga6X>Cq!@KaH z3H0@Ov-*+RtMF0$c|vKSd7iX{R=LCy()&-K$4U9Sf~9JZbrVCr`5hY9#Vu6sdV42i(xAp(b2*N(s& zYCnJ(OH3eQM9x@ZLNU7bOE^YmEHS~c#Dt`VQL_POpRx!KY>&AHW_UCP^(yOn#CtCp~x5+>Tu z^4qqxJ;>>2Clc$1;bi<_BE9WV*o^ij+UHKR&z)$WJCXR`OL}_SiKX_bw zd)tY`w4|iBomfh5I}!bVRGLV9<0?e9Fn#Vs``n4_nk7$>K6fI$Kt5emI}g+IPUPP6 z-44??$to##lsen;tPzx5UQRk>7tO)itm{niTECRfUKxmvD~Yvnq*UiMh??^@0q7cX+f zonCjBeA7IK%rhttn|?(87X92o925^vp?kW_`kDM##%O}m*DwmtGLbl13vR$s0 zYvfwFPOg_#OV};<$Tv-YOZk{QE>FlI^n54L@|W;D?dVQoX5>%kNA4_LRIWwF>%vRr z<;huGk&=m}{~lgbI}UH~)3ThN?-nzZ?=$CYdB1$XPv=_BJmvYy3zQ#JUW8unB%-GL z<(9ufxlOrZ$uFe-^oGf^#q=sEU!5KFN zsH@=5F5DxbC{Uy)yx zOXb((GP&F_A7Ryce%G43<~_cS-6zwF#R@yUqg`^hIrqpnEq|Zd?vn@9#(*Upw1h*o z>nUMS9=3!d@|YzYmnY=k6R{_k{(d@_FZ1Nd8dx5>1uN8#_ybHS8POu49B zi%k0pFG(Jv`g~ZY{AuM&{q%Bqh5TIfP<&oqopNY{DdAdEn&kDCa0BsnGS6S(7fioN z-jdoDe=J+fdAHY^ZfP?t?LIkM-Y*~U)49s?l;j0E0o)m+x_%eYf`bct4&!e*GoO2NRKm_QB%r%A=;*$M(*&t-}EjvDSu0Ovsc;T zRnikprbQ=z`lHFkHs$n6lWE;auUh8z$jmNoV&}7tO)itmEpvrzlPhJrtT68}g_hn1zixe2o4!V_mFwhs z`JDCnhTI^Zmucx!(E07KYTdr;)n8#Ya!M(4SyO1~_raas#V)zqoO>7>Oewu-`I+OI z;y7W7pKn=Nxo%5>&u ziu3$aX-ysUmsiOqt}>O@6pqHXr_x56;GYr0r_x4_!0B>^yhqNJ^YMqN_Pc6Mpd!LGLzXW%hzDvI8x8l!JO9#!9SCik-DyTiS*@7Hnnsv4i)qBnGjObA4i7nN z7So8CVWQHDG$hba)DgPY1h-Z_waGKsB|ClGCy4*GY313aqLHo|2|u5f>+7W z#JXng^eD`{O*4JaRya{P^ES=)4$aRZfq{iWH#XBptVMo6 zX583Znpax|Gj43AkI1JF5?!0=BO*Ux9Tv&-5zXi`*L~XjUy)yxOY!99Qu>JI(lS#r zGHfnoWY|o52{STmE@focT*?e#Gwr1wrl)A8r^ppECTym?gc%bymog@7W}Yy7&OG0c z8|3q{r#6yLtJdwi=6pq_H8sXl8vga{7p7RyiZ5k7%}!Xts}NW>yFN&`0Eo%gnjl zoGX;ul-vC@(XyF7BDGBfXr_oG_Q~{dGab3jw2zxvI!CmeS^5<#WiyK#sqf5UlziBfN997U zJQF*HkIPl&c|LbhY)lEoR^@H7M{Xzm9xU5Xx(CaC0cjTBnuUBV_xxGvGaFrPgI6g> zSF_dCY@+U2b7J#wy`Z~8;E-;kc&eX~oM=bue%OwKmBQnt(0a*bRo*U9zr z4SaGoQ7hj)&r`;1B1~8di7k}u>c(t(^Q2rMuaP&V4$O6gGfcTp&X)JfxpKaIP%f8k za+TlRg8YDf^#Fd=fhOwco8}@fglQ4jlYVDzX%-{uxwebBwu`y8i@COoxwebBwu`y8 zi@COox$GR+#kclZTCZ}S@?Tr#+oA1cuI**6?Pad*Wv=aIo^_aK9p-uUd0u^!me)#rKjd0u^r9MDE;2_tj#UJZ=rs> zK)+pp-zMb>nf15@#r4Tgd!GPD$y-up@y9ajaSQ0h!mP(FD6$^6fc`5~OY~WhzlJw1 zU`8==*4Gvk&sy>-%X~gHBtC>$Ut2(wh`deq$nD{XKjB*sVbfP(V(&xR@geQ_5E0-! zDY4)~Jc)<%|sS z2z~yBlxXrHHTjU5d`L|`geLhEO@`OV=;|SKm6X}?emPgpmk-M2vQ2J*?8>9}e3&-A zi-@0Ru}6FsdxW-j2KnyVuiAf@EhW39Z&iT83Ww{Kg+0KA=V7br4caWw}sqqn6|KxF-tv6 ziy#)uw1|bY+E2mU`$FzLjL$FB=NIbp3-$Sh`uswDexW|UP@iAO2ng3;`^VRrXD z!D#j#n7w&V6dP)9!|c0zqUcoalHD>p>#|}r8>ak4mcPjTii<3Nk>xM4{6&_($nqCi z{vyghTv}xLizq*GcJVE8|K1|j{yNwXpS^ZZ@+2NkWKQ@=W*frnlzWnAy)ZlFp5z%V z%ucx{i|mwpvdB)kCwY1bm&p}!GhFO5%VO$tJHL;S_4-!F`K_!99YxN*xK`KMTX|+2 zF17Ns7-ogN)pg8P*D+g*tgyGbj@in6<2->nwAfIoFwU zojKQ;bGYOkvHs%o#Q_Nr>H zs`jdCud4Q{YOkvHs%o#Q_Nr>Hs`g&CRxewtm#x*y*6L+z^|G~k*;>7VzwIi$g6D_X z75NIjhfFK@m+%GUDtwhZPnKSFH}9)_`i;`7?$O=B?wyxPJ4##0vxBkdCb*9_vV*Z` zm_m1MPcs|-u44D27Ep$gQh@bB$ z{+8ZhNAa#XkJ3-=C{Fn4N%pDkDE?0QeR&$bhR)~0taQJ|{9@$0WFq2gr4Jb+y~cPC z89kqd*_HQNkzcudtr#owWc?a?PWlGrjppxE?vmYdyXkrAd5!zxip9T`XG}S(oU!F= z#joY>k}{%@e}q@OHsW^py0v|s$nZY$R2fUXu616wp08Wa*R9p-#DvqO*R|K{#DvJ% zd-FOmA&doIw?40<=g6tm>qYAGdXYN3ZXMphg2ZSo_=ZmtZ)m}t#;cvws;#usc(v1b zwbOXD(|EO$T7A2;lUjv|hdZfT{Cint-Uc&*+RI$uJMcU`*IwrLB4_nyFTE+S594r5r{&X)hY47k{moe%-^|lYabs$G$`_R~ja5_5N$Ji#k zN6wWGnzQHPH%O1(_Mx|z;Cb$7A9{=Yi6zuR^hP>*+XS=fy$`)5<#Ks_@~gLf>TMrB zlRPv0?p*WCmk-Kk%^!{J!=sWjYr*@9=xU!@+E@IeDbdV6HM5U*F}Na{39pvd%A4d^ znYHqLXyzrJb>l_7r7_%HufCLZ{<+BUrCv4Di)JFnmzd9z@u*%r>Km|^Ip(lG{^twJZ+^2^7=!IV* z&)w+1Pd)ePfqi;lA9`L$`h1z)2z_e1Pe1G<>dqh~`+xe-{HriN*@xyMe?nC3L)%bo z_o40e$a(jtkN%x+sq;QPvk#r~Ep^_f&il}La?Y@XcxE5k4&#}9w&*^zoo_|keP}!R z^L|htBZrh9o%f;bAihum=e%%81L;v z!(0~)zgjwg_J(1eO%C{Ma=@pO13r};@HzbenmNy>d1^S|Q^Nstf{X^jJT)BPPQyG4 z9PnA-fX@PNVYR19Z_zs5huPKe7Ng~GlFVBPZ1{}Q%IC>eNuOSaT*J-$cIj8|p@2>2OY5-bZmLh5z9g9 zwySiIx`mnZKj?_%pd*%p^xCIM$%y5kBbI}XSPoK?JT-#49=x@KEyb@13oH;YSWN^OItpK?fT&jDTjK7qf;9D ztHbP6ImDAum^T3rq16XrcETTGA9YyqTVFSS=EM#anGHKsJSR7#KI{bwU&wXc8-Iv< zPs&!=CAZ0LnYW4#p^fDKx0e6!7=awZIuFCMrkqp$wfql$dS3p{Pk*m`0Y5r~_PDPR zm-4p!p%EkH=j7G$T6vQk3kTKnAm3bz96b-J=Rx(%-U{l*y0^@jXAnIvgwgPz8Xm;@ zPa)?`he0&_4vdBe)$pJi9#q4FXgGPY3uw@H5C+xoAR5lMva5Me4G$L4@L&-Q531oo zH9Uw%y-G?nJcx$5E*j3aI!%v;2l27wiG~O9w8+u$AR12oXn2r*DHk|(V^9qrMq{%}htX9V%xkDn;$CZpp_j`M4z?x8&oN zeB6?cTk>&BK5og!E%~@5AGhS=mVDfjk6ZEyOFm)ACn))3>4YVpu;de#e8Q4XSn>%= zK4HlxEct{bpRnW;mVCmJ&+rtyuyn@R^}L@t0Xcgi&d`Fwajb{%{sH@8*exz6vuE!N z?dX?q3Vz7%KcE@*KH!aKi0~;P@31gejfT(Ano`a}R!GmVS0r+)TSR`fU9hNi1hhM_H!*YiB5au10Gxj)Ve23)> zK2QC9hvkg#u$=K7mNP_*Bc!K4Izvp(wbCn{A!0<%)ASi4M&!K1a)uT5!O~fGaWmu2 zr)RO$FkHwE%(JfGpLHJltn=7s-Nk*@UEF8g#eLRY+-Ip3-*OlCS*{y-o9vO<#r+{( z^kq1ip87+|KLuCuuMe3ONJ@4Ke8`+?@?^Kbhm7|~XS^3?x4?()7Wj}==ExZpe8}i7 zpJunfhwc{m1!LNmI14B%?7yJBd(BjBXiwhGaeqoFIg)QzEwzyx=;__*t#4l)Zk@Mc` z5cPZ(UPas`zUhumJF2^C_l(9j-k@S%1>B_JPQxeLf?n2UiWFQ^%eP5xfERu zv68z9E;A)NPllLL53}=RsI*eH%T?@$7-Gj!uD;roHFB+7C)dm8%#*z+L!}M!dD&B2 zLQ2*8eAg?!!cNp7cBP(%*>N<4?Nakya<@76$TuxHJC261<}^4c51aFdJZ8@0@`TKo zd59;M=qEdlh8U&izA}Cu;wdKS*>N<)xIO9FaWur}9huR4m~r(`ksU`vcu3^zI2vM9 zpHH*nXsF1JqoE=@j)sctI2t0_P)?B@M?*z+91RuOaWv$Ze8?R~L$-?{+r?0k9Y;g% zI2yv!a+T~j8Y1$f9KC`yg_M>ZM?^K_YnIdv_91Zbg5ji`KhG=nN zcBKxv<7mhoM?=J}N;fXk}VN z>YN=%L$r&?*>N;P97~zmaWv#}#1PL@-{CnS^HG`W3^QkPju!NnuuL2~M~gTQv%Y_h zr>$@%GgRkj5s~xsbPoRyvl4X9)%kPyZBnwHat^-@vpRgv)!}ol4xe*%_?)Z5=U55K zr&$R)$4XG-tOT9IyS@(xWuEEI`Am1tXS#Df)1C8~?wrqb=deC`uyvS~pmVMSo%31m zoGU@+TnReoO3*o<{?7UI$BzN}t*iu{b0z4UD?#Vb*!j{hZ}VM*SINW{-pn?A9D2^q z+3VpnW}AnJBu8O(nGU13Fz>7lqp>h=s12jB!!Yq-n3x&nZN6c4cZ7MHZ@84V`G$!J zVczB&Mz{Iy3YquUhS6=9eapk>He4gKS9uuShS{+^%r5jVz`V^j%sINbm$dF-TlX+J zPo6`j5AtTpa4Bthn7z1R-sT&owI)yA<{L);5dDW~mBX}3O14!F(<&q9ZN6db66S5b zVeAs7O%2ngl1I&8m!#)yzG3VVK9DP7oyd8cZx|az&f9#$SSoVf<{PHHL{=L<$qwuP z!}x#7kN*$j|B>@H->^@(!#?2-`-J-|S4MtCoIlU5tjE~J`YU(Z{K}m+zjCL|udu~1 z>DmAGD{K+w-T7a!hLUf+9ijnJxc4w~6u)vu&97Wl`7J%>>C$f**P%^%>hOR(7t+)5 zDLq}7r}E#@|0X@}{-0-^yg-}}v)Xup_)Pgk*T`9Iynw~StTtXCW^xr` zW|(t1E)XY^KWohwh-r8vqoBz!&mEsIS{{ViTlfiDB?Ya9*<1Jtx{aK@g`Y558!TP) zPA__=7a1E2laf2V=$&4qzmA+cz381@^iD5&rx(4`i|o8T&8NB3i|nusbEg++HDT`b zqIY`HJH6YcY4t~z381@^iFHuY0W#Wd8ak+wC0`GywjR@ zTJuh8-f1m&%J`dAIrv%LHoSzrTj7`*t(SWb$FXbhl4t- z#V{I!JQqXWc85G2L!K1iXz5+#Nr4oe6d-eh@Bukba&itSJX1sb2jV}F=WEC_0{psM zBiWNf%5##ZZ)8T}kQIE$$vF_;gFKHz#^;cya>ytha&iu&O+nV*At&eX{1YqGX@xqi zP^T66t#5MHX@xqiP^T5@v_c(m<5fP573#D?omQyR3UykcPAk-Dg*vTJrxoh7LY-Eq z(+YLOiuWidR;c62ASVmN3UykcPAk;mx2aF8P^T5@v_hR$sM88{TA@xW)bYHQoUuZk zR;beoby}egKhLMJLY-Eq(+YK3p-wB*X@xqiP*=nXbw#XDrxoflFM%8@)Ma;?gR;beoby}fLE7WO)I;~Kr6+V+En&LBgqJccoK%QtIPc)Dx8psn3|76$P*3Zi3ajS19_q;K9eUJ$P*3Zi3T$70h#xJ?0JAZ(LkPPAWt-q zCz|3i<_#`|d6)Py;@79()Y9kSw9=>H6Mni#t}0zg%1-57@~}J-(zZg*@PVv6LRKCj zXZS$Q@PVA+13AM7vK9$hi-erv13AM7a)uA&3?IlDK9Dnfip#T;7P7Oh7-^kHTIZ40 zd8Bn7X`M$}=aKAixs;r#^GNGFk`>*gq|PImse;ydq;(!?okv>dk=A*nbslM*M_T8R z)_J6L9%-FNTIZ40d8Bn7X`M$}=PRu971sI6%+(ZEX08S@R|A==fy~uF=4v2wHITU) z$XpF%t_G%UUYWTX$XpFfguK$Wc_nQ#WinR-nX7@!)j;NIAagY^G4smI)j;NIAaga4 zxf;k^4P>qcGFJnctAWhbK;~*7b2X5;8pvD?WUdA>R|A==fy~vwwD&7%?qcGFJl=hp)_B4P>qcGFJnctAXrifSfl1nX7@EHv&7n7Uzv1Ggkwd ztAWhbK;~*7b2X5;8pvD?WUdA>S5wq${d%omul4J-e!bSO*ZTEZzh3L}E;zNV*ZRB# zi*@R?K5qh1X1&(0*ZTEZzh3LJd(Lac`t@4BUhCIu{d%omul4J-e!bSO*ZTEZzh3Lt zYyEnyU$6D+wSK+Uuh;tZTEAZF*K7THtzWP8>$QHp*00z4^;*AP>(^`jdaYlt_3O2M zz1FYS`t@4BUhCIu{d%omul4J-e!bSO*ZTEZzh3LtYyEnyU$6D+wSK+Uuh;tZTEAZF z*K7THtzWP8>$QHp*00z4^_i(F>a~8o*00z4^;*AP>(^`jdaYlt_3O2MgVt}*`VCsY zLF+eY{RXYyp!FNHeuLI;(E1Hpzd`FaX#EDQ-=Osyw0?uuZ_xS;w*3aJ-=Osyw0?uu zZ_xVe7Qu%bw0?uuZ_xS;TE9W-H)#E=T-`~|wEYIH-=Osyw0?uuZ_xS;TE9W-H)#C^ zt>2*a8?=6d)^E`I4O+iJ>o;iq2Cd(q^&7N)gVt}*`VCsYLF+eY{RXYyp!FNHeuLI; z(E1Hpzd`FaX#EDQ-=Osyw0?uuZ_xS;TE9W-H)#C^t>2*a8?=6d)^E`I4O+iJ>o;iq z2Cd(q^&7N)gVz6?y};+}1wOC*dF87aA@mkkGeQV6&b*rW!}BoXgsT}RoQ2J`k6=a% zS2J2jo<))~h>&+G?~)lOT+KM44RS^zJZ$`lg)pOqs~s&|?P%fZ zBBO@=R)eO`db%)24hy@}3td zJm*55b798G*OYk9g?nr7zzqXvW!#w}OPs_XIH|4kBA2HVbGE7gw z?|n&5utT0$`}c5?oXqI!kI?EFc(*c7g~&5%C*eJEZtXboeAAz_0&&p=L|ft)-8Ie7-Mj~H_D4CLe)$jLL1lV>0&&p=L|ft)-8Ie7;1W^r*XKEDz2 zrVqTTwi-5JwQIHAwOC{rInP$tX5R&zS-KvwCmh~iy8s`M><>p~e>mjr9{3RP`C8su zNNJDC$4ptM{O6X#9&$d-bJ?|6FkC5lZvvU~_h6n2uFW2Dn5TnlncWI`uLr)Vytni` z^1jmJuvfWH`H*)vD0#1kPyfN|vXcS%yx--$9%SA|fxOpKT#E(6OC|61AYUPQuLqg; zdLZxhK;G+tyw?MHuLr6n?3kRh<^59qV7sLAUJvBG9;gPeR8n}a2l8GIraQEu^5 z-s>TS_j(}j^+4Y1DXtyCdp$*?_G+}PHQLtli#+2JT)*5YVjkdK$+ghV-t%nwI*%XWLs;ptu@)!cuy3MYO<|0 z+18qDYrKhv-kNM{O}4eXp*4Y&w6!MNS`%-RBqeRFiFfEyPCTv2w$@}@YqG61VZo%Q ztu@)!nrv%LwzVePT9a+9$+p(S?$PJTnYPwsTWewuTI95~CVILsZLP_+*2MgM>X5e9 zly~T0+FFxst;x35WLs;(f~4Elny_8uw6!MNT9a+9$+p&HTWhkdHQCmhY->%}G2c=@ zwzVePT9a+9$+p&HTWhkdHQCmhY->%nwI=M964KV1Y->%nwIlo>s zhM5Puj*;F^A#1OY_mv>;D?v`{Dz0N3MLHv>kkh(g<}|KjJd;l|k8~X)mN0Wi*D*@@ zDNnzduebp}X@i{B1v#w?a;_j8!x-QOT6#E+XOkOf>5(T%R)>+Nltw|;DIlkH!DgP^ zZ(#O&KD@j3D4Z@iJqdYcE&F}%QRcKRWKQdXoSp>dDRX)f@&e@ttqG@fk&j^ekXLwJPF_M@DcdEd zb&*mj-2_*a9)@4HKCAt7ja)0&$@P+Ry2#1tOptTBAm?1(e*QODwT9od4zGE4 zuVe8WXbZVJ&P9ZriwJj{bB}z}^7pCpK6yYruyRVygO*RXLE)nv-seDkGHxNll zOuo^We4{b>Mq~1g_y(Wi8zFDw!i;ck#DbA|8yE5hBD9`ZEi!K)Lf$}x)(|cI246`` zD;v|w#JITO>$rNp#yDKV{VOe-7H%Eq*^F|AxmOe^#B zmz;@dWn)^Iky2`&m{w*bF-%M=mlD&;JYg+?iD_jlcppqmD`UYhF|ABr944lfjcH|L zTG^OZrjO32iD_l}=rA#@OdlO4rj?CpWn)^|m{vBXm5pg-V_KQ#yVM~utz1e>D;v|w z#@uUC5v@$*24`5SY1#I&+8t!zvy8`H|hw6Za+Y)mT~ z)5^xQvN5e}Oe-7H%Eq*^F|BM&D;v|w#(b&NrBtHi|tYkrUHK8Pi4?(?%K7Mj6va z8Pi4?(?%K7Mj6va8Pi4?(?%K7Mj6va8Pi4?(?%K7Mj6va8Pi4+yMA7brhUB%57qkN zV2FQ`j%S7~vO{iyUtpHzD7*}gv4k;}Fvb$bSi%@f7-I=zEMW{*`*|@2d;Pq)$r5g| zg#7Nqmzj@CguIy;bqca45JodMJ1)IBdjgT!6Ik4=pWm#X-;4*66Auj86A0N82-8>I zjJG5|CkQdqm#d8RDr3FMSg$hHtBmz3W4+2)ufnezPy)YhAaj+mUS+IT8S7QXdX=$W zCBJ%bs<^fEDdskBrKk7~%;@)4dx~4_DQ-2I-CEkg8t$z|uv>{>?;~eab}KRJM%X74 zoo*#M<x7FT;w<}MScMy?oEhZ`dfTx>V3$IwbQMwd) zPp;0pt0|$s^aZ$|ICg9CSH#j=i-UgaujSjskXwttv9v)}U~erBn{q_{Nd9a2W9#sq z-#TW>ape=rCyAD~@=j|?J7xO6!4|g`@0;?0DW{cx5}9{$e^BK2BYNQuYQ?U9^poFr zc%vA{y$r)Q(9AgQC2}9n+T(aLl>EFI`Vl<9oZ&d$x{drU{>JY(@acF<8*gd+x&ft) zr?k^BrH!Yw$SG~SrH!|=@s##6Qc~J@N_(%EfaZSbwbNM@I{Fj+`AGEwuFaVD=KUxW3TBj7{Y1=xCuIPdV93&_b^b>2t&E=xA|Gp@rF) z$XQQpVND_QE{IRm$~A=+`qrdBAhVaCg?=;4j*b?3#>kmDY+=?VrDY|th1G;GbA~NN zW(!-2?C5A=HQ_MKb9W2#Gt`!tLv88rl9C-AE%bDev!kPho-T5BbhOaZMb3_n7Gl)d zVmdlM1=%YFqwVR8Q6sZg3bKO;vV#b+R|>LM3bI!UvR4YSg9x&N2(p6+vV#b+g9x&N z2(nkIn6CDwqm9Vym4fV*g6x%o?3IG-m4fV*g3-)$H8b72n}JtME@t2lyC8d|AbX{X z8CZlAY!R|o3bI!UvR4Xb2hqK*?B7cXcOqvu!o7^WKM%7T;a*qv?{#JWUhelwQnDN2 zURU<-b!GovSN899W&d7R_V1-%pd9*zFuM`%paUk=j?+^i&@rr zmUW(Goo89+S=M=$b)IFNXIbZ2)_In7o@Je9S?5{Sd6spaWu0eP=ULWymUW(OojI8f zozJn(bFA|m>paIg&#}&Ptn(b}JjXiEvCea>^Bn6u$2!lk&U38u9P2#CI?u7rbFA|m z>paIg&#}&Ptn(b}JjXiEvCea>^Bn6u$2#9{o$t5K58zR!iw8I_~ zyo*oqu8{qWaHHwlA!n@7Z_dsB#$ul3%(I+%mNUEN7nO%(I+%v_y7@ zT24+a`$Dn6au!$)r-$+B0?XkPugI3Oz;YH?4yR_Bo^l?voChsu5j|Z_7T}~KIGXm( z`U>N;McFk9pD<;S%xc=A>>7n%m03+&`M z>4!}@5;FD+Kb3DW0*w4=Wqx-FIdcVzcv7HNj0uzSO;h;YCFE}*KWPv0B!90h7Smr` z53iG)^N-9q|8QJs2ArroNlv48TTJhe{JF|vNAHWBkzUN`Jt>)AUF`hxVtSCDB0oZ$ zTucvg3NB=vu$V}=3vwnu%*^v*#`a-WIuq@x`u;FD9<$Q%<~xoOlmEw0wSX37Pj0VP>Qk6KNx7 z_G2;eHgeX07W=%g*yn}CJTD|AYe0*M#^m9tAu_+X1o_1!$S*EIesKx%i%T%`B#U{b z2(uEjm}iQRHyoilB$7wYs?cKMdE~4OEvB8O9DZ>OJ}&viC1l<+h3bm_HTkpE3(PKHG0WJt)#ki}D4 z;VG@~6jn$ICqqI`hJ>692{{=OT0^v*bWVnZoD2!AEgFu@$&iqfA))m|Z}~1KLl&)S zqg8FRs*P4xXIj-ptJ-K)8?9=iRc*A=7V_O_qg8FRs*P5)(W*9D)kZ7co}AG}D;^$3 z8?AVF7;UtcqK#Iy(Taa2CE93J8?9=iRc*AYjaIeMsy15HMyuLrRU55pqg8FRs*P5) z(W*9D)kdq@XjL1nYNJ(cEOCd-5_iZfafi$j#ym%hCB%&|yW^G+H;%yUj$1Q)K)#jTaZ88;VRpwYafi$jcgQSp z1iOS0QOe2gxFy7g)F->+mJk!5J7ku)LuLsPfO6=H+_88xE;B11~c?zkni{V==ZmJs{VC#^drXLsBZdZ?6{G3^p}$Sh$@OU;Yyj$6W* zHq7q0CA9jKklk@hX#3Qk9z55|{-`Cyfs~fraZ88;$(h}8ONa)Mvpa4HF(Gnx$1R~( z9W0jG11_}(Txt)v)E;oDJ>XJ%z@^N5o+W2`z@_$pOYH%dmeK<*wFg{k54hAGa4EBn zNly>B)E;mtGmR-BJ>XJ%z@_$pOPM(&-5zkMJ>XJ%z@_$pOPLADr|FxP+5;}N2V80o zxRkk(e3~BcYxaO&vj<$p9rYH=xT7#n9Lu<)^DujRmNAoj7G`hHGWYf@;~tY|k<8wn zWz;z-yJYtEEb}RNnKfTV&GYFInY}&B@F+^-E=Z^TVfOYc!&}1a1YTBTZ_hIBD4%9; z&obM`50wm%F!TIq$Ymnwnp(&X=q0T`wqT%kT! zsLvJZbA|d`p*~lr&lUJUZ?Qssu27#VXu0P}$sENB^|?ZQu27#V+*7?meXdZSE7a!- z^|?ZQu27#V)aMHIxk7!eP@gN*=L+??LVd2l+dnGW)MuOeY*U|{HjO8=sn0g`*`_|* z)MuOeY*U|Y>a$IKwyDoH_1UIA+tg>9`fO95ZR)d4eYUC3Huc%2K3CeytR%+%vRFxs z4YPk^B{BBj!|at>iEdB9W_Cxcq(6$Br^1!=M<-$SO0A?nIu5gcVA}mGnws_HV4DR|>O#V*eP7C7 zp`5)^EAf_;oV`*jiJZxky;3XjmNP{=KEDxWuT(ppzZzz|)UNH?9WA#zLTGoi-0uF3 zcE`-^rR{*89` zZ?wCAquu=*?T(h)-M`W9Xt~{Sa=T-acE=>`j+5K5AXmY5VfJsdv#vM+X0KGc`#0L% zztN5zlP4qOcI+5tgxrn=!;Gog9S^s=f1}-TZ@VMjcK2_zyMLqI{TuD>-)MKl+wT62 zcK2_zyMLqI{TuBgvRCRE#vw;x_HR7HIAj=R|HdxT#X2) zk+arWDP^s*;#z0LQCS6Tq$b(FQ9&n>v({N5dM9VrIx9q#)G%wE71uf|M99=9Yn>G$ zWSF(i3K24L);cTrZLXWO&I*1TX05YQ%35c|wayC9fDa>Q|3(FW&Zk-Htl-aK);cTr zbC|Wxiff$}*E%b%byi#*s4(96-}p59H!8&E)FEq~71uf|w1wPV_HR_^eZuVDs1Vu0 ztaVmg>#VreS-~r!hpZ-4T)ySN(ou(tPlxPLe@GfM8Ys@ofX$QE3S1` z@TioQ{Tmh9RIZi%8xP)4`T4%+z&WdZD71uf|^rX2~_HR^( zy(vvkqs^ww?BA%+X2a~?sL*mFXa7cp_8U3-H!8H^$l1S9;i)#v{*4NKG}>^jvqDTx z&g|c)5R)V8Ev|J|T*V*OW%h5ZGLo;NMI=4DBUaHO!mM?!!t=wdb@ID|GHacy z@cb|RoEi5hG^+G#n*{lKZjZC{5q|mA7-ud>-Z<>cxKolJ7iWWS2M~w3bWR^#uC<8 z!Wv6hV+m_4VT~oMv4k~P?dQcB?Dg|vttG6rgmsp%&JxyH!a7S>X9?>pVVxzcvxIe) zu-+2ZTf%de@SG()X9>?)!gH4JoFzPG3C~%=bC&Q8OZbK*Y#_G3inrxm!VQ#m7-sEt z1Ce{GrNyr{5F2wxJFV3&`KF&{wPJ(* zwgHVLPu_goK=jMKACdfe7xE{PU+*e5;D;f<-Ua#fF37KUL4LgpUh1d(dKWUk-UY9b zSvB5ZT-tyYlAm)Gpqj*QlXJGbU#eC7Ht7#ae!UBsU+;qadKXlCcyjV2hHSvHDVbmI zg8X_Hj7a*r$Ku*Je_n5*N^2nTn0XaP$asmeA1PsUt7?2Y% z;A%fzBiG7xa=pwG@$U?r|3Y=OM#rC135(pa*7V* zlnlrz8IV(SAgAa+PSJs!q60Za2XcxIh~aqJzvSI*?Oz;K!zO ziViZT=s-@j z1^p%D6dlMZIxul#qj6(nPSHW;6dlMZIxx{=V~JCAAg9p4#E^}~kd4NWjmD6T_-fKQ z?GUb&oGOXTDLRl-bRehbKu*ztoT39cMF(<<4&-E1$nPl>8;v9zjU*e5BpZz+8?kjh z=KJ#;@BMo=%JtGD5x}uGAj*~OH8aBDwzRA`0O|G_o zi!tY};#-V4cNLpyLA@|D*qiC2hhb*0H{&Ns$qe>pXIwWs1uA7~4-Rz9(W@lVC(|7PKdW|qM*qfbk-Rz9(=3*?p-e#hG zKFtjFW~`Y!nZe#nL``~Tus1v7x`jL1T5REt!apN@i!-iUoN?XajO!L>T(>ymx`qBd zdA=s&Gh66$!^~iBamICvGp<{laoysK>lSBRx6t2_lhJ0Fr?V~2xNdRAwG(~5ipCR* zI?*SmtU8|QbPV4~^gc~W#_*kv;X8@jku%!tByNWp!*`mY93|`-$~8GjNv;O znS>dIb`s&kj72+%@L|UAoz8)DI)?9b4Btt#PkP4ios3MvjNv;Of$$3lj^R5U!*@FN z=rrPW8u2PcfpL|x7rtP zwJ+Z47=A0(OnQ2;t&ZWh+W&5~|J`c;yVd@8t7G`BSS0x~hTn=s!i?d!qVrrOWB9G; zb`WL^ztu7PR>$yL9m8+6=iO@0yVag|t35AoZ0Ea<;kVk`Znd}FYHzz0{p8b(;kP=5 zXZ=SxV|ZE;?9!jR^ye=9xl4cU(x1EZ=Pv!ZOMmXtpS$$uF8#Snf9}$syY%NS{kcnj z?$V#T^ye=9xl4cU(x1EZ=Pv!ZOMmXtpS$$uF8#Snf9}$syY%NS{kcnj?$V#T^ye=9 zxl4cU(x1EZ=Pv!ZOMmXtpS$$uF8#Snf9}$syY%NS{kcnj?$V#T^ye=9xl4cU(x1EZ z=Pv!ZOMmXtpS$$uF8#Snf9}$syY%NS{kcnj?$V#T^ye=9xl4cU(x1EZ=Pv!ZOMmXt zpS$$uF8#Snf9}$syY%NS{kcnj-ljiq)1SBL&)f9pZTj;z{dt@IyiI@Jray1fpSS7H z+w|vc`tvsZd7J*cO@H2|KX22Yx9QK@^yh8*^EUl?oBq5_f8M4)Z_}T*>CfBr=WY7) zHvM^<{=7|p-ljiq)1SBL&)f9pZTj;z{dpVOxKM1pS$(vZvDAif9}?wyY=U8{kdCz?$)2X_2+K= zxm$nk)}Ooe=WhMETYv7>pS$(vZvDAif9}?wyY=U8{kdCz?$)2X_2+K=xm$nk)}Ooe z=WhMETYv7>pS$(vZvDAif9}?wyY=U8{kdCz?$)2X_2+K=xm$nk)}Ooe=WhMETYv7> zpS$(vZvDAif9}?wyY=U8{kdCz?$)2X_2+K=xm$nk)}Ooe=WhMETYv7>pL_J@9{ssT zf9}zrd-UfX{kcbf?$Mun^yeP^xkrEQ(Vu(t=N|pJM}O|opL_J@9{ssTf9}zrd-UfX z{kcbf?$Mun^yeP^xkrEQ(Vu(t=N|pJM}O|opL_J@9{ssTf9}zrd-UfX{kcbf?$MvC z-0!o@AZLyxzxlNhW{#!m980y7IhLw(ELG=Ns?M?SyI}NmReb&lm^qdzS_<%CV zj-~1xOVv4+s&gz=+EK2UIhLyJsEReC!_2W%X+dG;SgOvkRIzeO&Kye>TTg?TW2w@P zk~4EGRp(f$&aqUTW2rjFQq4)le406yD!!3&GRIQQNyRX8ELFTE>6v4x;xowjOqe;A zDs2#5(FP-Dj-`q(<V!_2W%i_Ec9@zThdW2xe+ku%3q#bYC9j-^VA z4l~D6b&jR#981+XmMUJIoS9>(;@gok$5Jga$5LgD1})k4tIn}honxsw$5M5UCBILX zI%ke0zfu=Db1YToSgN!X${dk7ma20s+nr;{?~#0-=jY6^Y^MeNCCnVlc3Q-Fm^qg1 z#*OXHv23SBBqehc+l?OEonzUK-zFtwB=DXYiMKTc-o^yL)gzd5||~Ugo#QRM5e`1fhu zN#9}08zHs*8RWMD;e_NVZe!Ns`^D|GJ#eBacTk`2^M+17-BEiU?vebeAaXx%>wKR# zck=09`>l8IpYInxw4B3UcymE`CtFTbhrK^3Ki<=6oi@>tyCPPJ*Aj62A>&uN~SezmOO?_R4P~egye#M0nH^Vmp5ov3L!?eH&)JE5A%{?l;0;DKH^RJK_y##|htd2S zT)nB-&0XIJuao>f5AtBh-Sxxq_~CBs`w_fNPLy|`pWRqC=|3n~sa1G~98 zP zJ+`tvT5XT5Y>!skqt*6kwLMyGk5=1bo%d+9Jz8y#R@J8!S8a<6aa?bYsk zZJT?2*Ke;abgwP6Hz%JLy*c?D?x?MWoF5K3EgW)Mc+rd1-hsEtiE@%mOYF5J_EPeD z$Olc&dw;#OtbFSjZ{_zE$4xmUKOnsif4jZtLx&&1@$wF49{TXTr0?Z-DF=Y7V0V^_cLkoM!%NzXf^{YBm(?Jp9$ z`q6Mo$UCI{XgG4-A?-&$FTuP++V4B0{YBm(?Jx2UX@8M-Nc-`w$a#mf-*-s&qt9ol zYeud6jn(^!)%PGLR_{lX@57A8_N%x3XlxpCMqK;R*w0{M_

l4JL-~H-_&whVMsX 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 Be@_4a literal 0 HcmV?d00001 diff --git a/Telegram/SourceFiles/art/sprite_125x.png b/Telegram/SourceFiles/art/sprite_125x.png index ddac976c666a21db28008ba4281654c6d03b4051..abebece00f7ef17a06251102fe937872312ca899 100644 GIT binary patch delta 24 gcmex&j``m?<_X%|+`M46)#j7lXy)-80DRyH2><{9 diff --git a/Telegram/SourceFiles/art/sprite_150x.png b/Telegram/SourceFiles/art/sprite_150x.png index 5e9e4ab3a39ff93dfd2ee299c08ff7235d265dc8..3e4fa0109a2e498408599c1ae89b386bb725670e 100644 GIT binary patch delta 27 jcmcb;kmdG5mI>P2+`Tq*znb+reo delta 27 jcmcb;kmdG5mI>P2d`B1<_>M46)#j6KG}~&%xKscDhyDny diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 81e107af3..55d438b9e 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -80,7 +80,7 @@ void AboutBox::paintEvent(QPaintEvent *e) { // fill bg p.fillRect(0, 0, _width, _height, st::boxBG->b); - p.drawPixmap(QPoint((_width - st::aboutIcon.width()) / 2, st::aboutIconTop), App::sprite(), st::aboutIcon); + p.drawPixmap(QPoint((_width - st::aboutIcon.pxWidth()) / 2, st::aboutIconTop), App::sprite(), st::aboutIcon); p.setPen(st::black->p); p.setFont(st::aboutHeaderFont->f); diff --git a/Telegram/SourceFiles/boxes/addparticipantbox.cpp b/Telegram/SourceFiles/boxes/addparticipantbox.cpp index 9a6cf34c4..9a493f7ef 100644 --- a/Telegram/SourceFiles/boxes/addparticipantbox.cpp +++ b/Telegram/SourceFiles/boxes/addparticipantbox.cpp @@ -151,7 +151,7 @@ void AddParticipantInner::paintDialog(QPainter &p, DialogRow *row, bool sel) { data->name.drawElided(p, left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListNameTop, width() - st::participantDelta - st::profileListPadding.width() * 2 - st::profileListPhotoSize - st::profileListPadding.width() * 2); if (sel || data->check) { - p.drawPixmap(QPoint(width() - st::profileCheckRect.width() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.height()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect)); + p.drawPixmap(QPoint(width() - st::profileCheckRect.pxWidth() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.pxHeight()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect)); } p.setFont(st::profileSubFont->f); diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 871583cd2..07ce2c443 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -121,10 +121,10 @@ void ContactsInner::paintDialog(QPainter &p, DialogRow *row, bool sel) { p.drawPixmap(left, st::profileListPadding.height(), user->photo->pix(st::profileListPhotoSize)); p.setPen(st::profileListNameColor->p); - data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::contactsImg.width()); + data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::contactsImg.pxWidth()); if (sel) { - p.drawPixmap(QPoint(width() - st::contactsImg.width() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::contactsImg.height()) / 2 - st::profileCheckDeltaY), App::sprite(), st::contactsImg); + p.drawPixmap(QPoint(width() - st::contactsImg.pxWidth() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::contactsImg.pxHeight()) / 2 - st::profileCheckDeltaY), App::sprite(), st::contactsImg); } p.setFont(st::profileSubFont->f); diff --git a/Telegram/SourceFiles/boxes/emojibox.cpp b/Telegram/SourceFiles/boxes/emojibox.cpp index 6f5312d2a..133d79ddc 100644 --- a/Telegram/SourceFiles/boxes/emojibox.cpp +++ b/Telegram/SourceFiles/boxes/emojibox.cpp @@ -150,7 +150,7 @@ void EmojiBox::paintEvent(QPaintEvent *e) { for (BlockRow::const_iterator j = i->cbegin(), en = i->cend(); j != en; ++j) { if (j->emoji) { QPoint pos(left + (st::emojiReplaceWidth - st::emojiSize) / 2, top + (st::emojiReplaceHeight - _blockHeight) / 2); - p.drawPixmap(pos, App::emojis(), QRect(j->emoji->x, j->emoji->y, st::emojiSize, st::emojiSize)); + p.drawPixmap(pos, App::emojis(), QRect(j->emoji->x, j->emoji->y, st::emojiImgSize, st::emojiImgSize)); } QRect trect(left, top + (st::emojiReplaceHeight + _blockHeight) / 2 - st::emojiTextFont->height, st::emojiReplaceWidth, st::emojiTextFont->height); p.drawText(trect, j->text, QTextOption(Qt::AlignHCenter | Qt::AlignTop)); diff --git a/Telegram/SourceFiles/boxes/newgroupbox.cpp b/Telegram/SourceFiles/boxes/newgroupbox.cpp index bc664fd8b..5fa27274d 100644 --- a/Telegram/SourceFiles/boxes/newgroupbox.cpp +++ b/Telegram/SourceFiles/boxes/newgroupbox.cpp @@ -129,10 +129,10 @@ void NewGroupInner::paintDialog(QPainter &p, DialogRow *row, bool sel) { } else { p.setPen(st::profileListNameColor->p); } - data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::profileCheckRect.width()); + data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::profileCheckRect.pxWidth()); if (sel || data->check) { - p.drawPixmap(QPoint(width() - st::profileCheckRect.width() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.height()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect)); + p.drawPixmap(QPoint(width() - st::profileCheckRect.pxWidth() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.pxHeight()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect)); } p.setFont(st::profileSubFont->f); diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 039d01620..ba8773790 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -348,7 +348,7 @@ void EmojiPanInner::paintEvent(QPaintEvent *e) { p.drawRoundedRect(QRect(w, st::emojiPanSize), st::emojiPanRound, st::emojiPanRound); p.setOpacity(1); } - QRect r(_emojis[index]->x, _emojis[index]->y, st::emojiSize, st::emojiSize); + QRect r(_emojis[index]->x, _emojis[index]->y, st::emojiImgSize, st::emojiImgSize); p.drawPixmap(w + QPoint((st::emojiPanSize.width() - st::emojiSize) / 2, (st::emojiPanSize.height() - st::emojiSize) / 2), App::emojis(), r); } } diff --git a/Telegram/SourceFiles/gui/boxshadow.cpp b/Telegram/SourceFiles/gui/boxshadow.cpp index c3751bb13..245c8e514 100644 --- a/Telegram/SourceFiles/gui/boxshadow.cpp +++ b/Telegram/SourceFiles/gui/boxshadow.cpp @@ -19,7 +19,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "boxshadow.h" -BoxShadow::BoxShadow(const style::rect &topLeft) : _size(topLeft.width()) { +BoxShadow::BoxShadow(const style::rect &topLeft) : _size(topLeft.width() / cIntRetinaFactor()) { QImage cornersImage(_size * 2, _size * 2, QImage::Format_ARGB32_Premultiplied); { QPainter p(&cornersImage); diff --git a/Telegram/SourceFiles/gui/emoji_config.cpp b/Telegram/SourceFiles/gui/emoji_config.cpp index 8d313f193..7c067590b 100644 --- a/Telegram/SourceFiles/gui/emoji_config.cpp +++ b/Telegram/SourceFiles/gui/emoji_config.cpp @@ -26,7 +26,9 @@ namespace { void initEmoji() { EmojiData *toFill = emojis = (EmojiData*)emojisData; - switch (cScale()) { + DBIScale emojiForScale = cRetina() ? dbisTwo : cScale(); + + switch (emojiForScale) { case dbisOne: new (toFill++) EmojiData(176, 0, 169, 0, 1); diff --git a/Telegram/SourceFiles/gui/flatcheckbox.cpp b/Telegram/SourceFiles/gui/flatcheckbox.cpp index bf3a538b8..9382c0c05 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/gui/flatcheckbox.cpp @@ -28,7 +28,7 @@ FlatCheckbox::FlatCheckbox(QWidget *parent, const QString &text, bool checked, c setCursor(_st.cursor); int32 w = _st.width, h = _st.height; if (w <= 0) w = _st.textLeft + _st.font->m.width(_text) + 1; - if (h <= 0) h = qMax(_st.font->height, _st.imageRect.height()); + 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 9b6fb08eb..ab7851322 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -134,7 +134,7 @@ void FlatInput::paintEvent(QPaintEvent *e) { p.drawRect(i, i, width() - 2 * i - 1, height() - 2 * i - 1); } } - if (_st.imgRect.width()) { + if (_st.imgRect.pxWidth()) { p.drawPixmap(_st.imgPos, App::sprite(), _st.imgRect); } diff --git a/Telegram/SourceFiles/gui/images.cpp b/Telegram/SourceFiles/gui/images.cpp index b9e807cad..6c0785ae8 100644 --- a/Telegram/SourceFiles/gui/images.cpp +++ b/Telegram/SourceFiles/gui/images.cpp @@ -60,18 +60,16 @@ const QPixmap &Image::pix(int32 w, int32 h) const { checkload(); if (w <= 0 || !width() || !height()) { - w = width() * cRetinaFactor(); + w = width() * cIntRetinaFactor(); } else if (cRetina()) { - w *= cRetinaFactor(); - h *= cRetinaFactor(); + w *= cIntRetinaFactor(); + h *= cIntRetinaFactor(); } uint64 k = (uint64(w) << 32) | uint64(h); Sizes::const_iterator i = _sizesCache.constFind(k); if (i == _sizesCache.cend()) { QPixmap p(pixNoCache(w, h, true)); - if (cRetina()) { - p.setDevicePixelRatio(cRetinaFactor()); - } + if (cRetina()) p.setDevicePixelRatio(cRetinaFactor()); i = _sizesCache.insert(k, p); if (!p.isNull()) { globalAquiredSize += int64(p.width()) * p.height() * 4; diff --git a/Telegram/SourceFiles/gui/style_core.h b/Telegram/SourceFiles/gui/style_core.h index 746009829..3148f13e1 100644 --- a/Telegram/SourceFiles/gui/style_core.h +++ b/Telegram/SourceFiles/gui/style_core.h @@ -200,6 +200,32 @@ inline bool operator!=(const Font &a, const Font &b) { typedef float64 number; typedef QString string; typedef QRect rect; + class sprite : public rect { + public: + sprite() { + } + sprite(int left, int top, int width, int height) : rect(left, top, width, height) { + } + inline int pxWidth() const { + return rect::width() / cIntRetinaFactor(); + } + inline int pxHeight() const { + return rect::height() / cIntRetinaFactor(); + } + inline QSize pxSize() const { + return rect::size() / cIntRetinaFactor(); + } + private: + inline int width() const { + return rect::width(); + } + inline int height() const { + return rect::height(); + } + inline QSize size() const { + return rect::size(); + } + }; typedef QPoint point; typedef QSize size; typedef anim::transition transition; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 75666f256..6f5b71f1f 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -1405,7 +1405,7 @@ public: } } } - _p->drawPixmap(QPoint((glyphX + int(st::emojiPadding)).toInt(), _y + _yDelta + emojiY), App::emojis(), QRect(static_cast(currentBlock)->emoji->x, static_cast(currentBlock)->emoji->y, st::emojiSize, st::emojiSize)); + _p->drawPixmap(QPoint((glyphX + int(st::emojiPadding)).toInt(), _y + _yDelta + emojiY), App::emojis(), QRect(static_cast(currentBlock)->emoji->x, static_cast(currentBlock)->emoji->y, st::emojiImgSize, st::emojiImgSize)); // } else if (_p && currentBlock->type() == TextBlockSkip) { // debug // _p->fillRect(QRect(x.toInt(), _y, currentBlock->width(), static_cast(currentBlock)->height()), QColor(0, 0, 0, 32)); } diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index d547dfef9..20a0bb765 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -18,7 +18,6 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #pragma once #include "gui/emoji_config.h" -#include "gui/style_core.h" #include "../../../QtStatic/qtbase/src/gui/text/qfontengine_p.h" diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 2f176661e..29941ab06 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -1522,7 +1522,7 @@ void HistoryPhoto::draw(QPainter &p, const HistoryItem *parent, const QString &t int32 dateX = _maxw - timeWidth - st::msgDateImgDelta - 2 * st::msgDateImgPadding.x(); int32 dateY = _height - st::msgDateFont->height - 2 * st::msgDateImgPadding.y() - st::msgDateImgDelta; if (parent->out()) { - dateX -= st::msgCheckRect.width() + st::msgDateImgCheckSpace; + dateX -= st::msgCheckRect.pxWidth() + st::msgDateImgCheckSpace; } int32 dateW = _maxw - dateX - st::msgDateImgDelta; int32 dateH = _height - dateY - st::msgDateImgDelta; @@ -1532,7 +1532,7 @@ void HistoryPhoto::draw(QPainter &p, const HistoryItem *parent, const QString &t p.setPen(st::msgDateImgColor->p); p.drawText(dateX + st::msgDateImgPadding.x(), dateY + st::msgDateImgPadding.y() + st::msgDateFont->ascent, time); if (out) { - QPoint iconPos(dateX - 2 + dateW - st::msgDateImgCheckSpace - st::msgCheckRect.width(), dateY + (dateH - st::msgCheckRect.height()) / 2); + QPoint iconPos(dateX - 2 + dateW - st::msgDateImgCheckSpace - st::msgCheckRect.pxWidth(), dateY + (dateH - st::msgCheckRect.pxHeight()) / 2); const QRect *iconRect; if (parent->id > 0) { if (parent->unread()) { @@ -1735,7 +1735,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right(); - int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); + int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 secondwidth = width - tleft - fullTimeWidth; p.setFont(st::mediaFont->f); @@ -1775,7 +1775,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); if (out) { - QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); + QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); const QRect *iconRect; if (parent->id > 0) { if (parent->unread()) { @@ -1857,7 +1857,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, const QString &t int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right(); - int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); + int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 secondwidth = width - tleft - fullTimeWidth; p.setFont(st::mediaFont->f); @@ -1897,7 +1897,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, const QString &t p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); if (out) { - QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); + QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); const QRect *iconRect; if (parent->id > 0) { if (parent->unread()) { @@ -2048,7 +2048,8 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, const QString p.fillRect(0, _height, width, st::msgShadow, shadow->b); if (_thumbw) { - p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx, _thumby, st::mediaThumbSize, st::mediaThumbSize)); + int32 rf(cIntRetinaFactor()); + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx * rf, _thumby * rf, st::mediaThumbSize * rf, st::mediaThumbSize * rf)); } else { p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); } @@ -2058,7 +2059,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, const QString int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right(); - int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); + int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 secondwidth = width - tleft - fullTimeWidth; p.setFont(st::mediaFont->f); @@ -2102,7 +2103,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, const QString p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); if (out) { - QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); + QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); const QRect *iconRect; if (parent->id > 0) { if (parent->unread()) { @@ -2197,7 +2198,7 @@ HistoryContact::HistoryContact(int32 userId, const QString &first, const QString void HistoryContact::initDimensions(const HistoryItem *parent, int32 timeWidth) { int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); - int32 fullTimeWidth = timeWidth + st::msgDateSpace + (parent->out() ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); + int32 fullTimeWidth = timeWidth + st::msgDateSpace + (parent->out() ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); if (name.maxWidth() + tleft + fullTimeWidth > _maxw) { _maxw = name.maxWidth() + tleft + fullTimeWidth; } @@ -2256,7 +2257,7 @@ void HistoryContact::draw(QPainter &p, const HistoryItem *parent, const QString int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right(); - int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); + int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 secondwidth = width - tleft - fullTimeWidth; p.setFont(st::mediaFont->f); @@ -2279,7 +2280,7 @@ void HistoryContact::draw(QPainter &p, const HistoryItem *parent, const QString p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); if (out) { - QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); + QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); const QRect *iconRect; if (parent->id > 0) { if (parent->unread()) { @@ -2383,7 +2384,7 @@ void HistoryMessage::initDimensions(const QString &text) { _maxw = media->maxWidth(); _minh = media->height(); } else { - timeWidth += st::msgDateSpace + (out() ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) - st::msgDateDelta.x(); + timeWidth += st::msgDateSpace + (out() ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) - st::msgDateDelta.x(); _text.setText(st::msgFont, text + textcmdSkipBlock(timeWidth, st::msgDateFont->height - st::msgDateDelta.y()), _historyTextOptions); _maxw = _text.maxWidth(); _minh = _text.minHeight(); @@ -2470,7 +2471,7 @@ void HistoryMessage::draw(QPainter &p, uint32 selection) const { p.drawText(r.right() - st::msgPadding.right() + st::msgDateDelta.x() - timeWidth + st::msgDateSpace, r.bottom() - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); if (_out) { - QPoint iconPos(r.right() + 5 - st::msgPadding.right() - st::msgCheckRect.width(), r.bottom() + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); + QPoint iconPos(r.right() + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), r.bottom() + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); const QRect *iconRect; if (id > 0) { if (unread()) { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 647484984..5728114fc 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -72,7 +72,7 @@ void HistoryList::paintEvent(QPaintEvent *e) { } if (hist->isEmpty()) { - QPoint dogPos((width() - st::msgDogImg.width()) / 2, ((height() - st::msgDogImg.height()) * 4) / 9); + QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, App::sprite(), st::msgDogImg); } else { adjustCurrent(r.top()); @@ -1746,20 +1746,7 @@ void HistoryWidget::historyToDown(History *history) { } void HistoryWidget::historyWasRead(bool force) { - if (histReadRequestId || !hist || !force && (!hist->unreadCount || !hist->unreadLoaded)) return; - hist->inboxRead(true); - histReadRequestId = MTP::send(MTPmessages_ReadHistory(histPeer->input, MTP_int(0), MTP_int(0)), rpcDone(&HistoryWidget::partWasRead, histPeer)); -} - -void HistoryWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) { - const MTPDmessages_affectedHistory &d(result.c_messages_affectedHistory()); - App::main()->updUpdated(d.vpts.v, 0, 0, d.vseq.v); - - histReadRequestId = 0; - int32 offset = d.voffset.v; - if (!MTP::authedId() || offset <= 0) return; - - histReadRequestId = MTP::send(MTPmessages_ReadHistory(peer->input, MTP_int(0), MTP_int(offset)), rpcDone(&HistoryWidget::partWasRead, peer)); + App::main()->readServerHistory(hist, force); } bool HistoryWidget::messagesFailed(const RPCError &e, mtpRequestId requestId) { @@ -1906,9 +1893,7 @@ void HistoryWidget::onVisibleChanged() { QTimer::singleShot(0, this, SLOT(onListScroll())); } -QString HistoryWidget::prepareMessage() { - QString result = _field.getText(); - +QString HistoryWidget::prepareMessage(QString result) { result = result.replace('\t', qsl(" ")); result = result.replace(" --", QString::fromUtf8(" \xe2\x80\x94")); @@ -1922,7 +1907,7 @@ QString HistoryWidget::prepareMessage() { void HistoryWidget::onSend() { if (!hist) return; - QString text = prepareMessage(); + QString text = prepareMessage(_field.getText()); if (!text.isEmpty()) { MsgId newId = clientMsgId(); uint64 randomId = MTP::nonce(); @@ -2314,7 +2299,7 @@ void HistoryWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) if (!decreaseWidth) { p.setOpacity(st::topBarForwardAlpha + (1 - st::topBarForwardAlpha) * over); - p.drawPixmap(QPoint(width() - (st::topBarForwardPadding.right() + st::topBarForwardImg.width()) / 2, (st::topBarHeight - st::topBarForwardImg.height()) / 2), App::sprite(), st::topBarForwardImg); + p.drawPixmap(QPoint(width() - (st::topBarForwardPadding.right() + st::topBarForwardImg.pxWidth()) / 2, (st::topBarHeight - st::topBarForwardImg.pxHeight()) / 2), App::sprite(), st::topBarForwardImg); } } @@ -2790,11 +2775,11 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { p.fillRect(0, _field.y() - st::sendPadding, width(), _field.height() + 2 * st::sendPadding, st::taMsgField.bgColor->b); } } else { - QPoint dogPos((width() - st::msgDogImg.width()) / 2, ((height() - _field.height() - 2 * st::sendPadding - st::msgDogImg.height()) * 4) / 9); + QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - _field.height() - 2 * st::sendPadding - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, App::sprite(), st::msgDogImg); int32 pointsCount = 8, w = pointsCount * (st::introPointWidth + 2 * st::introPointDelta), h = st::introPointHeight; - int32 pointsLeft = (width() - w) / 2 + st::introPointDelta - st::introPointLeft, pointsTop = dogPos.y() + (st::msgDogImg.height() * 6) / 5; + int32 pointsLeft = (width() - w) / 2 + st::introPointDelta - st::introPointLeft, pointsTop = dogPos.y() + (st::msgDogImg.pxHeight() * 6) / 5; int32 curPoint = histRequestsCount % pointsCount; diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 017d91058..363e8589b 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -311,6 +311,8 @@ public: void noSelectingScroll(); bool touchScroll(const QPoint &delta); + + QString prepareMessage(QString text); ~HistoryWidget(); @@ -365,7 +367,6 @@ public slots: private: bool messagesFailed(const RPCError &error, mtpRequestId requestId); - void partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result); void updateListSize(int32 addToY = 0, bool initial = false); void addMessagesToFront(const QVector &messages); void chatLoaded(const MTPmessages_ChatFull &res); @@ -375,8 +376,6 @@ private: void updateDragAreas(); - QString prepareMessage(); - int32 histOffset, histCount, histReadRequestId; int32 histRequestsCount; PeerData *histPeer, *_activePeer; diff --git a/Telegram/SourceFiles/intro/introsignup.cpp b/Telegram/SourceFiles/intro/introsignup.cpp index 9b597eb4d..29986a1be 100644 --- a/Telegram/SourceFiles/intro/introsignup.cpp +++ b/Telegram/SourceFiles/intro/introsignup.cpp @@ -124,7 +124,7 @@ void IntroSignup::paintEvent(QPaintEvent *e) { void IntroSignup::resizeEvent(QResizeEvent *e) { textRect = QRect((width() - st::introTextSize.width()) / 2, 0, st::introTextSize.width(), st::introTextSize.height()); - _phLeft = (width() - st::setPhotoImg.width()) / 2; + _phLeft = (width() - st::setPhotoImg.pxWidth()) / 2; _phTop = st::introHeaderFont->height + st::introFinishSkip; if (e->oldSize().width() != width()) { int sumNext = st::btnIntroNext.width - st::btnIntroBack.width - st::btnIntroSep; @@ -132,7 +132,7 @@ void IntroSignup::resizeEvent(QResizeEvent *e) { } if (e->oldSize().width() != width()) { next.move((width() - next.width()) / 2, st::introSize.height() - st::btnIntroNext.height); - first.move((width() - first.width()) / 2, _phTop + st::setPhotoImg.height() + st::introFinishSkip); + first.move((width() - first.width()) / 2, _phTop + st::setPhotoImg.pxHeight() + st::introFinishSkip); last.move((width() - last.width()) / 2, first.y() + first.height() + st::introFinishSkip); } } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 51177d996..457d2bda5 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -496,16 +496,52 @@ void MainWidget::clearSelectedItems() { history.onClearSelected(); } -QRect MainWidget::rectForTitleAnim() const { - int w = width(); - w -= history.x() + st::sysBtnDelta * 2 + st::sysCls.img.width() + st::sysRes.img.width() + st::sysMin.img.width(); - return QRect(history.x(), 0, w, App::wnd()->getTitle()->height()); -} - DialogsIndexed &MainWidget::contactsList() { return dialogs.contactsList(); } +void MainWidget::sendMessage(History *hist, const QString &text) { + readServerHistory(hist); + QString msg = history.prepareMessage(text); + if (!msg.isEmpty()) { + MsgId newId = clientMsgId(); + uint64 randomId = MTP::nonce(); + + App::historyRegRandom(randomId, newId); + + MTPstring msgText(MTP_string(msg)); + hist->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), msgText, MTP_messageMediaEmpty())); + historyToDown(hist); + if (history.peer() == hist->peer) { + history.peerMessagesUpdated(); + } + + MTP::send(MTPmessages_SendMessage(hist->peer->input, msgText, MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId)); + } +} + +void MainWidget::readServerHistory(History *hist, bool force) { + if (!hist || (!force && (!hist->unreadCount || !hist->unreadLoaded))) return; + + ReadRequests::const_iterator i = _readRequests.constFind(hist->peer); + if (i == _readRequests.cend()) { + hist->inboxRead(true); + _readRequests.insert(hist->peer, MTP::send(MTPmessages_ReadHistory(hist->peer->input, MTP_int(0), MTP_int(0)), rpcDone(&MainWidget::partWasRead, hist->peer))); + } +} + +void MainWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) { + const MTPDmessages_affectedHistory &d(result.c_messages_affectedHistory()); + App::main()->updUpdated(d.vpts.v, 0, 0, d.vseq.v); + + int32 offset = d.voffset.v; + if (!MTP::authedId() || offset <= 0) { + _readRequests.remove(peer); + } else { + _readRequests[peer] = MTP::send(MTPmessages_ReadHistory(peer->input, MTP_int(0), MTP_int(offset)), rpcDone(&MainWidget::partWasRead, peer)); + } +} + void MainWidget::videoLoadProgress(mtpFileLoader *loader) { VideoData *video = App::video(loader->objId()); if (video->loader) { @@ -619,7 +655,7 @@ void MainWidget::onParentResize(const QSize &newSize) { } void MainWidget::updateOnlineDisplay() { - history.updateOnlineDisplay(history.x(), width() - history.x() - st::sysBtnDelta * 2 - st::sysCls.img.width() - st::sysRes.img.width() - st::sysMin.img.width()); + history.updateOnlineDisplay(history.x(), width() - history.x() - st::sysBtnDelta * 2 - st::sysCls.img.pxWidth() - st::sysRes.img.pxWidth() - st::sysMin.img.pxWidth()); if (profile) profile->updateOnlineDisplay(); if (App::wnd()->settingsWidget()) App::wnd()->settingsWidget()->updateOnlineDisplay(); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 5a2b80a27..dc7d85db3 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -187,9 +187,11 @@ public: void deleteSelectedItems(); void clearSelectedItems(); - QRect rectForTitleAnim() const; - DialogsIndexed &contactsList(); + + void sendMessage(History *history, const QString &text); + + void readServerHistory(History *history, bool force = true); ~MainWidget(); @@ -233,6 +235,8 @@ public slots: private: + void partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result); + uint64 failedObjId; QString failedFileName; void loadFailed(mtpFileLoader *loader, bool started, const char *retrySlot); @@ -278,4 +282,7 @@ private: QSet updateNotifySettingPeers; QTimer updateNotifySettingTimer; + + typedef QMap ReadRequests; + ReadRequests _readRequests; }; diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index e0eac83d4..cb5769ac8 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -761,10 +761,10 @@ void ProfileWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) p.drawPixmap(a_coord.current(), 0, _animTopBarCache); } else { p.setOpacity(st::topBarBackAlpha + (1 - st::topBarBackAlpha) * over); - p.drawPixmap(QPoint(st::topBarBackPadding.left(), (st::topBarHeight - st::topBarBackImg.height()) / 2), App::sprite(), st::topBarBackImg); + p.drawPixmap(QPoint(st::topBarBackPadding.left(), (st::topBarHeight - st::topBarBackImg.pxHeight()) / 2), App::sprite(), st::topBarBackImg); p.setFont(st::topBarBackFont->f); p.setPen(st::topBarBackColor->p); - p.drawText(st::topBarBackPadding.left() + st::topBarBackImg.width() + st::topBarBackPadding.right(), (st::topBarHeight - st::titleFont->height) / 2 + st::titleFont->ascent, lang(peer()->chat ? lng_profile_group_info : lng_profile_info)); + p.drawText(st::topBarBackPadding.left() + st::topBarBackImg.pxWidth() + st::topBarBackPadding.right(), (st::topBarHeight - st::titleFont->height) / 2 + st::titleFont->ascent, lang(peer()->chat ? lng_profile_group_info : lng_profile_info)); } } diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 43c76d461..9f0cde452 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -112,7 +112,9 @@ void MacPrivate::notifyClicked(unsigned long long peer) { } void MacPrivate::notifyReplied(unsigned long long peer, const char *str) { + History *history = App::history(PeerId(peer)); + App::main()->sendMessage(history, QString::fromUtf8(str)); } PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), @@ -283,7 +285,7 @@ void PsMainWindow::psInitFrameless() { connect(&psUpdatedPositionTimer, SIGNAL(timeout()), this, SLOT(psSavePosition())); if (frameless) { -// setWindowFlags(Qt::FramelessWindowHint); + //setWindowFlags(Qt::FramelessWindowHint); } connect(windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(psStateChanged(Qt::WindowState))); @@ -348,6 +350,7 @@ void PsMainWindow::psFirstShow() { bool showShadows = true; show(); + _private.enableShadow(winId()); if (cWindowPos().maximized) { setWindowState(Qt::WindowMaximized); } @@ -371,7 +374,7 @@ void PsMainWindow::psFirstShow() { } bool PsMainWindow::psHandleTitle() { - return true; + return false; } void PsMainWindow::psInitSysMenu() { @@ -685,10 +688,8 @@ PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(it alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), aY(y + st::notifyHeight + st::notifyDeltaY), close(this, st::notifyClose), aOpacityFunc(st::notifyFastAnimFunc) { int32 w = st::notifyWidth, h = st::notifyHeight; - QImage img(w * cRetinaFactor(), h * cRetinaFactor(), QImage::Format_ARGB32_Premultiplied); - if (cRetina()) { - img.setDevicePixelRatio(cRetinaFactor()); - } + QImage img(w * cIntRetinaFactor(), h * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + if (cRetina()) img.setDevicePixelRatio(cRetinaFactor()); img.fill(st::notifyBG->c); { diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 0e822470f..640a10957 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -32,6 +32,8 @@ public: void activateWnd(WId winId); void showNotify(unsigned long long peer, const char *utf8title, const char *subtitle, const char *utf8msg); void clearNotifies(unsigned long long peer = 0); + + void enableShadow(WId winId); virtual void activeSpaceChanged() { } diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index c5828bb15..0d3532bc0 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -57,7 +57,9 @@ public: } void onNotifyReply(NSUserNotification *notification) { -// notification.response + NSNumber *peerObj = [[notification userInfo] objectForKey:@"peer"]; + unsigned long long peerLong = [peerObj unsignedLongLongValue]; + wnd->notifyReplied(peerLong, [[[notification response] string] UTF8String]); } ~PsMacWindowData() { @@ -165,7 +167,7 @@ void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8tit [notification setInformativeText:msg]; [msg release]; -// [notification setHasReplyButton:YES]; + [notification setHasReplyButton:YES]; [notification setSoundName:nil]; @@ -175,6 +177,11 @@ void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8tit [notification release]; } +void PsMacWindowPrivate::enableShadow(WId winId) { +// [[(NSView*)winId window] setStyleMask:NSBorderlessWindowMask]; +// [[(NSView*)winId window] setHasShadow:YES]; +} + void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; if (peer) { diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index c9e24dcb1..33db92f11 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -67,6 +67,7 @@ QString gLangFile; bool gRetina = false; float64 gRetinaFactor = 1.; +int32 gIntRetinaFactor = 1; bool gCustomNotifies = false; #ifdef Q_OS_WIN diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index d69ae3df2..b0a1dd748 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -132,6 +132,7 @@ DeclareReadSetting(QString, LangFile); DeclareSetting(bool, Retina); DeclareSetting(float64, RetinaFactor); +DeclareSetting(int32, IntRetinaFactor); DeclareSetting(bool, CustomNotifies); DeclareReadSetting(DBIPlatform, Platform); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 78da9d64b..8b27ee368 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -32,7 +32,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com Slider::Slider(QWidget *parent, const style::slider &st, int32 count, int32 sel) : QWidget(parent), _count(count), _sel(snap(sel, 0, _count)), _wasSel(_sel), _st(st), _pressed(false) { - resize(_st.width, _st.bar.height()); + resize(_st.width, _st.bar.pxHeight()); setCursor(style::cur_pointer); } @@ -43,7 +43,7 @@ void Slider::mousePressEvent(QMouseEvent *e) { void Slider::mouseMoveEvent(QMouseEvent *e) { if (_pressed) { - int32 newSel = snap(qRound((_count - 1) * float64(e->pos().x() - _st.bar.width() / 2) / (width() - _st.bar.width())), 0, _count - 1); + int32 newSel = snap(qRound((_count - 1) * float64(e->pos().x() - _st.bar.pxWidth() / 2) / (width() - _st.bar.pxWidth())), 0, _count - 1); if (newSel != _sel) { _sel = newSel; update(); @@ -81,7 +81,7 @@ void Slider::paintEvent(QPaintEvent *e) { p.drawLine(0, i, width() - 1, i); } - int32 x = qFloor(_sel * float64(width() - _st.bar.width()) / (_count - 1)), y = (height() - _st.bar.height()) / 2; + int32 x = qFloor(_sel * float64(width() - _st.bar.pxWidth()) / (_count - 1)), y = (height() - _st.bar.pxHeight()) / 2; p.drawPixmap(QPoint(x, y), App::sprite(), _st.bar); } @@ -135,7 +135,7 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent), _viewEmojis(this, lang(lng_settings_view_emojis)), _enterSend(this, qsl("send_key"), 0, lang(lng_settings_send_enter), !cCtrlEnter()), - _ctrlEnterSend(this, qsl("send_key"), 1, lang(lng_settings_send_ctrlenter), cCtrlEnter()), +_ctrlEnterSend(this, qsl("send_key"), 1, lang((cPlatform() == dbipMac) ? lng_settings_send_cmdenter : lng_settings_send_ctrlenter), cCtrlEnter()), _downloadPathWidth(st::linkFont->m.width(lang(lng_download_path_label))), _dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath()), @@ -345,36 +345,40 @@ void SettingsInner::paintEvent(QPaintEvent *e) { p.drawText(_left + st::setVersionLeft, top + st::setVersionTop + st::linkFont->ascent, textToDraw); top += st::setVersionHeight; - top += _workmodeTray.height() + st::setLittleSkip; - top += _workmodeWindow.height() + st::setSectionSkip; - - top += _autoStart.height() + st::setLittleSkip; - top += _startMinimized.height(); - - p.setFont(st::setHeaderFont->f); - p.setPen(st::setHeaderColor->p); - p.drawText(_left + st::setHeaderLeft, top + st::setHeaderTop + st::setHeaderFont->ascent, lang(lng_settings_scale_label)); - top += st::setHeaderSkip; - top += _dpiAutoScale.height() + st::setLittleSkip; - - top += _dpiSlider.height() + st::dpiFont4->height; - int32 sLeft = _dpiSlider.x() + _dpiWidth1 / 2, sWidth = _dpiSlider.width(); - float64 sStep = (sWidth - _dpiWidth1 / 2 - _dpiWidth4 / 2) / float64(dbisScaleCount - 2); - p.setFont(st::dpiFont1->f); - - p.setPen((scaleIs(dbisOne) ? st::dpiActive : st::dpiInactive)->p); - p.drawText(sLeft + qRound(0 * sStep) - _dpiWidth1 / 2, top - (st::dpiFont4->height - st::dpiFont1->height) / 2 - st::dpiFont1->descent, scaleLabel(dbisOne)); - p.setFont(st::dpiFont2->f); - p.setPen((scaleIs(dbisOneAndQuarter) ? st::dpiActive : st::dpiInactive)->p); - p.drawText(sLeft + qRound(1 * sStep) - _dpiWidth2 / 2, top - (st::dpiFont4->height - st::dpiFont2->height) / 2 - st::dpiFont2->descent, scaleLabel(dbisOneAndQuarter)); - p.setFont(st::dpiFont3->f); - p.setPen((scaleIs(dbisOneAndHalf) ? st::dpiActive : st::dpiInactive)->p); - p.drawText(sLeft + qRound(2 * sStep) - _dpiWidth3 / 2, top - (st::dpiFont4->height - st::dpiFont3->height) / 2 - st::dpiFont3->descent, scaleLabel(dbisOneAndHalf)); - p.setFont(st::dpiFont4->f); - p.setPen((scaleIs(dbisTwo) ? st::dpiActive : st::dpiInactive)->p); - p.drawText(sLeft + qRound(3 * sStep) - _dpiWidth4 / 2, top - (st::dpiFont4->height - st::dpiFont4->height) / 2 - st::dpiFont4->descent, scaleLabel(dbisTwo)); - p.setFont(st::linkFont->f); - + if (cPlatform() == dbipWindows) { + top += _workmodeTray.height() + st::setLittleSkip; + top += _workmodeWindow.height() + st::setSectionSkip; + + top += _autoStart.height() + st::setLittleSkip; + top += _startMinimized.height(); + } + + if (!cRetina()) { + p.setFont(st::setHeaderFont->f); + p.setPen(st::setHeaderColor->p); + p.drawText(_left + st::setHeaderLeft, top + st::setHeaderTop + st::setHeaderFont->ascent, lang(lng_settings_scale_label)); + top += st::setHeaderSkip; + top += _dpiAutoScale.height() + st::setLittleSkip; + + top += _dpiSlider.height() + st::dpiFont4->height; + int32 sLeft = _dpiSlider.x() + _dpiWidth1 / 2, sWidth = _dpiSlider.width(); + float64 sStep = (sWidth - _dpiWidth1 / 2 - _dpiWidth4 / 2) / float64(dbisScaleCount - 2); + p.setFont(st::dpiFont1->f); + + p.setPen((scaleIs(dbisOne) ? st::dpiActive : st::dpiInactive)->p); + p.drawText(sLeft + qRound(0 * sStep) - _dpiWidth1 / 2, top - (st::dpiFont4->height - st::dpiFont1->height) / 2 - st::dpiFont1->descent, scaleLabel(dbisOne)); + p.setFont(st::dpiFont2->f); + p.setPen((scaleIs(dbisOneAndQuarter) ? st::dpiActive : st::dpiInactive)->p); + p.drawText(sLeft + qRound(1 * sStep) - _dpiWidth2 / 2, top - (st::dpiFont4->height - st::dpiFont2->height) / 2 - st::dpiFont2->descent, scaleLabel(dbisOneAndQuarter)); + p.setFont(st::dpiFont3->f); + p.setPen((scaleIs(dbisOneAndHalf) ? st::dpiActive : st::dpiInactive)->p); + p.drawText(sLeft + qRound(2 * sStep) - _dpiWidth3 / 2, top - (st::dpiFont4->height - st::dpiFont3->height) / 2 - st::dpiFont3->descent, scaleLabel(dbisOneAndHalf)); + p.setFont(st::dpiFont4->f); + p.setPen((scaleIs(dbisTwo) ? st::dpiActive : st::dpiInactive)->p); + p.drawText(sLeft + qRound(3 * sStep) - _dpiWidth4 / 2, top - (st::dpiFont4->height - st::dpiFont4->height) / 2 - st::dpiFont4->descent, scaleLabel(dbisTwo)); + p.setFont(st::linkFont->f); + } + if (_self) { // chat options p.setFont(st::setHeaderFont->f); @@ -451,16 +455,19 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { _restartNow.move(_left + st::setWidth - _restartNow.width(), top + st::setVersionTop); top += st::setVersionHeight; - _workmodeTray.move(_left, top); top += _workmodeTray.height() + st::setLittleSkip; - _workmodeWindow.move(_left, top); top += _workmodeWindow.height() + st::setSectionSkip; - - _autoStart.move(_left, top); top += _autoStart.height() + st::setLittleSkip; - _startMinimized.move(_left, top); top += _startMinimized.height(); - - top += st::setHeaderSkip; - _dpiAutoScale.move(_left, top); top += _dpiAutoScale.height() + st::setLittleSkip; - _dpiSlider.move(_left, top); top += _dpiSlider.height() + st::dpiFont4->height; - + if (cPlatform() == dbipWindows) { + _workmodeTray.move(_left, top); top += _workmodeTray.height() + st::setLittleSkip; + _workmodeWindow.move(_left, top); top += _workmodeWindow.height() + st::setSectionSkip; + + _autoStart.move(_left, top); top += _autoStart.height() + st::setLittleSkip; + _startMinimized.move(_left, top); top += _startMinimized.height(); + } + if (!cRetina()) { + top += st::setHeaderSkip; + _dpiAutoScale.move(_left, top); top += _dpiAutoScale.height() + st::setLittleSkip; + _dpiSlider.move(_left, top); top += _dpiSlider.height() + st::dpiFont4->height; + } + // chat options if (_self) { top += st::setHeaderSkip; @@ -625,14 +632,27 @@ void SettingsInner::showAll() { // general _autoUpdate.show(); - - _workmodeTray.show(); - _workmodeWindow.show(); - - _autoStart.show(); setUpdatingState(_updatingState, true); - _startMinimized.show(); - _dpiSlider.show(); + if (cPlatform() == dbipWindows) { + _workmodeTray.show(); + _workmodeWindow.show(); + + _autoStart.show(); + _startMinimized.show(); + } else { + _workmodeTray.hide(); + _workmodeWindow.hide(); + + _autoStart.hide(); + _startMinimized.hide(); + } + if (cRetina()) { + _dpiSlider.hide(); + _dpiAutoScale.hide(); + } else { + _dpiSlider.show(); + _dpiAutoScale.show(); + } // chat options if (_self) { diff --git a/Telegram/SourceFiles/sysbuttons.cpp b/Telegram/SourceFiles/sysbuttons.cpp index d482d54ff..0e3e5b0b1 100644 --- a/Telegram/SourceFiles/sysbuttons.cpp +++ b/Telegram/SourceFiles/sysbuttons.cpp @@ -45,8 +45,8 @@ void SysBtn::onStateChange(int oldState, ButtonStateChangeSource source) { void SysBtn::paintEvent(QPaintEvent *e) { QPainter p(this); - int x = (width() - _st.img.width()) / 2, y = (height() - _st.img.height()) / 2; - p.fillRect(x, y, _st.img.width(), _st.img.height(), a_color.current()); + int x = (width() - _st.img.pxWidth()) / 2, y = (height() - _st.img.pxHeight()) / 2; + p.fillRect(x, y, _st.img.pxWidth(), _st.img.pxHeight(), a_color.current()); p.drawPixmap(QPoint(x, y), App::sprite(), _st.img); } diff --git a/Telegram/SourceFiles/telegram.qrc b/Telegram/SourceFiles/telegram.qrc index cc02b7f80..c58227517 100644 --- a/Telegram/SourceFiles/telegram.qrc +++ b/Telegram/SourceFiles/telegram.qrc @@ -1,6 +1,7 @@ art/segoe_ui.ttf + art/segoeuib.ttf art/segoe_ui_semibold.ttf art/segoe_wp_semibold.ttf art/newmsg.wav diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index b2528b795..fde848d9c 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -76,6 +76,13 @@ TitleWidget::TitleWidget(Window *window) connect(&_about, SIGNAL(clicked()), this, SLOT(onAbout())); connect(wnd->windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(stateChanged(Qt::WindowState))); connect(App::app(), SIGNAL(updateReady()), this, SLOT(showUpdateBtn())); + + if (cPlatform() == dbipMac) { + _minimize.hide(); + _maximize.hide(); + _restore.hide(); + _close.hide(); + } } void TitleWidget::paintEvent(QPaintEvent *e) { @@ -118,17 +125,19 @@ TitleWidget::~TitleWidget() { } void TitleWidget::resizeEvent(QResizeEvent *e) { - QPoint p(width() - (lastMaximized ? 0 : st::sysBtnDelta), 0); + QPoint p(width() - ((cPlatform() == dbipWindows && lastMaximized) ? 0 : st::sysBtnDelta), 0); - p.setX(p.x() - _close.width()); - _close.move(p); - - p.setX(p.x() - _maximize.width()); - _restore.move(p); _maximize.move(p); - - p.setX(p.x() - _minimize.width()); - _minimize.move(p); - + if (cPlatform() != dbipMac) { + p.setX(p.x() - _close.width()); + _close.move(p); + + p.setX(p.x() - _maximize.width()); + _restore.move(p); _maximize.move(p); + + p.setX(p.x() - _minimize.width()); + _minimize.move(p); + } + if (!_update.isHidden()) { p.setX(p.x() - _update.width()); _update.move(p); @@ -184,6 +193,8 @@ void TitleWidget::maximizedChanged(bool maximized) { if (lastMaximized == maximized) return; lastMaximized = maximized; + + if (cPlatform() == dbipMac) return; if (maximized) { _maximize.clearState(); } else { @@ -202,7 +213,7 @@ HitTestType TitleWidget::hitTest(const QPoint &p) { int x(p.x()), y(p.y()), w(width()), h(height() - st::titleShadow); if (hider && x >= App::main()->dlgsWidth()) return HitTestNone; - if (x >= st::titleIconPos.x() && y >= st::titleIconPos.y() && x < st::titleIconPos.x() + st::titleIconRect.width() && y < st::titleIconPos.y() + st::titleIconRect.height()) { + if (x >= st::titleIconPos.x() && y >= st::titleIconPos.y() && x < st::titleIconPos.x() + st::titleIconRect.pxWidth() && y < st::titleIconPos.y() + st::titleIconRect.pxHeight()) { return HitTestIcon; } else if (false || (_update.hitTest(p - _update.geometry().topLeft()) == HitTestSysButton) && _update.isVisible() diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index dab1fc75f..1daba3f63 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -43,20 +43,20 @@ void ConnectingWidget::set(const QString &text, const QString &reconnect) { } else { _reconnect.setText(reconnect); _reconnect.show(); - _reconnect.move(st::connectingPadding.left() + _textWidth, st::boxShadow.height() + st::connectingPadding.top()); + _reconnect.move(st::connectingPadding.left() + _textWidth, st::boxShadow.pxHeight() + st::connectingPadding.top()); _reconnectWidth = _reconnect.width(); } - resize(st::connectingPadding.left() + _textWidth + _reconnectWidth + st::connectingPadding.right() + st::boxShadow.width(), st::boxShadow.height() + st::connectingPadding.top() + st::linkFont->height + st::connectingPadding.bottom()); + resize(st::connectingPadding.left() + _textWidth + _reconnectWidth + st::connectingPadding.right() + st::boxShadow.pxWidth(), st::boxShadow.pxHeight() + st::connectingPadding.top() + st::linkFont->height + st::connectingPadding.bottom()); update(); } void ConnectingWidget::paintEvent(QPaintEvent *e) { QPainter p(this); - _shadow.paint(p, QRect(0, st::boxShadow.height(), width() - st::boxShadow.width(), height() - st::boxShadow.height()), QPoint(0, 0), BoxShadow::Top | BoxShadow::Right); - p.fillRect(0, st::boxShadow.height(), width() - st::boxShadow.width(), height() - st::boxShadow.height(), st::connectingBG->b); + _shadow.paint(p, QRect(0, st::boxShadow.pxHeight(), width() - st::boxShadow.pxWidth(), height() - st::boxShadow.pxHeight()), QPoint(0, 0), BoxShadow::Top | BoxShadow::Right); + p.fillRect(0, st::boxShadow.pxHeight(), width() - st::boxShadow.pxWidth(), height() - st::boxShadow.pxHeight(), st::connectingBG->b); p.setFont(st::linkFont->f); p.setPen(st::connectingColor->p); - p.drawText(st::connectingPadding.left(), st::boxShadow.height() + st::connectingPadding.top() + st::linkFont->ascent, _text); + p.drawText(st::connectingPadding.left(), st::boxShadow.pxHeight() + st::connectingPadding.top() + st::linkFont->ascent, _text); } void ConnectingWidget::onReconnect() { @@ -438,7 +438,7 @@ bool Window::getVideoCoords(VideoData *video, int32 &x, int32 &y, int32 &w) cons } QRect Window::iconRect() const { - return QRect(st::titleIconPos + title->geometry().topLeft(), st::titleIconRect.size()); + return QRect(st::titleIconPos + title->geometry().topLeft(), st::titleIconRect.pxSize()); } bool Window::eventFilter(QObject *obj, QEvent *evt) { diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 053296071..a290a92b6 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.5.1 + 0.5.2 CFBundleSignature ???? NOTE diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index f75a0bff4..afed215ad 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -38,7 +38,7 @@ 02F93BF511880983D3C57B84 /* dialogswidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E466873F01ABA1E55E914489 /* dialogswidget.cpp */; settings = {ATTRIBUTES = (); }; }; 03270F718426CFE84729079E /* flattextarea.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */; settings = {ATTRIBUTES = (); }; }; 06EABCC49D2EEE4076322BE7 /* moc_mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */; settings = {ATTRIBUTES = (); }; }; - 07C3AF26194336250016CFF1 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 07C3AF24194335ED0016CFF1 /* Images.xcassets */; }; + 0749CE69194D723400345D61 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 07C3AF24194335ED0016CFF1 /* Images.xcassets */; }; 0A49F3A5DC0680FB31519670 /* phoneinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */; settings = {ATTRIBUTES = (); }; }; 0CB7DE9A54CC9BF86FB7B5CA /* mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6D50D70712776D7ED3B00E5C /* mtp.cpp */; settings = {ATTRIBUTES = (); }; }; 0F0FC25286E16E5F78962FEE /* moc_newgroupbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 69FE16874104731CE2A66E0D /* moc_newgroupbox.cpp */; settings = {ATTRIBUTES = (); }; }; @@ -1141,7 +1141,6 @@ 87DF60DE337FB58864343E39 /* Resources */, AF39DD055C3EF8226FBE929D /* Frameworks */, FE0A091FDBFB3E9C31B7A1BD /* Products */, - 07C3AF40194CCC310016CFF1 /* Preprocess copy-Info.plist */, ); name = Telegram; sourceTree = ""; @@ -1208,7 +1207,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 07C3AF26194336250016CFF1 /* Images.xcassets in Resources */, + 0749CE69194D723400345D61 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1491,7 +1490,7 @@ "/usr/local/Qt-5.3.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; - OBJROOT = ./../Mac/DebugIntermediate/; + OBJROOT = "./../Mac/$(CONFIGURATION)Intermediate"; OTHER_CFLAGS = ( "-pipe", "-g", @@ -1542,7 +1541,7 @@ PRODUCT_NAME = Telegram; QT_LIBRARY_SUFFIX = ""; SDKROOT = macosx; - SYMROOT = ./; + SYMROOT = ./../Mac; }; name = Release; }; @@ -1595,7 +1594,7 @@ "/usr/local/Qt-5.3.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; - OBJROOT = ./../Mac/DebugIntermediate/; + OBJROOT = "./../Mac/$(CONFIGURATION)Intermediate"; OTHER_CFLAGS = ( "-pipe", "-g", @@ -1646,7 +1645,7 @@ PRODUCT_NAME = Telegram; QT_LIBRARY_SUFFIX = _debug; SDKROOT = macosx; - SYMROOT = ./; + SYMROOT = ./../Mac; }; name = Debug; }; @@ -1655,8 +1654,10 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.5.1; + CURRENT_PROJECT_VERSION = 0.5.2; + DYLIB_CURRENT_VERSION = 0.5.2; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; LLVM_LTO = YES; @@ -1673,9 +1674,11 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.5.1; + CURRENT_PROJECT_VERSION = 0.5.2; DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_CURRENT_VERSION = 0.5.2; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_LINK_WITH_DYNAMIC_LIBRARIES = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; OBJROOT = ./../Mac/DebugIntermediate; From 7d9d5aa81a575bfe6449e63393470c5facbf1895 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 16 Jun 2014 00:39:30 +0400 Subject: [PATCH 02/14] fixed debug build flags and emoji insert on retina --- Telegram/SourceFiles/gui/flattextarea.cpp | 4 ++-- Telegram/Telegram.xcodeproj/project.pbxproj | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index ab76cdcda..e592e389b 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -270,8 +270,8 @@ void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) { QString url = qsl("emoji://") + QString::number(emoji->code, 16); document()->addResource(QTextDocument::ImageResource, QUrl(url), QVariant(img)); QTextImageFormat imageFormat; - imageFormat.setWidth(img.width()); - imageFormat.setHeight(img.height()); + imageFormat.setWidth(img.width() / cIntRetinaFactor()); + imageFormat.setHeight(img.height() / cIntRetinaFactor()); imageFormat.setName(url); imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline); c.insertImage(imageFormat); diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index afed215ad..a0c983c83 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1497,8 +1497,6 @@ "-Wall", "-W", "-fPIE", - "-D_DEBUG", - "-D_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", @@ -1513,8 +1511,6 @@ "-Wall", "-W", "-fPIE", - "-D_DEBUG", - "-D_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", @@ -1602,7 +1598,6 @@ "-W", "-fPIE", "-D_DEBUG", - "-D_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", @@ -1618,7 +1613,6 @@ "-W", "-fPIE", "-D_DEBUG", - "-D_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", From 196b412d1fc7cfcd953ceab3dddc6dfa86f27aea Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 16 Jun 2014 13:31:10 +0400 Subject: [PATCH 03/14] half warnings fixed, half disabled for mac build, custom openssl build used, fixed notify activate, bold fonts etc --- Telegram/SourceFiles/app.cpp | 17 +- Telegram/SourceFiles/app.h | 2 + Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/boxes/aboutbox.cpp | 6 +- Telegram/SourceFiles/boxes/addcontactbox.cpp | 24 +-- .../SourceFiles/boxes/addparticipantbox.cpp | 10 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 4 +- Telegram/SourceFiles/boxes/connectionbox.cpp | 14 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 4 +- .../SourceFiles/boxes/downloadpathbox.cpp | 4 +- Telegram/SourceFiles/boxes/emojibox.cpp | 7 +- Telegram/SourceFiles/boxes/newgroupbox.cpp | 8 +- Telegram/SourceFiles/boxes/photocropbox.cpp | 4 +- Telegram/SourceFiles/dialogswidget.cpp | 20 ++- Telegram/SourceFiles/dropdown.cpp | 14 +- Telegram/SourceFiles/fileuploader.cpp | 4 +- Telegram/SourceFiles/gui/countryinput.cpp | 20 +-- Telegram/SourceFiles/gui/emoji_config.cpp | 2 +- Telegram/SourceFiles/gui/flatbutton.cpp | 8 +- Telegram/SourceFiles/gui/flatcheckbox.cpp | 6 +- Telegram/SourceFiles/gui/flatinput.cpp | 6 +- Telegram/SourceFiles/gui/flatlabel.cpp | 2 +- Telegram/SourceFiles/gui/flattextarea.cpp | 15 +- Telegram/SourceFiles/gui/images.cpp | 4 +- Telegram/SourceFiles/gui/scrollarea.cpp | 20 ++- Telegram/SourceFiles/gui/style_core.cpp | 2 +- Telegram/SourceFiles/gui/text.cpp | 26 +-- Telegram/SourceFiles/gui/text.h | 6 +- Telegram/SourceFiles/history.cpp | 153 ++++++++++++++---- Telegram/SourceFiles/history.h | 12 +- Telegram/SourceFiles/historywidget.cpp | 138 +++++++++++----- Telegram/SourceFiles/intro/intro.cpp | 4 +- Telegram/SourceFiles/intro/introcode.cpp | 4 +- Telegram/SourceFiles/intro/introphone.cpp | 9 +- Telegram/SourceFiles/intro/introsignup.cpp | 3 +- Telegram/SourceFiles/langloaderplain.cpp | 2 +- Telegram/SourceFiles/layerwidget.cpp | 44 ++++- Telegram/SourceFiles/localimageloader.cpp | 7 +- Telegram/SourceFiles/localimageloader.h | 8 +- Telegram/SourceFiles/mainwidget.cpp | 16 +- Telegram/SourceFiles/mainwidget.h | 2 +- Telegram/SourceFiles/mtproto/mtp.cpp | 2 +- .../SourceFiles/mtproto/mtpConnection.cpp | 40 ++--- Telegram/SourceFiles/mtproto/mtpDC.cpp | 4 +- .../SourceFiles/mtproto/mtpFileLoader.cpp | 16 +- Telegram/SourceFiles/mtproto/mtpRPC.h | 8 +- Telegram/SourceFiles/mtproto/mtpSession.cpp | 6 +- Telegram/SourceFiles/mtproto/mtpSession.h | 6 +- Telegram/SourceFiles/profilewidget.cpp | 9 +- Telegram/SourceFiles/pspecific_mac.cpp | 4 +- Telegram/SourceFiles/pspecific_mac_p.mm | 7 +- Telegram/SourceFiles/settings.cpp | 3 + Telegram/SourceFiles/settings.h | 2 + Telegram/SourceFiles/settingswidget.cpp | 8 +- Telegram/SourceFiles/title.cpp | 11 +- Telegram/SourceFiles/types.cpp | 9 +- Telegram/SourceFiles/window.cpp | 10 +- Telegram/Telegram.xcodeproj/project.pbxproj | 62 ++++++- 58 files changed, 568 insertions(+), 302 deletions(-) diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 2a240a0c9..e0e0c0bd7 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -156,6 +156,13 @@ namespace App { return (peer_id & 0x100000000L) ? MTP_peerChat(MTP_int(int32(peer_id & 0xFFFFFFFFL))) : MTP_peerUser(MTP_int(int32(peer_id & 0xFFFFFFFFL))); } + int32 userFromPeer(const PeerId &peer_id) { + return (peer_id & 0x100000000L) ? 0 : int32(peer_id & 0xFFFFFFFFL); + } + int32 chatFromPeer(const PeerId &peer_id) { + return (peer_id & 0x100000000L) ? int32(peer_id & 0xFFFFFFFFL) : 0; + } + int32 onlineWillChangeIn(int32 online, int32 now) { if (online <= 0) return 86400; if (online > now) { @@ -314,7 +321,7 @@ namespace App { case mtpc_userStatusOnline: data->onlineTill = status->c_userStatusOnline().vexpires.v; break; } - if (data->contact < 0 && !data->phone.isEmpty() && data->id != MTP::authedId()) { + if (data->contact < 0 && !data->phone.isEmpty() && (data->id & 0xFFFFFFFF) != MTP::authedId()) { data->contact = 0; } if (data->contact > 0 && !wasContact) { @@ -605,7 +612,7 @@ namespace App { } if (user->contact > 0) { if (!wasContact) { - App::main()->addNewContact(user->id & 0xFFFFFFFF, false); + App::main()->addNewContact(App::userFromPeer(user->id), false); user->input = MTP_inputPeerContact(userId); user->inputUser = MTP_inputUserContact(userId); } @@ -614,7 +621,7 @@ namespace App { user->input = MTP_inputPeerForeign(userId, MTP_long(user->access)); user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access)); } - if (user->contact < 0 && !user->phone.isEmpty() && user->id != MTP::authedId()) { + if (user->contact < 0 && !user->phone.isEmpty() && App::userFromPeer(user->id) != MTP::authedId()) { user->contact = 0; } if (wasContact) { @@ -1608,7 +1615,7 @@ namespace App { continue; } uint32 dataLen = *(const uint32*)decrypted.constData(); - if (dataLen > decrypted.size() || dataLen <= fullDataLen - 16 || dataLen < 4) { + if (dataLen > uint32(decrypted.size()) || dataLen <= fullDataLen - 16 || dataLen < 4) { LOG(("App Error: bad decrypted part size: %1, fullDataLen: %2, decrypted size: %3").arg(dataLen).arg(fullDataLen).arg(decrypted.size())); continue; } @@ -1774,7 +1781,7 @@ namespace App { quint32 count; stream >> count; - for (int32 i = 0; i < count; ++i) { + for (uint32 i = 0; i < count; ++i) { readOneMuted(stream); } } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index ee74e191e..8a20785ac 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -60,6 +60,8 @@ namespace App { return peerFromUser(user_id.v); } MTPpeer peerToMTP(const PeerId &peer_id); + int32 userFromPeer(const PeerId &peer_id); + int32 chatFromPeer(const PeerId &peer_id); int32 onlineWillChangeIn(int32 onlineOnServer, int32 nowOnServer); QString onlineText(int32 onlineOnServer, int32 nowOnServer); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index f902fc4cb..f9e54fa3c 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -417,7 +417,7 @@ void Application::startUpdateCheck(bool forceWait) { } } } - if (cManyInstance() && !cDebug() || cPlatform() == dbipMac) return; // only main instance is updating + if ((cManyInstance() && !cDebug()) || cPlatform() == dbipMac) return; // only main instance is updating if (sendRequest) { QNetworkRequest checkVersion(QUrl(qsl("http://tdesktop.com/win/tupdates/current"))); diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 55d438b9e..188e8bf15 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -22,10 +22,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "mainwidget.h" #include "window.h" -AboutBox::AboutBox() : _hiding(false), -_text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle), +AboutBox::AboutBox() : _done(this, lang(lng_about_done), st::aboutCloseButton), -a_opacity(0, 1) { +_text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle), +_hiding(false), a_opacity(0, 1) { _width = st::aboutWidth; _height = st::aboutHeight; diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 566b7428e..2ac12c875 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -24,14 +24,14 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "window.h" AddContactBox::AddContactBox(QString fname, QString lname, QString phone) : - _hiding(false), _peer(0), _addRequest(0), _contactId(0), - _firstInput(this, st::inpAddContact, lang(lng_signup_firstname), fname), - _lastInput(this, st::inpAddContact, lang(lng_signup_lastname), lname), - _phoneInput(this, st::inpAddContact, lang(lng_contact_phone), phone.isEmpty() ? phone : App::formatPhone(phone)), + _peer(0), _addButton(this, lang(lng_add_contact), st::btnSelectDone), _retryButton(this, lang(lng_try_other_contact), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), - a_opacity(0, 1) { + _firstInput(this, st::inpAddContact, lang(lng_signup_firstname), fname), + _lastInput(this, st::inpAddContact, lang(lng_signup_lastname), lname), + _phoneInput(this, st::inpAddContact, lang(lng_contact_phone), phone.isEmpty() ? phone : App::formatPhone(phone)), + _contactId(0), _addRequest(0), a_opacity(0, 1), _hiding(false) { if (!phone.isEmpty()) { _phoneInput.setDisabled(true); @@ -41,14 +41,14 @@ AddContactBox::AddContactBox(QString fname, QString lname, QString phone) : } AddContactBox::AddContactBox(PeerData *peer) : - _hiding(false), _peer(peer), _addRequest(0), _contactId(0), - _firstInput(this, st::inpAddContact, lang(peer->chat ? lng_dlg_new_group_name : lng_signup_firstname), peer->chat ? peer->name : peer->asUser()->firstName), - _lastInput(this, st::inpAddContact, lang(lng_signup_lastname), peer->chat ? QString() : peer->asUser()->lastName), - _phoneInput(this, st::inpAddContact, lang(lng_contact_phone)), + _peer(peer), _addButton(this, lang(lng_settings_save), st::btnSelectDone), _retryButton(this, lang(lng_try_other_contact), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), - a_opacity(0, 1) { + _firstInput(this, st::inpAddContact, lang(peer->chat ? lng_dlg_new_group_name : lng_signup_firstname), peer->chat ? peer->name : peer->asUser()->firstName), + _lastInput(this, st::inpAddContact, lang(lng_signup_lastname), peer->chat ? QString() : peer->asUser()->lastName), + _phoneInput(this, st::inpAddContact, lang(lng_contact_phone)), + _contactId(0), _addRequest(0), a_opacity(0, 1), _hiding(false) { initBox(); } @@ -204,7 +204,7 @@ void AddContactBox::animStep(float64 dt) { _cache = QPixmap(); if (!_hiding) { showAll(); - if (_firstInput.text().isEmpty() && _lastInput.text().isEmpty() || _phoneInput.isHidden() || !_phoneInput.isEnabled()) { + if ((_firstInput.text().isEmpty() && _lastInput.text().isEmpty()) || _phoneInput.isHidden() || !_phoneInput.isEnabled()) { _firstInput.setFocus(); } else { _phoneInput.setFocus(); @@ -238,7 +238,7 @@ void AddContactBox::onSend() { _addRequest = MTP::send(MTPaccount_UpdateProfile(MTP_string(firstName), MTP_string(lastName)), rpcDone(&AddContactBox::onSaveSelfDone), rpcFail(&AddContactBox::onSaveSelfFail)); } else if (_peer) { if (_peer->chat) { - _addRequest = MTP::send(MTPmessages_EditChatTitle(MTP_int(int32(_peer->id & 0xFFFFFFFF)), MTP_string(firstName)), rpcDone(&AddContactBox::onSaveChatDone), rpcFail(&AddContactBox::onSaveFail)); + _addRequest = MTP::send(MTPmessages_EditChatTitle(MTP_int(App::chatFromPeer(_peer->id)), MTP_string(firstName)), rpcDone(&AddContactBox::onSaveChatDone), rpcFail(&AddContactBox::onSaveFail)); } else { _contactId = MTP::nonce(); QVector v(1, MTP_inputPhoneContact(MTP_long(_contactId), MTP_string(_peer->asUser()->phone), MTP_string(firstName), MTP_string(lastName))); diff --git a/Telegram/SourceFiles/boxes/addparticipantbox.cpp b/Telegram/SourceFiles/boxes/addparticipantbox.cpp index 9a493f7ef..3253f76f0 100644 --- a/Telegram/SourceFiles/boxes/addparticipantbox.cpp +++ b/Telegram/SourceFiles/boxes/addparticipantbox.cpp @@ -22,8 +22,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "mainwidget.h" #include "window.h" -AddParticipantInner::AddParticipantInner(ChatData *chat) : _chat(chat), _selCount(0), - _contacts(&App::main()->contactsList()), _sel(0), _filteredSel(-1), _mouseSel(false) { +AddParticipantInner::AddParticipantInner(ChatData *chat) : _chat(chat), + _contacts(&App::main()->contactsList()), _sel(0), _filteredSel(-1), _mouseSel(false), _selCount(0) { _filter = qsl("a"); updateFilter(); @@ -507,12 +507,12 @@ void AddParticipantInner::selectSkipPage(int32 h, int32 dir) { selectSkip(points * dir); } -AddParticipantBox::AddParticipantBox(ChatData *chat) : _inner(chat), _hiding(false), - _scroll(this, st::newGroupScroll), +AddParticipantBox::AddParticipantBox(ChatData *chat) : + _scroll(this, st::newGroupScroll), _inner(chat), _filter(this, st::contactsFilter, lang(lng_participant_filter)), _invite(this, lang(lng_participant_invite), st::btnSelectDone), _cancel(this, lang(lng_cancel), st::btnSelectCancel), - a_opacity(0, 1), af_opacity(anim::linear) { + _hiding(false), a_opacity(0, 1), af_opacity(anim::linear) { _width = st::participantWidth; _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 0c6f86fcf..e1dfdf6ef 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -22,10 +22,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "mainwidget.h" #include "window.h" -ConfirmBox::ConfirmBox(QString text, QString doneText, QString cancelText) : _hiding(false), _text(100), +ConfirmBox::ConfirmBox(QString text, QString doneText, QString cancelText) : _confirm(this, doneText.isEmpty() ? lang(lng_continue) : doneText, st::btnSelectDone), _cancel(this, cancelText.isEmpty() ? lang(lng_cancel) : cancelText, st::btnSelectCancel), - a_opacity(0, 1), af_opacity(anim::linear) { + _text(100), _hiding(false), a_opacity(0, 1), af_opacity(anim::linear) { _text.setText(st::boxFont, text, _textPlainOptions); diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index e975e2678..047270462 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -22,17 +22,17 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "mainwidget.h" #include "window.h" -ConnectionBox::ConnectionBox() : _hiding(false), - _hostInput(this, st::inpConnectionHost, lang(lng_connection_host_ph), cConnectionProxy().host), - _portInput(this, st::inpConnectionPort, lang(lng_connection_port_ph), QString::number(cConnectionProxy().port)), - _userInput(this, st::inpConnectionUser, lang(lng_connection_user_ph), cConnectionProxy().user), +ConnectionBox::ConnectionBox() : + _saveButton(this, lang(lng_connection_save), st::btnSelectDone), + _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), + _hostInput(this, st::inpConnectionHost, lang(lng_connection_host_ph), cConnectionProxy().host), + _portInput(this, st::inpConnectionPort, lang(lng_connection_port_ph), QString::number(cConnectionProxy().port)), + _userInput(this, st::inpConnectionUser, lang(lng_connection_user_ph), cConnectionProxy().user), _passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password), - _saveButton(this, lang(lng_connection_save), st::btnSelectDone), - _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto)), _httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy)), _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)), - a_opacity(0, 1) { + a_opacity(0, 1), _hiding(false) { _width = st::addContactWidth; diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 07ce2c443..4f4e5c9a4 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -395,11 +395,11 @@ void ContactsInner::selectSkipPage(int32 h, int32 dir) { selectSkip(points * dir); } -ContactsBox::ContactsBox() : _inner(), _hiding(false), _scroll(this, st::newGroupScroll), +ContactsBox::ContactsBox() : _scroll(this, st::newGroupScroll), _inner(), _addContact(this, lang(lng_add_contact_button), st::contactsAdd), _filter(this, st::contactsFilter, lang(lng_participant_filter)), _close(this, lang(lng_contacts_done), st::contactsClose), - a_opacity(0, 1) { + _hiding(false), a_opacity(0, 1) { _width = st::participantWidth; _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); diff --git a/Telegram/SourceFiles/boxes/downloadpathbox.cpp b/Telegram/SourceFiles/boxes/downloadpathbox.cpp index 0283d4e41..0b5d76c19 100644 --- a/Telegram/SourceFiles/boxes/downloadpathbox.cpp +++ b/Telegram/SourceFiles/boxes/downloadpathbox.cpp @@ -21,14 +21,14 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "downloadpathbox.h" #include "gui/filedialog.h" -DownloadPathBox::DownloadPathBox() : _hiding(false), +DownloadPathBox::DownloadPathBox() : _path(cDownloadPath()), _tempRadio(this, qsl("dir_type"), 0, lang(lng_download_path_temp_radio), _path.isEmpty()), _dirRadio(this, qsl("dir_type"), 1, lang(lng_download_path_dir_radio), !_path.isEmpty()), _dirInput(this, st::inpDownloadDir, QString(), QDir::toNativeSeparators(_path)), _saveButton(this, lang(lng_connection_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), - a_opacity(0, 1) { + a_opacity(0, 1), _hiding(false) { _width = st::addContactWidth; diff --git a/Telegram/SourceFiles/boxes/emojibox.cpp b/Telegram/SourceFiles/boxes/emojibox.cpp index 133d79ddc..27e262971 100644 --- a/Telegram/SourceFiles/boxes/emojibox.cpp +++ b/Telegram/SourceFiles/boxes/emojibox.cpp @@ -65,9 +65,8 @@ namespace { const uint32 replacesCount = sizeof(replaces) / sizeof(EmojiReplace), replacesInRow = 8; } -EmojiBox::EmojiBox() : _hiding(false), - _done(this, lang(lng_about_done), st::aboutCloseButton), - a_opacity(0, 1) { +EmojiBox::EmojiBox() : _done(this, lang(lng_about_done), st::aboutCloseButton), + _hiding(false), a_opacity(0, 1) { fillBlocks(); @@ -96,7 +95,7 @@ EmojiBox::EmojiBox() : _hiding(false), void EmojiBox::fillBlocks() { BlockRow currentRow; currentRow.reserve(replacesInRow); - for (int32 i = 0; i < replacesCount; ++i) { + for (uint32 i = 0; i < replacesCount; ++i) { Block block(getEmoji(replaces[i].code), QString::fromUtf8(replaces[i].replace)); currentRow.push_back(block); if (currentRow.size() == replacesInRow) { diff --git a/Telegram/SourceFiles/boxes/newgroupbox.cpp b/Telegram/SourceFiles/boxes/newgroupbox.cpp index 5fa27274d..3030a59e4 100644 --- a/Telegram/SourceFiles/boxes/newgroupbox.cpp +++ b/Telegram/SourceFiles/boxes/newgroupbox.cpp @@ -438,11 +438,11 @@ QVector NewGroupInner::selectedInputs() { return result; } -NewGroupBox::NewGroupBox() : _inner(), _hiding(false), _scroll(this, st::newGroupScroll), +NewGroupBox::NewGroupBox() : _scroll(this, st::newGroupScroll), _inner(), _filter(this, st::contactsFilter, lang(lng_participant_filter)), _next(this, lang(lng_create_group_next), st::btnSelectDone), _cancel(this, lang(lng_cancel), st::btnSelectCancel), - a_opacity(0, 1) { + _hiding(false), a_opacity(0, 1) { _width = st::participantWidth; _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); @@ -596,11 +596,11 @@ NewGroupBox::~NewGroupBox() { } CreateGroupBox::CreateGroupBox(const MTPVector &users) : _users(users), - _hiding(false), _createRequestId(0), + _createRequestId(0), _name(this, st::newGroupName, lang(lng_dlg_new_group_name)), _create(this, lang(lng_dlg_create_group), st::btnSelectDone), _cancel(this, lang(lng_cancel), st::btnSelectCancel), - a_opacity(0, 1) { + _hiding(false), a_opacity(0, 1) { _width = st::addContactWidth; _height = st::addContactTitleHeight + st::addContactPadding.top() + _name.height() + st::addContactPadding.bottom() + _create.height(); diff --git a/Telegram/SourceFiles/boxes/photocropbox.cpp b/Telegram/SourceFiles/boxes/photocropbox.cpp index 2f0b173e2..8729aabd6 100644 --- a/Telegram/SourceFiles/boxes/photocropbox.cpp +++ b/Telegram/SourceFiles/boxes/photocropbox.cpp @@ -25,10 +25,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "photocropbox.h" #include "fileuploader.h" -PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer) : _img(img), _downState(0), _peerId(peer), +PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer) : _downState(0), _sendButton(this, lang(lng_settings_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), - a_opacity(0, 1) { + _img(img), _peerId(peer), a_opacity(0, 1) { connect(&_sendButton, SIGNAL(clicked()), this, SLOT(onSend())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 46e45ab3d..c7f605f8c 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -76,7 +76,7 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { } void DialogsListWidget::activate() { - if (filter.isEmpty() && !sel || !filter.isEmpty() && (filteredSel < 0 || filteredSel >= filtered.size())) { + if ((filter.isEmpty() && !sel) || (!filter.isEmpty() && (filteredSel < 0 || filteredSel >= filtered.size()))) { selectSkip(1); } } @@ -90,7 +90,7 @@ void DialogsListWidget::mouseMoveEvent(QMouseEvent *e) { void DialogsListWidget::onUpdateSelected(bool force) { QPoint mouse(mapFromGlobal(lastMousePos)); - if (!force && !rect().contains(mouse) || !selByMouse) return; + if ((!force && !rect().contains(mouse)) || !selByMouse) return; int w = width(), mouseY = mouse.y(); if (filter.isEmpty()) { @@ -704,9 +704,19 @@ DialogsIndexed &DialogsListWidget::dialogsList() { return dialogs; } -DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent), _configLoaded(false), _drawShadow(true), -scroll(this, st::dlgScroll), list(&scroll, parent), _filter(this, st::dlgFilter, lang(lng_dlg_filter)), dlgOffset(0), dlgCount(-1), dlgPreloading(0), contactsRequest(0), -_newGroup(this, st::btnNewGroup), _addContact(this, st::btnAddContact) { +DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) +, _configLoaded(false) +, _drawShadow(true) +, dlgOffset(0) +, dlgCount(-1) +, dlgPreloading(0) +, contactsRequest(0) +, _filter(this, st::dlgFilter, lang(lng_dlg_filter)) +, _newGroup(this, st::btnNewGroup) +, _addContact(this, st::btnAddContact) +, scroll(this, st::dlgScroll) +, list(&scroll, parent) +{ scroll.setWidget(&list); scroll.setFocusPolicy(Qt::NoFocus); connect(&list, SIGNAL(mustScrollTo(int, int)), &scroll, SLOT(scrollToY(int, int))); diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index ba8773790..51c81c16a 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -23,7 +23,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "lang.h" Dropdown::Dropdown(QWidget *parent) : TWidget(parent), - _shadow(st::dropdownShadow), a_opacity(0), _hiding(false) { + _hiding(false), a_opacity(0), _shadow(st::dropdownShadow) { _width = st::dropdownPadding.left() + st::dropdownPadding.right(); _height = st::dropdownPadding.top() + st::dropdownPadding.bottom(); resize(_width, _height); @@ -173,7 +173,7 @@ bool Dropdown::eventFilter(QObject *obj, QEvent *e) { } DragArea::DragArea(QWidget *parent) : TWidget(parent), - _shadow(st::boxShadow), a_opacity(0), a_color(st::dragColor->c), _hiding(false), _in(false) { + _hiding(false), _in(false), a_opacity(0), a_color(st::dragColor->c), _shadow(st::boxShadow) { setMouseTracking(true); setAcceptDrops(true); } @@ -311,7 +311,7 @@ bool DragArea::animStep(float64 ms) { static const int emojiPerRow = 7, emojiRowsPerPage = 6; -EmojiPanInner::EmojiPanInner(QWidget *parent) : QWidget(parent), _selected(-1), _pressedSel(-1), _tab(cEmojiTab()) { +EmojiPanInner::EmojiPanInner(QWidget *parent) : QWidget(parent), _tab(cEmojiTab()), _selected(-1), _pressedSel(-1) { resize(emojiPerRow * st::emojiPanSize.width(), emojiRowsPerPage * st::emojiPanSize.height() - st::emojiPanSub); setMouseTracking(true); setFocusPolicy(Qt::NoFocus); @@ -481,13 +481,14 @@ void EmojiPanInner::showEmojiPack(DBIEmojiTab packIndex) { } EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), +_hiding(false), a_opacity(0), _shadow(st::dropdownShadow), _recent (this, qsl("emoji_group"), dbietRecent , QString(), cEmojiTab() == dbietRecent , st::rbEmojiRecent), _people (this, qsl("emoji_group"), dbietPeople , QString(), cEmojiTab() == dbietPeople , st::rbEmojiPeople), _nature (this, qsl("emoji_group"), dbietNature , QString(), cEmojiTab() == dbietNature , st::rbEmojiNature), _objects(this, qsl("emoji_group"), dbietObjects, QString(), cEmojiTab() == dbietObjects, st::rbEmojiObjects), _places (this, qsl("emoji_group"), dbietPlaces , QString(), cEmojiTab() == dbietPlaces , st::rbEmojiPlaces), _symbols(this, qsl("emoji_group"), dbietSymbols, QString(), cEmojiTab() == dbietSymbols, st::rbEmojiSymbols), -_shadow(st::dropdownShadow), a_opacity(0), _hiding(false), _scroll(this, st::emojiScroll), _inner() { +_scroll(this, st::emojiScroll), _inner() { setFocusPolicy(Qt::NoFocus); _scroll.setFocusPolicy(Qt::NoFocus); _scroll.viewport()->setFocusPolicy(Qt::NoFocus); @@ -666,9 +667,8 @@ void EmojiPan::hideAll() { } void EmojiPan::onTabChange() { - DBIEmojiTab newTab; - if (_recent.checked()) newTab = dbietRecent; - else if (_people.checked()) newTab = dbietPeople; + DBIEmojiTab newTab = dbietRecent; + if (_people.checked()) newTab = dbietPeople; else if (_nature.checked()) newTab = dbietNature; else if (_objects.checked()) newTab = dbietObjects; else if (_places.checked()) newTab = dbietPlaces; diff --git a/Telegram/SourceFiles/fileuploader.cpp b/Telegram/SourceFiles/fileuploader.cpp index 0293863c8..a1988fcee 100644 --- a/Telegram/SourceFiles/fileuploader.cpp +++ b/Telegram/SourceFiles/fileuploader.cpp @@ -18,7 +18,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "stdafx.h" #include "fileuploader.h" -FileUploader::FileUploader() : uploading(0), sentSize(0) { +FileUploader::FileUploader() : sentSize(0), uploading(0) { nextTimer.setSingleShot(true); connect(&nextTimer, SIGNAL(timeout()), this, SLOT(sendNext())); } @@ -116,7 +116,7 @@ void FileUploader::sendNext() { } else { toSend = i->media.data.mid(i->docSentParts * i->docPartSize, i->docPartSize); } - if (toSend.size() > i->docPartSize || toSend.size() < i->docPartSize && i->docSentParts + 1 != i->docPartsCount) { + if (toSend.size() > i->docPartSize || (toSend.size() < i->docPartSize && i->docSentParts + 1 != i->docPartsCount)) { currentFailed(); return; } diff --git a/Telegram/SourceFiles/gui/countryinput.cpp b/Telegram/SourceFiles/gui/countryinput.cpp index 04f7212da..45ad9de78 100644 --- a/Telegram/SourceFiles/gui/countryinput.cpp +++ b/Telegram/SourceFiles/gui/countryinput.cpp @@ -61,7 +61,7 @@ namespace { CountriesByISO2::const_iterator already = countriesByISO2.constFind(info->iso2); if (already != countriesByISO2.cend()) { QString badISO = info->iso2; - badISO; + (void)badISO; } countriesByISO2.insert(info->iso2, info); } @@ -82,7 +82,7 @@ QString findValidCode(QString fullCode) { return ""; } -CountryInput::CountryInput(QWidget *parent, const style::countryInput &st) : QWidget(parent), _st(st), _active(false), _select(0), _text(lang(lng_country_code)) { +CountryInput::CountryInput(QWidget *parent, const style::countryInput &st) : QWidget(parent), _st(st), _active(false), _text(lang(lng_country_code)), _select(0) { initCountries(); resize(_st.width, _st.height + _st.ptrSize.height()); @@ -204,8 +204,8 @@ CountryInput::~CountryInput() { delete _select; } -CountryList::CountryList(QWidget *parent, const style::countryList &st) : QWidget(parent), _sel(0), _mouseSel(false), - _st(st) { +CountryList::CountryList(QWidget *parent, const style::countryList &st) : QWidget(parent), _sel(0), + _st(st), _mouseSel(false) { CountriesByISO2::const_iterator l = countriesByISO2.constFind(lastValidISO); bool seenLastValid = false; int already = countriesAll.size(); @@ -338,7 +338,7 @@ void CountryList::mouseMoveEvent(QMouseEvent *e) { void CountryList::onUpdateSelected(bool force) { QPoint p(mapFromGlobal(_mousePos)); - if (!force && !rect().contains(p) || !_mouseSel) return; + if ((!force && !rect().contains(p)) || !_mouseSel) return; int newSelected = p.y(); newSelected = (newSelected > _st.verticalMargin) ? (newSelected - _st.verticalMargin) / _st.rowHeight : 0; @@ -413,11 +413,11 @@ QString CountryList::getSelectedCountry() const { } CountrySelect::CountrySelect() : QWidget(App::wnd()), - _scroll(this, st::scrollCountries), _list(&_scroll), - _filter(this, st::inpCountry, lang(lng_country_ph)), - _doneButton(this, lang(lng_country_done), st::btnSelectDone), - _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), - _innerLeft(0), _innerTop(0), _innerWidth(0), _innerHeight(0), _result("none"), + _result("none"), + _filter(this, st::inpCountry, lang(lng_country_ph)), _scroll(this, st::scrollCountries), _list(&_scroll), + _doneButton(this, lang(lng_country_done), st::btnSelectDone), + _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), + _innerLeft(0), _innerTop(0), _innerWidth(0), _innerHeight(0), a_alpha(0), a_bgAlpha(0), a_coord(st::countriesSlideShift), _shadow(st::boxShadow) { setGeometry(App::wnd()->rect()); diff --git a/Telegram/SourceFiles/gui/emoji_config.cpp b/Telegram/SourceFiles/gui/emoji_config.cpp index 7c067590b..697a73c0b 100644 --- a/Telegram/SourceFiles/gui/emoji_config.cpp +++ b/Telegram/SourceFiles/gui/emoji_config.cpp @@ -3558,7 +3558,7 @@ const EmojiData *getEmoji(uint32 code) { return 0; } - if (highCode == 35 || highCode >= 48 && highCode < 58) { + if (highCode == 35 || (highCode >= 48 && highCode < 58)) { if ((code & 0xFFFF) != 0x20E3) return 0; switch (code) { diff --git a/Telegram/SourceFiles/gui/flatbutton.cpp b/Telegram/SourceFiles/gui/flatbutton.cpp index 500570d25..152cabf72 100644 --- a/Telegram/SourceFiles/gui/flatbutton.cpp +++ b/Telegram/SourceFiles/gui/flatbutton.cpp @@ -19,9 +19,9 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "gui/flatbutton.h" FlatButton::FlatButton(QWidget *parent, const QString &text, const style::flatButton &st) : Button(parent), - _text(text), _opacity(1), + _text(text), _st(st), - a_bg(st.bgColor->c), a_text(st.color->c) { + a_bg(st.bgColor->c), a_text(st.color->c), _opacity(1) { if (_st.width < 0) { _st.width = _st.font->m.width(text) - _st.width; } else if (!_st.width) { @@ -133,8 +133,8 @@ void LinkButton::onStateChange(int oldState, ButtonStateChangeSource source) { LinkButton::~LinkButton() { } -IconedButton::IconedButton(QWidget *parent, const style::iconedButton &st, const QString &text) : Button(parent), _opacity(1), - _text(text), _st(st), a_opacity(_st.opacity), a_bg(_st.bgColor->c) { +IconedButton::IconedButton(QWidget *parent, const style::iconedButton &st, const QString &text) : Button(parent), + _text(text), _st(st), a_opacity(_st.opacity), a_bg(_st.bgColor->c), _opacity(1) { if (_st.width < 0) { _st.width = _st.font->m.width(text) - _st.width; diff --git a/Telegram/SourceFiles/gui/flatcheckbox.cpp b/Telegram/SourceFiles/gui/flatcheckbox.cpp index 9382c0c05..69609810e 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/gui/flatcheckbox.cpp @@ -22,7 +22,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "flatcheckbox.h" FlatCheckbox::FlatCheckbox(QWidget *parent, const QString &text, bool checked, const style::flatCheckbox &st) : Button(parent), - _text(text), _checked(checked), _st(st), _opacity(1), a_over(0, 0) { + _st(st), a_over(0, 0), _text(text), _opacity(1), _checked(checked) { connect(this, SIGNAL(clicked()), this, SLOT(onClicked())); connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); setCursor(_st.cursor); @@ -92,7 +92,7 @@ void FlatCheckbox::paintEvent(QPaintEvent *e) { if (_state & StateDisabled) { QRect sRect(_checked ? _st.chkDisImageRect : _st.disImageRect); p.drawPixmap(_st.imagePos, App::sprite(), sRect); - } else if (_checked && _st.chkImageRect == _st.chkOverImageRect || !_checked && _st.imageRect == _st.overImageRect) { + } else if ((_checked && _st.chkImageRect == _st.chkOverImageRect) || (!_checked && _st.imageRect == _st.overImageRect)) { p.setOpacity(_opacity); QRect sRect(_checked ? _st.chkImageRect : _st.imageRect); p.drawPixmap(_st.imagePos, App::sprite(), sRect); @@ -185,7 +185,7 @@ void RadiobuttonsGroup::remove(FlatRadiobutton * const &radio) { } FlatRadiobutton::FlatRadiobutton(QWidget *parent, const QString &group, int32 value, const QString &text, bool checked, const style::flatCheckbox &st) : - FlatCheckbox(parent, text, checked, st), _value(value), _group(radioButtons.reg(group)) { + FlatCheckbox(parent, text, checked, st), _group(radioButtons.reg(group)), _value(value) { _group->insert(this); connect(this, SIGNAL(changed()), this, SLOT(onChanged())); if (this->checked()) onChanged(); diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index ab7851322..74d734234 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -41,9 +41,9 @@ namespace { FlatInputStyle _flatInputStyle; } -FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _oldtext(v), - _st(st), _phVisible(!v.length()), _kev(0), a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), - a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c) { +FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _oldtext(v), _kev(0), _phVisible(!v.length()), + a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), + a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), _st(st) { resize(_st.width, _st.height); setFont(_st.font->f); diff --git a/Telegram/SourceFiles/gui/flatlabel.cpp b/Telegram/SourceFiles/gui/flatlabel.cpp index ca95c4040..d4335e0ee 100644 --- a/Telegram/SourceFiles/gui/flatlabel.cpp +++ b/Telegram/SourceFiles/gui/flatlabel.cpp @@ -29,7 +29,7 @@ namespace { } FlatLabel::FlatLabel(QWidget *parent, const QString &text, const style::flatLabel &st, const style::textStyle &tst) : TWidget(parent), -_st(st), _tst(tst), _text(_st.width ? _st.width : QFIXED_MAX), _opacity(1) { +_text(st.width ? st.width : QFIXED_MAX), _st(st), _tst(tst), _opacity(1) { setRichText(text); } diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index e592e389b..8383763dc 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -20,10 +20,11 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "flattextarea.h" -FlatTextarea::FlatTextarea(QWidget *parent, const style::flatTextarea &st, const QString &pholder, const QString &v) : QTextEdit(v, parent), _oldtext(v), - _st(st), _phVisible(!v.length()), _ph(pholder), _fakeMargin(0), - a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), - _touchPress(false), _touchRightButton(false), _touchMove(false), _replacingEmojis(false) { +FlatTextarea::FlatTextarea(QWidget *parent, const style::flatTextarea &st, const QString &pholder, const QString &v) : QTextEdit(v, parent), + _ph(pholder), _oldtext(v), _phVisible(!v.length()), + a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), + _st(st), _fakeMargin(0), + _touchPress(false), _touchRightButton(false), _touchMove(false), _replacingEmojis(false) { setAcceptRichText(false); resize(_st.width, _st.font->height); @@ -300,10 +301,10 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { QString t(fragment.text()); for (const QChar *ch = t.constData(), *e = ch + t.size(); ch != e; ++ch) { - if (ch + 1 < e && (ch->isHighSurrogate() || (ch->unicode() >= 48 && ch->unicode() < 58 || ch->unicode() == 35) && (ch + 1)->unicode() == 0x20E3)) { + if (ch + 1 < e && (ch->isHighSurrogate() || (((ch->unicode() >= 48 && ch->unicode() < 58) || ch->unicode() == 35) && (ch + 1)->unicode() == 0x20E3))) { emoji = getEmoji((ch->unicode() << 16) | (ch + 1)->unicode()); if (emoji) { - if (emoji->len == 4 && (ch + 3 >= e || (((ch + 2)->unicode() << 16) | (ch + 3)->unicode()) != emoji->code2)) { + if (emoji->len == 4 && (ch + 3 >= e || ((uint32((ch + 2)->unicode()) << 16) | uint32((ch + 3)->unicode())) != emoji->code2)) { emoji = 0; } else { emojiPosition = p + (ch - t.constData()); @@ -438,7 +439,7 @@ QMimeData *FlatTextarea::createMimeDataFromSelection() const { void FlatTextarea::keyPressEvent(QKeyEvent *e) { bool shift = e->modifiers().testFlag(Qt::ShiftModifier); - bool ctrl = e->modifiers().testFlag(Qt::ControlModifier), ctrlGood = ctrl && cCtrlEnter() || !ctrl && !shift && !cCtrlEnter(); + bool ctrl = e->modifiers().testFlag(Qt::ControlModifier), ctrlGood = (ctrl && cCtrlEnter()) || (!ctrl && !shift && !cCtrlEnter()); bool enter = (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return); if (enter && ctrlGood) { diff --git a/Telegram/SourceFiles/gui/images.cpp b/Telegram/SourceFiles/gui/images.cpp index 6c0785ae8..c73f8d3af 100644 --- a/Telegram/SourceFiles/gui/images.cpp +++ b/Telegram/SourceFiles/gui/images.cpp @@ -190,10 +190,10 @@ int64 imageCacheSize() { return globalAquiredSize; } -StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret) : loader(new mtpFileLoader(dc, volume, local, secret)), w(width), h(height) { +StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret) : w(width), h(height), loader(new mtpFileLoader(dc, volume, local, secret)) { } -StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret, QByteArray &bytes) : loader(0), w(width), h(height) { +StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret, QByteArray &bytes) : w(width), h(height), loader(0) { setData(bytes); } diff --git a/Telegram/SourceFiles/gui/scrollarea.cpp b/Telegram/SourceFiles/gui/scrollarea.cpp index dffe381c6..3900aed22 100644 --- a/Telegram/SourceFiles/gui/scrollarea.cpp +++ b/Telegram/SourceFiles/gui/scrollarea.cpp @@ -36,10 +36,12 @@ void ScrollShadow::changeVisibility(bool shown) { } ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::flatScroll *st) : QWidget(parent), - _st(st), _area(parent), _vertical(vert), _hideIn(-1), + _area(parent), _st(st), _vertical(vert), _over(false), _overbar(false), _moving(false), _topSh(false), _bottomSh(false), - a_bg((_st->hiding ? st::transparent : _st->bgColor)->c), a_bar((_st->hiding ? st::transparent : _st->barColor)->c), - _connected(vert ? parent->verticalScrollBar() : parent->horizontalScrollBar()), _scrollMax(_connected->maximum()) { + _connected(vert ? parent->verticalScrollBar() : parent->horizontalScrollBar()), + _scrollMax(_connected->maximum()), _hideIn(-1), + a_bg((_st->hiding ? st::transparent : _st->bgColor)->c), + a_bar((_st->hiding ? st::transparent : _st->barColor)->c) { recountSize(); _hideTimer.setSingleShot(true); @@ -249,10 +251,12 @@ void ScrollBar::resizeEvent(QResizeEvent *e) { updateBar(); } -ScrollArea::ScrollArea(QWidget *parent, const style::flatScroll &st, bool handleTouch) : QScrollArea(parent), _st(st), _touchEnabled(handleTouch), +ScrollArea::ScrollArea(QWidget *parent, const style::flatScroll &st, bool handleTouch) : QScrollArea(parent), + _st(st), hor(this, false, &_st), vert(this, true, &_st), topSh(this, &_st), bottomSh(this, &_st), - _touchScroll(false), _touchPress(false), _touchRightButton(false), _widgetAcceptsTouch(false), - _touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAcceleration(false), _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0) { + _touchEnabled(handleTouch), _touchScroll(false), _touchPress(false), _touchRightButton(false), + _touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAcceleration(false), + _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), _widgetAcceptsTouch(false) { connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SIGNAL(scrolled())); connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SIGNAL(scrolled())); connect(&vert, SIGNAL(topShadowVisibility(bool)), &topSh, SLOT(changeVisibility(bool))); @@ -365,8 +369,8 @@ void ScrollArea::touchUpdateSpeed() { if (_touchScrollState == TouchScrollAuto) { const int oldSpeedY = _touchSpeed.y(); const int oldSpeedX = _touchSpeed.x(); - if ((oldSpeedY <= 0 && newSpeedY <= 0) || (oldSpeedY >= 0 && newSpeedY >= 0) - && (oldSpeedX <= 0 && newSpeedX <= 0) || (oldSpeedX >= 0 && newSpeedX >= 0)) { + if ((oldSpeedY <= 0 && newSpeedY <= 0) || ((oldSpeedY >= 0 && newSpeedY >= 0) + && (oldSpeedX <= 0 && newSpeedX <= 0)) || (oldSpeedX >= 0 && newSpeedX >= 0)) { _touchSpeed.setY(snap((oldSpeedY + (newSpeedY / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); _touchSpeed.setX(snap((oldSpeedX + (newSpeedX / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); } else { diff --git a/Telegram/SourceFiles/gui/style_core.cpp b/Telegram/SourceFiles/gui/style_core.cpp index 93b252759..561953587 100644 --- a/Telegram/SourceFiles/gui/style_core.cpp +++ b/Telegram/SourceFiles/gui/style_core.cpp @@ -23,7 +23,7 @@ namespace { } namespace style { - FontData::FontData(uint32 size, uint32 flags, uint32 family, Font *other) : _size(size), _flags(flags), _family(family), f(_fontFamilies[family]), m(f) { + FontData::FontData(uint32 size, uint32 flags, uint32 family, Font *other) : f(_fontFamilies[family]), m(f), _size(size), _flags(flags), _family(family) { if (other) { memcpy(modified, other, sizeof(modified)); } else { diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 6f5b71f1f..f7522142b 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -372,7 +372,7 @@ public: } else if (ch == ')' || ch == ']' || ch == '}' || ch == '>') { if (parenth.isEmpty()) break; const QChar *q = parenth.pop(), open(*q); - if (ch == ')' && open != '(' || ch == ']' && open != '[' || ch == '}' && open != '{' || ch == '>' && open != '<') { + if ((ch == ')' && open != '(') || (ch == ']' && open != '[') || (ch == '}' && open != '{') || (ch == '>' && open != '<')) { p = q; break; } @@ -623,7 +623,7 @@ public: ch = *ptr; chInt = (chInt << 16) | ch.unicode(); } - } else if (ch >= 48 && ch < 58 || ch == 35) { // check for digit emoji + } else if ((ch >= 48 && ch < 58) || ch == 35) { // check for digit emoji if (ptr + 1 < end && (ptr + 1)->unicode() == 0x20E3) { _t->_text.push_back(ch); skipBack = -1; @@ -657,7 +657,7 @@ public: if (!e) return; if (e->len > 2) { - if (ptr + 2 >= end || e->code2 != (((ptr + 1)->unicode() << 16) | (ptr + 2)->unicode())) { + if (ptr + 2 >= end || e->code2 != ((uint32((ptr + 1)->unicode()) << 16) | uint32((ptr + 2)->unicode()))) { return; } else { _t->_text.push_back(*++ptr); @@ -669,8 +669,8 @@ public: emoji = e; } - TextParser(Text *t, const QString &text, const TextParseOptions &options) : _t(t), src(text), stopAfterWidth(QFIXED_MAX), - rich(options.flags & TextParseRichText), multiline(options.flags & TextParseMultiline), flags(0), lnkIndex(0), maxLnkIndex(0) { + TextParser(Text *t, const QString &text, const TextParseOptions &options) : _t(t), src(text), + rich(options.flags & TextParseRichText), multiline(options.flags & TextParseMultiline), maxLnkIndex(0), flags(0), lnkIndex(0), stopAfterWidth(QFIXED_MAX) { int flags = options.flags; if (options.maxw > 0 && options.maxh > 0) { stopAfterWidth = ((options.maxh / _t->_font->height) + 1) * options.maxw; @@ -884,7 +884,7 @@ public: return _blockEnd(t, i, e) - (*i)->from(); } - TextPainter(QPainter *p, const Text *t) : _p(p), _t(t), _elideLast(false), _elideSavedBlock(0), _lnkResult(0), _inTextFlag(0), _getSymbol(0), _getSymbolAfter(0), _getSymbolUpon(0), _str(0) { + TextPainter(QPainter *p, const Text *t) : _p(p), _t(t), _elideLast(false), _str(0), _elideSavedBlock(0), _lnkResult(0), _inTextFlag(0), _getSymbol(0), _getSymbolAfter(0), _getSymbolUpon(0) { } void initNextParagraph(Text::TextBlocks::const_iterator i) { @@ -1228,12 +1228,12 @@ public: bool selectFromStart = (_selectedTo > _lineStart) && (_lineStart > 0) && (_selectedFrom <= _lineStart); bool selectTillEnd = (_selectedTo >= _lineEnd) && (_lineEnd < _t->_text.size()) && (_selectedFrom < _lineEnd) && (!_endBlock || _endBlock->type() != TextBlockSkip); - if (selectFromStart && _parDirection == Qt::LeftToRight || selectTillEnd && _parDirection == Qt::RightToLeft) { + if ((selectFromStart && _parDirection == Qt::LeftToRight) || (selectTillEnd && _parDirection == Qt::RightToLeft)) { if (x > _x) { _p->fillRect(QRectF(_x.toReal(), _y + _yDelta, (x - _x).toReal(), _fontHeight), _textStyle->selectBG->b); } } - if (selectTillEnd && _parDirection == Qt::LeftToRight || selectFromStart && _parDirection == Qt::RightToLeft) { + if ((selectTillEnd && _parDirection == Qt::LeftToRight) || (selectFromStart && _parDirection == Qt::RightToLeft)) { if (x < _x + _wLeft) { _p->fillRect(QRectF((x + _w - _wLeft).toReal(), _y + _yDelta, (_x + _wLeft - x).toReal(), _fontHeight), _textStyle->selectBG->b); } @@ -1452,11 +1452,11 @@ public: for (int charsCount = (ch2 - ch); ch < ch2; ++ch) { QFixed shift1 = QFixed(2 * (charsCount - (ch2 - ch)) + 2) * gwidth / QFixed(2 * charsCount), shift2 = QFixed(2 * (charsCount - (ch2 - ch)) + 1) * gwidth / QFixed(2 * charsCount); - if (rtl && _lnkX >= tmpx - shift1 || - !rtl && _lnkX < tmpx + shift1) { + if ((rtl && _lnkX >= tmpx - shift1) || + (!rtl && _lnkX < tmpx + shift1)) { *_getSymbol = _localFrom + itemStart + ch; - if (rtl && _lnkX >= tmpx - shift2 || - !rtl && _lnkX < tmpx + shift2) { + if ((rtl && _lnkX >= tmpx - shift2) || + (!rtl && _lnkX < tmpx + shift2)) { *_getSymbolAfter = false; } else { *_getSymbolAfter = true; @@ -2807,7 +2807,7 @@ namespace { class BlockParser { public: - BlockParser(QTextEngine *e, TextBlock *b, QFixed minResizeWidth, int32 blockFrom) : eng(e), block(b) { + BlockParser(QTextEngine *e, TextBlock *b, QFixed minResizeWidth, int32 blockFrom) : block(b), eng(e) { parseWords(minResizeWidth, blockFrom); } diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 20a0bb765..7f804c5c9 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -125,8 +125,8 @@ private: struct TextWord { TextWord() { } - TextWord(uint16 from, QFixed width, QFixed rbearing, QFixed rpadding = 0) : from(from), width(width), - _rbearing(rbearing.value() > 0x7FFF ? 0x7FFF : (rbearing.value() < -0x7FFF ? -0x7FFF : rbearing.value())), rpadding(rpadding) { + TextWord(uint16 from, QFixed width, QFixed rbearing, QFixed rpadding = 0) : from(from), + _rbearing(rbearing.value() > 0x7FFF ? 0x7FFF : (rbearing.value() < -0x7FFF ? -0x7FFF : rbearing.value())), width(width), rpadding(rpadding) { } QFixed f_rbearing() const { return QFixed::fromFixed(_rbearing); @@ -357,7 +357,7 @@ public: QString original(uint16 selectedFrom = 0, uint16 selectedTo = 0xFFFF, bool expandLinks = true) const; - bool lastDots(uint32 dots, int32 maxdots = 3) { // hack for typing animation + bool lastDots(int32 dots, int32 maxdots = 3) { // hack for typing animation if (_text.size() < maxdots) return false; int32 nowDots = 0, from = _text.size() - maxdots, to = _text.size(); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 29941ab06..7a582b628 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -120,8 +120,16 @@ void historyInit() { NotifySettings globalNotifyAll, globalNotifyUsers, globalNotifyChats; NotifySettingsPtr globalNotifyAllPtr = UnknownNotifySettings, globalNotifyUsersPtr = UnknownNotifySettings, globalNotifyChatsPtr = UnknownNotifySettings; -PeerData::PeerData(const PeerId &id) : id(id), access(0), chat(App::isChat(id)), loaded(false), notify(UnknownNotifySettings), - colorIndex(peerColorIndex(id)), color(peerColor(colorIndex)), photo(chat ? chatDefPhoto(colorIndex) : userDefPhoto(colorIndex)), nameVersion(0) { +PeerData::PeerData(const PeerId &id) : id(id) +, loaded(false) +, chat(App::isChat(id)) +, access(0) +, colorIndex(peerColorIndex(id)) +, color(peerColor(colorIndex)) +, photo(chat ? chatDefPhoto(colorIndex) : userDefPhoto(colorIndex)) +, nameVersion(0) +, notify(UnknownNotifySettings) +{ } UserData *PeerData::asUser() { @@ -259,7 +267,7 @@ QString saveFileName(const QString &title, const QString &filter, const QString void VideoOpenLink::onClick(Qt::MouseButton button) const { VideoData *data = video(); - if (!data->user && !data->date || button != Qt::LeftButton) return; + if ((!data->user && !data->date) || button != Qt::LeftButton) return; QString already = data->already(true); if (!already.isEmpty()) { @@ -304,7 +312,7 @@ void VideoSaveLink::onClick(Qt::MouseButton button) const { void VideoCancelLink::onClick(Qt::MouseButton button) const { VideoData *data = video(); - if (!data->user && !data->date || button != Qt::LeftButton) return; + if ((!data->user && !data->date) || button != Qt::LeftButton) return; data->cancel(); } @@ -319,7 +327,7 @@ void VideoData::save(const QString &toFile) { void AudioOpenLink::onClick(Qt::MouseButton button) const { AudioData *data = audio(); - if (!data->user && !data->date || button != Qt::LeftButton) return; + if ((!data->user && !data->date) || button != Qt::LeftButton) return; QString already = data->already(true); if (!already.isEmpty()) { @@ -364,7 +372,7 @@ void AudioSaveLink::onClick(Qt::MouseButton button) const { void AudioCancelLink::onClick(Qt::MouseButton button) const { AudioData *data = audio(); - if (!data->user && !data->date || button != Qt::LeftButton) return; + if ((!data->user && !data->date) || button != Qt::LeftButton) return; data->cancel(); } @@ -379,7 +387,7 @@ void AudioData::save(const QString &toFile) { void DocumentOpenLink::onClick(Qt::MouseButton button) const { DocumentData *data = document(); - if (!data->user && !data->date || button != Qt::LeftButton) return; + if ((!data->user && !data->date) || button != Qt::LeftButton) return; QString already = data->already(true); if (!already.isEmpty()) { @@ -451,7 +459,7 @@ void DocumentSaveLink::onClick(Qt::MouseButton button) const { void DocumentCancelLink::onClick(Qt::MouseButton button) const { DocumentData *data = document(); - if (!data->user && !data->date || button != Qt::LeftButton) return; + if ((!data->user && !data->date) || button != Qt::LeftButton) return; data->cancel(); } @@ -563,9 +571,26 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } -History::History(const PeerId &peerId) : width(0), height(0), myTyping(0), showFrom(0), unreadLoaded(true), unreadBar(0), notifyFrom(0), - msgCount(0), offset(0), peer(App::peer(peerId)), posInDialogs(0), unreadCount(0), inboxReadTill(0), outboxReadTill(0), lastWidth(0), lastScrollTop(History::ScrollMax), - lastItemTextCache(st::dlgRichMinWidth), textCachedFor(0), typingText(st::dlgRichMinWidth), mute(isNotifyMuted(peer->notify)) { +History::History(const PeerId &peerId) : width(0), height(0) +, msgCount(0) +, offset(0) +, unreadCount(0) +, inboxReadTill(0) +, outboxReadTill(0) +, showFrom(0) +, notifyFrom(0) +, unreadBar(0) +, unreadLoaded(true) +, peer(App::peer(peerId)) +, lastWidth(0) +, lastScrollTop(History::ScrollMax) +, mute(isNotifyMuted(peer->notify)) +, textCachedFor(0) +, lastItemTextCache(st::dlgRichMinWidth) +, posInDialogs(0) +, typingText(st::dlgRichMinWidth) +, myTyping(0) +{ } void History::updateNameText() { @@ -1360,7 +1385,7 @@ void HistoryBlock::removeItem(HistoryItem *item) { } } else if (myIndex > 0) { HistoryBlock *prevBlock = (*history)[myIndex - 1]; - if (prevBlock->isEmpty() || (myIndex == 1) && (prevBlock->size() != 1 || (*prevBlock->cbegin())->itemType() != HistoryItem::DateType)) { + if (prevBlock->isEmpty() || ((myIndex == 1) && (prevBlock->size() != 1 || (*prevBlock->cbegin())->itemType() != HistoryItem::DateType))) { LOG(("App Error: Found bad history, with no first date block: %1").arg((*history)[0]->size())); } else if ((*prevBlock)[prevBlock->size() - 1]->itemType() == HistoryItem::DateType) { (*prevBlock)[prevBlock->size() - 1]->destroy(); @@ -1411,8 +1436,16 @@ void HistoryBlock::removeItem(HistoryItem *item) { } } -HistoryItem::HistoryItem(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime msgDate, int32 from) : - y(0), id(msgId), _history(history), _block(block), _out(out), _unread(unread), date(msgDate), _from(App::user(from)), _fromVersion(_from->nameVersion) { +HistoryItem::HistoryItem(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime msgDate, int32 from) : y(0) +, id(msgId) +, date(msgDate) +, _from(App::user(from)) +, _fromVersion(_from->nameVersion) +, _history(history) +, _block(block) +, _out(out) +, _unread(unread) +{ } void HistoryItem::markRead() { @@ -1442,7 +1475,10 @@ HistoryItem *regItem(HistoryItem *item) { return 0; } -HistoryPhoto::HistoryPhoto(const MTPDphoto &photo, int32 width) : data(App::feedPhoto(photo)), w(width), openl(new PhotoLink(data)) { +HistoryPhoto::HistoryPhoto(const MTPDphoto &photo, int32 width) : data(App::feedPhoto(photo)) +, openl(new PhotoLink(data)) +, w(width) +{ int32 tw = data->full->width(), th = data->full->height(); if (!tw || !th) { tw = th = 1; @@ -1583,7 +1619,14 @@ QString formatDurationAndSizeText(qint64 duration, qint64 size) { int32 _downloadWidth = 0, _openWithWidth = 0, _cancelWidth = 0, _buttonWidth = 0; -HistoryVideo::HistoryVideo(const MTPDvideo &video, int32 width) : data(App::feedVideo(video)), w(width), _openl(new VideoOpenLink(data)), _savel(new VideoSaveLink(data)), _cancell(new VideoCancelLink(data)), _dldDone(0), _uplDone(0) { +HistoryVideo::HistoryVideo(const MTPDvideo &video, int32 width) : data(App::feedVideo(video)) +, _openl(new VideoOpenLink(data)) +, _savel(new VideoSaveLink(data)) +, _cancell(new VideoCancelLink(data)) +, w(width) +, _dldDone(0) +, _uplDone(0) +{ _maxw = st::mediaMaxWidth; _size = formatDurationAndSizeText(data->duration, data->size); @@ -1790,7 +1833,14 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t } } -HistoryAudio::HistoryAudio(const MTPDaudio &audio, int32 width) : data(App::feedAudio(audio)), w(width), _openl(new AudioOpenLink(data)), _savel(new AudioSaveLink(data)), _cancell(new AudioCancelLink(data)), _dldDone(0), _uplDone(0) { +HistoryAudio::HistoryAudio(const MTPDaudio &audio, int32 width) : data(App::feedAudio(audio)) +, _openl(new AudioOpenLink(data)) +, _savel(new AudioSaveLink(data)) +, _cancell(new AudioCancelLink(data)) +, w(width) +, _dldDone(0) +, _uplDone(0) +{ _maxw = st::mediaMaxWidth; _size = formatDurationAndSizeText(data->duration, data->size); @@ -1966,7 +2016,15 @@ HistoryMedia *HistoryAudio::clone() const { return n; } -HistoryDocument::HistoryDocument(const MTPDdocument &document, int32 width) : data(App::feedDocument(document)), w(width), _openl(new DocumentOpenLink(data)), _savel(new DocumentSaveLink(data)), _cancell(new DocumentCancelLink(data)), _name(data->name), _dldDone(0), _uplDone(0) { +HistoryDocument::HistoryDocument(const MTPDdocument &document, int32 width) : data(App::feedDocument(document)) +, _openl(new DocumentOpenLink(data)) +, _savel(new DocumentSaveLink(data)) +, _cancell(new DocumentCancelLink(data)) +, w(width) +, _name(data->name) +, _dldDone(0) +, _uplDone(0) +{ _maxw = st::mediaMaxWidth; _namew = st::mediaFont->m.width(_name.isEmpty() ? qsl("Document") : _name); @@ -2178,7 +2236,11 @@ HistoryMedia *HistoryDocument::clone() const { return n; } -HistoryContact::HistoryContact(int32 userId, const QString &first, const QString &last, const QString &phone) : userId(userId), phone(App::formatPhone(phone)), contact(App::userLoaded(userId)), w(0) { +HistoryContact::HistoryContact(int32 userId, const QString &first, const QString &last, const QString &phone) : userId(userId) +, w(0) +, phone(App::formatPhone(phone)) +, contact(App::userLoaded(userId)) +{ _maxw = st::mediaMaxWidth; name.setText(st::mediaFont, (first + ' ' + last).trimmed(), _textNameOptions); @@ -2296,7 +2358,12 @@ void HistoryContact::draw(QPainter &p, const HistoryItem *parent, const QString } HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPDmessage &msg) : - HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v), media(0), _text(st::msgMinWidth), _textWidth(0), _textHeight(0) { + HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v) +, _text(st::msgMinWidth) +, _textWidth(0) +, _textHeight(0) +, media(0) +{ QString text(textClean(qs(msg.vmessage))); initMedia(msg.vmedia, text); initDimensions(text); @@ -2315,14 +2382,24 @@ HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPD //} HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime date, int32 from, const QString &msg, const MTPMessageMedia &media) : - HistoryItem(history, block, msgId, out, unread, date, from), media(0), _text(st::msgMinWidth), _textWidth(0), _textHeight(0) { + HistoryItem(history, block, msgId, out, unread, date, from) +, _text(st::msgMinWidth) +, _textWidth(0) +, _textHeight(0) +, media(0) +{ QString text(msg); initMedia(media, text); initDimensions(text); } HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime date, int32 from, const QString &msg, HistoryMedia *fromMedia) : - HistoryItem(history, block, msgId, out, unread, date, from), media(0), _text(st::msgMinWidth), _textWidth(0), _textHeight(0) { + HistoryItem(history, block, msgId, out, unread, date, from) +, _text(st::msgMinWidth) +, _textWidth(0) +, _textHeight(0) +, media(0) +{ QString text(msg); if (fromMedia) { media = fromMedia->clone(); @@ -2713,17 +2790,23 @@ HistoryMessage::~HistoryMessage() { delete media; } -HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessageForwarded &msg) : - HistoryMessage(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.vmedia), - fwdFrom(App::user(msg.vfwd_from_id.v)), fwdFromVersion(fwdFrom->nameVersion), fwdDate(::date(msg.vfwd_date)), fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from))), fwdFromName(4096) { +HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessageForwarded &msg) : HistoryMessage(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.vmedia) +, fwdDate(::date(msg.vfwd_date)) +, fwdFrom(App::user(msg.vfwd_from_id.v)) +, fwdFromName(4096) +, fwdFromVersion(fwdFrom->nameVersion) +, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from))) +{ fwdNameUpdated(); } -HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : - HistoryMessage(history, block, id, true, true, ::date(unixtime()), MTP::authedId(), msg->HistoryMessage::selectedText(FullItemSel), msg->getMedia()), - fwdFrom(dynamic_cast(msg) ? dynamic_cast(msg)->fromForwarded() : msg->from()), fwdFromVersion(fwdFrom->nameVersion), - fwdDate(dynamic_cast(msg) ? dynamic_cast(msg)->dateForwarded() : msg->date), - fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from))), fwdFromName(4096) { +HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : HistoryMessage(history, block, id, true, true, ::date(unixtime()), MTP::authedId(), msg->HistoryMessage::selectedText(FullItemSel), msg->getMedia()) +, fwdDate(dynamic_cast(msg) ? dynamic_cast(msg)->dateForwarded() : msg->date) +, fwdFrom(dynamic_cast(msg) ? dynamic_cast(msg)->fromForwarded() : msg->from()) +, fwdFromName(4096) +, fwdFromVersion(fwdFrom->nameVersion) +, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from))) +{ fwdNameUpdated(); } @@ -2946,7 +3029,10 @@ QString HistoryServiceMsg::messageByAction(const MTPmessageAction &action, TextL } HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg) : - HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v), media(0), _text(st::msgMinWidth) { + HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v) +, _text(st::msgMinWidth) +, media(0) +{ TextLinkPtr second; QString text(messageByAction(msg.vaction, second)); @@ -2976,7 +3062,10 @@ HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, cons } /**/ HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, bool out, bool unread, HistoryMedia *media) : - HistoryItem(history, block, msgId, out, unread, date, 0), media(media), _text(st::msgServiceFont, msg, _historySrvOptions, st::dlgMinWidth) { + HistoryItem(history, block, msgId, out, unread, date, 0) +, _text(st::msgServiceFont, msg, _historySrvOptions, st::dlgMinWidth) +, media(media) +{ _maxw = _text.maxWidth() + st::msgServicePadding.left() + st::msgServicePadding.right(); _minh = _text.minHeight(); } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index bb965cc35..167f02219 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -57,7 +57,7 @@ struct ChatData; struct UserData; struct PeerData { PeerData(const PeerId &id); - ~PeerData() { + virtual ~PeerData() { if (notify != UnknownNotifySettings && notify != EmptyNotifySettings) { delete notify; notify = UnknownNotifySettings; @@ -212,7 +212,7 @@ enum FileStatus { struct VideoData { VideoData(const VideoId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0) : - id(id), access(access), user(user), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), openOnSave(0), loader(0), fileType(0), status(FileReady), uploadOffset(0) { + id(id), access(access), user(user), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), fileType(0), openOnSave(0), loader(0) { memset(md5, 0, sizeof(md5)); } void forget() { @@ -314,7 +314,7 @@ public: struct AudioData { AudioData(const AudioId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 dc = 0, int32 size = 0) : - id(id), access(access), user(user), date(date), dc(dc), duration(duration), size(size), openOnSave(0), loader(0), status(FileReady), uploadOffset(0) { + id(id), access(access), user(user), date(date), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), loader(0) { memset(md5, 0, sizeof(md5)); } void forget() { @@ -412,7 +412,7 @@ public: struct DocumentData { DocumentData(const DocumentId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &name = QString(), const QString &mime = QString(), const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0) : - id(id), access(access), user(user), date(date), name(name), mime(mime), thumb(thumb), dc(dc), size(size), openOnSave(0), loader(0), status(FileReady), uploadOffset(0) { + id(id), access(access), user(user), date(date), name(name), mime(mime), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), loader(0) { memset(md5, 0, sizeof(md5)); } void forget() { @@ -628,7 +628,7 @@ struct History : public QList { }; struct DialogsList { - DialogsList(bool sortByName) : end(&last), begin(&last), current(&last), byName(sortByName), count(0) { + DialogsList(bool sortByName) : begin(&last), end(&last), byName(sortByName), count(0), current(&last) { } void adjustCurrent(int32 y, int32 h) const { @@ -985,7 +985,7 @@ public: return _out; } bool unread() const { - if (_out && (id > 0 && id < _history->outboxReadTill) || !_out && id > 0 && id < _history->inboxReadTill) return false; + if ((_out && (id > 0 && id < _history->outboxReadTill)) || (!_out && id > 0 && id < _history->inboxReadTill)) return false; return _unread; } virtual bool needCheck() const { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 5728114fc..d5dc43b19 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -30,13 +30,30 @@ Copyright (c) 2014 John Preston, https://tdesktop.com // flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html -HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, History *history) : QWidget(0), - historyWidget(historyWidget), scrollArea(scroll), hist(history), currentBlock(0), currentItem(0), _menu(0), - _dragAction(NoDrag), _dragItem(0), _dragSelFrom(0), _dragSelTo(0), _dragSelecting(false), - _dragSelType(TextSelectLetters), _dragWasInactive(false), - _touchScroll(false), _touchSelect(false), _touchInProgress(false), - _touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAcceleration(false), _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), - _cursor(style::cur_default) { +HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, History *history) : QWidget(0) + , hist(history) + , historyWidget(historyWidget) + , scrollArea(scroll) + , currentBlock(0) + , currentItem(0) + , _cursor(style::cur_default) + , _dragAction(NoDrag) + , _dragSelType(TextSelectLetters) + , _dragItem(0) + , _dragWasInactive(false) + , _dragSelFrom(0) + , _dragSelTo(0) + , _dragSelecting(false) + , _touchScroll(false) + , _touchSelect(false) + , _touchInProgress(false) + , _touchScrollState(TouchScrollManual) + , _touchPrevPosValid(false) + , _touchWaitingAcceleration(false) + , _touchSpeedTime(0) + , _touchAccelerationTime(0) + , _touchTime(0) + , _menu(0) { linkTipTimer.setSingleShot(true); connect(&linkTipTimer, SIGNAL(timeout()), this, SLOT(showLinkTip())); @@ -167,8 +184,8 @@ void HistoryList::touchUpdateSpeed() { if (_touchScrollState == TouchScrollAuto) { const int oldSpeedY = _touchSpeed.y(); const int oldSpeedX = _touchSpeed.x(); - if ((oldSpeedY <= 0 && newSpeedY <= 0) || (oldSpeedY >= 0 && newSpeedY >= 0) - && (oldSpeedX <= 0 && newSpeedX <= 0) || (oldSpeedX >= 0 && newSpeedX >= 0)) { + if ((oldSpeedY <= 0 && newSpeedY <= 0) || ((oldSpeedY >= 0 && newSpeedY >= 0) + && (oldSpeedX <= 0 && newSpeedX <= 0)) || (oldSpeedX >= 0 && newSpeedX >= 0)) { _touchSpeed.setY(snap((oldSpeedY + (newSpeedY / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); _touchSpeed.setX(snap((oldSpeedX + (newSpeedX / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); } else { @@ -615,10 +632,10 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_save_image), this, SLOT(saveContextImage()))->setEnabled(true); _menu->addAction(lang(lng_context_copy_image), this, SLOT(copyContextImage()))->setEnabled(true); } else { - if (lnkVideo && lnkVideo->video()->loader || lnkAudio && lnkAudio->audio()->loader || lnkDocument && lnkDocument->document()->loader) { + if ((lnkVideo && lnkVideo->video()->loader) || (lnkAudio && lnkAudio->audio()->loader) || (lnkDocument && lnkDocument->document()->loader)) { _menu->addAction(lang(lng_context_cancel_download), this, SLOT(cancelContextDownload()))->setEnabled(true); } else { - if (lnkVideo && !lnkVideo->video()->already(true).isEmpty() || lnkAudio && !lnkAudio->audio()->already(true).isEmpty() || lnkDocument && !lnkDocument->document()->already(true).isEmpty()) { + if ((lnkVideo && !lnkVideo->video()->already(true).isEmpty()) || (lnkAudio && !lnkAudio->audio()->already(true).isEmpty()) || (lnkDocument && !lnkDocument->document()->already(true).isEmpty())) { _menu->addAction(lang(lng_context_show_in_folder), this, SLOT(showContextInFolder()))->setEnabled(true); } _menu->addAction(lang(lnkVideo ? lng_context_open_video : (lnkAudio ? lng_context_open_audio : lng_context_open_document)), this, SLOT(openContextFile()))->setEnabled(true); @@ -961,7 +978,7 @@ void HistoryList::fillSelectedItems(HistoryItemSet &sel, bool forDelete) { for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { HistoryItem *item = i.key(); - if (item->itemType() == HistoryItem::MsgType && (item->id > 0 && !item->serviceMsg() || forDelete)) { + if (item->itemType() == HistoryItem::MsgType && ((item->id > 0 && !item->serviceMsg()) || forDelete)) { sel.insert(item->y + item->block()->y, item); } } @@ -1031,15 +1048,15 @@ void HistoryList::onUpdateSelected(bool force) { _selected[_dragItem] = _dragItem->adjustSelection(qMin(second, _dragSymbol), qMax(second, _dragSymbol), _dragSelType); updateDragSelection(0, 0, false); } else { - bool selectingDown = (_dragItem->block()->y < item->block()->y) || (_dragItem->block() == item->block()) && (_dragItem->y < item->y || _dragItem == item && _dragStartPos.y() < m.y()); + bool selectingDown = (_dragItem->block()->y < item->block()->y) || ((_dragItem->block() == item->block()) && (_dragItem->y < item->y || (_dragItem == item && _dragStartPos.y() < m.y()))); HistoryItem *dragSelFrom = _dragItem, *dragSelTo = item; if (!dragSelFrom->hasPoint(_dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom if (selectingDown) { - if (_dragStartPos.y() >= dragSelFrom->height() - st::msgMargin.bottom() || (item == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance())) { + if (_dragStartPos.y() >= dragSelFrom->height() - st::msgMargin.bottom() || ((item == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { dragSelFrom = (dragSelFrom == dragSelTo) ? 0 : nextItem(dragSelFrom); } } else { - if (_dragStartPos.y() < st::msgMargin.top() || (item == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance())) { + if (_dragStartPos.y() < st::msgMargin.top() || ((item == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { dragSelFrom = (dragSelFrom == dragSelTo) ? 0 : prevItem(dragSelFrom); } } @@ -1218,11 +1235,19 @@ void MessageField::focusInEvent(QFocusEvent *e) { emit focused(); } -HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(parent), - aOpacity(0, 1), aOpacityFunc(anim::easeOutCirc), hiding(false), offered(0), _forwardRequest(0), - toTextWidth(0), _forwardSelected(forwardSelected), sharedContact(0), shadow(st::boxShadow), - forwardButton(this, lang(lng_forward), st::btnSelectDone), - cancelButton(this, lang(lng_cancel), st::btnSelectCancel) { +HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(parent) + , sharedContact(0) + , _forwardSelected(forwardSelected) + , forwardButton(this, lang(lng_forward), st::btnSelectDone) + , cancelButton(this, lang(lng_cancel), st::btnSelectCancel) + , offered(0) + , aOpacity(0, 1) + , aOpacityFunc(anim::easeOutCirc) + , hiding(false) + , _forwardRequest(0) + , toTextWidth(0) + , shadow(st::boxShadow) +{ connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); @@ -1234,11 +1259,19 @@ HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(p anim::start(this); } -HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidget(parent), - aOpacity(0, 1), aOpacityFunc(anim::easeOutCirc), hiding(false), offered(0), _forwardRequest(0), - toTextWidth(0), _forwardSelected(false), sharedContact(sharedContact), shadow(st::boxShadow), - forwardButton(this, lang(lng_forward), st::btnSelectDone), - cancelButton(this, lang(lng_cancel), st::btnSelectCancel) { +HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidget(parent) + , sharedContact(sharedContact) + , _forwardSelected(false) + , forwardButton(this, lang(lng_forward), st::btnSelectDone) + , cancelButton(this, lang(lng_cancel), st::btnSelectCancel) + , offered(0) + , aOpacity(0, 1) + , aOpacityFunc(anim::easeOutCirc) + , hiding(false) + , _forwardRequest(0) + , toTextWidth(0) + , shadow(st::boxShadow) +{ connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); @@ -1382,7 +1415,7 @@ void HistoryHider::resizeEvent(QResizeEvent *e) { void HistoryHider::offerPeer(PeerId peer) { offered = App::peer(peer); - toText.setText(st::boxFont, lang(sharedContact ? lng_forward_share_contact : lng_forward_confirm).replace(qsl("{recipient}"), offered->chat ? '' + offered->name + '' : offered->name), _textNameOptions); + toText.setText(st::boxFont, lang(sharedContact ? lng_forward_share_contact : lng_forward_confirm).replace(qsl("{recipient}"), offered->chat ? '\xAB' + offered->name + '\xBB' : offered->name), _textNameOptions); toTextWidth = toText.maxWidth(); if (toTextWidth > box.width() - st::boxPadding.left() - st::boxPadding.right()) { toTextWidth = box.width() - st::boxPadding.left() - st::boxPadding.right(); @@ -1402,14 +1435,38 @@ HistoryHider::~HistoryHider() { parent()->noHider(this); } -HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent), noTypingUpdate(false), serviceImageCacheSize(0), - _scroll(this, st::historyScroll, false), _list(0), histPeer(0), _activePeer(0), histOffset(0), histCount(-1), - hist(0), histPreloading(0), histReadRequestId(0), hiderOffered(false), _histInited(false), - _send(this, lang(lng_send_button), st::btnSend), histRequestsCount(0), - _attachDocument(this, st::btnAttachDocument), _attachPhoto(this, st::btnAttachPhoto), _attachEmoji(this, st::btnAttachEmoji), - confirmImageId(0), loadingChatId(0), loadingRequestId(0), titlePeerTextWidth(0), - _field(this, st::taMsgField, lang(lng_message_ph)), bg(st::msgBG), imageLoader(this), - _attachType(this), _emojiPan(this), _attachDrag(DragStateNone), _attachDragDocument(this), _attachDragPhoto(this), _scrollDelta(0) { +HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent) + , histOffset(0) + , histCount(-1) + , histReadRequestId(0) + , histRequestsCount(0) + , histPeer(0) + , _activePeer(0) + , histPreloading(0) + , _scroll(this, st::historyScroll, false) + , _list(0) + , hist(0) + , _histInited(false) + , _send(this, lang(lng_send_button), st::btnSend) + , _attachDocument(this, st::btnAttachDocument) + , _attachPhoto(this, st::btnAttachPhoto) + , _attachEmoji(this, st::btnAttachEmoji) + , _field(this, st::taMsgField, lang(lng_message_ph)) + , _attachType(this) + , _emojiPan(this) + , _attachDrag(DragStateNone) + , _attachDragDocument(this) + , _attachDragPhoto(this) + , imageLoader(this) + , noTypingUpdate(false) + , loadingChatId(0) + , loadingRequestId(0) + , serviceImageCacheSize(0) + , confirmImageId(0) + , titlePeerTextWidth(0) + , bg(st::msgBG) + , hiderOffered(false) + , _scrollDelta(0) { _scroll.setFocusPolicy(Qt::NoFocus); setAcceptDrops(true); @@ -1462,7 +1519,7 @@ void HistoryWidget::onTextChange() { void HistoryWidget::updateTyping(bool typing) { uint64 ms = getms() + 10000; - if (noTypingUpdate || !hist || typing && (hist->myTyping + 5000 > ms) || !typing && (hist->myTyping + 5000 <= ms)) return; + if (noTypingUpdate || !hist || (typing && (hist->myTyping + 5000 > ms)) || (!typing && (hist->myTyping + 5000 <= ms))) return; hist->myTyping = typing ? ms : 0; if (typing) MTP::send(MTPmessages_SetTyping(histPeer->input, MTP_bool(typing))); @@ -1877,7 +1934,7 @@ void HistoryWidget::loadMessages() { void HistoryWidget::onListScroll() { App::checkImageCacheSize(); - if (histPreloading || !hist || (_list->isHidden() || _scroll.isHidden() || !App::wnd()->windowHandle()->isVisible()) && hist->unreadLoaded) { + if (histPreloading || !hist || ((_list->isHidden() || _scroll.isHidden() || !App::wnd()->windowHandle()->isVisible()) && hist->unreadLoaded)) { checkUnreadLoaded(true); return; } @@ -1951,7 +2008,7 @@ mtpRequestId HistoryWidget::onForward(const PeerId &peer, bool forwardSelected) newId = clientMsgId(); hist->addToBackForwarded(newId, msg); MTP::send(MTPmessages_ForwardMessage(histPeer->input, MTP_int(item->id), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId)); - } else if (srv || msg && msg->selectedText(FullItemSel).isEmpty()) { + } else if (srv || (msg && msg->selectedText(FullItemSel).isEmpty())) { // newId = clientMsgId(); // MTP::send(MTPmessages_ForwardMessage(histPeer->input, MTP_int(item->id), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId)); } else if (msg) { @@ -2407,7 +2464,6 @@ void HistoryWidget::onPhotoReady() { } void HistoryWidget::onPhotoFailed(quint64 id) { - id = id; } void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { @@ -2545,7 +2601,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { } void HistoryWidget::updateListSize(int32 addToY, bool initial) { - if (!hist || !_histInited && !initial) return; + if (!hist || (!_histInited && !initial)) return; if (!App::wnd()->isVisible()) return; // scrollTopMax etc are not working after recountHeight() @@ -2788,8 +2844,8 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { // points p.setOpacity(st::introPointAlpha); - int x = pointsLeft + st::introPointLeft; - for (uint32 i = 0; i < pointsCount; ++i) { + int32 x = pointsLeft + st::introPointLeft; + for (int32 i = 0; i < pointsCount; ++i) { p.fillRect(x, pointsTop + st::introPointTop, st::introPointWidth, st::introPointHeight, st::introPointColor->b); x += (st::introPointWidth + 2 * st::introPointDelta); } diff --git a/Telegram/SourceFiles/intro/intro.cpp b/Telegram/SourceFiles/intro/intro.cpp index 6b1eed49a..9e9416a64 100644 --- a/Telegram/SourceFiles/intro/intro.cpp +++ b/Telegram/SourceFiles/intro/intro.cpp @@ -45,8 +45,8 @@ namespace { } IntroWidget::IntroWidget(Window *window) : QWidget(window), - wnd(window), cacheForHideInd(0), cacheForShowInd(0), _callTimeout(60), - steps(new IntroSteps(this)), phone(0), code(0), signup(0), current(0), moving(0), visibilityChanging(0) { + cacheForHideInd(0), cacheForShowInd(0), wnd(window), steps(new IntroSteps(this)), + phone(0), code(0), signup(0), current(0), moving(0), visibilityChanging(0), _callTimeout(60) { setGeometry(QRect(0, st::titleHeight, wnd->width(), wnd->height() - st::titleHeight)); countryForReg = psCurrentCountry(); diff --git a/Telegram/SourceFiles/intro/introcode.cpp b/Telegram/SourceFiles/intro/introcode.cpp index 371c07978..5da3d88d0 100644 --- a/Telegram/SourceFiles/intro/introcode.cpp +++ b/Telegram/SourceFiles/intro/introcode.cpp @@ -67,10 +67,10 @@ void CodeInput::correctValue(QKeyEvent *e, const QString &was) { if (strict) emit codeEntered(); } -IntroCode::IntroCode(IntroWidget *parent) : IntroStage(parent), +IntroCode::IntroCode(IntroWidget *parent) : IntroStage(parent), errorAlpha(0), next(this, lang(lng_intro_next), st::btnIntroNext), back(this, lang(lng_intro_back), st::btnIntroBack), - code(this, st::inpIntroCode, lang(lng_code_ph)), errorAlpha(0), waitTillCall(intro()->getCallTimeout()) { + code(this, st::inpIntroCode, lang(lng_code_ph)), waitTillCall(intro()->getCallTimeout()) { setVisible(false); setGeometry(parent->innerRect()); diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index 4ee34782f..f7905d43f 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -40,10 +40,13 @@ namespace { }; } -IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), changed(false), +IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), + errorAlpha(0), changed(false), next(this, lang(lng_intro_next), st::btnIntroStart), - country(this, st::introCountry), errorAlpha(0), _signup(this, lang(lng_phone_notreg).replace(qsl("{signup}"), textcmdStartLink(1)).replace(qsl("{/signup}"), textcmdStopLink()), st::introErrLabel), _showSignup(false), - phone(this, st::inpIntroPhone, lang(lng_phone_ph)), code(this, st::inpIntroCountryCode) { + country(this, st::introCountry), + phone(this, st::inpIntroPhone, lang(lng_phone_ph)), code(this, st::inpIntroCountryCode), + _signup(this, lang(lng_phone_notreg).replace(qsl("{signup}"), textcmdStartLink(1)).replace(qsl("{/signup}"), textcmdStopLink()), st::introErrLabel), + _showSignup(false) { setVisible(false); setGeometry(parent->innerRect()); diff --git a/Telegram/SourceFiles/intro/introsignup.cpp b/Telegram/SourceFiles/intro/introsignup.cpp index 29986a1be..f4547fb94 100644 --- a/Telegram/SourceFiles/intro/introsignup.cpp +++ b/Telegram/SourceFiles/intro/introsignup.cpp @@ -28,7 +28,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "intro/intro.h" IntroSignup::IntroSignup(IntroWidget *parent) : IntroStage(parent), - next(this, lang(lng_intro_finish), st::btnIntroFinish), errorAlpha(0), a_photo(0), + errorAlpha(0), a_photo(0), + next(this, lang(lng_intro_finish), st::btnIntroFinish), first(this, st::inpIntroName, lang(lng_signup_firstname)), last(this, st::inpIntroName, lang(lng_signup_lastname)) { setVisible(false); diff --git a/Telegram/SourceFiles/langloaderplain.cpp b/Telegram/SourceFiles/langloaderplain.cpp index 8286e0a4c..b7a555444 100644 --- a/Telegram/SourceFiles/langloaderplain.cpp +++ b/Telegram/SourceFiles/langloaderplain.cpp @@ -66,7 +66,7 @@ namespace { if (!skipJunk(from, end)) return false; const char *nameStart = from; - while (from < end && (*from >= 'a' && *from <= 'z' || *from >= 'A' && *from <= 'Z' || *from == '_' || *from >= '0' && *from <= '9')) { + while (from < end && ((*from >= 'a' && *from <= 'z') || (*from >= 'A' && *from <= 'Z') || *from == '_' || (*from >= '0' && *from <= '9'))) { ++from; } diff --git a/Telegram/SourceFiles/layerwidget.cpp b/Telegram/SourceFiles/layerwidget.cpp index 86421e353..ff8e33ec2 100644 --- a/Telegram/SourceFiles/layerwidget.cpp +++ b/Telegram/SourceFiles/layerwidget.cpp @@ -126,9 +126,23 @@ BackgroundWidget::~BackgroundWidget() { if (_hidden) _hidden->deleteLater(); } -LayerWidget::LayerWidget(QWidget *parent, PhotoData *photo, HistoryItem *item) : QWidget(parent), photo(photo), video(0), - aBackground(0), aOver(0), iX(App::wnd()->width() / 2), iY(App::wnd()->height() / 2), iW(0), iCoordFunc(anim::sineInOut), aOverFunc(anim::linear), aBackgroundFunc(anim::easeOutCirc), hiding(false), - _touchPress(false), _touchMove(false), _touchRightButton(false), _menu(0) { +LayerWidget::LayerWidget(QWidget *parent, PhotoData *photo, HistoryItem *item) : QWidget(parent) +, photo(photo) +, video(0) +, aBackground(0) +, aOver(0) +, iX(App::wnd()->width() / 2) +, iY(App::wnd()->height() / 2) +, iW(0) +, iCoordFunc(anim::sineInOut) +, aBackgroundFunc(anim::easeOutCirc) +, aOverFunc(anim::linear) +, hiding(false) +, _touchPress(false) +, _touchMove(false) +, _touchRightButton(false) +, _menu(0) +{ int32 x, y, w; if (App::wnd()->getPhotoCoords(photo, x, y, w)) { iX = anim::ivalue(x); @@ -149,9 +163,23 @@ LayerWidget::LayerWidget(QWidget *parent, PhotoData *photo, HistoryItem *item) : connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); } -LayerWidget::LayerWidget(QWidget *parent, VideoData *video, HistoryItem *item) : QWidget(parent), photo(0), video(video), - aBackground(0), aOver(0), iX(App::wnd()->width() / 2), iY(App::wnd()->height() / 2), iW(0), iCoordFunc(anim::sineInOut), aOverFunc(anim::linear), aBackgroundFunc(anim::easeOutCirc), hiding(false), - _touchPress(false), _touchMove(false), _touchRightButton(false), _menu(0) { +LayerWidget::LayerWidget(QWidget *parent, VideoData *video, HistoryItem *item) : QWidget(parent) +, photo(0) +, video(video) +, aBackground(0) +, aOver(0) +, iX(App::wnd()->width() / 2) +, iY(App::wnd()->height() / 2) +, iW(0) +, iCoordFunc(anim::sineInOut) +, aBackgroundFunc(anim::easeOutCirc) +, aOverFunc(anim::linear) +, hiding(false) +, _touchPress(false) +, _touchMove(false) +, _touchRightButton(false) +, _menu(0) +{ int32 x, y, w; if (App::wnd()->getVideoCoords(video, x, y, w)) { iX = anim::ivalue(x); @@ -279,7 +307,7 @@ void LayerWidget::keyPressEvent(QKeyEvent *e) { photo->full->pix().toImage().save(file, "JPG"); } } - } else if (photo && photo->full->loaded() && (e->key() == Qt::Key_Copy || e->key() == Qt::Key_C && e->modifiers().testFlag(Qt::ControlModifier))) { + } else if (photo && photo->full->loaded() && (e->key() == Qt::Key_Copy || (e->key() == Qt::Key_C && e->modifiers().testFlag(Qt::ControlModifier)))) { QApplication::clipboard()->setPixmap(photo->full->pix()); } } @@ -304,7 +332,7 @@ void LayerWidget::contextMenuEvent(QContextMenuEvent *e) { _menu->addAction(lang(lng_context_forward_image), this, SLOT(forwardMessage()))->setEnabled(true); } _menu->addAction(lang(lng_context_delete_image), this, SLOT(deleteMessage()))->setEnabled(true); - } else if (App::self() && App::self()->photoId == photo->id || photo->chat && photo->chat->photoId == photo->id) { + } else if ((App::self() && App::self()->photoId == photo->id) || (photo->chat && photo->chat->photoId == photo->id)) { _menu->addAction(lang(lng_context_delete_image), this, SLOT(deleteMessage()))->setEnabled(true); } _menu->setAttribute(Qt::WA_DeleteOnClose); diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index ed6d97b85..8b180efc2 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -19,7 +19,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "localimageloader.h" #include -LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0), user(currentUser), loader(loader) { +LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0) + , loader(loader) + , user(currentUser) +{ moveToThread(thread); connect(loader, SIGNAL(needToPrepare()), this, SLOT(prepareImages())); connect(this, SIGNAL(imageReady()), loader, SLOT(onImageReady())); @@ -101,7 +104,7 @@ void LocalImageLoaderPrivate::prepareImages() { filesize = 0; } - if (img.isNull() && (type != ToPrepareDocument || !filesize) || type == ToPrepareAuto || img.isNull() && file.isEmpty() && data.isEmpty()) { // if could not decide what type + if ((img.isNull() && (type != ToPrepareDocument || !filesize)) || type == ToPrepareAuto || (img.isNull() && file.isEmpty() && data.isEmpty())) { // if could not decide what type { QMutexLocker lock(loader->toPrepareMutex()); ToPrepareMedias &list(loader->toPrepareMedias()); diff --git a/Telegram/SourceFiles/localimageloader.h b/Telegram/SourceFiles/localimageloader.h index a0cf22097..ff5449ecd 100644 --- a/Telegram/SourceFiles/localimageloader.h +++ b/Telegram/SourceFiles/localimageloader.h @@ -25,11 +25,11 @@ enum ToPrepareMediaType { }; struct ToPrepareMedia { - ToPrepareMedia(const QString &file, const PeerId &peer, ToPrepareMediaType t) : file(file), peer(peer), id(MTP::nonce()), type(t) { + ToPrepareMedia(const QString &file, const PeerId &peer, ToPrepareMediaType t) : id(MTP::nonce()), file(file), peer(peer), type(t) { } - ToPrepareMedia(const QImage &img, const PeerId &peer, ToPrepareMediaType t) : img(img), peer(peer), id(MTP::nonce()), type(t) { + ToPrepareMedia(const QImage &img, const PeerId &peer, ToPrepareMediaType t) : id(MTP::nonce()), img(img), peer(peer), type(t) { } - ToPrepareMedia(const QByteArray &data, const PeerId &peer, ToPrepareMediaType t) : data(data), peer(peer), id(MTP::nonce()), type(t) { + ToPrepareMedia(const QByteArray &data, const PeerId &peer, ToPrepareMediaType t) : id(MTP::nonce()), data(data), peer(peer), type(t) { } PhotoId id; QString file; @@ -43,7 +43,7 @@ typedef QList ToPrepareMedias; typedef QMap LocalFileParts; struct ReadyLocalMedia { ReadyLocalMedia(ToPrepareMediaType type, const QString &file, const QString &filename, int32 filesize, const QByteArray &data, const uint64 &id, const uint64 &jpeg_id, const PeerId &peer, const MTPPhoto &photo, const PreparedPhotoThumbs &photoThumbs, const MTPDocument &document, const QByteArray &jpeg) : - type(type), file(file), filename(filename), filesize(filesize), data(data), id(id), jpeg_id(jpeg_id), peer(peer), photo(photo), photoThumbs(photoThumbs), document(document) { + type(type), file(file), filename(filename), filesize(filesize), data(data), id(id), jpeg_id(jpeg_id), peer(peer), photo(photo), document(document), photoThumbs(photoThumbs) { if (!jpeg.isEmpty()) { int32 size = jpeg.size(); for (int32 i = 0, part = 0; i < size; i += UploadPartSize, ++part) { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 457d2bda5..efc3f94a4 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -260,9 +260,9 @@ MainWidget *TopBarWidget::main() { return static_cast(parentWidget()); } -MainWidget::MainWidget(Window *window) : QWidget(window), profile(0), _dialogsWidth(st::dlgMinWidth), - updPts(0), updDate(0), updQts(0), updSeq(0), updInited(false), failedObjId(0), - dialogs(this), history(this), onlineRequest(0), hider(0), _topBar(this) { +MainWidget::MainWidget(Window *window) : QWidget(window), failedObjId(0), _dialogsWidth(st::dlgMinWidth), + dialogs(this), history(this), profile(0), _topBar(this), hider(0), + updPts(0), updDate(0), updQts(0), updSeq(0), updInited(false), onlineRequest(0) { setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight)); connect(window, SIGNAL(resized(const QSize &)), this, SLOT(onParentResize(const QSize &))); @@ -358,7 +358,7 @@ void MainWidget::dialogsActivate() { bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &e) { if (e.type() == "CHAT_ID_INVALID") { // left this chat already - if (profile && profile->peer() == peer || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { + if ((profile && profile->peer() == peer) || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { showPeer(0); } dialogs.removePeer(peer); @@ -370,7 +370,7 @@ bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &e) { void MainWidget::deleteHistory(PeerData *peer, const MTPmessages_StatedMessage &result) { sentFullDataReceived(0, result); - if (profile && profile->peer() == peer || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { + if ((profile && profile->peer() == peer) || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { showPeer(0); } dialogs.removePeer(peer); @@ -398,7 +398,7 @@ void MainWidget::deleteHistoryAndContact(UserData *user, const MTPcontacts_Link App::feedUsers(MTP_vector(QVector(1, d.vuser))); App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link); - if (profile && profile->peer() == user || profileStack.indexOf(user) >= 0 || history.peer() == user) { + if ((profile && profile->peer() == user) || profileStack.indexOf(user) >= 0 || history.peer() == user) { showPeer(0); } dialogs.removePeer(user); @@ -472,7 +472,7 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu if (!v) return; if (v->isEmpty()) { - if (profile && profile->peer() == peer || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { + if ((profile && profile->peer() == peer) || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { showPeer(0); } dialogs.removePeer(peer); @@ -1113,7 +1113,7 @@ void MainWidget::onTopBarClick() { } void MainWidget::onPeerShown(PeerData *peer) { - if (profile || peer && peer->id) { + if (profile || (peer && peer->id)) { _topBar.show(); } else { _topBar.hide(); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index dc7d85db3..491365a9c 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -25,7 +25,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "profilewidget.h" class Window; -class DialogRow; +struct DialogRow; class MainWidget; class TopBarWidget : public QWidget, public Animated { diff --git a/Telegram/SourceFiles/mtproto/mtp.cpp b/Telegram/SourceFiles/mtproto/mtp.cpp index a6df55806..f3d5f0052 100644 --- a/Telegram/SourceFiles/mtproto/mtp.cpp +++ b/Telegram/SourceFiles/mtproto/mtp.cpp @@ -483,7 +483,7 @@ namespace MTP { if (!started) return; int32 m = mainSession->getDC(); - if (!dc || m == dc || m && fromZeroOnly) return; + if (!dc || m == dc || (m && fromZeroOnly)) return; mtpSetDC(dc); mainSession = _mtp_internal::getSession(dc); } diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index c11fac3a0..a114c0f57 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -517,7 +517,7 @@ namespace { } MTPabstractTcpConnection::MTPabstractTcpConnection() : -currentPos((char*)shortBuffer), packetRead(0), packetLeft(0), readingToShort(true), packetNum(0) { +packetNum(0), packetRead(0), packetLeft(0), readingToShort(true), currentPos((char*)shortBuffer) { } void MTPabstractTcpConnection::socketRead() { @@ -1033,22 +1033,22 @@ void MTProtoConnectionPrivate::createConn() { MTProtoConnectionPrivate::MTProtoConnectionPrivate(QThread *thread, MTProtoConnection *owner, MTPSessionData *data, uint32 _dc) : QObject(0) - , dc(_dc) - , conn(0) - , retryTimeout(1) - , receiveDelay(MinReceiveDelay) - , firstSentAt(-1) - , oldConnection(true) , _state(MTProtoConnection::Disconnected) - , _owner(owner) - , sessionData(data) - , keyId(0) - , pingId(0) - , toSendPingId(0) - , pingMsgId(0) - , restarted(false) + , dc(_dc) + , _owner(owner) + , conn(0) + , retryTimeout(1) + , oldConnection(true) + , receiveDelay(MinReceiveDelay) + , firstSentAt(-1) , ackRequest(MTP_msgs_ack(MTPVector())) - , myKeyLock(false) + , pingId(0) + , toSendPingId(0) + , pingMsgId(0) + , restarted(false) + , keyId(0) + , sessionData(data) + , myKeyLock(false) , authKeyData(0) { ackRequestData = &ackRequest._msgs_ack().vmsg_ids._vector().v; @@ -1405,7 +1405,7 @@ void MTProtoConnectionPrivate::onReceivedSome() { int32 ms = getms() - firstSentAt; DEBUG_LOG(("MTP Info: response in %1ms, receiveDelay: %2ms").arg(ms).arg(receiveDelay)); - if (ms > 0 && ms * 2 < receiveDelay) receiveDelay = qMax(ms * 2, int32(MinReceiveDelay)); + if (ms > 0 && ms * 2 < int32(receiveDelay)) receiveDelay = qMax(ms * 2, int32(MinReceiveDelay)); firstSentAt = -1; } } @@ -1502,7 +1502,7 @@ void MTProtoConnectionPrivate::handleReceived() { uint32 seqNo = *(uint32*)&data[6], msgLen = *(uint32*)&data[7]; bool needAck = (seqNo & 0x01); - if (dataBuffer.size() < msgLen + 8 * sizeof(mtpPrime) || (msgLen & 0x03)) { + if (uint32(dataBuffer.size()) < msgLen + 8 * sizeof(mtpPrime) || (msgLen & 0x03)) { LOG(("TCP Error: bad msg_len received %1, data size: %2").arg(msgLen).arg(dataBuffer.size())); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); conn->received().pop_front(); @@ -1987,7 +1987,7 @@ int32 MTProtoConnectionPrivate::handleOneReceived(const mtpPrime *from, const mt } mtpRequestId requestId = wasSent(reqMsgId.v); - if (requestId && requestId != 0xFFFFFFFF) { + if (requestId && requestId != mtpRequestId(0xFFFFFFFF)) { QWriteLocker locker(sessionData->haveReceivedMutex()); sessionData->haveReceivedMap().insert(requestId, response); // save rpc_result for processing in main mtp thread } else { @@ -2899,12 +2899,12 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp } mtpRequestId MTProtoConnectionPrivate::wasSent(mtpMsgId msgId) const { - if (msgId == pingMsgId) return 0xFFFFFFFF; + if (msgId == pingMsgId) return mtpRequestId(0xFFFFFFFF); { QReadLocker locker(sessionData->haveSentMutex()); const mtpRequestMap &haveSent(sessionData->haveSentMap()); mtpRequestMap::const_iterator i = haveSent.constFind(msgId); - if (i != haveSent.cend()) return i.value()->requestId || 0xFFFFFFFF; + if (i != haveSent.cend()) return i.value()->requestId ? i.value()->requestId : mtpRequestId(0xFFFFFFFF); } { QReadLocker locker(sessionData->toResendMutex()); diff --git a/Telegram/SourceFiles/mtproto/mtpDC.cpp b/Telegram/SourceFiles/mtproto/mtpDC.cpp index 0116805fc..699f74cd5 100644 --- a/Telegram/SourceFiles/mtproto/mtpDC.cpp +++ b/Telegram/SourceFiles/mtproto/mtpDC.cpp @@ -84,7 +84,7 @@ namespace { continue; } uint32 dataLen = *(const uint32*)decrypted.constData(); - if (dataLen > decrypted.size() || dataLen <= fullDataLen - 16 || dataLen < 4) { + if (dataLen > uint32(decrypted.size()) || dataLen <= fullDataLen - 16 || dataLen < 4) { LOG(("MTP Error: bad decrypted part size: %1, fullDataLen: %2, decrypted size: %3").arg(dataLen).arg(fullDataLen).arg(decrypted.size())); continue; } @@ -200,7 +200,7 @@ namespace { DEBUG_LOG(("MTP Info: keys file opened for reading")); int32 oldFound = readAuthKeys(keysFile); - if (gDCOptions.isEmpty() || mainDC && gDCOptions.find(mainDC) == gDCOptions.cend()) { // load first dc info + if (gDCOptions.isEmpty() || (mainDC && gDCOptions.find(mainDC) == gDCOptions.cend())) { // load first dc info gDCOptions.insert(1, mtpDcOption(1, "", cFirstDCIp(), cFirstDCPort())); userId = 0; mainDC = 0; diff --git a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp index c6f57145c..f441bbd03 100644 --- a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp +++ b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp @@ -34,8 +34,10 @@ namespace { LoaderQueues queues; } -mtpFileLoader::mtpFileLoader(int32 dc, const int64 &volume, int32 local, const int64 &secret) : next(0), prev(0), inQueue(false), complete(false), requestId(0), priority(0), initialSize(0), - dc(dc), volume(volume), local(local), secret(secret), size(0), type(MTP_storage_fileUnknown()), locationType(0), id(0), access(0) { +mtpFileLoader::mtpFileLoader(int32 dc, const int64 &volume, int32 local, const int64 &secret) : prev(0), next(0), + priority(0), inQueue(false), complete(false), requestId(0), + dc(dc), locationType(0), volume(volume), local(local), secret(secret), + id(0), access(0), initialSize(0), size(0), type(MTP_storage_fileUnknown()) { LoaderQueues::iterator i = queues.find(dc); if (i == queues.cend()) { i = queues.insert(dc, mtpFileLoaderQueue()); @@ -43,8 +45,10 @@ mtpFileLoader::mtpFileLoader(int32 dc, const int64 &volume, int32 local, const i queue = &i.value(); } -mtpFileLoader::mtpFileLoader(int32 dc, const uint64 &id, const uint64 &access, mtpTypeId locType, const QString &to, int32 size) : next(0), prev(0), inQueue(false), complete(false), requestId(0), priority(0), - dc(dc), id(id), access(access), type(MTP_storage_fileUnknown()), locationType(locType), file(to), initialSize(size) { +mtpFileLoader::mtpFileLoader(int32 dc, const uint64 &id, const uint64 &access, mtpTypeId locType, const QString &to, int32 size) : prev(0), next(0), + priority(0), inQueue(false), complete(false), requestId(0), + dc(dc), locationType(locType), + id(id), access(access), file(to), initialSize(size), type(MTP_storage_fileUnknown()) { LoaderQueues::iterator i = queues.find(MTP::dld + dc); if (i == queues.cend()) { i = queues.insert(MTP::dld + dc, mtpFileLoaderQueue()); @@ -145,7 +149,7 @@ void mtpFileLoader::partLoaded(int32 offset, const MTPupload_File &result) { const string &bytes(d.vbytes.c_string().v); if (bytes.size()) { if (file.isOpen()) { - if (file.write(bytes.data(), bytes.size()) != bytes.size()) { + if (file.write(bytes.data(), bytes.size()) != qint64(bytes.size())) { return finishFail(); } } else { @@ -318,7 +322,7 @@ bool mtpFileLoader::loading() const { } void mtpFileLoader::started(bool loadFirst, bool prior) { - if (queue->queries >= MaxFileQueries && (!loadFirst || !prior) || complete) return; + if ((queue->queries >= MaxFileQueries && (!loadFirst || !prior)) || complete) return; loadPart(); } diff --git a/Telegram/SourceFiles/mtproto/mtpRPC.h b/Telegram/SourceFiles/mtproto/mtpRPC.h index fdf3d8e26..8fa3a8886 100644 --- a/Telegram/SourceFiles/mtproto/mtpRPC.h +++ b/Telegram/SourceFiles/mtproto/mtpRPC.h @@ -457,7 +457,7 @@ class RPCBindedDoneHandlerOwned : public RPCOwnedDoneHandler { // done(b, result typedef TReturn (TReceiver::*CallbackType)(T, const TResponse &); public: - RPCBindedDoneHandlerOwned(T b, TReceiver *receiver, CallbackType onDone) : RPCOwnedDoneHandler(receiver), _b(b), _onDone(onDone) { + RPCBindedDoneHandlerOwned(T b, TReceiver *receiver, CallbackType onDone) : RPCOwnedDoneHandler(receiver), _onDone(onDone), _b(b) { } virtual void operator()(mtpRequestId requestId, const mtpPrime *from, const mtpPrime *end) const { if (_owner) (static_cast(_owner)->*_onDone)(_b, TResponse(from, end)); @@ -589,7 +589,7 @@ class RPCBindedFailHandlerOwned : public RPCOwnedFailHandler { // fail(b, error) typedef bool (TReceiver::*CallbackType)(T, const RPCError &); public: - RPCBindedFailHandlerOwned(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _b(b), _onFail(onFail) { + RPCBindedFailHandlerOwned(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _onFail(onFail), _b(b) { } virtual bool operator()(mtpRequestId requestId, const RPCError &e) const { return _owner ? (static_cast(_owner)->*_onFail)(_b, e) : true; @@ -623,7 +623,7 @@ class RPCBindedFailHandlerOwnedNo : public RPCOwnedFailHandler { // fail(b) typedef bool (TReceiver::*CallbackType)(T); public: - RPCBindedFailHandlerOwnedNo(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _b(b), _onFail(onFail) { + RPCBindedFailHandlerOwnedNo(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _onFail(onFail), _b(b) { } virtual bool operator()(mtpRequestId requestId, const RPCError &e) const { return _owner ? (static_cast(_owner)->*_onFail)(_b) : true; @@ -640,7 +640,7 @@ class RPCBindedFailHandlerOwnedNoReq : public RPCOwnedFailHandler { // fail(b, r typedef bool (TReceiver::*CallbackType)(T, mtpRequestId); public: - RPCBindedFailHandlerOwnedNoReq(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _b(b), _onFail(onFail) { + RPCBindedFailHandlerOwnedNoReq(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _onFail(onFail), _b(b) { } virtual bool operator()(mtpRequestId requestId, const RPCError &e) const { return _owner ? (static_cast(_owner)->*_onFail)(_b, requestId) : true; diff --git a/Telegram/SourceFiles/mtproto/mtpSession.cpp b/Telegram/SourceFiles/mtproto/mtpSession.cpp index c510769b6..0a69076bb 100644 --- a/Telegram/SourceFiles/mtproto/mtpSession.cpp +++ b/Telegram/SourceFiles/mtproto/mtpSession.cpp @@ -63,7 +63,7 @@ void MTPSessionData::clear() { } -MTProtoSession::MTProtoSession() : data(this), dc(0), dcId(0), msSendCall(0), msWait(0) { +MTProtoSession::MTProtoSession() : data(this), dcId(0), dc(0), msSendCall(0), msWait(0) { } void MTProtoSession::start(int32 dcenter, uint32 connects) { @@ -158,7 +158,7 @@ void MTProtoSession::checkRequestsByTimer() { stateRequestIds.push_back(MTP_long(i.key())); } } - } else if (unixtime() > (uint32)(i.key() >> 32) + MTPContainerLives) { + } else if (unixtime() > (int32)(i.key() >> 32) + MTPContainerLives) { removingIds.reserve(haveSentCount); removingIds.push_back(i.key()); } @@ -216,7 +216,7 @@ int32 MTProtoSession::requestState(mtpRequestId requestId) const { result = MTP::RequestConnecting; } } else if (s < 0) { - if (result < 0 && s > result || result == MTP::RequestSent) { + if ((result < 0 && s > result) || result == MTP::RequestSent) { result = s; } } diff --git a/Telegram/SourceFiles/mtproto/mtpSession.h b/Telegram/SourceFiles/mtproto/mtpSession.h index 1f198e142..eb2220f43 100644 --- a/Telegram/SourceFiles/mtproto/mtpSession.h +++ b/Telegram/SourceFiles/mtproto/mtpSession.h @@ -27,9 +27,9 @@ class MTPSessionData { public: MTPSessionData(MTProtoSession *creator) - : _session(0), _salt(0), fakeRequestId(-2000000000) - , _messagesSent(0), keyChecked(false) - , _owner(creator) { + : _session(0), _salt(0) + , _messagesSent(0), fakeRequestId(-2000000000) + , _owner(creator), keyChecked(false) { } void setSession(uint64 session) { diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index cb5769ac8..15c7bb823 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -619,7 +619,7 @@ bool ProfileInner::animStep(float64 ms) { } bool ProfileInner::getPhotoCoords(PhotoData *photo, int32 &x, int32 &y, int32 &w) const { - if (_peerUser && photo->id == _peerUser->photoId || _peerChat && photo->id == _peerChat->photoId) { + if ((_peerUser && photo->id == _peerUser->photoId) || (_peerChat && photo->id == _peerChat->photoId)) { x = _left; y = st::profilePadding.top(); w = st::setPhotoSize; @@ -704,8 +704,11 @@ void ProfileInner::showAll() { resize(width(), h); } -ProfileWidget::ProfileWidget(QWidget *parent, const PeerData *peer) : QWidget(parent), - _inner(this, &_scroll, peer), _scroll(this, st::setScroll), _showing(false) { +ProfileWidget::ProfileWidget(QWidget *parent, const PeerData *peer) : QWidget(parent) + , _scroll(this, st::setScroll) + , _inner(this, &_scroll, peer) + , _showing(false) +{ _scroll.setWidget(&_inner); _scroll.move(0, 0); _inner.move(0, 0); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 9f0cde452..02b363b3f 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -684,8 +684,8 @@ void PsMainWindow::psUpdateNotifies() { } } -PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()), aOpacity(0), _index(0), hiding(false),// started(GetTickCount()), -alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), aY(y + st::notifyHeight + st::notifyDeltaY), close(this, st::notifyClose), aOpacityFunc(st::notifyFastAnimFunc) { +PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()),// started(GetTickCount()), +close(this, st::notifyClose), alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), hiding(false), _index(0), aOpacity(0), aOpacityFunc(st::notifyFastAnimFunc), aY(y + st::notifyHeight + st::notifyDeltaY) { int32 w = st::notifyWidth, h = st::notifyHeight; QImage img(w * cIntRetinaFactor(), h * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 0d3532bc0..88caf5c54 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -101,6 +101,11 @@ public: } - (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { + NSNumber *instObj = [[notification userInfo] objectForKey:@"inst"]; + unsigned long long instLong = [instObj unsignedLongLongValue]; + if (instLong != cInstance()) { // other app instance notification + return; + } if (notification.activationType == NSUserNotificationActivationTypeReplied){ wnd->data->onNotifyReply(notification); } else if (notification.activationType == NSUserNotificationActivationTypeContentsClicked) { @@ -151,7 +156,7 @@ void PsMacWindowPrivate::activateWnd(WId winId) { void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8title, const char *utf8subtitle, const char *utf8msg) { NSUserNotification *notification = [[NSUserNotification alloc] init]; - NSDictionary *uinfo = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",nil]; + NSDictionary *uinfo = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",[NSNumber numberWithUnsignedLongLong:cInstance()],@"inst",nil]; [notification setUserInfo:uinfo]; [uinfo release]; diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 33db92f11..411d7d42b 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -70,6 +70,8 @@ float64 gRetinaFactor = 1.; int32 gIntRetinaFactor = 1; bool gCustomNotifies = false; +uint64 gInstance = 0.; + #ifdef Q_OS_WIN DBIPlatform gPlatform = dbipWindows; #elif defined Q_OS_MAC @@ -81,6 +83,7 @@ DBIPlatform gPlatform = dbipLinux; #endif void settingsParseArgs(int argc, char *argv[]) { + memset_rand(&gInstance, sizeof(gInstance)); gExeDir = psCurrentExeDirectory(argc, argv); for (int32 i = 0; i < argc; ++i) { if (string("-release") == argv[i]) { diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index b0a1dd748..52bb4708d 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -135,6 +135,8 @@ DeclareSetting(float64, RetinaFactor); DeclareSetting(int32, IntRetinaFactor); DeclareSetting(bool, CustomNotifies); +DeclareReadSetting(uint64, Instance); + DeclareReadSetting(DBIPlatform, Platform); void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 8b27ee368..ea88ff967 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -135,10 +135,10 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent), _viewEmojis(this, lang(lng_settings_view_emojis)), _enterSend(this, qsl("send_key"), 0, lang(lng_settings_send_enter), !cCtrlEnter()), -_ctrlEnterSend(this, qsl("send_key"), 1, lang((cPlatform() == dbipMac) ? lng_settings_send_cmdenter : lng_settings_send_ctrlenter), cCtrlEnter()), + _ctrlEnterSend(this, qsl("send_key"), 1, lang((cPlatform() == dbipMac) ? lng_settings_send_cmdenter : lng_settings_send_ctrlenter), cCtrlEnter()), - _downloadPathWidth(st::linkFont->m.width(lang(lng_download_path_label))), _dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath()), + _downloadPathWidth(st::linkFont->m.width(lang(lng_download_path_label))), _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_temp) : st::linkFont->m.elidedText(QDir::toNativeSeparators(cDownloadPath()), Qt::ElideRight, st::setWidth - st::setVersionLeft - _downloadPathWidth)), _downloadPathClear(this, lang(lng_download_path_clear)), _tempDirClearingWidth(st::linkFont->m.width(lang(lng_download_path_clearing))), @@ -150,8 +150,8 @@ _ctrlEnterSend(this, qsl("send_key"), 1, lang((cPlatform() == dbipMac) ? lng_set // advanced _connectionType(this, lang(lng_connection_auto)), _resetSessions(this, lang(lng_settings_reset)), - _resetDone(false), - _logOut(this, lang(lng_settings_logout), st::btnLogout) + _logOut(this, lang(lng_settings_logout), st::btnLogout), + _resetDone(false) { if (_self) { _nameText.setText(st::setNameFont, _nameCache, _textNameOptions); diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index fde848d9c..1b4f8389e 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -49,7 +49,8 @@ void TitleHider::setLevel(float64 level) { TitleWidget::TitleWidget(Window *window) : QWidget(window) , wnd(window) - , availWidth(460) + , hideLevel(0) + , hider(0) , _settings(this, lang(lng_menu_settings), st::titleTextButton) , _contacts(this, lang(lng_menu_contacts), st::titleTextButton) , _about(this, lang(lng_menu_about), st::titleTextButton) @@ -58,9 +59,9 @@ TitleWidget::TitleWidget(Window *window) , _maximize(this, window) , _restore(this, window) , _close(this, window) - , lastMaximized(!(window->windowState() & Qt::WindowMaximized)) - , hider(0) - , hideLevel(0) { + , availWidth(460) + , lastMaximized(!(window->windowState() & Qt::WindowMaximized)) +{ setGeometry(0, 0, wnd->width(), st::titleHeight); stateChanged(); @@ -226,7 +227,7 @@ HitTestType TitleWidget::hitTest(const QPoint &p) { } else if (x >= 0 && x < w && y >= 0 && y < h) { if (false || _settings.geometry().contains(x, y) - || !_contacts.isHidden() && _contacts.geometry().contains(x, y) + || (!_contacts.isHidden() && _contacts.geometry().contains(x, y)) || _about.geometry().contains(x, y) ) { return HitTestClient; diff --git a/Telegram/SourceFiles/types.cpp b/Telegram/SourceFiles/types.cpp index 8ae68c213..a08383dce 100644 --- a/Telegram/SourceFiles/types.cpp +++ b/Telegram/SourceFiles/types.cpp @@ -34,9 +34,8 @@ namespace { class _TypeSizeCheckerHelper { public: _TypeSizeCheckerHelper() { -#ifndef Q_OS_MAC - _BadTypeSize field; -#endif + int _BadTypeSize[N ? -1 : 1]; + (void)sizeof(_BadTypeSize); } }; @@ -398,11 +397,11 @@ namespace { } inline uint32 _md5_F(uint32 x, uint32 y, uint32 z) { - return x & y | ~x & z; + return (x & y) | (~x & z); } inline uint32 _md5_G(uint32 x, uint32 y, uint32 z) { - return x & z | y & ~z; + return (x & z) | (y & ~z); } inline uint32 _md5_H(uint32 x, uint32 y, uint32 z) { diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 1daba3f63..8cf74c8bb 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -29,7 +29,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "layerwidget.h" #include "settingswidget.h" -ConnectingWidget::ConnectingWidget(QWidget *parent, const QString &text, const QString &reconnect) : QWidget(parent), _reconnect(this, QString()), _shadow(st::boxShadow) { +ConnectingWidget::ConnectingWidget(QWidget *parent, const QString &text, const QString &reconnect) : QWidget(parent), _shadow(st::boxShadow), _reconnect(this, QString()) { set(text, reconnect); connect(&_reconnect, SIGNAL(clicked()), this, SLOT(onReconnect())); } @@ -77,8 +77,8 @@ void TempDirDeleter::onStart() { } Window::Window(QWidget *parent) : PsMainWindow(parent), - dragging(false), intro(0), main(0), settings(0), layer(0), layerBG(0), myIcon(QPixmap::fromImage(icon256)), _topWidget(0), - _connecting(0), _inactivePress(false), _tempDeleter(0), _tempDeleterThread(0) { + intro(0), main(0), settings(0), layer(0), layerBG(0), _topWidget(0), + _connecting(0), _tempDeleter(0), _tempDeleterThread(0), myIcon(QPixmap::fromImage(icon256)), dragging(false), _inactivePress(false) { if (objectName().isEmpty()) setObjectName(qsl("MainWindow")); @@ -253,7 +253,7 @@ void Window::mtpStateChanged(int32 dc, int32 state) { void Window::updateTitleStatus() { int32 state = MTP::dcstate(); - if (state == MTProtoConnection::Connecting || state == MTProtoConnection::Disconnected || state < 0 && state > -600) { + if (state == MTProtoConnection::Connecting || state == MTProtoConnection::Disconnected || (state < 0 && state > -600)) { if (main || getms() > 5000 || _connecting) { showConnecting(lang(lng_connecting)); } @@ -384,7 +384,7 @@ void Window::paintEvent(QPaintEvent *e) { HitTestType Window::hitTest(const QPoint &p) const { int x(p.x()), y(p.y()), w(width()), h(height()); - const uint32 raw = psResizeRowWidth(); + const int32 raw = psResizeRowWidth(); if (!windowState().testFlag(Qt::WindowMaximized)) { if (y < raw) { if (x < raw) { diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index a0c983c83..93f54a598 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -38,6 +38,7 @@ 02F93BF511880983D3C57B84 /* dialogswidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E466873F01ABA1E55E914489 /* dialogswidget.cpp */; settings = {ATTRIBUTES = (); }; }; 03270F718426CFE84729079E /* flattextarea.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */; settings = {ATTRIBUTES = (); }; }; 06EABCC49D2EEE4076322BE7 /* moc_mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */; settings = {ATTRIBUTES = (); }; }; + 07055CC4194EE85B0008DEF6 /* libcrypto.a in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07055CC3194EE85B0008DEF6 /* libcrypto.a */; }; 0749CE69194D723400345D61 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 07C3AF24194335ED0016CFF1 /* Images.xcassets */; }; 0A49F3A5DC0680FB31519670 /* phoneinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */; settings = {ATTRIBUTES = (); }; }; 0CB7DE9A54CC9BF86FB7B5CA /* mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6D50D70712776D7ED3B00E5C /* mtp.cpp */; settings = {ATTRIBUTES = (); }; }; @@ -224,6 +225,7 @@ 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mainwidget.cpp; path = SourceFiles/mainwidget.cpp; sourceTree = ""; }; 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; + 07055CC3194EE85B0008DEF6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "./../../Libraries/openssl-xcode/libcrypto.a"; sourceTree = ""; }; 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; 0771C4C94B623FC34BF62983 /* intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = intro.cpp; path = SourceFiles/intro/intro.cpp; sourceTree = ""; }; 07C3AF24194335ED0016CFF1 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Telegram/Images.xcassets; sourceTree = SOURCE_ROOT; }; @@ -593,6 +595,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 07055CC4194EE85B0008DEF6 /* libcrypto.a in Link Binary With Libraries */, 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */, B58956C9C026BD3A7FD9ECDF /* libexif.a in Link Binary With Libraries */, 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */, @@ -1069,6 +1072,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07055CC3194EE85B0008DEF6 /* libcrypto.a */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, 4AF15B5A0A43EB62D6DAF211 /* libexif.a */, DFD7912080BC557230093752 /* ApplicationServices.framework */, @@ -1182,6 +1186,7 @@ 6DB9C3763D02B1415CD9D565 /* Project object */ = { isa = PBXProject; attributes = { + LastUpgradeCheck = 0510; }; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Telegram" */; compatibilityVersion = "Xcode 3.2"; @@ -1417,7 +1422,7 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; OBJROOT = ./../Mac/DebugIntermediate; - PRODUCT_NAME = "Preprocess copy"; + PRODUCT_NAME = "Meta Compile"; QT_LIBRARY_SUFFIX = _debug; SDKROOT = macosx; SYMROOT = ./../Mac; @@ -1435,7 +1440,7 @@ GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; LLVM_LTO = YES; OBJROOT = ./../Mac/ReleaseIntermediate; - PRODUCT_NAME = "Preprocess copy"; + PRODUCT_NAME = "Meta Compile"; QT_LIBRARY_SUFFIX = ""; SDKROOT = macosx; SYMROOT = ./../Mac; @@ -1445,8 +1450,13 @@ 339EE1B2CC4FC24589A0EA95 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = x86_64; CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DYLIB_COMPATIBILITY_VERSION = 0.5; DYLIB_CURRENT_VERSION = 0.5.1; @@ -1456,6 +1466,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = SourceFiles/stdafx.h; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; HEADER_SEARCH_PATHS = ( ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, @@ -1488,6 +1501,7 @@ "/usr/local/Qt-5.3.0/plugins/bearer", "/usr/local/Qt-5.3.0/plugins/platforms", "/usr/local/Qt-5.3.0/plugins/imageformats", + "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = "./../Mac/$(CONFIGURATION)Intermediate"; @@ -1502,6 +1516,12 @@ "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", "-DQT_CORE_LIB", + "-Wno-unused-variable", + "-Wno-unused-parameter", + "-Wno-unused-function", + "-Wno-switch", + "-Wno-comment", + "-I./../../Libraries/openssl-xcode/include", ); OTHER_CPLUSPLUSFLAGS = ( "-pipe", @@ -1516,12 +1536,16 @@ "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", "-DQT_CORE_LIB", + "-Wno-unused-variable", + "-Wno-unused-parameter", + "-Wno-unused-function", + "-Wno-switch", + "-Wno-comment", + "-I./../../Libraries/openssl-xcode/include", ); OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-lcrypto", - "-lssl", "-L/usr/local/Qt-5.3.0/lib", "-L/usr/local/Qt-5.3.0/plugins/mediaservice", "-L/usr/local/Qt-5.3.0/plugins/audio", @@ -1544,8 +1568,13 @@ 3AA6C32AC930069E80220CF1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = x86_64; CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.5; @@ -1556,6 +1585,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = SourceFiles/stdafx.h; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; HEADER_SEARCH_PATHS = ( ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, @@ -1588,9 +1620,11 @@ "/usr/local/Qt-5.3.0/plugins/bearer", "/usr/local/Qt-5.3.0/plugins/platforms", "/usr/local/Qt-5.3.0/plugins/imageformats", + "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = "./../Mac/$(CONFIGURATION)Intermediate"; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-pipe", "-g", @@ -1603,6 +1637,12 @@ "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", "-DQT_CORE_LIB", + "-Wno-unused-variable", + "-Wno-unused-parameter", + "-Wno-unused-function", + "-Wno-switch", + "-Wno-comment", + "-I./../../Libraries/openssl-xcode/include", ); OTHER_CPLUSPLUSFLAGS = ( "-pipe", @@ -1618,12 +1658,16 @@ "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", "-DQT_CORE_LIB", + "-Wno-unused-variable", + "-Wno-unused-parameter", + "-Wno-unused-function", + "-Wno-switch", + "-Wno-comment", + "-I./../../Libraries/openssl-xcode/include", ); OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-lcrypto", - "-lssl", "-L/usr/local/Qt-5.3.0/lib", "-L/usr/local/Qt-5.3.0/plugins/mediaservice", "-L/usr/local/Qt-5.3.0/plugins/audio", @@ -1647,6 +1691,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 0.5.2; DYLIB_CURRENT_VERSION = 0.5.2; @@ -1667,6 +1712,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 0.5.2; DEBUG_INFORMATION_FORMAT = dwarf; From 2b61046a752a5ce33371a1f6f211202fca0a25f4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 17 Jun 2014 10:06:01 +0400 Subject: [PATCH 04/14] show in finder done, open with custom dialog started for mac --- Telegram/Resources/lang.txt | 1 + Telegram/SourceFiles/history.cpp | 3 +- Telegram/SourceFiles/historywidget.cpp | 2 +- Telegram/SourceFiles/logs.cpp | 2 +- Telegram/SourceFiles/pspecific_mac.cpp | 23 +---- Telegram/SourceFiles/pspecific_mac_p.h | 9 +- Telegram/SourceFiles/pspecific_mac_p.mm | 111 +++++++++++++++++++++++- Telegram/SourceFiles/title.cpp | 1 - Telegram/SourceFiles/title.h | 2 - 9 files changed, 122 insertions(+), 32 deletions(-) diff --git a/Telegram/Resources/lang.txt b/Telegram/Resources/lang.txt index 9f6b83a0d..233433504 100644 --- a/Telegram/Resources/lang.txt +++ b/Telegram/Resources/lang.txt @@ -314,6 +314,7 @@ lng_context_copy_image: "Copy Image"; lng_context_close_image: "Close Image"; lng_context_cancel_download: "Cancel Download"; lng_context_show_in_folder: "Show in Folder"; +lng_context_show_in_finder: "Show in Finder"; lng_context_open_video: "Open Video"; lng_context_save_video: "Save Video As..."; lng_context_open_audio: "Open Audio"; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 7a582b628..175914d48 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -1768,7 +1768,8 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t p.fillRect(0, _height, width, st::msgShadow, shadow->b); if (_thumbw) { - p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx, _thumby, st::mediaThumbSize, st::mediaThumbSize)); + int32 rf(cIntRetinaFactor()); + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx * rf, _thumby * rf, st::mediaThumbSize * rf, st::mediaThumbSize * rf)); } else { p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index d5dc43b19..065dcc8a7 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -636,7 +636,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_cancel_download), this, SLOT(cancelContextDownload()))->setEnabled(true); } else { if ((lnkVideo && !lnkVideo->video()->already(true).isEmpty()) || (lnkAudio && !lnkAudio->audio()->already(true).isEmpty()) || (lnkDocument && !lnkDocument->document()->already(true).isEmpty())) { - _menu->addAction(lang(lng_context_show_in_folder), this, SLOT(showContextInFolder()))->setEnabled(true); + _menu->addAction(lang(cPlatform() == dbipMac ? lng_context_show_in_finder : lng_context_show_in_folder), this, SLOT(showContextInFolder()))->setEnabled(true); } _menu->addAction(lang(lnkVideo ? lng_context_open_video : (lnkAudio ? lng_context_open_audio : lng_context_open_document)), this, SLOT(openContextFile()))->setEnabled(true); _menu->addAction(lang(lnkVideo ? lng_context_save_video : (lnkAudio ? lng_context_save_audio : lng_context_save_document)), this, SLOT(saveContextFile()))->setEnabled(true); diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index 8d281b13d..d09a6581f 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -71,7 +71,7 @@ void debugLogWrite(const char *file, int32 line, const QString &v) { OutputDebugString(reinterpret_cast(msg.utf16())); #endif #ifdef Q_OS_MAC - _outputDebugString(msg.toUtf8().constData()); + objc_outputDebugString(msg.toUtf8().constData()); #endif } } diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 02b363b3f..449ce75ef 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -130,7 +130,7 @@ posInited(false), trayIcon(0), trayIconMenu(0), icon256(qsl(":/gui/art/iconround } void PsMainWindow::psIdleTimeout() { - int64 idleTime = _idleTime(); + int64 idleTime = objc_idleTime(); if (idleTime >= 0) { if (idleTime <= IdleMsecs) { psIdle = false; @@ -147,7 +147,7 @@ bool PsMainWindow::psIsOnline(int state) const { } else if (!isVisible()) { return false; } - int64 idleTime = _idleTime(); + int64 idleTime = objc_idleTime(); LOG(("App Info: idle time %1").arg(idleTime)); if (idleTime >= 0) { if (idleTime > IdleMsecs) { @@ -1624,26 +1624,11 @@ void psPostprocessFile(const QString &name) { } void psOpenFile(const QString &name, bool openWith) { - /*std::wstring wname = QDir::toNativeSeparators(name).toStdWString(); - - if (openWith && useOpenAs) { - if (shOpenWithDialog) { - OPENASINFO info; - info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC; - info.pcszClass = NULL; - info.pcszFile = wname.c_str(); - shOpenWithDialog(0, &info); - } else { - openAs_RunDLL(0, 0, wname.c_str(), SW_SHOWNORMAL); - } - } else { - ShellExecute(0, L"open", wname.c_str(), 0, 0, SW_SHOWNORMAL); - }*/ + objc_openFile(name.toUtf8().constData(), openWith); } void psShowInFolder(const QString &name) { - //QString nameEscaped = QDir::toNativeSeparators(name).replace('"', qsl("\"\"")); - //ShellExecute(0, 0, qsl("explorer").toStdWString().c_str(), (qsl("/select,") + nameEscaped).toStdWString().c_str(), 0, SW_SHOWNORMAL); + objc_showInFinder(name.toUtf8().constData(), QFileInfo(name).absolutePath().toUtf8().constData()); } void psExecUpdater() { diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 640a10957..1e1a31a59 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -48,6 +48,9 @@ public: }; -void _debugShowAlert(const char *utf8str); -void _outputDebugString(const char *utf8str); -int64 _idleTime(); +void objc_debugShowAlert(const char *utf8str); +void objc_outputDebugString(const char *utf8str); +int64 objc_idleTime(); + +void objc_showInFinder(const char *utf8file, const char *utf8path); +void objc_openFile(const char *utf8file, bool openwith); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 88caf5c54..d6b57d34e 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -18,9 +18,9 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "stdafx.h" #include "pspecific_mac_p.h" -#include #include #include +#include @interface ObserverHelper : NSObject { } @@ -201,7 +201,7 @@ void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { } } -void _debugShowAlert(const char *utf8str) { +void objc_debugShowAlert(const char *utf8str) { NSString *text = [[NSString alloc] initWithUTF8String: utf8str]; NSAlert *alert = [NSAlert alertWithMessageText:@"Debug Message" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", text]; [alert runModal]; @@ -209,7 +209,7 @@ void _debugShowAlert(const char *utf8str) { [text release]; } -void _outputDebugString(const char *utf8str) { +void objc_outputDebugString(const char *utf8str) { NSString *text = [[NSString alloc] initWithUTF8String:utf8str]; NSLog(@"%@", text); [text release]; @@ -219,7 +219,7 @@ PsMacWindowPrivate::~PsMacWindowPrivate() { delete data; } -int64 _idleTime() { // taken from https://github.com/trueinteractions/tint/issues/53 +int64 objc_idleTime() { // taken from https://github.com/trueinteractions/tint/issues/53 CFMutableDictionaryRef properties = 0; CFTypeRef obj; mach_port_t masterPort; @@ -268,3 +268,106 @@ int64 _idleTime() { // taken from https://github.com/trueinteractions/tint/issue IOObjectRelease(iter); return (result == err) ? -1 : int64(result); } + +void objc_showInFinder(const char *utf8file, const char *utf8path) { + NSString *file = [[NSString alloc] initWithUTF8String:utf8file], *path = [[NSString alloc] initWithUTF8String:utf8path]; + [[NSWorkspace sharedWorkspace] selectFile:file inFileViewerRootedAtPath:path]; + [file release]; + [path release]; +} + +@interface NSURL(CompareUrls) + +- (BOOL) isEquivalent:(NSURL *)aURL; + +@end + +@implementation NSURL(CompareUrls) + +- (BOOL) isEquivalent:(NSURL *)aURL { + if ([self isEqual:aURL]) return YES; + if ([[self scheme] caseInsensitiveCompare:[aURL scheme]] != NSOrderedSame) return NO; + if ([[self host] caseInsensitiveCompare:[aURL host]] != NSOrderedSame) return NO; + if ([[self path] compare:[aURL path]] != NSOrderedSame) return NO; + if ([[self port] compare:[aURL port]] != NSOrderedSame) return NO; + if ([[self query] compare:[aURL query]] != NSOrderedSame) return NO; + return YES; +} + +@end + +@interface ChooseApplicationDelegate : NSObject { +} + +- (id) init:(NSArray *)recommendedApps; +- (BOOL) panel:(id)sender shouldEnableURL:(NSURL *)url; +- (void) dealloc; + +@end + +@implementation ChooseApplicationDelegate { + BOOL onlyRecommended; + NSArray *apps; +} + +- (id) init:(NSArray *)recommendedApps { + if (self = [super init]) { + onlyRecommended = YES; + apps = recommendedApps; + } + return self; +} + +- (BOOL) panel:(id)sender shouldEnableURL:(NSURL *)url { + NSNumber *isDirectory; + if ([url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil] && isDirectory != nil && [isDirectory boolValue]) { + if (onlyRecommended) { + CFStringRef ext = CFURLCopyPathExtension((CFURLRef)url); + NSNumber *isPackage; + if ([url getResourceValue:&isPackage forKey:NSURLIsPackageKey error:nil] && isPackage != nil && [isPackage boolValue]) { + if (apps) { + for (id app in apps) { + if ([(NSURL*)app isEquivalent:url]) { + return YES; + } + } + } + return NO; + } + } + return YES; + } + return NO; +} + +- (void) dealloc { + if (apps) { + [apps release]; + } + [super dealloc]; +} + +@end + +void objc_openFile(const char *utf8file, bool openwith) { + NSString *file = [[NSString alloc] initWithUTF8String:utf8file]; + if (openwith || [[NSWorkspace sharedWorkspace] openFile:file] == NO) { + NSURL *url = [NSURL fileURLWithPath:file]; + NSArray *apps = (NSArray*)LSCopyApplicationURLsForURL(CFURLRef(url), kLSRolesAll); + + ChooseApplicationDelegate *delegate = [[ChooseApplicationDelegate alloc] init:apps]; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setDelegate:delegate]; + [openPanel setTitle:@"Choose Application"]; + [openPanel setMessage:@"Choose an application to open the document \"blabla.png\"."]; + if ([openPanel runModal] == NSOKButton) { + NSArray *result = [openPanel URLs]; + } + [delegate release]; + } + [file release]; +} diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index 1b4f8389e..03c61d304 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -59,7 +59,6 @@ TitleWidget::TitleWidget(Window *window) , _maximize(this, window) , _restore(this, window) , _close(this, window) - , availWidth(460) , lastMaximized(!(window->windowState() & Qt::WindowMaximized)) { diff --git a/Telegram/SourceFiles/title.h b/Telegram/SourceFiles/title.h index 75aa58b54..7ce806fbf 100644 --- a/Telegram/SourceFiles/title.h +++ b/Telegram/SourceFiles/title.h @@ -84,8 +84,6 @@ private: RestoreBtn _restore; CloseBtn _close; - int32 availWidth; - bool lastMaximized; }; From 37f7698371374ad0dbc4c39d421669cee52de7f3 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 17 Jun 2014 10:20:46 +0400 Subject: [PATCH 05/14] fixed qt_preprocess for new fonts in qrc --- Telegram/Telegram.xcodeproj/qt_preprocess.mak | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index aebaafdaf..034888753 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -65,15 +65,14 @@ GeneratedFiles/qrc_telegram.cpp: SourceFiles/telegram.qrc \ SourceFiles/art/bg_150x.png \ SourceFiles/art/sprite_200x.png \ SourceFiles/art/newmsg.wav \ - SourceFiles/art/ThoolikaTrditionalUnicode.ttf \ SourceFiles/art/sprite_125x.png \ - SourceFiles/art/segoe_wp_semibold.ttf \ SourceFiles/art/emoji_200x.png \ SourceFiles/art/bg_200x.png \ SourceFiles/art/emoji_125x.png \ - SourceFiles/art/segoe_ui.ttf \ SourceFiles/art/bg_125x.png \ - SourceFiles/art/segoe_ui_semibold.ttf \ + SourceFiles/art/OpenSans-Regular.ttf \ + SourceFiles/art/OpenSans-Bold.ttf \ + SourceFiles/art/OpenSans-Semibold.ttf \ SourceFiles/qmime/freedesktop.org.xml \ SourceFiles/art/usercolor4.png \ SourceFiles/art/chatcolor1.png \ From d68aeb1b49e7bf62a437e19b1e82a52262ba153c Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 18 Jun 2014 22:37:44 +0400 Subject: [PATCH 06/14] made custom open with dialog for os x almost like in finder, with langs support --- Telegram/Resources/lang.txt | 11 + Telegram/Resources/style.txt | 10 + Telegram/SourceFiles/_other/genlang.cpp | 4 +- Telegram/SourceFiles/history.cpp | 6 +- Telegram/SourceFiles/main.cpp | 2 + Telegram/SourceFiles/pspecific_mac.cpp | 4 + Telegram/SourceFiles/pspecific_mac.h | 1 + Telegram/SourceFiles/pspecific_mac_p.h | 1 + Telegram/SourceFiles/pspecific_mac_p.mm | 285 ++++++++++++++++-- Telegram/SourceFiles/pspecific_wnd.cpp | 3 + Telegram/SourceFiles/pspecific_wnd.h | 1 + .../AppIcon-2.appiconset/Contents.json | 58 ---- 12 files changed, 298 insertions(+), 88 deletions(-) delete mode 100644 Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json diff --git a/Telegram/Resources/lang.txt b/Telegram/Resources/lang.txt index 233433504..2824bf74f 100644 --- a/Telegram/Resources/lang.txt +++ b/Telegram/Resources/lang.txt @@ -380,5 +380,16 @@ This software is licensed under [a href=\"https://github.com/telegramdesktop/tde source code is available on [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a]."; lng_about_done: "Done"; +// Mac specific + +lng_mac_choose_app: "Choose Application"; +lng_mac_choose_text: "Choose an application to open the document \"{file}\"."; +lng_mac_enable_filter: "Enable:"; +lng_mac_recommended_apps: "Recommended Applications"; +lng_mac_all_apps: "All Applications"; +lng_mac_always_open_with: "Always Open With"; +lng_mac_this_app_can_open: "This application can open \"{file}\"."; +lng_mac_not_known_app: "It's not known if this application can open \"{file}\"."; + // Keys finished diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index ea2129b82..a7aa82ee4 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1385,3 +1385,13 @@ emojiPanSub: 0px; emojiPanDuration: 200; emojiPanHover: #f0f0f0; emojiPanRound: 2px; + +// Mac specific + +macAccessoryHeight: 90; +macEnableFilterAdd: 2; +macEnableFilterTop: 5; +macSelectorTop: 6; +macAlwaysThisAppTop: 4; +macAppHintTop: 8; +macCautionIconSize: size(16, 16); diff --git a/Telegram/SourceFiles/_other/genlang.cpp b/Telegram/SourceFiles/_other/genlang.cpp index ce3cee61b..c02a9bbe0 100644 --- a/Telegram/SourceFiles/_other/genlang.cpp +++ b/Telegram/SourceFiles/_other/genlang.cpp @@ -53,8 +53,8 @@ bool skipComment(const char *&from, const char *end) { while (from < end && *from != '\n' && *from != '\r') { ++from; } - ++from; - return (from < end); + if (from < end) ++from; + return true; } else { return true; } diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 175914d48..ca838cd8d 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -271,7 +271,7 @@ void VideoOpenLink::onClick(Qt::MouseButton button) const { QString already = data->already(true); if (!already.isEmpty()) { - QDesktopServices::openUrl(QUrl::fromLocalFile(already)); + psOpenFile(already); return; } @@ -331,7 +331,7 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { QString already = data->already(true); if (!already.isEmpty()) { - QDesktopServices::openUrl(QUrl::fromLocalFile(already)); + psOpenFile(already); return; } @@ -391,7 +391,7 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { QString already = data->already(true); if (!already.isEmpty()) { - QDesktopServices::openUrl(QUrl::fromLocalFile(already)); + psOpenFile(already); return; } diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index 8174807e2..6c7cc3ebc 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -47,6 +47,8 @@ int main(int argc, char *argv[]) { Application app(argc, argv); int result = App::quiting() ? 0 : app.exec(); + + psFinish(); DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result)); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 449ce75ef..072616a1b 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -1631,6 +1631,10 @@ void psShowInFolder(const QString &name) { objc_showInFinder(name.toUtf8().constData(), QFileInfo(name).absolutePath().toUtf8().constData()); } +void psFinish() { + objc_finish(); +} + void psExecUpdater() { /*QString targs = qsl("-update"); if (cFromAutoStart()) targs += qsl(" -autostart"); diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index 5d3ff10b1..2ff8966c5 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -265,3 +265,4 @@ void psExecTelegram(); void psPostprocessFile(const QString &name); void psOpenFile(const QString &name, bool openWith = false); void psShowInFolder(const QString &name); +void psFinish(); diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 1e1a31a59..c6edd9349 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -54,3 +54,4 @@ int64 objc_idleTime(); void objc_showInFinder(const char *utf8file, const char *utf8path); void objc_openFile(const char *utf8file, bool openwith); +void objc_finish(); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index d6b57d34e..5a0611fd3 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -18,10 +18,47 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "stdafx.h" #include "pspecific_mac_p.h" +#include "lang.h" + #include #include #include +class QNSString { +public: + QNSString(const QString &str) : _str([[NSString alloc] initWithUTF8String:str.toUtf8().constData()]) { + } + QNSString &operator=(const QNSString &other) { + if (this != &other) { + [_str release]; + _str = [other._str copy]; + } + return *this; + } + QNSString(const QNSString &other) : _str([other._str copy]) { + } + ~QNSString() { + [_str release]; + } + + NSString *s() { + return _str; + } +private: + NSString *_str; +}; + +typedef QMap ObjcLang; +ObjcLang objcLang; + +QNSString objc_lang(LangKey key) { + ObjcLang::const_iterator i = objcLang.constFind(key); + if (i == objcLang.cend()) { + i = objcLang.insert(key, lang(key)); + } + return i.value(); +} + @interface ObserverHelper : NSObject { } @@ -299,8 +336,10 @@ void objc_showInFinder(const char *utf8file, const char *utf8path) { @interface ChooseApplicationDelegate : NSObject { } -- (id) init:(NSArray *)recommendedApps; +- (id) init:(NSArray *)recommendedApps withPanel:(NSOpenPanel *)creator withSelector:(NSPopUpButton *)menu withGood:(NSTextField *)goodLabel withBad:(NSTextField *)badLabel withIcon:(NSImageView *)badIcon withAccessory:(NSView *)acc; - (BOOL) panel:(id)sender shouldEnableURL:(NSURL *)url; +- (void) panelSelectionDidChange:(id)sender; +- (void) menuDidClose; - (void) dealloc; @end @@ -308,16 +347,41 @@ void objc_showInFinder(const char *utf8file, const char *utf8path) { @implementation ChooseApplicationDelegate { BOOL onlyRecommended; NSArray *apps; + NSOpenPanel *panel; + NSPopUpButton *selector; + NSTextField *good, *bad; + NSImageView *icon; + NSString *recom; + NSView *accessory; } -- (id) init:(NSArray *)recommendedApps { +- (id) init:(NSArray *)recommendedApps withPanel:(NSOpenPanel *)creator withSelector:(NSPopUpButton *)menu withGood:(NSTextField *)goodLabel withBad:(NSTextField *)badLabel withIcon:(NSImageView *)badIcon withAccessory:(NSView *)acc { if (self = [super init]) { onlyRecommended = YES; + recom = [objc_lang(lng_mac_recommended_apps).s() copy]; apps = recommendedApps; + panel = creator; + selector = menu; + good = goodLabel; + bad = badLabel; + icon = badIcon; + accessory = acc; + [selector setAction:@selector(menuDidClose)]; } return self; } +- (BOOL) isRecommended:(NSURL *)url { + if (apps) { + for (id app in apps) { + if ([(NSURL*)app isEquivalent:url]) { + return YES; + } + } + } + return NO; +} + - (BOOL) panel:(id)sender shouldEnableURL:(NSURL *)url { NSNumber *isDirectory; if ([url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil] && isDirectory != nil && [isDirectory boolValue]) { @@ -325,14 +389,7 @@ void objc_showInFinder(const char *utf8file, const char *utf8path) { CFStringRef ext = CFURLCopyPathExtension((CFURLRef)url); NSNumber *isPackage; if ([url getResourceValue:&isPackage forKey:NSURLIsPackageKey error:nil] && isPackage != nil && [isPackage boolValue]) { - if (apps) { - for (id app in apps) { - if ([(NSURL*)app isEquivalent:url]) { - return YES; - } - } - } - return NO; + return [self isRecommended:url]; } } return YES; @@ -340,9 +397,59 @@ void objc_showInFinder(const char *utf8file, const char *utf8path) { return NO; } +- (void) panelSelectionDidChange:(id)sender { + NSArray *urls = [panel URLs]; + if ([urls count]) { + if ([self isRecommended:[urls firstObject]]) { + [bad removeFromSuperview]; + [icon removeFromSuperview]; + [accessory addSubview:good]; + } else { + [good removeFromSuperview]; + [accessory addSubview:bad]; + [accessory addSubview:icon]; + } + } else { + [good removeFromSuperview]; + [bad removeFromSuperview]; + [icon removeFromSuperview]; + } +} + +- (void) menuDidClose { + onlyRecommended = [[[selector selectedItem] title] isEqualToString:recom]; + [self refreshPanelTable]; +} + +- (BOOL) refreshDataInViews: (NSArray*)subviews { + for (id view in subviews) { + NSString *cls = [view className]; + if ([cls isEqualToString:@"FI_TBrowserTableView"]) { + [view reloadData]; + } else if ([cls isEqualToString:@"FI_TListView"] || [cls isEqualToString:@"FI_TIconView"]) { + [view reloadData]; + return YES; + } else { + NSArray *next = [view subviews]; + if ([next count] && [self refreshDataInViews:next]) { + return YES; + } + } + } + + return NO; +} + + +- (void) refreshPanelTable { + [self refreshDataInViews:[[panel contentView] subviews]]; + [panel validateVisibleColumns]; +} + - (void) dealloc { if (apps) { [apps release]; + [recom release]; } [super dealloc]; } @@ -352,22 +459,150 @@ void objc_showInFinder(const char *utf8file, const char *utf8path) { void objc_openFile(const char *utf8file, bool openwith) { NSString *file = [[NSString alloc] initWithUTF8String:utf8file]; if (openwith || [[NSWorkspace sharedWorkspace] openFile:file] == NO) { - NSURL *url = [NSURL fileURLWithPath:file]; - NSArray *apps = (NSArray*)LSCopyApplicationURLsForURL(CFURLRef(url), kLSRolesAll); - - ChooseApplicationDelegate *delegate = [[ChooseApplicationDelegate alloc] init:apps]; - NSOpenPanel *openPanel = [NSOpenPanel openPanel]; - - [openPanel setCanChooseDirectories:NO]; - [openPanel setCanChooseFiles:YES]; - [openPanel setAllowsMultipleSelection:NO]; - [openPanel setDelegate:delegate]; - [openPanel setTitle:@"Choose Application"]; - [openPanel setMessage:@"Choose an application to open the document \"blabla.png\"."]; - if ([openPanel runModal] == NSOKButton) { - NSArray *result = [openPanel URLs]; + @try { + NSURL *url = [NSURL fileURLWithPath:file]; + NSString *ext = [url pathExtension]; + NSArray *names =[url pathComponents]; + NSString *name = [names count] ? [names lastObject] : @""; + NSArray *apps = (NSArray*)LSCopyApplicationURLsForURL(CFURLRef(url), kLSRolesAll); + + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + + NSView *accessory = [[NSView alloc] init]; + + [openPanel setAccessoryView:accessory]; + NSRect fullRect = [[accessory superview] frame]; + fullRect.origin = NSMakePoint(0, 0); + fullRect.size.height = st::macAccessoryHeight; + [accessory setFrame:fullRect]; + [accessory setAutoresizesSubviews:YES]; + + NSPopUpButton *selector = [[NSPopUpButton alloc] init]; + [accessory addSubview:selector]; + [selector addItemWithTitle:objc_lang(lng_mac_recommended_apps).s()]; + [selector addItemWithTitle:objc_lang(lng_mac_all_apps).s()]; + [selector sizeToFit]; + + NSTextField *enableLabel = [[NSTextField alloc] init]; + [accessory addSubview:enableLabel]; + [enableLabel setStringValue:objc_lang(lng_mac_enable_filter).s()]; + [enableLabel setFont:[selector font]]; + [enableLabel setBezeled:NO]; + [enableLabel setDrawsBackground:NO]; + [enableLabel setEditable:NO]; + [enableLabel setSelectable:NO]; + [enableLabel sizeToFit]; + + NSRect selectorFrame = [selector frame], enableFrame = [enableLabel frame]; + enableFrame.size.width += st::macEnableFilterAdd; + enableFrame.origin.x = (fullRect.size.width - selectorFrame.size.width - enableFrame.size.width) / 2.; + selectorFrame.origin.x = (fullRect.size.width - selectorFrame.size.width + enableFrame.size.width) / 2.; + enableFrame.origin.y = fullRect.size.height - selectorFrame.size.height - st::macEnableFilterTop + (selectorFrame.size.height - enableFrame.size.height) / 2.; + selectorFrame.origin.y = fullRect.size.height - selectorFrame.size.height - st::macSelectorTop; + [enableLabel setFrame:enableFrame]; + [enableLabel setAutoresizingMask:NSViewMinXMargin|NSViewMaxXMargin]; + [selector setFrame:selectorFrame]; + [selector setAutoresizingMask:NSViewMinXMargin|NSViewMaxXMargin]; + + NSButton *button = [[NSButton alloc] init]; + [accessory addSubview:button]; + [button setButtonType:NSSwitchButton]; + [button setFont:[selector font]]; + [button setTitle:objc_lang(lng_mac_always_open_with).s()]; + [button sizeToFit]; + NSRect alwaysRect = [button frame]; + alwaysRect.origin.x = (fullRect.size.width - alwaysRect.size.width) / 2; + alwaysRect.origin.y = selectorFrame.origin.y - alwaysRect.size.height - st::macAlwaysThisAppTop; + [button setFrame:alwaysRect]; + [button setAutoresizingMask:NSViewMinXMargin|NSViewMaxXMargin]; + + NSTextField *goodLabel = [[NSTextField alloc] init]; + [goodLabel setStringValue:[objc_lang(lng_mac_this_app_can_open).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name]]; + [goodLabel setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; + [goodLabel setBezeled:NO]; + [goodLabel setDrawsBackground:NO]; + [goodLabel setEditable:NO]; + [goodLabel setSelectable:NO]; + [goodLabel sizeToFit]; + NSRect goodFrame = [goodLabel frame]; + goodFrame.origin.x = (fullRect.size.width - goodFrame.size.width) / 2.; + goodFrame.origin.y = alwaysRect.origin.y - goodFrame.size.height - st::macAppHintTop; + [goodLabel setFrame:goodFrame]; + + NSTextField *badLabel = [[NSTextField alloc] init]; + [badLabel setStringValue:[objc_lang(lng_mac_not_known_app).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name]]; + [badLabel setFont:[goodLabel font]]; + [badLabel setBezeled:NO]; + [badLabel setDrawsBackground:NO]; + [badLabel setEditable:NO]; + [badLabel setSelectable:NO]; + [badLabel sizeToFit]; + NSImageView *badIcon = [[NSImageView alloc] init]; + NSImage *badImage = [NSImage imageNamed:NSImageNameCaution]; + [badIcon setImage:badImage]; + [badIcon setFrame:NSMakeRect(0, 0, st::macCautionIconSize.width(), st::macCautionIconSize.height())]; + + NSRect badFrame = [badLabel frame], badIconFrame = [badIcon frame]; + badFrame.origin.x = (fullRect.size.width - badFrame.size.width + badIconFrame.size.width) / 2.; + badIconFrame.origin.x = (fullRect.size.width - badFrame.size.width - badIconFrame.size.width) / 2.; + badFrame.origin.y = alwaysRect.origin.y - badFrame.size.height - st::macAppHintTop; + badIconFrame.origin.y = badFrame.origin.y; + [badLabel setFrame:badFrame]; + [badIcon setFrame:badIconFrame]; + + ChooseApplicationDelegate *delegate = [[ChooseApplicationDelegate alloc] init:apps withPanel:openPanel withSelector:selector withGood:goodLabel withBad:badLabel withIcon:badIcon withAccessory:accessory]; + [openPanel setDelegate:delegate]; + + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setResolvesAliases:YES]; + [openPanel setTitle:objc_lang(lng_mac_choose_app).s()]; + [openPanel setMessage:[objc_lang(lng_mac_choose_text).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name]]; + + NSArray *appsPaths = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationDirectory inDomains:NSLocalDomainMask]; + if ([appsPaths count]) [openPanel setDirectoryURL:[appsPaths firstObject]]; + [openPanel beginWithCompletionHandler:^(NSInteger result){ + if (result == NSFileHandlingPanelOKButton) { + if ([[openPanel URLs] count] > 0) { + NSURL *app = [[openPanel URLs] objectAtIndex:0]; + NSString *path = [app path]; + if ([button state] == NSOnState) { + NSArray *UTIs = (NSArray *)UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, + (CFStringRef)ext, + nil); + for (NSString *UTI in UTIs) { + LSSetDefaultRoleHandlerForContentType((CFStringRef)UTI, + kLSRolesEditor, + (CFStringRef)[[NSBundle bundleWithPath:path] bundleIdentifier]); + } + + [UTIs release]; + } + [[NSWorkspace sharedWorkspace] openFile:file withApplication:[app path]]; + } + } + [selector release]; + [button release]; + [enableLabel release]; + [goodLabel release]; + [badLabel release]; + [badIcon release]; + [accessory release]; + [delegate release]; + }]; + } + @catch (NSException *exception) { + [[NSWorkspace sharedWorkspace] openFile:file]; + } + @finally { } - [delegate release]; } [file release]; } + +void objc_finish() { + if (!objcLang.isEmpty()) { + objcLang.clear(); + } +} diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 4bf579be4..1f8229533 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -2639,6 +2639,9 @@ void psShowInFolder(const QString &name) { ShellExecute(0, 0, qsl("explorer").toStdWString().c_str(), (qsl("/select,") + nameEscaped).toStdWString().c_str(), 0, SW_SHOWNORMAL); } +void psFinish() { +} + void psExecUpdater() { QString targs = qsl("-update"); if (cFromAutoStart()) targs += qsl(" -autostart"); diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index 6189c380d..be6b205bb 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -259,3 +259,4 @@ void psExecTelegram(); void psPostprocessFile(const QString &name); void psOpenFile(const QString &name, bool openWith = false); void psShowInFolder(const QString &name); +void psFinish(); diff --git a/Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json b/Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json deleted file mode 100644 index 50ab7bd32..000000000 --- a/Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file From e0a364dd0f8b51e034f4485059904162b41b4bb2 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 20 Jun 2014 11:06:21 +0400 Subject: [PATCH 07/14] fixed online display, fixed reading messages on idle --- Telegram/SourceFiles/app.cpp | 2 ++ Telegram/SourceFiles/dialogswidget.cpp | 1 + Telegram/SourceFiles/gui/flatinput.cpp | 13 +++++++-- Telegram/SourceFiles/gui/flatinput.h | 4 +++ Telegram/SourceFiles/historywidget.cpp | 2 ++ Telegram/SourceFiles/main.cpp | 9 +++++-- Telegram/SourceFiles/mainwidget.cpp | 1 - Telegram/SourceFiles/pspecific_mac.cpp | 30 ++++++++++++--------- Telegram/SourceFiles/pspecific_mac.h | 4 ++- Telegram/SourceFiles/pspecific_wnd.cpp | 22 ++++++++++----- Telegram/SourceFiles/pspecific_wnd.h | 2 ++ Telegram/SourceFiles/window.cpp | 6 +++++ Telegram/Telegram.plist | 2 +- Telegram/Telegram.xcodeproj/project.pbxproj | 10 +++---- 14 files changed, 77 insertions(+), 31 deletions(-) diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index e0e0c0bd7..7f0f2c03c 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -1225,7 +1225,9 @@ namespace App { textlnkDown(TextLinkPtr()); if (completely) { + LOG(("Deleting sound..")); delete newMsgSound; + LOG(("Sound deleted!")); newMsgSound = 0; delete ::sprite; diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index c7f605f8c..f76fa9426 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -736,6 +736,7 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) _filter.show(); _filter.move(st::dlgPaddingHor, st::dlgFilterPadding); _filter.setFocusPolicy(Qt::StrongFocus); + _filter.customUpDown(true); _addContact.hide(); _newGroup.show(); _newGroup.move(width() - _newGroup.width() - st::dlgPaddingHor, 0); diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index 74d734234..f032001f4 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -41,7 +41,7 @@ namespace { FlatInputStyle _flatInputStyle; } -FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _oldtext(v), _kev(0), _phVisible(!v.length()), +FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()), a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), _st(st) { resize(_st.width, _st.height); @@ -67,6 +67,10 @@ FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); } +void FlatInput::customUpDown(bool custom) { + _customUpDown = custom; +} + void FlatInput::onTouchTimer() { _touchRightButton = true; } @@ -231,7 +235,12 @@ void FlatInput::correctValue(QKeyEvent *e, const QString &was) { void FlatInput::keyPressEvent(QKeyEvent *e) { QString was(text()); _kev = e; - QLineEdit::keyPressEvent(e); + if (_customUpDown && (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down)) { + e->ignore(); + } else { + QLineEdit::keyPressEvent(e); + } + if (was == text()) { // call correct manually correctValue(_kev, was); _oldtext = text(); diff --git a/Telegram/SourceFiles/gui/flatinput.h b/Telegram/SourceFiles/gui/flatinput.h index b77d8a44e..ea7012ef2 100644 --- a/Telegram/SourceFiles/gui/flatinput.h +++ b/Telegram/SourceFiles/gui/flatinput.h @@ -47,6 +47,8 @@ public: QSize sizeHint() const; QSize minimumSizeHint() const; + void customUpDown(bool isCustom); + public slots: void onTextChange(const QString &text); @@ -71,6 +73,8 @@ private: QString _ph, _oldtext; QKeyEvent *_kev; + bool _customUpDown; + bool _phVisible; anim::ivalue a_phLeft; anim::fvalue a_phAlpha; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 7e72ab93e..843df4654 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1979,6 +1979,8 @@ void HistoryWidget::onSend() { MTP::send(MTPmessages_SendMessage(histInputPeer, msgText, MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId)); _field.setPlainText(""); + if (!_attachType.isHidden()) _attachType.hideStart(); + if (!_emojiPan.isHidden()) _emojiPan.hideStart(); } _field.setFocus(); } diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index 6c7cc3ebc..f579b141c 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -45,8 +45,13 @@ int main(int argc, char *argv[]) { DEBUG_LOG(("Application Info: ideal thread count: %1, using %2 connections per session").arg(QThread::idealThreadCount()).arg(cConnectionsInSession())); - Application app(argc, argv); - int result = App::quiting() ? 0 : app.exec(); + int result = 0; + { + Application app(argc, argv); + if (!App::quiting()) { + result = app.exec(); + } + } psFinish(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index efc3f94a4..8be1ecf1f 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -272,7 +272,6 @@ MainWidget::MainWidget(Window *window) : QWidget(window), failedObjId(0), _dialo connect(this, SIGNAL(peerPhotoChanged(PeerData *)), this, SIGNAL(dialogsUpdated())); connect(&noUpdatesTimer, SIGNAL(timeout()), this, SLOT(getDifference())); connect(&onlineTimer, SIGNAL(timeout()), this, SLOT(setOnline())); - connect(window->windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(mainStateChanged(Qt::WindowState))); connect(&onlineUpdater, SIGNAL(timeout()), this, SLOT(updateOnlineDisplay())); connect(this, SIGNAL(peerUpdated(PeerData*)), &history, SLOT(peerUpdated(PeerData*))); connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick())); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 072616a1b..60f108282 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -119,25 +119,30 @@ void MacPrivate::notifyReplied(unsigned long long peer, const char *str) { PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), posInited(false), trayIcon(0), trayIconMenu(0), icon256(qsl(":/gui/art/iconround256.png")) { - - //tbCreatedMsgId = RegisterWindowMessage(L"TaskbarButtonCreated"); - icon16 = icon256.scaledToWidth(16, Qt::SmoothTransformation); - icon32 = icon256.scaledToWidth(32, Qt::SmoothTransformation); connect(&psIdleTimer, SIGNAL(timeout()), this, SLOT(psIdleTimeout())); psIdleTimer.setSingleShot(false); connect(¬ifyWaitTimer, SIGNAL(timeout()), this, SLOT(psNotifyFire())); notifyWaitTimer.setSingleShot(true); } +void PsMainWindow::psNotIdle() const { + psIdleTimer.stop(); + if (psIdle) { + psIdle = false; + if (App::main()) App::main()->setOnline(); + if (App::wnd()) App::wnd()->checkHistoryActivation(); + } +} + void PsMainWindow::psIdleTimeout() { int64 idleTime = objc_idleTime(); if (idleTime >= 0) { if (idleTime <= IdleMsecs) { - psIdle = false; - psIdleTimer.stop(); - if (App::main()) App::main()->setOnline(); + psNotIdle(); } - } + } else { // error + psNotIdle(); + } } bool PsMainWindow::psIsOnline(int state) const { @@ -157,16 +162,17 @@ bool PsMainWindow::psIsOnline(int state) const { } return false; } else { - psIdle = false; - psIdleTimer.stop(); + psNotIdle(); } - } + } else { // error + psNotIdle(); + } return true; } bool PsMainWindow::psIsActive(int state) const { if (state < 0) state = this->windowState(); - return isActiveWindow() && isVisible() && !(state & Qt::WindowMinimized); + return isActiveWindow() && isVisible() && !(state & Qt::WindowMinimized) && !psIdle; } void PsMainWindow::psRefreshTaskbarIcon() { diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index 2ff8966c5..ff26e4909 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -151,10 +151,12 @@ public slots: protected: + void psNotIdle() const; + bool posInited; QSystemTrayIcon *trayIcon; QMenu *trayIconMenu; - QImage icon16, icon32, icon256; + QImage icon256; virtual void setupTrayIcon() { } diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 1f8229533..d0127d8a3 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -872,6 +872,15 @@ PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), ps_hWnd(0), p notifyWaitTimer.setSingleShot(true); } +void PsMainWindow::psNotIdle() const { + psIdleTimer.stop(); + if (psIdle) { + psIdle = false; + if (App::main()) App::main()->setOnline(); + if (App::wnd()) App::wnd()->checkHistoryActivation(); + } +} + void PsMainWindow::psIdleTimeout() { LASTINPUTINFO lii; lii.cbSize = sizeof(LASTINPUTINFO); @@ -879,15 +888,15 @@ void PsMainWindow::psIdleTimeout() { if (res) { uint64 ticks = GetTickCount(); if (lii.dwTime >= ticks - IdleMsecs) { - psIdle = false; - psIdleTimer.stop(); - if (App::main()) App::main()->setOnline(); + psNotIdle(); } + } else { // error { + psNotIdle(); } } bool PsMainWindow::psIsActive() const { - return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized); + return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized) && !psIdle; } bool PsMainWindow::psIsOnline(int windowState) const { @@ -909,9 +918,10 @@ bool PsMainWindow::psIsOnline(int windowState) const { } return false; } else { - psIdle = false; - psIdleTimer.stop(); + psNotIdle(); } + } else { // error + psNotIdle(); } return true; } diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index be6b205bb..109316d88 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -136,6 +136,8 @@ public slots: protected: + void psNotIdle() const; + bool posInited; QSystemTrayIcon *trayIcon; QMenu *trayIconMenu; diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 8cf74c8bb..3356d7003 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -444,6 +444,12 @@ QRect Window::iconRect() const { bool Window::eventFilter(QObject *obj, QEvent *evt) { if (obj == App::app() && (evt->type() == QEvent::ApplicationActivate)) { QTimer::singleShot(1, this, SLOT(checkHistoryActivation())); + } else if (obj == this && evt->type() == QEvent::WindowStateChange) { + Qt::WindowState state = (windowState() & Qt::WindowMinimized) ? Qt::WindowMinimized : ((windowState() & Qt::WindowMaximized) ? Qt::WindowMaximized : ((windowState() & Qt::WindowFullScreen) ? Qt::WindowFullScreen : Qt::WindowNoState)); + psStateChanged(state); + if (App::main()) { + App::main()->mainStateChanged(state); + } } return PsMainWindow::eventFilter(obj, evt); } diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index a290a92b6..e6aa25d60 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.5.2 + 0.5.4 CFBundleSignature ???? NOTE diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 93f54a598..aa926d49c 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1458,8 +1458,9 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 0.5.4; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.1; + DYLIB_CURRENT_VERSION = 0.5.4; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; @@ -1576,9 +1577,10 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0.5.4; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.1; + DYLIB_CURRENT_VERSION = 0.5.4; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1693,8 +1695,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.5.2; - DYLIB_CURRENT_VERSION = 0.5.2; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_LINK_WITH_DYNAMIC_LIBRARIES = NO; GCC_OPTIMIZATION_LEVEL = fast; @@ -1714,9 +1714,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.5.2; DEBUG_INFORMATION_FORMAT = dwarf; - DYLIB_CURRENT_VERSION = 0.5.2; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_LINK_WITH_DYNAMIC_LIBRARIES = NO; GCC_OPTIMIZATION_LEVEL = 0; From bfe1ca92b85580d7efc0f282aa37401f583d292b Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 20 Jun 2014 13:49:22 +0400 Subject: [PATCH 08/14] metaemoji xcode project added, added hack to qt to fix window system handle --- Telegram/MetaLang.xcodeproj/project.pbxproj | 16 +++---- Telegram/MetaStyle.xcodeproj/project.pbxproj | 46 +++++++++++++++----- Telegram/SourceFiles/_other/genemoji.cpp | 24 +++++----- Telegram/SourceFiles/_other/genemoji.h | 26 ++++++++--- Telegram/SourceFiles/_other/memain.cpp | 21 ++++++++- Telegram/SourceFiles/gui/emoji_config.cpp | 10 +++-- 6 files changed, 101 insertions(+), 42 deletions(-) diff --git a/Telegram/MetaLang.xcodeproj/project.pbxproj b/Telegram/MetaLang.xcodeproj/project.pbxproj index 9fc24cce8..d71d0a7cf 100644 --- a/Telegram/MetaLang.xcodeproj/project.pbxproj +++ b/Telegram/MetaLang.xcodeproj/project.pbxproj @@ -599,6 +599,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)"; COPY_PHASE_STRIP = YES; DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_CURRENT_VERSION = 1.0.0; @@ -633,7 +634,7 @@ "/usr/local/Qt-5.3.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; - OBJROOT = ../Mac/DebugIntermediateLang/; + OBJROOT = ./../Mac/ReleaseIntermediateLang; OTHER_CFLAGS = ( "-pipe", "-g", @@ -669,7 +670,7 @@ PRODUCT_NAME = MetaLang; QT_LIBRARY_SUFFIX = ""; SDKROOT = macosx; - SYMROOT = ../Mac/ReleaseLang; + SYMROOT = ./../Mac; }; name = Release; }; @@ -683,6 +684,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1.0; @@ -719,7 +721,7 @@ "/usr/local/Qt-5.3.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; - OBJROOT = ../Mac/DebugIntermediateLang/; + OBJROOT = ./../Mac/DebugIntermediateLang; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-pipe", @@ -756,7 +758,7 @@ PRODUCT_NAME = MetaLang; QT_LIBRARY_SUFFIX = _debug; SDKROOT = macosx; - SYMROOT = ../Mac/DebugLang; + SYMROOT = ./../Mac; }; name = Debug; }; @@ -764,7 +766,6 @@ isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)"; COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ( @@ -779,11 +780,9 @@ "/usr/local/Qt-5.3.0/mkspecs/macx-clang", ); INSTALL_DIR = ../Mac/ReleaseLang/; - OBJROOT = ../Mac/ReleaseIntermediateLang; PRODUCT_NAME = MetaLang; QT_LIBRARY_SUFFIX = ""; SDKROOT = macosx; - SYMROOT = ./../Mac; }; name = Release; }; @@ -791,7 +790,6 @@ isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -808,11 +806,9 @@ "/usr/local/Qt-5.3.0/mkspecs/macx-clang", ); INSTALL_DIR = ../Mac/DebugLang/; - OBJROOT = ../Mac/DebugIntermediateLang; PRODUCT_NAME = MetaLang; QT_LIBRARY_SUFFIX = _debug; SDKROOT = macosx; - SYMROOT = ./../Mac; }; name = Debug; }; diff --git a/Telegram/MetaStyle.xcodeproj/project.pbxproj b/Telegram/MetaStyle.xcodeproj/project.pbxproj index 71438b9d9..83f857ccb 100644 --- a/Telegram/MetaStyle.xcodeproj/project.pbxproj +++ b/Telegram/MetaStyle.xcodeproj/project.pbxproj @@ -519,6 +519,7 @@ 6DB9C3763D02B1415CD9D565 /* Project object */ = { isa = PBXProject; attributes = { + LastUpgradeCheck = 0510; }; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaStyle" */; compatibilityVersion = "Xcode 3.2"; @@ -591,14 +592,26 @@ 339EE1B2CC4FC24589A0EA95 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = x86_64; CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; COPY_PHASE_STRIP = YES; DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_CURRENT_VERSION = 1.0.0; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, @@ -621,7 +634,7 @@ "/usr/local/Qt-5.3.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; - OBJROOT = ../Mac/DebugIntermediateStyle/; + OBJROOT = ./../Mac/ReleaseIntermediateStyle; OTHER_CFLAGS = ( "-pipe", "-g", @@ -657,15 +670,21 @@ PRODUCT_NAME = MetaStyle; QT_LIBRARY_SUFFIX = ""; SDKROOT = macosx; - SYMROOT = ../Mac/ReleaseStyle; + SYMROOT = ./../Mac; }; name = Release; }; 3AA6C32AC930069E80220CF1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = x86_64; CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1.0; @@ -674,6 +693,12 @@ GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, @@ -696,7 +721,8 @@ "/usr/local/Qt-5.3.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; - OBJROOT = ../Mac/DebugIntermediateStyle/; + OBJROOT = ./../Mac/DebugIntermediateStyle; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-pipe", "-g", @@ -732,14 +758,14 @@ PRODUCT_NAME = MetaStyle; QT_LIBRARY_SUFFIX = _debug; SDKROOT = macosx; - SYMROOT = ../Mac/DebugStyle; + SYMROOT = ./../Mac; }; name = Debug; }; 6666AA5E688052234F6758D8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ( @@ -754,18 +780,16 @@ "/usr/local/Qt-5.3.0/mkspecs/macx-clang", ); INSTALL_DIR = ./../Mac/ReleaseStyle/; - OBJROOT = ./../Mac/ReleaseIntermediateStyle; PRODUCT_NAME = MetaStyle; QT_LIBRARY_SUFFIX = ""; SDKROOT = macosx; - SYMROOT = ./../Mac; }; name = Release; }; 77418F46922677BB04ED38DD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -782,11 +806,9 @@ "/usr/local/Qt-5.3.0/mkspecs/macx-clang", ); INSTALL_DIR = ./../Mac/DebugStyle/; - OBJROOT = ./../Mac/DebugIntermediateStyle; PRODUCT_NAME = MetaStyle; QT_LIBRARY_SUFFIX = _debug; SDKROOT = macosx; - SYMROOT = ./../Mac; }; name = Debug; }; diff --git a/Telegram/SourceFiles/_other/genemoji.cpp b/Telegram/SourceFiles/_other/genemoji.cpp index 817e23a24..1ff8d796a 100644 --- a/Telegram/SourceFiles/_other/genemoji.cpp +++ b/Telegram/SourceFiles/_other/genemoji.cpp @@ -17,8 +17,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com */ #include "genemoji.h" +#ifdef Q_OS_WIN #include Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) +#endif typedef unsigned int uint32; @@ -938,7 +940,7 @@ void writeEmojiCategory(QTextStream &tcpp, uint32 *emojiCategory, uint32 size, c tcpp << "\t\tstatic QVector v" << name << ";\n"; tcpp << "\t\tif (v" << name << ".isEmpty()) {\n"; tcpp << "\t\t\tv" << name << ".resize(" << size << ");\n"; - for (int i = 0; i < size; ++i) { + for (uint32 i = 0; i < size; ++i) { int index = 0; for (EmojisData::const_iterator j = emojisData.cbegin(), e = emojisData.cend(); j != e; ++j) { if (j->code == emojiCategory[i]) { @@ -947,7 +949,7 @@ void writeEmojiCategory(QTextStream &tcpp, uint32 *emojiCategory, uint32 size, c ++index; } if (index == emojisData.size()) { - throw exception(QString("Could not find emoji from category '%1' with index %2, code %3").arg(name).arg(i).arg(emojiCategory[i]).toUtf8().constData()); + throw Exception(QString("Could not find emoji from category '%1' with index %2, code %3").arg(name).arg(i).arg(emojiCategory[i]).toUtf8().constData()); } tcpp << "\t\t\tv" << name << "[" << i << "] = &emojis[" << index << "];\n"; } @@ -956,7 +958,7 @@ void writeEmojiCategory(QTextStream &tcpp, uint32 *emojiCategory, uint32 size, c tcpp << "\t} break;\n\n"; } -bool genEmoji(QString emoji_in, const QString &emoji_out) { +bool genEmoji(QString emoji_in, const QString &emoji_out, const QString &emoji_png) { QDir d(emoji_in); if (!d.exists()) { cout << "Could not open emoji input dir '" << emoji_in.toUtf8().constData() << "'!\n"; @@ -1012,7 +1014,7 @@ bool genEmoji(QString emoji_in, const QString &emoji_out) { if (data.code < min1) min1 = data.code; if (data.code > max1) max1 = data.code; } - } else if (high == 35 || high >= 48 && high < 58) { // digits + } else if (high == 35 || (high >= 48 && high < 58)) { // digits } else { if (data.code < min2) min2 = data.code; if (data.code > max2) max2 = data.code; @@ -1055,7 +1057,8 @@ bool genEmoji(QString emoji_in, const QString &emoji_out) { cout << "Could not read image '" << name.toUtf8().constData() << "'!\n"; } } - QString postfix = variantPostfix[variantIndex], emojif = "./SourceFiles/art/emoji" + postfix + ".png"; + QString postfix = variantPostfix[variantIndex], emojif = emoji_png + postfix + ".png"; + const char *tmp = emojif.toUtf8().constData(); QByteArray emojib; { QBuffer ebuf(&emojib); @@ -1126,7 +1129,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ tcpp << "void initEmoji() {\n"; tcpp << "\tEmojiData *toFill = emojis = (EmojiData*)emojisData;\n\n"; - tcpp << "\tswitch (cScale()) {\n\n"; + tcpp << "\tDBIScale emojiForScale = cRetina() ? dbisTwo : cScale();\n\n"; + tcpp << "\tswitch (emojiForScale) {\n\n"; for (int variantIndex = 0; variantIndex < variantsCount; ++variantIndex) { int imSize = imSizes[variantIndex]; tcpp << "\tcase " << variantNames[variantIndex] << ":\n"; @@ -1165,7 +1169,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ tcpp << "\t\treturn 0;\n"; tcpp << "\t}\n\n"; - tcpp << "\tif (highCode == 35 || highCode >= 48 && highCode < 58) {\n"; // digits + tcpp << "\tif (highCode == 35 || (highCode >= 48 && highCode < 58)) {\n"; // digits tcpp << "\t\tif ((code & 0xFFFF) != 0x20E3) return 0;\n\n"; tcpp << "\t\tswitch (code) {\n"; for (; i != e; ++i) { @@ -1194,7 +1198,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ tcpp << "\tswitch (ch->unicode()) {\n"; QString tab("\t"); - for (int i = 0; i < replacesCount; ++i) { + for (uint32 i = 0; i < replacesCount; ++i) { QString key = QString::fromUtf8(replaces[i].replace); replaceMap[key] = replaces[i].code; } @@ -1268,8 +1272,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ } if (write_cpp) { cout << "Emoji updated, writing " << currentRow << " rows, full count " << emojisData.size() << " emojis.\n"; - if (!cpp.open(QIODevice::WriteOnly)) throw exception("Could not open style_auto.cpp for writing!"); - if (cpp.write(cppText) != cppText.size()) throw exception("Could not open style_auto.cpp for writing!"); + if (!cpp.open(QIODevice::WriteOnly)) throw Exception("Could not open style_auto.cpp for writing!"); + if (cpp.write(cppText) != cppText.size()) throw Exception("Could not open style_auto.cpp for writing!"); }/**/ } catch (exception &e) { cout << e.what() << "\n"; diff --git a/Telegram/SourceFiles/_other/genemoji.h b/Telegram/SourceFiles/_other/genemoji.h index 029c62e41..d29ffeeef 100644 --- a/Telegram/SourceFiles/_other/genemoji.h +++ b/Telegram/SourceFiles/_other/genemoji.h @@ -37,19 +37,35 @@ using std::cout; using std::cerr; using std::exception; -bool genEmoji(QString emoji_in, const QString &emoji_out); +class Exception : public exception { +public: + + Exception(const QString &msg) : _msg(msg) { + } + + virtual const char *what() const throw() { + return _msg.toUtf8().constData(); + } + virtual ~Exception() throw() { + } + +private: + QString _msg; +}; + +bool genEmoji(QString emoji_in, const QString &emoji_out, const QString &emoji_png); class GenEmoji : public QObject { Q_OBJECT public: - GenEmoji(const QString &emoji_in, const QString &emoji_out) : QObject(0), - _emoji_in(emoji_in), _emoji_out(emoji_out) { + GenEmoji(const QString &emoji_in, const QString &emoji_out, const QString &emoji_png) : QObject(0), + _emoji_in(emoji_in), _emoji_out(emoji_out), _emoji_png(emoji_png) { } public slots : void run() { - if (genEmoji(_emoji_in, _emoji_out)) { + if (genEmoji(_emoji_in, _emoji_out, _emoji_png)) { emit finished(); } } @@ -59,5 +75,5 @@ signals: private: - QString _emoji_in, _emoji_out; + QString _emoji_in, _emoji_out, _emoji_png; }; diff --git a/Telegram/SourceFiles/_other/memain.cpp b/Telegram/SourceFiles/_other/memain.cpp index 0db58a523..c5f5cf335 100644 --- a/Telegram/SourceFiles/_other/memain.cpp +++ b/Telegram/SourceFiles/_other/memain.cpp @@ -18,15 +18,32 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "memain.h" int main(int argc, char *argv[]) { - QString emoji_in("."), emoji_out("emoji_config.cpp"); + QString emoji_in("."), emoji_out("emoji_config.cpp"), emoji_png("./SourceFiles/art/emoji"); for (int i = 0; i < argc; ++i) { if (string("-emoji_in") == argv[i]) { if (++i < argc) emoji_in = argv[i]; } else if (string("-emoji_out") == argv[i]) { if (++i < argc) emoji_out = argv[i]; + } else if (string("-emoji_png") == argv[i]) { + if (++i < argc) emoji_png = argv[i]; } } - QObject *taskImpl = new GenEmoji(emoji_in, emoji_out); +#ifdef Q_OS_MAC + if (QDir(QString()).absolutePath() == "/") { + QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString(); + if (!first.isEmpty()) { + QFileInfo info(first); + if (info.exists()) { + QDir result(info.absolutePath() + "/../../.."); + QString basePath = result.absolutePath() + '/'; + emoji_in = basePath + emoji_in; + emoji_out = basePath + emoji_out; + emoji_png = basePath + emoji_png; + } + } + } +#endif + QObject *taskImpl = new GenEmoji(emoji_in, emoji_out, emoji_png); QGuiApplication a(argc, argv); diff --git a/Telegram/SourceFiles/gui/emoji_config.cpp b/Telegram/SourceFiles/gui/emoji_config.cpp index 697a73c0b..6881d8144 100644 --- a/Telegram/SourceFiles/gui/emoji_config.cpp +++ b/Telegram/SourceFiles/gui/emoji_config.cpp @@ -1,5 +1,9 @@ /* -This file is part of Telegram Desktop, +Created from emoji config by '/MetaEmoji' project + +WARNING! All changes made in this file will be lost! + +This file is part of Telegram Desktop, an unofficial desktop messaging app, see https://telegram.org Telegram Desktop is free software: you can redistribute it and/or modify @@ -26,8 +30,8 @@ namespace { void initEmoji() { EmojiData *toFill = emojis = (EmojiData*)emojisData; - DBIScale emojiForScale = cRetina() ? dbisTwo : cScale(); - + DBIScale emojiForScale = cRetina() ? dbisTwo : cScale(); + switch (emojiForScale) { case dbisOne: From f90db67c30c1baee51941d784227bded941e60a8 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 20 Jun 2014 13:49:39 +0400 Subject: [PATCH 09/14] metaemoji xcode project added, added hack to qt to fix window system handle --- Telegram/Emoji.plist | 20 + Telegram/MetaEmoji.pro | 31 + Telegram/MetaEmoji.xcodeproj/project.pbxproj | 801 ++++++++ Telegram/MetaEmoji.xcodeproj/qt_makeqmake.mak | 345 ++++ .../MetaEmoji.xcodeproj/qt_preprocess.mak | 70 + .../plugins/platforms/cocoa/qcocoawindow.mm | 1778 +++++++++++++++++ Telegram/metaemoji_plugin_import.cpp | 13 + 7 files changed, 3058 insertions(+) create mode 100644 Telegram/Emoji.plist create mode 100644 Telegram/MetaEmoji.pro create mode 100644 Telegram/MetaEmoji.xcodeproj/project.pbxproj create mode 100644 Telegram/MetaEmoji.xcodeproj/qt_makeqmake.mak create mode 100644 Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak create mode 100644 Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm create mode 100644 Telegram/metaemoji_plugin_import.cpp diff --git a/Telegram/Emoji.plist b/Telegram/Emoji.plist new file mode 100644 index 000000000..622dd607d --- /dev/null +++ b/Telegram/Emoji.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + MetaEmoji + CFBundleGetInfoString + MetaEmoji compiler + CFBundleIdentifier + com.tdesktop.${PRODUCT_NAME:rfc1034identifier} + CFBundlePackageType + APPL + CFBundleSignature + ???? + NOTE + + NSPrincipalClass + NSApplication + + diff --git a/Telegram/MetaEmoji.pro b/Telegram/MetaEmoji.pro new file mode 100644 index 000000000..77927fb41 --- /dev/null +++ b/Telegram/MetaEmoji.pro @@ -0,0 +1,31 @@ +QT += core + +CONFIG(debug, debug|release) { + DEFINES += _DEBUG + OBJECTS_DIR = ./../Mac/DebugIntermediateEmoji + MOC_DIR = ./GeneratedFiles/Debug + DESTDIR = ./../Mac/DebugEmoji +} +CONFIG(release, debug|release) { + OBJECTS_DIR = ./../Mac/ReleaseIntermediateEmoji + MOC_DIR = ./GeneratedFiles/Release + DESTDIR = ./../Mac/ReleaseEmoji +} + +macx { + QMAKE_INFO_PLIST = ./SourceFiles/_other/Emoji.plist + QMAKE_LFLAGS += -framework Cocoa +} + +SOURCES += \ + ./SourceFiles/_other/memain.cpp \ + ./SourceFiles/_other/genemoji.cpp \ + +HEADERS += \ + ./SourceFiles/_other/memain.h \ + ./SourceFiles/_other/genemoji.h \ + +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\ + ./../../Libraries/QtStatic/qtbase/include\ + diff --git a/Telegram/MetaEmoji.xcodeproj/project.pbxproj b/Telegram/MetaEmoji.xcodeproj/project.pbxproj new file mode 100644 index 000000000..fb5bf86ab --- /dev/null +++ b/Telegram/MetaEmoji.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + D93715D85BD26B270C3CC80B /* Preprocess */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaEmoji" */; + buildPhases = ( + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */, + ); + dependencies = ( + ); + name = Preprocess; + productName = "Qt Preprocess"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; + 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; + 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; }; + 4B166C0FE4A3C31F5E3D05CE /* metaemoji_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A9341A7B02F69BC5802268AA /* metaemoji_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; }; + 59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F0681BC551FC8A2B132FC646 /* qjp2 */; }; + 668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9742F24EE18EA44D52824F1E /* CoreServices.framework */; }; + 7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 31120EDB269DFF13E1D49847 /* qicns */; }; + 7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DCEFD9167C239650120B0145 /* qtga */; }; + 83425F7776C9E52C29BE0E6F /* memain.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 3AC2626B26B65AA88F06BFB5 /* memain.cpp */; settings = {ATTRIBUTES = (); }; }; + 8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D4B32C2222F82AC56BADEB21 /* OpenGL.framework */; }; + 8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = A1A67BEAA744704B29168D39 /* IOKit.framework */; }; + 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D6193B79CECC9DD0142D1200 /* qtharfbuzzng */; }; + 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 04391BE7A8B9D811E255100A /* Qt5Gui */; }; + A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8CF51323544B886B8F4A2232 /* qwbmp */; }; + A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D3D1BE0BEA3AEE0551AD39AC /* qdds */; }; + B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 5A80A1907B6CFFB524C1E57D /* Qt5Core */; }; + BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */; }; + C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F2453BA07315EB9F34F1CD57 /* qtiff */; }; + C4F1177BDAACCF1E50ACCED9 /* moc_genemoji.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */; settings = {ATTRIBUTES = (); }; }; + C5357D951917482510CE3E54 /* genemoji.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */; settings = {ATTRIBUTES = (); }; }; + D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D53D8E6A188E05078A114294 /* qcocoa */; }; + D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */; }; + E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */; }; + F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = FCC237CA5AD60B9BA4447615 /* Foundation.framework */; }; + F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = ADC6308023253CEA51F86E21 /* qwebp */; }; + F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */; }; + F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9DFF62A901D70814B8A323D4 /* Carbon.framework */; }; + FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 83D37373949868693FB7816D /* qmng */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 0708466E1954218200B5AE3A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D93715D85BD26B270C3CC80B; + remoteInfo = "Qt Preprocess"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.3.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genemoji.cpp; path = SourceFiles/_other/genemoji.cpp; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3AC2626B26B65AA88F06BFB5 /* memain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = memain.cpp; path = SourceFiles/_other/memain.cpp; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 58308B26DE991A86E8589883 /* genemoji.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genemoji.h; path = SourceFiles/_other/genemoji.h; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genemoji.cpp; path = GeneratedFiles/Debug/moc_genemoji.cpp; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9341A7B02F69BC5802268AA /* metaemoji_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = metaemoji_plugin_import.cpp; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C3345709A0BD182590087379 /* MetaEmoji.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaEmoji.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + E981470FA003A8DCE3C52E59 /* memain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memain.h; path = SourceFiles/_other/memain.h; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F13124A218B58585B027D96A /* MetaEmoji.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaEmoji.pro; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D1C883685E82D5676953459A /* Link Binary With Libraries */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */, + 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */, + 668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */, + F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */, + F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */, + 8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */, + E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */, + D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */, + F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */, + 8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */, + 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */, + D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */, + BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */, + A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */, + 7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */, + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */, + 59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */, + FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */, + 7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */, + C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */, + A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */, + F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, + 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, + 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, + ); + name = "Link Binary With Libraries"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 25B08E2869634E9BCBA333A2 /* Generated Sources */ = { + isa = PBXGroup; + children = ( + D0B536A85E53302E4F66CE23 /* GeneratedFiles */, + ); + name = "Generated Sources"; + sourceTree = ""; + }; + 2EB56BE3C2D93CDAB0C52E67 /* Sources */ = { + isa = PBXGroup; + children = ( + 73F2E45FDEB381A085D37A49 /* SourceFiles */, + A9341A7B02F69BC5802268AA /* metaemoji_plugin_import.cpp */, + ); + name = Sources; + sourceTree = ""; + }; + 31562E815E3DF5B1A777D3EF /* _other */ = { + isa = PBXGroup; + children = ( + 3AC2626B26B65AA88F06BFB5 /* memain.cpp */, + 1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */, + E981470FA003A8DCE3C52E59 /* memain.h */, + 58308B26DE991A86E8589883 /* genemoji.h */, + ); + name = _other; + sourceTree = ""; + }; + 73F2E45FDEB381A085D37A49 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 31562E815E3DF5B1A777D3EF /* _other */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 74B182DB50CB5611B5C1C297 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + F13124A218B58585B027D96A /* MetaEmoji.pro */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */, + AB745978DF0F41D1801ABDA6 /* .qmake.stash */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 801973D3334D0FCA849CF485 /* Debug */ = { + isa = PBXGroup; + children = ( + 93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */, + ); + name = Debug; + sourceTree = ""; + }; + AF39DD055C3EF8226FBE929D /* Frameworks */ = { + isa = PBXGroup; + children = ( + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, + DFD7912080BC557230093752 /* ApplicationServices.framework */, + 9742F24EE18EA44D52824F1E /* CoreServices.framework */, + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */, + FCC237CA5AD60B9BA4447615 /* Foundation.framework */, + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */, + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */, + D53D8E6A188E05078A114294 /* qcocoa */, + 9DFF62A901D70814B8A323D4 /* Carbon.framework */, + A1A67BEAA744704B29168D39 /* IOKit.framework */, + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */, + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */, + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */, + D3D1BE0BEA3AEE0551AD39AC /* qdds */, + 31120EDB269DFF13E1D49847 /* qicns */, + 8F500B5166907B6D9A7C3E3D /* qico */, + F0681BC551FC8A2B132FC646 /* qjp2 */, + 83D37373949868693FB7816D /* qmng */, + DCEFD9167C239650120B0145 /* qtga */, + F2453BA07315EB9F34F1CD57 /* qtiff */, + 8CF51323544B886B8F4A2232 /* qwbmp */, + ADC6308023253CEA51F86E21 /* qwebp */, + 04391BE7A8B9D811E255100A /* Qt5Gui */, + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */, + 5A80A1907B6CFFB524C1E57D /* Qt5Core */, + ); + name = Frameworks; + sourceTree = ""; + }; + D0B536A85E53302E4F66CE23 /* GeneratedFiles */ = { + isa = PBXGroup; + children = ( + 801973D3334D0FCA849CF485 /* Debug */, + ); + name = GeneratedFiles; + sourceTree = ""; + }; + E8C543AB96796ECAA2E65C57 /* MetaEmoji */ = { + isa = PBXGroup; + children = ( + 2EB56BE3C2D93CDAB0C52E67 /* Sources */, + 25B08E2869634E9BCBA333A2 /* Generated Sources */, + 74B182DB50CB5611B5C1C297 /* Supporting Files */, + AF39DD055C3EF8226FBE929D /* Frameworks */, + FE0A091FDBFB3E9C31B7A1BD /* Products */, + ); + name = MetaEmoji; + sourceTree = ""; + }; + FE0A091FDBFB3E9C31B7A1BD /* Products */ = { + isa = PBXGroup; + children = ( + C3345709A0BD182590087379 /* MetaEmoji.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E4122523B1AB28431125160A /* MetaEmoji */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaEmoji" */; + buildPhases = ( + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */, + D1C883685E82D5676953459A /* Link Binary With Libraries */, + ); + buildRules = ( + ); + dependencies = ( + 8F9AEC020DB94B2A3918B1FE /* PBXTargetDependency */, + ); + name = MetaEmoji; + productInstallPath = ../Mac/DebugEmoji/; + productName = MetaEmoji; + productReference = C3345709A0BD182590087379 /* MetaEmoji.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6DB9C3763D02B1415CD9D565 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; + buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaEmoji" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = E8C543AB96796ECAA2E65C57 /* MetaEmoji */; + productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E4122523B1AB28431125160A /* MetaEmoji */, + D93715D85BD26B270C3CC80B /* Preprocess */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "Qt Preprocessors"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "make -C . -f MetaEmoji.xcodeproj/qt_preprocess.mak"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 83425F7776C9E52C29BE0E6F /* memain.cpp in Compile Sources */, + C5357D951917482510CE3E54 /* genemoji.cpp in Compile Sources */, + 4B166C0FE4A3C31F5E3D05CE /* metaemoji_plugin_import.cpp in Compile Sources */, + C4F1177BDAACCF1E50ACCED9 /* moc_genemoji.cpp in Compile Sources */, + ); + name = "Compile Sources"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 8F9AEC020DB94B2A3918B1FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D93715D85BD26B270C3CC80B /* Preprocess */; + targetProxy = 0708466E1954218200B5AE3A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 339EE1B2CC4FC24589A0EA95 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Emoji$(EFFECTIVE_PLATFORM_NAME)"; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1.0; + DYLIB_CURRENT_VERSION = 1.0.0; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, + ../../Libraries/QtStatic/qtbase/include, + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + GeneratedFiles/Debug, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Emoji.plist; + INSTALL_DIR = ../Mac/ReleaseEmoji/; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = ./../Mac/ReleaseIntermediateEmoji/; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_LDFLAGS = ( + "-headerpad_max_install_names", + "-stdlib=libc++", + "-L/usr/local/Qt-5.3.0/lib", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + ); + PRODUCT_NAME = MetaEmoji; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Release; + }; + 3AA6C32AC930069E80220CF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Emoji$(EFFECTIVE_PLATFORM_NAME)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_COMPATIBILITY_VERSION = 1.0; + DYLIB_CURRENT_VERSION = 1.0.0; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, + ../../Libraries/QtStatic/qtbase/include, + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + GeneratedFiles/Debug, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Emoji.plist; + INSTALL_DIR = ../Mac/DebugEmoji/; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = ./../Mac/DebugIntermediateEmoji/; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_LDFLAGS = ( + "-headerpad_max_install_names", + "-stdlib=libc++", + "-L/usr/local/Qt-5.3.0/lib", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + ); + PRODUCT_NAME = MetaEmoji; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Debug; + }; + 6666AA5E688052234F6758D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + PRODUCT_NAME = MetaEmoji; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + }; + name = Release; + }; + 77418F46922677BB04ED38DD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = MetaEmoji; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaEmoji" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 77418F46922677BB04ED38DD /* Debug */, + 6666AA5E688052234F6758D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaEmoji" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3AA6C32AC930069E80220CF1 /* Debug */, + 339EE1B2CC4FC24589A0EA95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */; +} diff --git a/Telegram/MetaEmoji.xcodeproj/qt_makeqmake.mak b/Telegram/MetaEmoji.xcodeproj/qt_makeqmake.mak new file mode 100644 index 000000000..d9877c992 --- /dev/null +++ b/Telegram/MetaEmoji.xcodeproj/qt_makeqmake.mak @@ -0,0 +1,345 @@ +############################################################################# +# Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji +# Generated by qmake (3.0) (Qt 5.3.0) +# Project: MetaEmoji.pro +# Template: app +# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro +############################################################################# + +MAKEFILE = project.pbxproj + +QMAKE = /usr/local/Qt-5.3.0/bin/qmake +MetaEmoji.xcodeproj/project.pbxproj: MetaEmoji.pro /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf /usr/local/Qt-5.3.0/mkspecs/features/spec_pre.prf \ + /usr/local/Qt-5.3.0/mkspecs/qdevice.pri \ + /usr/local/Qt-5.3.0/mkspecs/features/device_config.prf \ + /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf \ + /usr/local/Qt-5.3.0/mkspecs/common/unix.conf \ + /usr/local/Qt-5.3.0/mkspecs/common/mac.conf \ + /usr/local/Qt-5.3.0/mkspecs/common/macx.conf \ + /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf \ + /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf \ + /usr/local/Qt-5.3.0/mkspecs/common/clang.conf \ + /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf \ + /usr/local/Qt-5.3.0/mkspecs/qconfig.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri \ + /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri \ + /usr/local/Qt-5.3.0/mkspecs/features/qt_functions.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/qt_config.prf \ + /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf \ + /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf \ + /usr/local/Qt-5.3.0/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/local/Qt-5.3.0/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/default_pre.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/resolve_config.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/default_post.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/c++11.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/warn_on.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/qt.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/resources.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/moc.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/unix/opengl.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/unix/thread.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/mac/rez.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/testcase_targets.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/exceptions.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/yacc.prf \ + /usr/local/Qt-5.3.0/mkspecs/features/lex.prf \ + MetaEmoji.pro \ + /usr/local/Qt-5.3.0/lib/libQt5Gui_debug.prl \ + /usr/local/Qt-5.3.0/lib/libQt5Core_debug.prl \ + /usr/local/Qt-5.3.0/lib/libqtharfbuzzng_debug.prl \ + /usr/local/Qt-5.3.0/plugins/platforms/libqcocoa_debug.prl \ + /usr/local/Qt-5.3.0/lib/libQt5PrintSupport_debug.prl \ + /usr/local/Qt-5.3.0/lib/libQt5Widgets_debug.prl \ + /usr/local/Qt-5.3.0/lib/libQt5PlatformSupport_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqdds_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqicns_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqico_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqjp2_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqmng_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqtga_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqtiff_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp_debug.prl \ + /usr/local/Qt-5.3.0/plugins/imageformats/libqwebp_debug.prl + $(QMAKE) -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro +/usr/local/Qt-5.3.0/mkspecs/features/spec_pre.prf: +/usr/local/Qt-5.3.0/mkspecs/qdevice.pri: +/usr/local/Qt-5.3.0/mkspecs/features/device_config.prf: +/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf: +/usr/local/Qt-5.3.0/mkspecs/common/unix.conf: +/usr/local/Qt-5.3.0/mkspecs/common/mac.conf: +/usr/local/Qt-5.3.0/mkspecs/common/macx.conf: +/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf: +/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf: +/usr/local/Qt-5.3.0/mkspecs/common/clang.conf: +/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf: +/usr/local/Qt-5.3.0/mkspecs/qconfig.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri: +/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri: +/usr/local/Qt-5.3.0/mkspecs/features/qt_functions.prf: +/usr/local/Qt-5.3.0/mkspecs/features/qt_config.prf: +/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf: +/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf: +/usr/local/Qt-5.3.0/mkspecs/features/spec_post.prf: +.qmake.stash: +/usr/local/Qt-5.3.0/mkspecs/features/exclusive_builds.prf: +/usr/local/Qt-5.3.0/mkspecs/features/default_pre.prf: +/usr/local/Qt-5.3.0/mkspecs/features/mac/default_pre.prf: +/usr/local/Qt-5.3.0/mkspecs/features/resolve_config.prf: +/usr/local/Qt-5.3.0/mkspecs/features/default_post.prf: +/usr/local/Qt-5.3.0/mkspecs/features/mac/sdk.prf: +/usr/local/Qt-5.3.0/mkspecs/features/mac/default_post.prf: +/usr/local/Qt-5.3.0/mkspecs/features/c++11.prf: +/usr/local/Qt-5.3.0/mkspecs/features/mac/objective_c.prf: +/usr/local/Qt-5.3.0/mkspecs/features/warn_on.prf: +/usr/local/Qt-5.3.0/mkspecs/features/qt.prf: +/usr/local/Qt-5.3.0/mkspecs/features/resources.prf: +/usr/local/Qt-5.3.0/mkspecs/features/moc.prf: +/usr/local/Qt-5.3.0/mkspecs/features/unix/opengl.prf: +/usr/local/Qt-5.3.0/mkspecs/features/unix/thread.prf: +/usr/local/Qt-5.3.0/mkspecs/features/mac/rez.prf: +/usr/local/Qt-5.3.0/mkspecs/features/testcase_targets.prf: +/usr/local/Qt-5.3.0/mkspecs/features/exceptions.prf: +/usr/local/Qt-5.3.0/mkspecs/features/yacc.prf: +/usr/local/Qt-5.3.0/mkspecs/features/lex.prf: +MetaEmoji.pro: +/usr/local/Qt-5.3.0/lib/libQt5Gui_debug.prl: +/usr/local/Qt-5.3.0/lib/libQt5Core_debug.prl: +/usr/local/Qt-5.3.0/lib/libqtharfbuzzng_debug.prl: +/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa_debug.prl: +/usr/local/Qt-5.3.0/lib/libQt5PrintSupport_debug.prl: +/usr/local/Qt-5.3.0/lib/libQt5Widgets_debug.prl: +/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqdds_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqicns_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqico_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqmng_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqtga_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp_debug.prl: +/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp_debug.prl: +qmake: FORCE + @$(QMAKE) -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro + +qmake_all: FORCE + diff --git a/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak b/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak new file mode 100644 index 000000000..7ac849028 --- /dev/null +++ b/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak @@ -0,0 +1,70 @@ +############################################################################# +# Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji +# Generated by qmake (3.0) (Qt 5.3.0) +# Project: MetaEmoji.pro +# Template: app +# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro +############################################################################# + +MAKEFILE = project.pbxproj + +MOC = /usr/local/Qt-5.3.0/bin/moc +UIC = +LEX = flex +LEXFLAGS = +YACC = yacc +YACCFLAGS = -d +DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB +INCPATH = -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +DEL_FILE = rm -f +MOVE = mv -f + +IMAGES = +PARSERS = +preprocess: $(PARSERS) compilers +clean preprocess_clean: parser_clean compiler_clean + +parser_clean: +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +check: first + +compilers: GeneratedFiles/Debug/moc_genemoji.cpp +compiler_objective_c_make_all: +compiler_objective_c_clean: +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_header_make_all: GeneratedFiles/Debug/moc_genemoji.cpp +compiler_moc_header_clean: + -$(DEL_FILE) GeneratedFiles/Debug/moc_genemoji.cpp +GeneratedFiles/Debug/moc_genemoji.cpp: ../../Libraries/QtStatic/qtbase/include/QtCore/QMap \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QVector \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QFile \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QFileInfo \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QBuffer \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QDir \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QRegularExpression \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QImage \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QPixmap \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QPainter \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTextStream \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QString \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ + SourceFiles/_other/genemoji.h + /usr/local/Qt-5.3.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.3.0/include/QtGui/5.3.0/QtGui -I/usr/local/Qt-5.3.0/include/QtCore/5.3.0/QtCore -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genemoji.h -o GeneratedFiles/Debug/moc_genemoji.cpp + +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_rez_source_make_all: +compiler_rez_source_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_header_clean + diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm b/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm new file mode 100644 index 000000000..11ad1d63a --- /dev/null +++ b/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -0,0 +1,1778 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qcocoawindow.h" +#include "qcocoaintegration.h" +#include "qnswindowdelegate.h" +#include "qcocoaautoreleasepool.h" +#include "qcocoaeventdispatcher.h" +#include "qcocoaglcontext.h" +#include "qcocoahelpers.h" +#include "qcocoanativeinterface.h" +#include "qnsview.h" +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +enum { + defaultWindowWidth = 160, + defaultWindowHeight = 160 +}; + +static bool isMouseEvent(NSEvent *ev) +{ + switch ([ev type]) { + case NSLeftMouseDown: + case NSLeftMouseUp: + case NSRightMouseDown: + case NSRightMouseUp: + case NSMouseMoved: + case NSLeftMouseDragged: + case NSRightMouseDragged: + return true; + default: + return false; + } +} + +@interface NSWindow (CocoaWindowCategory) +- (NSRect) legacyConvertRectFromScreen:(NSRect) rect; +@end + +@implementation NSWindow (CocoaWindowCategory) +- (NSRect) legacyConvertRectFromScreen:(NSRect) rect +{ +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + return [self convertRectFromScreen: rect]; + } +#endif + NSRect r = rect; + r.origin = [self convertScreenToBase:rect.origin]; + return r; +} +@end + + +@implementation QNSWindowHelper + +@synthesize window = _window; +@synthesize platformWindow = _platformWindow; +@synthesize grabbingMouse = _grabbingMouse; +@synthesize releaseOnMouseUp = _releaseOnMouseUp; + +- (id)initWithNSWindow:(QCocoaNSWindow *)window platformWindow:(QCocoaWindow *)platformWindow +{ + self = [super init]; + if (self) { + _window = window; + _platformWindow = platformWindow; + + _window.delegate = [[QNSWindowDelegate alloc] initWithQCocoaWindow:_platformWindow]; + + // Prevent Cocoa from releasing the window on close. Qt + // handles the close event asynchronously and we want to + // make sure that m_nsWindow stays valid until the + // QCocoaWindow is deleted by Qt. + [_window setReleasedWhenClosed:NO]; + } + + return self; +} + +- (void)handleWindowEvent:(NSEvent *)theEvent +{ + QCocoaWindow *pw = self.platformWindow; + if (pw && pw->m_forwardWindow) { + if (theEvent.type == NSLeftMouseUp || theEvent.type == NSLeftMouseDragged) { + QNSView *forwardView = pw->m_qtView; + if (theEvent.type == NSLeftMouseUp) { + [forwardView mouseUp:theEvent]; + pw->m_forwardWindow = 0; + } else { + [forwardView mouseDragged:theEvent]; + } + } + + if (!pw->m_isNSWindowChild && theEvent.type == NSLeftMouseDown) { + pw->m_forwardWindow = 0; + } + } + + if (theEvent.type == NSLeftMouseDown) { + self.grabbingMouse = YES; + } else if (theEvent.type == NSLeftMouseUp) { + self.grabbingMouse = NO; + if (self.releaseOnMouseUp) { + [self detachFromPlatformWindow]; + [self.window release]; + return; + } + } + + // The call to -[NSWindow sendEvent] may result in the window being deleted + // (e.g., when closing the window by pressing the title bar close button). + [self retain]; + [self.window superSendEvent:theEvent]; + bool windowStillAlive = self.window != nil; // We need to read before releasing + [self release]; + if (!windowStillAlive) + return; + + if (!self.window.delegate) + return; // Already detached, pending NSAppKitDefined event + + if (pw && pw->frameStrutEventsEnabled() && pw->m_synchedWindowState != Qt::WindowMinimized && isMouseEvent(theEvent)) { + NSPoint loc = [theEvent locationInWindow]; + NSRect windowFrame = [self.window legacyConvertRectFromScreen:[self.window frame]]; + NSRect contentFrame = [[self.window contentView] frame]; + if (NSMouseInRect(loc, windowFrame, NO) && + !NSMouseInRect(loc, contentFrame, NO)) + { + QNSView *contentView = (QNSView *)pw->contentView(); + [contentView handleFrameStrutMouseEvent: theEvent]; + } + } +} + +- (void)detachFromPlatformWindow +{ + [self.window.delegate release]; + self.window.delegate = nil; +} + +- (void)clearWindow +{ + _window = nil; +} + +- (void)dealloc +{ + _window = nil; + _platformWindow = 0; + [super dealloc]; +} + +@end + +@implementation QNSWindow + +@synthesize helper = _helper; + +- (id)initWithContentRect:(NSRect)contentRect + styleMask:(NSUInteger)windowStyle + qPlatformWindow:(QCocoaWindow *)qpw +{ + self = [super initWithContentRect:contentRect + styleMask:windowStyle + backing:NSBackingStoreBuffered + defer:NO]; // Deferring window creation breaks OpenGL (the GL context is + // set up before the window is shown and needs a proper window) + + if (self) { + _helper = [[QNSWindowHelper alloc] initWithNSWindow:self platformWindow:qpw]; + } + return self; +} + +- (BOOL)canBecomeKeyWindow +{ + // Prevent child NSWindows from becoming the key window in + // order keep the active apperance of the top-level window. + QCocoaWindow *pw = self.helper.platformWindow; + if (!pw || pw->m_isNSWindowChild) + return NO; + + // The default implementation returns NO for title-bar less windows, + // override and return yes here to make sure popup windows such as + // the combobox popup can become the key window. + return YES; +} + +- (BOOL)canBecomeMainWindow +{ + BOOL canBecomeMain = YES; // By default, windows can become the main window + + // Windows with a transient parent (such as combobox popup windows) + // cannot become the main window: + QCocoaWindow *pw = self.helper.platformWindow; + if (!pw || pw->m_isNSWindowChild || pw->window()->transientParent()) + canBecomeMain = NO; + + return canBecomeMain; +} + +- (void) sendEvent: (NSEvent*) theEvent +{ + [self.helper handleWindowEvent:theEvent]; +} + +- (void)superSendEvent:(NSEvent *)theEvent +{ + [super sendEvent:theEvent]; +} + +- (void)closeAndRelease +{ + [self close]; + + QCocoaIntegration::instance()->setWindow(self, 0); + + if (self.helper.grabbingMouse) { + self.helper.releaseOnMouseUp = YES; + } else { + [self.helper detachFromPlatformWindow]; + [self release]; + } +} + +- (void)dealloc +{ + [_helper clearWindow]; + [_helper release]; + _helper = nil; + [super dealloc]; +} + +@end + +@implementation QNSPanel + +@synthesize helper = _helper; + +- (id)initWithContentRect:(NSRect)contentRect + styleMask:(NSUInteger)windowStyle + qPlatformWindow:(QCocoaWindow *)qpw +{ + self = [super initWithContentRect:contentRect + styleMask:windowStyle + backing:NSBackingStoreBuffered + defer:NO]; // Deferring window creation breaks OpenGL (the GL context is + // set up before the window is shown and needs a proper window) + + if (self) { + _helper = [[QNSWindowHelper alloc] initWithNSWindow:self platformWindow:qpw]; + } + return self; +} + +- (BOOL)canBecomeKeyWindow +{ + QCocoaWindow *pw = self.helper.platformWindow; + if (!pw) + return NO; + + // Only tool or dialog windows should become key: + Qt::WindowType type = pw->window()->type(); + if (type == Qt::Tool || type == Qt::Dialog) + return YES; + + return NO; +} + +- (void) sendEvent: (NSEvent*) theEvent +{ + [self.helper handleWindowEvent:theEvent]; +} + +- (void)superSendEvent:(NSEvent *)theEvent +{ + [super sendEvent:theEvent]; +} + +- (void)closeAndRelease +{ + [self.helper detachFromPlatformWindow]; + [self close]; + QCocoaIntegration::instance()->setWindow(self, 0); + [self release]; +} + +- (void)dealloc +{ + [_helper clearWindow]; + [_helper release]; + _helper = nil; + [super dealloc]; +} + +@end + +const int QCocoaWindow::NoAlertRequest = -1; + +QCocoaWindow::QCocoaWindow(QWindow *tlw) + : QPlatformWindow(tlw) + , m_contentView(nil) + , m_qtView(nil) + , m_nsWindow(0) + , m_forwardWindow(0) + , m_contentViewIsEmbedded(false) + , m_contentViewIsToBeEmbedded(false) + , m_parentCocoaWindow(0) + , m_isNSWindowChild(false) + , m_effectivelyMaximized(false) + , m_synchedWindowState(Qt::WindowActive) + , m_windowModality(Qt::NonModal) + , m_windowUnderMouse(false) + , m_inConstructor(true) + , m_glContext(0) + , m_menubar(0) + , m_windowCursor(0) + , m_hasModalSession(false) + , m_frameStrutEventsEnabled(false) + , m_geometryUpdateExposeAllowed(false) + , m_isExposed(false) + , m_registerTouchCount(0) + , m_resizableTransientParent(false) + , m_hiddenByClipping(false) + , m_hiddenByAncestor(false) + , m_alertRequest(NoAlertRequest) + , monitor(nil) + , m_drawContentBorderGradient(false) + , m_topContentBorderThickness(0) + , m_bottomContentBorderThickness(0) + , m_normalGeometry(QRect(0,0,-1,-1)) +{ +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug() << "QCocoaWindow::QCocoaWindow" << this; +#endif + QCocoaAutoReleasePool pool; + + if (tlw->type() == Qt::ForeignWindow) { + NSView *foreignView = (NSView *)WId(tlw->property("_q_foreignWinId").value()); + setContentView(foreignView); + } else { + m_qtView = [[QNSView alloc] initWithQWindow:tlw platformWindow:this]; + m_contentView = m_qtView; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + // Enable high-dpi OpenGL for retina displays. Enabling has the side + // effect that Cocoa will start calling glViewport(0, 0, width, height), + // overriding any glViewport calls in application code. This is usually not a + // problem, except if the appilcation wants to have a "custom" viewport. + // (like the hellogl example) + if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7 + && tlw->supportsOpenGL()) { + BOOL enable = qt_mac_resolveOption(YES, tlw, "_q_mac_wantsBestResolutionOpenGLSurface", + "QT_MAC_WANTS_BEST_RESOLUTION_OPENGL_SURFACE"); + [m_contentView setWantsBestResolutionOpenGLSurface:enable]; + } +#endif + BOOL enable = qt_mac_resolveOption(NO, tlw, "_q_mac_wantsLayer", + "QT_MAC_WANTS_LAYER"); + [m_contentView setWantsLayer:enable]; + } + setGeometry(tlw->geometry()); + recreateWindow(parent()); + tlw->setGeometry(geometry()); + if (tlw->isTopLevel()) + setWindowIcon(tlw->icon()); + m_inConstructor = false; +} + +QCocoaWindow::~QCocoaWindow() +{ +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug() << "QCocoaWindow::~QCocoaWindow" << this; +#endif + + if (QCocoaIntegration *ci = QCocoaIntegration::instance()) + ci->setWindow(m_nsWindow, 0); + + QCocoaAutoReleasePool pool; + [m_nsWindow setContentView:nil]; + [m_nsWindow.helper detachFromPlatformWindow]; + if (m_isNSWindowChild) { + if (m_parentCocoaWindow) + m_parentCocoaWindow->removeChildWindow(this); + } else if (parent()) { + [m_contentView removeFromSuperview]; + } else if (m_qtView) { + [[NSNotificationCenter defaultCenter] removeObserver:m_qtView + name:nil object:m_nsWindow]; + } + + foreach (QCocoaWindow *child, m_childWindows) { + [m_nsWindow removeChildWindow:child->m_nsWindow]; + child->m_parentCocoaWindow = 0; + } + + [m_contentView release]; + [m_nsWindow release]; + [m_windowCursor release]; +} + +QSurfaceFormat QCocoaWindow::format() const +{ + return window()->requestedFormat(); +} + +void QCocoaWindow::setGeometry(const QRect &rectIn) +{ + QRect rect = rectIn; + // This means it is a call from QWindow::setFramePosition() and + // the coordinates include the frame (size is still the contents rectangle). + if (qt_window_private(const_cast(window()))->positionPolicy + == QWindowPrivate::WindowFrameInclusive) { + const QMargins margins = frameMargins(); + rect.moveTopLeft(rect.topLeft() + QPoint(margins.left(), margins.top())); + } + if (geometry() == rect) + return; +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug() << "QCocoaWindow::setGeometry" << this << rect; +#endif + setCocoaGeometry(rect); +} + +QRect QCocoaWindow::geometry() const +{ + // QWindows that are embedded in a NSView hiearchy may be considered + // top-level from Qt's point of view but are not from Cocoa's point + // of view. Embedded QWindows get global (screen) geometry. + if (m_contentViewIsEmbedded) { + NSPoint windowPoint = [m_contentView convertPoint:NSMakePoint(0, 0) toView:nil]; + NSPoint screenPoint = [[m_contentView window] convertBaseToScreen:windowPoint]; // ### use convertRectToScreen after 10.6 removal + QPoint position = qt_mac_flipPoint(screenPoint).toPoint(); + QSize size = qt_mac_toQRect([m_contentView bounds]).size(); + return QRect(position, size); + } + + return QPlatformWindow::geometry(); +} + +void QCocoaWindow::setCocoaGeometry(const QRect &rect) +{ + QCocoaAutoReleasePool pool; + + if (m_contentViewIsEmbedded) { + QPlatformWindow::setGeometry(rect); + return; + } + + if (m_isNSWindowChild) { + QPlatformWindow::setGeometry(rect); + NSWindow *parentNSWindow = m_parentCocoaWindow->m_nsWindow; + NSRect parentWindowFrame = [parentNSWindow contentRectForFrameRect:parentNSWindow.frame]; + clipWindow(parentWindowFrame); + + // call this here: updateGeometry in qnsview.mm is a no-op for this case + QWindowSystemInterface::handleGeometryChange(window(), rect); + QWindowSystemInterface::handleExposeEvent(window(), rect); + } else if (m_nsWindow) { + NSRect bounds = qt_mac_flipRect(rect); + [m_nsWindow setFrame:[m_nsWindow frameRectForContentRect:bounds] display:YES animate:NO]; + } else { + [m_contentView setFrame : NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height())]; + } + + if (!m_qtView) + QPlatformWindow::setGeometry(rect); + + // will call QPlatformWindow::setGeometry(rect) during resize confirmation (see qnsview.mm) +} + +void QCocoaWindow::clipChildWindows() +{ + foreach (QCocoaWindow *childWindow, m_childWindows) { + childWindow->clipWindow(m_nsWindow.frame); + } +} + +void QCocoaWindow::clipWindow(const NSRect &clipRect) +{ + if (!m_isNSWindowChild) + return; + + NSRect clippedWindowRect = NSZeroRect; + if (!NSIsEmptyRect(clipRect)) { + NSRect windowFrame = qt_mac_flipRect(QRect(window()->mapToGlobal(QPoint(0, 0)), geometry().size())); + clippedWindowRect = NSIntersectionRect(windowFrame, clipRect); + // Clipping top/left offsets the content. Move it back. + NSPoint contentViewOffset = NSMakePoint(qMax(CGFloat(0), NSMinX(clippedWindowRect) - NSMinX(windowFrame)), + qMax(CGFloat(0), NSMaxY(windowFrame) - NSMaxY(clippedWindowRect))); + [m_contentView setBoundsOrigin:contentViewOffset]; + } + + if (NSIsEmptyRect(clippedWindowRect)) { + if (!m_hiddenByClipping) { + // We dont call hide() here as we will recurse further down + [m_nsWindow orderOut:nil]; + m_hiddenByClipping = true; + } + } else { + [m_nsWindow setFrame:clippedWindowRect display:YES animate:NO]; + if (m_hiddenByClipping) { + m_hiddenByClipping = false; + if (!m_hiddenByAncestor) { + [m_nsWindow orderFront:nil]; + m_parentCocoaWindow->reinsertChildWindow(this); + } + } + } + + // recurse + foreach (QCocoaWindow *childWindow, m_childWindows) { + childWindow->clipWindow(clippedWindowRect); + } +} + +void QCocoaWindow::hide(bool becauseOfAncestor) +{ + bool visible = [m_nsWindow isVisible]; + + if (!m_hiddenByAncestor && !visible) // Already explicitly hidden + return; + if (m_hiddenByAncestor && becauseOfAncestor) // Trying to hide some child again + return; + + m_hiddenByAncestor = becauseOfAncestor; + + if (!visible) // Could have been clipped before + return; + + foreach (QCocoaWindow *childWindow, m_childWindows) + childWindow->hide(true); + + [m_nsWindow orderOut:nil]; +} + +void QCocoaWindow::show(bool becauseOfAncestor) +{ + if ([m_nsWindow isVisible]) + return; + + if (m_parentCocoaWindow && ![m_parentCocoaWindow->m_nsWindow isVisible]) { + m_hiddenByAncestor = true; // Parent still hidden, don't show now + } else if ((becauseOfAncestor == m_hiddenByAncestor) // Was NEITHER explicitly hidden + && !m_hiddenByClipping) { // ... NOR clipped + if (m_isNSWindowChild) { + m_hiddenByAncestor = false; + setCocoaGeometry(window()->geometry()); + } + if (!m_hiddenByClipping) { // setCocoaGeometry() can change the clipping status + [m_nsWindow orderFront:nil]; + if (m_isNSWindowChild) + m_parentCocoaWindow->reinsertChildWindow(this); + foreach (QCocoaWindow *childWindow, m_childWindows) + childWindow->show(true); + } + } +} + +void QCocoaWindow::setVisible(bool visible) +{ + if (m_isNSWindowChild && m_hiddenByClipping) + return; + + QCocoaAutoReleasePool pool; + QCocoaWindow *parentCocoaWindow = 0; + if (window()->transientParent()) + parentCocoaWindow = static_cast(window()->transientParent()->handle()); +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug() << "QCocoaWindow::setVisible" << window() << visible; +#endif + if (visible) { + // We need to recreate if the modality has changed as the style mask will need updating + if (m_windowModality != window()->modality()) + recreateWindow(parent()); + if (parentCocoaWindow) { + // The parent window might have moved while this window was hidden, + // update the window geometry if there is a parent. + setGeometry(window()->geometry()); + + // Register popup windows so that the parent window can close them when needed. + if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) { + // qDebug() << "transientParent and popup" << window()->type() << Qt::Popup << (window()->type() & Qt::Popup); + parentCocoaWindow->m_activePopupWindow = window(); + } + + if (window()->type() == Qt::Popup) { + // QTBUG-30266: a window should not be resizable while a transient popup is open + // Since this isn't a native popup, the window manager doesn't close the popup when you click outside + NSUInteger parentStyleMask = [parentCocoaWindow->m_nsWindow styleMask]; + if ((m_resizableTransientParent = (parentStyleMask & NSResizableWindowMask)) +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + && QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7 + && !([parentCocoaWindow->m_nsWindow styleMask] & NSFullScreenWindowMask) +#endif + ) + [parentCocoaWindow->m_nsWindow setStyleMask:parentStyleMask & ~NSResizableWindowMask]; + } + + } + + // This call is here to handle initial window show correctly: + // - top-level windows need to have backing store content ready when the + // window is shown, sendin the expose event here makes that more likely. + // - QNSViews for child windows are initialy not hidden and won't get the + // viewDidUnhide message. + exposeWindow(); + + if (m_nsWindow) { + QWindowSystemInterface::flushWindowSystemEvents(); + + // setWindowState might have been called while the window was hidden and + // will not change the NSWindow state in that case. Sync up here: + syncWindowState(window()->windowState()); + + if (window()->windowState() != Qt::WindowMinimized) { + if ((window()->modality() == Qt::WindowModal + || window()->type() == Qt::Sheet) + && parentCocoaWindow) { + // show the window as a sheet + [NSApp beginSheet:m_nsWindow modalForWindow:parentCocoaWindow->m_nsWindow modalDelegate:nil didEndSelector:nil contextInfo:nil]; + } else if (window()->modality() != Qt::NonModal) { + // show the window as application modal + QCocoaEventDispatcher *cocoaEventDispatcher = qobject_cast(QGuiApplication::instance()->eventDispatcher()); + Q_ASSERT(cocoaEventDispatcher != 0); + QCocoaEventDispatcherPrivate *cocoaEventDispatcherPrivate = static_cast(QObjectPrivate::get(cocoaEventDispatcher)); + cocoaEventDispatcherPrivate->beginModalSession(window()); + m_hasModalSession = true; + } else if ([m_nsWindow canBecomeKeyWindow]) { + [m_nsWindow makeKeyAndOrderFront:nil]; + foreach (QCocoaWindow *childWindow, m_childWindows) + childWindow->show(true); + } else { + show(); + } + + // We want the events to properly reach the popup, dialog, and tool + if ((window()->type() == Qt::Popup || window()->type() == Qt::Dialog || window()->type() == Qt::Tool) + && [m_nsWindow isKindOfClass:[NSPanel class]]) { + [(NSPanel *)m_nsWindow setWorksWhenModal:YES]; + if (!(parentCocoaWindow && window()->transientParent()->isActive()) && window()->type() == Qt::Popup) { + monitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask|NSOtherMouseDown handler:^(NSEvent *) { + QWindowSystemInterface::handleMouseEvent(window(), QPointF(-1, -1), QPointF(window()->framePosition() - QPointF(1, 1)), Qt::LeftButton); + }]; + } + } + } + } + // In some cases, e.g. QDockWidget, the content view is hidden before moving to its own + // Cocoa window, and then shown again. Therefore, we test for the view being hidden even + // if it's attached to an NSWindow. + if ([m_contentView isHidden]) + [m_contentView setHidden:NO]; + } else { + // qDebug() << "close" << this; + if (m_glContext) + m_glContext->windowWasHidden(); + QCocoaEventDispatcher *cocoaEventDispatcher = qobject_cast(QGuiApplication::instance()->eventDispatcher()); + QCocoaEventDispatcherPrivate *cocoaEventDispatcherPrivate = 0; + if (cocoaEventDispatcher) + cocoaEventDispatcherPrivate = static_cast(QObjectPrivate::get(cocoaEventDispatcher)); + if (m_nsWindow) { + if (m_hasModalSession) { + if (cocoaEventDispatcherPrivate) + cocoaEventDispatcherPrivate->endModalSession(window()); + m_hasModalSession = false; + } else { + if ([m_nsWindow isSheet]) + [NSApp endSheet:m_nsWindow]; + } + + hide(); + if (m_nsWindow == [NSApp keyWindow] + && !(cocoaEventDispatcherPrivate && cocoaEventDispatcherPrivate->currentModalSession())) { + // Probably because we call runModalSession: outside [NSApp run] in QCocoaEventDispatcher + // (e.g., when show()-ing a modal QDialog instead of exec()-ing it), it can happen that + // the current NSWindow is still key after being ordered out. Then, after checking we + // don't have any other modal session left, it's safe to make the main window key again. + NSWindow *mainWindow = [NSApp mainWindow]; + if (mainWindow && [mainWindow canBecomeKeyWindow]) + [mainWindow makeKeyWindow]; + } + } else { + [m_contentView setHidden:YES]; + } + if (monitor && window()->type() == Qt::Popup) { + [NSEvent removeMonitor:monitor]; + monitor = nil; + } + if (parentCocoaWindow && window()->type() == Qt::Popup) { + parentCocoaWindow->m_activePopupWindow = 0; + if (m_resizableTransientParent +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + && QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7 + && !([parentCocoaWindow->m_nsWindow styleMask] & NSFullScreenWindowMask) +#endif + ) + // QTBUG-30266: a window should not be resizable while a transient popup is open + [parentCocoaWindow->m_nsWindow setStyleMask:[parentCocoaWindow->m_nsWindow styleMask] | NSResizableWindowMask]; + } + } +} + +NSInteger QCocoaWindow::windowLevel(Qt::WindowFlags flags) +{ + Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); + + NSInteger windowLevel = NSNormalWindowLevel; + + if (type == Qt::Tool) + windowLevel = NSFloatingWindowLevel; + else if ((type & Qt::Popup) == Qt::Popup) + windowLevel = NSPopUpMenuWindowLevel; + + // StayOnTop window should appear above Tool windows. + if (flags & Qt::WindowStaysOnTopHint) + windowLevel = NSModalPanelWindowLevel; + // Tooltips should appear above StayOnTop windows. + if (type == Qt::ToolTip) + windowLevel = NSScreenSaverWindowLevel; + + // Any "special" window should be in at least the same level as its parent. + if (type != Qt::Window) { + const QWindow * const transientParent = window()->transientParent(); + const QCocoaWindow * const transientParentWindow = transientParent ? static_cast(transientParent->handle()) : 0; + if (transientParentWindow) + windowLevel = qMax([transientParentWindow->m_nsWindow level], windowLevel); + } + + return windowLevel; +} + +NSUInteger QCocoaWindow::windowStyleMask(Qt::WindowFlags flags) +{ + Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); + NSInteger styleMask = NSBorderlessWindowMask; + if (flags & Qt::FramelessWindowHint) + return styleMask; + if ((type & Qt::Popup) == Qt::Popup) { + if (!windowIsPopupType(type)) + styleMask = (NSUtilityWindowMask | NSResizableWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSTitledWindowMask); + } else { + if (type == Qt::Window && !(flags & Qt::CustomizeWindowHint)) { + styleMask = (NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask); + } else if (type == Qt::Dialog) { + if (flags & Qt::CustomizeWindowHint) { + if (flags & Qt::WindowMaximizeButtonHint) + styleMask = NSResizableWindowMask; + if (flags & Qt::WindowTitleHint) + styleMask |= NSTitledWindowMask; + if (flags & Qt::WindowCloseButtonHint) + styleMask |= NSClosableWindowMask; + if (flags & Qt::WindowMinimizeButtonHint) + styleMask |= NSMiniaturizableWindowMask; + } else { + styleMask = NSResizableWindowMask | NSClosableWindowMask | NSTitledWindowMask; + } + } else { + if (flags & Qt::WindowMaximizeButtonHint) + styleMask |= NSResizableWindowMask; + if (flags & Qt::WindowTitleHint) + styleMask |= NSTitledWindowMask; + if (flags & Qt::WindowCloseButtonHint) + styleMask |= NSClosableWindowMask; + if (flags & Qt::WindowMinimizeButtonHint) + styleMask |= NSMiniaturizableWindowMask; + } + } + + if (m_drawContentBorderGradient) + styleMask |= NSTexturedBackgroundWindowMask; + +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug("windowStyleMask of '%s': flags %X -> styleMask %lX", qPrintable(window()->title()), (int)flags, styleMask); +#endif + return styleMask; +} + +void QCocoaWindow::setWindowShadow(Qt::WindowFlags flags) +{ + bool keepShadow = !(flags & Qt::NoDropShadowWindowHint); + [m_nsWindow setHasShadow:(keepShadow ? YES : NO)]; +} + +void QCocoaWindow::setWindowZoomButton(Qt::WindowFlags flags) +{ + // Disable the zoom (maximize) button for fixed-sized windows and customized + // no-WindowMaximizeButtonHint windows. From a Qt perspective it migth be expected + // that the button would be removed in the latter case, but disabling it is more + // in line with the platform style guidelines. + bool fixedSizeNoZoom = (window()->minimumSize().isValid() && window()->maximumSize().isValid() + && window()->minimumSize() == window()->maximumSize()); + bool customizeNoZoom = ((flags & Qt::CustomizeWindowHint) && !(flags & Qt::WindowMaximizeButtonHint)); + [[m_nsWindow standardWindowButton:NSWindowZoomButton] setEnabled:!(fixedSizeNoZoom || customizeNoZoom)]; +} + +void QCocoaWindow::setWindowFlags(Qt::WindowFlags flags) +{ + if (m_nsWindow && !m_isNSWindowChild) { + NSUInteger styleMask = windowStyleMask(flags); + NSInteger level = this->windowLevel(flags); + [m_nsWindow setStyleMask:styleMask]; + [m_nsWindow setLevel:level]; + setWindowShadow(flags); + if (!(styleMask & NSBorderlessWindowMask)) { + setWindowTitle(window()->title()); + } + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + Qt::WindowType type = window()->type(); + if ((type & Qt::Popup) != Qt::Popup && (type & Qt::Dialog) != Qt::Dialog) { + NSWindowCollectionBehavior behavior = [m_nsWindow collectionBehavior]; + if (flags & Qt::WindowFullscreenButtonHint) + behavior |= NSWindowCollectionBehaviorFullScreenPrimary; + else + behavior &= ~NSWindowCollectionBehaviorFullScreenPrimary; + [m_nsWindow setCollectionBehavior:behavior]; + } + } +#endif + setWindowZoomButton(flags); + } + + m_windowFlags = flags; +} + +void QCocoaWindow::setWindowState(Qt::WindowState state) +{ + if (window()->isVisible()) + syncWindowState(state); // Window state set for hidden windows take effect when show() is called. +} + +void QCocoaWindow::setWindowTitle(const QString &title) +{ + QCocoaAutoReleasePool pool; + if (!m_nsWindow) + return; + + CFStringRef windowTitle = QCFString::toCFStringRef(title); + [m_nsWindow setTitle: const_cast(reinterpret_cast(windowTitle))]; + CFRelease(windowTitle); +} + +void QCocoaWindow::setWindowFilePath(const QString &filePath) +{ + QCocoaAutoReleasePool pool; + if (!m_nsWindow) + return; + + QFileInfo fi(filePath); + [m_nsWindow setRepresentedFilename: fi.exists() ? QCFString::toNSString(filePath) : @""]; +} + +void QCocoaWindow::setWindowIcon(const QIcon &icon) +{ + QCocoaAutoReleasePool pool; + + NSButton *iconButton = [m_nsWindow standardWindowButton:NSWindowDocumentIconButton]; + if (iconButton == nil) { + if (icon.isNull()) + return; + NSString *title = QCFString::toNSString(window()->title()); + [m_nsWindow setRepresentedURL:[NSURL fileURLWithPath:title]]; + iconButton = [m_nsWindow standardWindowButton:NSWindowDocumentIconButton]; + } + if (icon.isNull()) { + [iconButton setImage:nil]; + } else { + QPixmap pixmap = icon.pixmap(QSize(22, 22)); + NSImage *image = static_cast(qt_mac_create_nsimage(pixmap)); + [iconButton setImage:image]; + [image release]; + } +} + +void QCocoaWindow::setAlertState(bool enabled) +{ + if (m_alertRequest == NoAlertRequest && enabled) { + m_alertRequest = [NSApp requestUserAttention:NSCriticalRequest]; + } else if (m_alertRequest != NoAlertRequest && !enabled) { + [NSApp cancelUserAttentionRequest:m_alertRequest]; + m_alertRequest = NoAlertRequest; + } +} + +bool QCocoaWindow::isAlertState() const +{ + return m_alertRequest != NoAlertRequest; +} + +void QCocoaWindow::raise() +{ + //qDebug() << "raise" << this; + // ### handle spaces (see Qt 4 raise_sys in qwidget_mac.mm) + if (!m_nsWindow) + return; + if (m_isNSWindowChild) { + QList &siblings = m_parentCocoaWindow->m_childWindows; + siblings.removeOne(this); + siblings.append(this); + if (m_hiddenByClipping) + return; + } + if ([m_nsWindow isVisible]) { + if (m_isNSWindowChild) { + // -[NSWindow orderFront:] doesn't work with attached windows. + // The only solution is to remove and add the child window. + // This will place it on top of all the other NSWindows. + NSWindow *parentNSWindow = m_parentCocoaWindow->m_nsWindow; + [parentNSWindow removeChildWindow:m_nsWindow]; + [parentNSWindow addChildWindow:m_nsWindow ordered:NSWindowAbove]; + } else { + [m_nsWindow orderFront: m_nsWindow]; + ProcessSerialNumber psn; + GetCurrentProcess(&psn); + SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly); + } + } +} + +void QCocoaWindow::lower() +{ + if (!m_nsWindow) + return; + if (m_isNSWindowChild) { + QList &siblings = m_parentCocoaWindow->m_childWindows; + siblings.removeOne(this); + siblings.prepend(this); + if (m_hiddenByClipping) + return; + } + if ([m_nsWindow isVisible]) { + if (m_isNSWindowChild) { + // -[NSWindow orderBack:] doesn't work with attached windows. + // The only solution is to remove and add all the child windows except this one. + // This will keep the current window at the bottom while adding the others on top of it, + // hopefully in the same order (this is not documented anywhere in the Cocoa documentation). + NSWindow *parentNSWindow = m_parentCocoaWindow->m_nsWindow; + NSArray *children = [parentNSWindow.childWindows copy]; + for (NSWindow *child in children) + if (m_nsWindow != child) { + [parentNSWindow removeChildWindow:child]; + [parentNSWindow addChildWindow:child ordered:NSWindowAbove]; + } + } else { + [m_nsWindow orderBack: m_nsWindow]; + } + } +} + +bool QCocoaWindow::isExposed() const +{ + return m_isExposed; +} + +bool QCocoaWindow::isOpaque() const +{ + bool translucent = (window()->format().alphaBufferSize() > 0 + || window()->opacity() < 1 + || (m_qtView && [m_qtView hasMask])); + return !translucent; +} + +void QCocoaWindow::propagateSizeHints() +{ + QCocoaAutoReleasePool pool; + if (!m_nsWindow) + return; + +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug() << "QCocoaWindow::propagateSizeHints" << this; + qDebug() << " min/max " << window()->minimumSize() << window()->maximumSize(); + qDebug() << "size increment" << window()->sizeIncrement(); + qDebug() << " basesize" << window()->baseSize(); + qDebug() << " geometry" << geometry(); +#endif + + // Set the minimum content size. + const QSize minimumSize = window()->minimumSize(); + if (!minimumSize.isValid()) // minimumSize is (-1, -1) when not set. Make that (0, 0) for Cocoa. + [m_nsWindow setContentMinSize : NSMakeSize(0.0, 0.0)]; + [m_nsWindow setContentMinSize : NSMakeSize(minimumSize.width(), minimumSize.height())]; + + // Set the maximum content size. + const QSize maximumSize = window()->maximumSize(); + [m_nsWindow setContentMaxSize : NSMakeSize(maximumSize.width(), maximumSize.height())]; + + // The window may end up with a fixed size; in this case the zoom button should be disabled. + setWindowZoomButton(m_windowFlags); + + // sizeIncrement is observed to take values of (-1, -1) and (0, 0) for windows that should be + // resizable and that have no specific size increment set. Cocoa expects (1.0, 1.0) in this case. + if (!window()->sizeIncrement().isEmpty()) + [m_nsWindow setResizeIncrements : qt_mac_toNSSize(window()->sizeIncrement())]; + else + [m_nsWindow setResizeIncrements : NSMakeSize(1.0, 1.0)]; + + QRect rect = geometry(); + QSize baseSize = window()->baseSize(); + if (!baseSize.isNull() && baseSize.isValid()) { + [m_nsWindow setFrame:NSMakeRect(rect.x(), rect.y(), baseSize.width(), baseSize.height()) display:YES]; + } +} + +void QCocoaWindow::setOpacity(qreal level) +{ + if (m_nsWindow) { + [m_nsWindow setAlphaValue:level]; + [m_nsWindow setOpaque: isOpaque()]; + } +} + +void QCocoaWindow::setMask(const QRegion ®ion) +{ + if (m_nsWindow) + [m_nsWindow setBackgroundColor:[NSColor clearColor]]; + + [m_qtView setMaskRegion:®ion]; + [m_nsWindow setOpaque: isOpaque()]; +} + +bool QCocoaWindow::setKeyboardGrabEnabled(bool grab) +{ + if (!m_nsWindow) + return false; + + if (grab && ![m_nsWindow isKeyWindow]) + [m_nsWindow makeKeyWindow]; + else if (!grab && [m_nsWindow isKeyWindow]) + [m_nsWindow resignKeyWindow]; + return true; +} + +bool QCocoaWindow::setMouseGrabEnabled(bool grab) +{ + if (!m_nsWindow) + return false; + + if (grab && ![m_nsWindow isKeyWindow]) + [m_nsWindow makeKeyWindow]; + else if (!grab && [m_nsWindow isKeyWindow]) + [m_nsWindow resignKeyWindow]; + return true; +} + +WId QCocoaWindow::winId() const +{ + return WId(m_contentView); +} + +void QCocoaWindow::setParent(const QPlatformWindow *parentWindow) +{ + // recreate the window for compatibility + bool unhideAfterRecreate = parentWindow && !m_contentViewIsToBeEmbedded && ![m_contentView isHidden]; + recreateWindow(parentWindow); + if (unhideAfterRecreate) + [m_contentView setHidden:NO]; + setCocoaGeometry(geometry()); +} + +NSView *QCocoaWindow::contentView() const +{ + return m_contentView; +} + +void QCocoaWindow::setContentView(NSView *contentView) +{ + // Remove and release the previous content view + [m_contentView removeFromSuperview]; + [m_contentView release]; + + // Insert and retain the new content view + [contentView retain]; + m_contentView = contentView; + m_qtView = 0; // The new content view is not a QNSView. + recreateWindow(parent()); // Adds the content view to parent NSView +} + +QNSView *QCocoaWindow::qtView() const +{ + return m_qtView; +} + +NSWindow *QCocoaWindow::nativeWindow() const +{ + return m_nsWindow; +} + +void QCocoaWindow::setEmbeddedInForeignView(bool embedded) +{ + m_contentViewIsToBeEmbedded = embedded; + // Release any previosly created NSWindow. + [m_nsWindow closeAndRelease]; + m_nsWindow = 0; +} + +void QCocoaWindow::windowWillMove() +{ + // Close any open popups on window move + if (m_activePopupWindow) { + QWindowSystemInterface::handleCloseEvent(m_activePopupWindow); + QWindowSystemInterface::flushWindowSystemEvents(); + m_activePopupWindow = 0; + } +} + +void QCocoaWindow::windowDidMove() +{ + if (m_isNSWindowChild) + return; + + [m_qtView updateGeometry]; +} + +void QCocoaWindow::windowDidResize() +{ + if (!m_nsWindow) + return; + + if (m_isNSWindowChild) + return; + + clipChildWindows(); + [m_qtView updateGeometry]; +} + +void QCocoaWindow::windowDidEndLiveResize() +{ + if (m_synchedWindowState == Qt::WindowMaximized && ![m_nsWindow isZoomed]) { + m_effectivelyMaximized = false; + [m_qtView notifyWindowStateChanged:Qt::WindowNoState]; + } +} + +bool QCocoaWindow::windowShouldClose() +{ + bool accepted = false; + QWindowSystemInterface::handleCloseEvent(window(), &accepted); + QWindowSystemInterface::flushWindowSystemEvents(); + return accepted; +} + +void QCocoaWindow::setSynchedWindowStateFromWindow() +{ + if (QWindow *w = window()) + m_synchedWindowState = w->windowState(); +} + +bool QCocoaWindow::windowIsPopupType(Qt::WindowType type) const +{ + if (type == Qt::Widget) + type = window()->type(); + if (type == Qt::Tool) + return false; // Qt::Tool has the Popup bit set but isn't, at least on Mac. + + return ((type & Qt::Popup) == Qt::Popup); +} + +void QCocoaWindow::setCurrentContext(QCocoaGLContext *context) +{ + m_glContext = context; +} + +QCocoaGLContext *QCocoaWindow::currentContext() const +{ + return m_glContext; +} + +void QCocoaWindow::recreateWindow(const QPlatformWindow *parentWindow) +{ + bool wasNSWindowChild = m_isNSWindowChild; + m_isNSWindowChild = parentWindow && (window()->property("_q_platform_MacUseNSWindow").toBool()); + bool needsNSWindow = m_isNSWindowChild || !parentWindow; + + QCocoaWindow *oldParentCocoaWindow = m_parentCocoaWindow; + m_parentCocoaWindow = const_cast(static_cast(parentWindow)); + if (m_parentCocoaWindow && m_isNSWindowChild) { + QWindow *parentQWindow = m_parentCocoaWindow->window(); + if (!parentQWindow->property("_q_platform_MacUseNSWindow").toBool()) { + parentQWindow->setProperty("_q_platform_MacUseNSWindow", QVariant(true)); + m_parentCocoaWindow->recreateWindow(m_parentCocoaWindow->m_parentCocoaWindow); + } + } + + bool usesNSPanel = [m_nsWindow isKindOfClass:[QNSPanel class]]; + + // No child QNSWindow should notify its QNSView + if (m_nsWindow && m_qtView && m_parentCocoaWindow && !oldParentCocoaWindow) + [[NSNotificationCenter defaultCenter] removeObserver:m_qtView + name:nil object:m_nsWindow]; + + // Remove current window (if any) + if ((m_nsWindow && !needsNSWindow) || (usesNSPanel != shouldUseNSPanel())) { + [m_nsWindow closeAndRelease]; + if (wasNSWindowChild && oldParentCocoaWindow) + oldParentCocoaWindow->removeChildWindow(this); + m_nsWindow = 0; + } + + if (needsNSWindow) { + bool noPreviousWindow = m_nsWindow == 0; + if (noPreviousWindow) + m_nsWindow = createNSWindow(); + + // Only non-child QNSWindows should notify their QNSViews + // (but don't register more than once). + if (m_qtView && (noPreviousWindow || (wasNSWindowChild && !m_isNSWindowChild))) + [[NSNotificationCenter defaultCenter] addObserver:m_qtView + selector:@selector(windowNotification:) + name:nil // Get all notifications + object:m_nsWindow]; + + if (oldParentCocoaWindow) { + if (!m_isNSWindowChild || oldParentCocoaWindow != m_parentCocoaWindow) + oldParentCocoaWindow->removeChildWindow(this); + m_forwardWindow = oldParentCocoaWindow; + } + + setNSWindow(m_nsWindow); + } + + if (m_contentViewIsToBeEmbedded) { + // An embedded window doesn't have its own NSWindow. + } else if (!parentWindow) { + // QPlatformWindow subclasses must sync up with QWindow on creation: + propagateSizeHints(); + setWindowFlags(window()->flags()); + setWindowTitle(window()->title()); + setWindowState(window()->windowState()); + } else if (m_isNSWindowChild) { + m_nsWindow.styleMask = NSBorderlessWindowMask; + m_nsWindow.hasShadow = NO; + m_nsWindow.level = NSNormalWindowLevel; + NSWindowCollectionBehavior collectionBehavior = + NSWindowCollectionBehaviorManaged | NSWindowCollectionBehaviorIgnoresCycle; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + collectionBehavior |= NSWindowCollectionBehaviorFullScreenAuxiliary; + m_nsWindow.animationBehavior = NSWindowAnimationBehaviorNone; + } +#endif + m_nsWindow.collectionBehavior = collectionBehavior; + setCocoaGeometry(window()->geometry()); + + QList &siblings = m_parentCocoaWindow->m_childWindows; + if (siblings.contains(this)) { + if (!m_hiddenByClipping) + m_parentCocoaWindow->reinsertChildWindow(this); + } else { + if (!m_hiddenByClipping) + [m_parentCocoaWindow->m_nsWindow addChildWindow:m_nsWindow ordered:NSWindowAbove]; + siblings.append(this); + } + } else { + // Child windows have no NSWindow, link the NSViews instead. + [m_parentCocoaWindow->m_contentView addSubview : m_contentView]; + QRect rect = window()->geometry(); + // Prevent setting a (0,0) window size; causes opengl context + // "Invalid Drawable" warnings. + if (rect.isNull()) + rect.setSize(QSize(1, 1)); + NSRect frame = NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height()); + [m_contentView setFrame:frame]; + [m_contentView setHidden: YES]; + } + + const qreal opacity = qt_window_private(window())->opacity; + if (!qFuzzyCompare(opacity, qreal(1.0))) + setOpacity(opacity); + + // top-level QWindows may have an attached NSToolBar, call + // update function which will attach to the NSWindow. + if (!parentWindow) + updateNSToolbar(); +} + +void QCocoaWindow::reinsertChildWindow(QCocoaWindow *child) +{ + int childIndex = m_childWindows.indexOf(child); + Q_ASSERT(childIndex != -1); + + for (int i = childIndex; i < m_childWindows.size(); i++) { + NSWindow *nsChild = m_childWindows[i]->m_nsWindow; + if (i != childIndex) + [m_nsWindow removeChildWindow:nsChild]; + [m_nsWindow addChildWindow:nsChild ordered:NSWindowAbove]; + } +} + +void QCocoaWindow::requestActivateWindow() +{ + NSWindow *window = [m_contentView window]; + [ window makeFirstResponder : m_contentView ]; + [ window makeKeyWindow ]; +} + +bool QCocoaWindow::shouldUseNSPanel() +{ + Qt::WindowType type = window()->type(); + + return !m_isNSWindowChild && + ((type & Qt::Popup) == Qt::Popup || (type & Qt::Dialog) == Qt::Dialog); +} + +QCocoaNSWindow * QCocoaWindow::createNSWindow() +{ + QCocoaAutoReleasePool pool; + + QRect rect = initialGeometry(window(), window()->geometry(), defaultWindowWidth, defaultWindowHeight); + NSRect frame = qt_mac_flipRect(rect); + + Qt::WindowType type = window()->type(); + Qt::WindowFlags flags = window()->flags(); + + NSUInteger styleMask; + if (m_isNSWindowChild) { + styleMask = NSBorderlessWindowMask; + } else { + styleMask = windowStyleMask(flags); + } + QCocoaNSWindow *createdWindow = 0; + + // Use NSPanel for popup-type windows. (Popup, Tool, ToolTip, SplashScreen) + // and dialogs + if (shouldUseNSPanel()) { + QNSPanel *window; + window = [[QNSPanel alloc] initWithContentRect:frame + styleMask: styleMask + qPlatformWindow:this]; + if ((type & Qt::Popup) == Qt::Popup) + [window setHasShadow:YES]; + + [window setHidesOnDeactivate:(type & Qt::Tool) == Qt::Tool]; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + // Make popup winows show on the same desktop as the parent full-screen window. + [window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenAuxiliary]; + + if ((type & Qt::Popup) == Qt::Popup) + [window setAnimationBehavior:NSWindowAnimationBehaviorUtilityWindow]; + } +#endif + createdWindow = window; + } else { + QNSWindow *window; + window = [[QNSWindow alloc] initWithContentRect:frame + styleMask: styleMask + qPlatformWindow:this]; + createdWindow = window; + } + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if ([createdWindow respondsToSelector:@selector(setRestorable:)]) + [createdWindow setRestorable: NO]; +#endif + + NSInteger level = windowLevel(flags); + [createdWindow setLevel:level]; + + if (window()->format().alphaBufferSize() > 0) { + [createdWindow setBackgroundColor:[NSColor clearColor]]; + [createdWindow setOpaque:NO]; + } + + m_windowModality = window()->modality(); + + applyContentBorderThickness(createdWindow); + + QCocoaIntegration::instance()->setWindow(createdWindow, this); + + return createdWindow; +} + +void QCocoaWindow::setNSWindow(QCocoaNSWindow *window) +{ + if (window.contentView != m_contentView) { + [m_contentView setPostsFrameChangedNotifications: NO]; + [window setContentView:m_contentView]; + [m_contentView setPostsFrameChangedNotifications: YES]; + } +} + +void QCocoaWindow::removeChildWindow(QCocoaWindow *child) +{ + m_childWindows.removeOne(child); + [m_nsWindow removeChildWindow:child->m_nsWindow]; +} + +// Returns the current global screen geometry for the nswindow associated with this window. +QRect QCocoaWindow::windowGeometry() const +{ + if (!m_nsWindow || m_isNSWindowChild) + return geometry(); + + NSRect rect = [m_nsWindow frame]; + QPlatformScreen *onScreen = QPlatformScreen::platformScreenForWindow(window()); + int flippedY = onScreen->geometry().height() - rect.origin.y - rect.size.height; // account for nswindow inverted y. + QRect qRect = QRect(rect.origin.x, flippedY, rect.size.width, rect.size.height); + return qRect; +} + +// Returns a pointer to the parent QCocoaWindow for this window, or 0 if there is none. +QCocoaWindow *QCocoaWindow::parentCocoaWindow() const +{ + if (window() && window()->transientParent()) { + return static_cast(window()->transientParent()->handle()); + } + return 0; +} + +// Syncs the NSWindow minimize/maximize/fullscreen state with the current QWindow state +void QCocoaWindow::syncWindowState(Qt::WindowState newState) +{ + if (!m_nsWindow) + return; + // if content view width or height is 0 then the window animations will crash so + // do nothing except set the new state + NSRect contentRect = [contentView() frame]; + if (contentRect.size.width <= 0 || contentRect.size.height <= 0) { + qWarning() << Q_FUNC_INFO << "invalid window content view size, check your window geometry"; + m_synchedWindowState = newState; + return; + } + + Qt::WindowState predictedState = newState; + + if ((m_synchedWindowState & Qt::WindowMinimized) != (newState & Qt::WindowMinimized)) { + if (newState & Qt::WindowMinimized) { + [m_nsWindow performMiniaturize : m_nsWindow]; + } else { + [m_nsWindow deminiaturize : m_nsWindow]; + } + } + + if ((m_synchedWindowState & Qt::WindowMaximized) != (newState & Qt::WindowMaximized) || (m_effectivelyMaximized && newState == Qt::WindowNoState)) { + if ((m_synchedWindowState & Qt::WindowFullScreen) == (newState & Qt::WindowFullScreen)) { + [m_nsWindow zoom : m_nsWindow]; // toggles + m_effectivelyMaximized = !m_effectivelyMaximized; + } else if (!(newState & Qt::WindowMaximized)) { + // it would be nice to change the target geometry that toggleFullScreen will animate toward + // but there is no known way, so the maximized state is not possible at this time + predictedState = static_cast(static_cast(newState) | Qt::WindowMaximized); + m_effectivelyMaximized = true; + } + } + + if ((m_synchedWindowState & Qt::WindowFullScreen) != (newState & Qt::WindowFullScreen)) { + bool fakeFullScreen = true; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + if (window()->flags() & Qt::WindowFullscreenButtonHint) { + fakeFullScreen = false; + if (m_effectivelyMaximized && m_synchedWindowState == Qt::WindowFullScreen) + predictedState = Qt::WindowMaximized; + [m_nsWindow toggleFullScreen : m_nsWindow]; + } + } +#endif + if (fakeFullScreen) { + if (newState & Qt::WindowFullScreen) { + QScreen *screen = window()->screen(); + if (screen) { + if (m_normalGeometry.width() < 0) { + m_oldWindowFlags = m_windowFlags; + window()->setFlags(window()->flags() | Qt::FramelessWindowHint); + m_normalGeometry = windowGeometry(); + setGeometry(screen->geometry()); + m_presentationOptions = [NSApp presentationOptions]; + [NSApp setPresentationOptions : m_presentationOptions | NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationAutoHideDock]; + } + } + } else { + window()->setFlags(m_oldWindowFlags); + setGeometry(m_normalGeometry); + m_normalGeometry.setRect(0, 0, -1, -1); + [NSApp setPresentationOptions : m_presentationOptions]; + } + } + } + +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug() << "QCocoaWindow::syncWindowState" << newState << "actual" << predictedState << "was" << m_synchedWindowState << "effectively maximized" << m_effectivelyMaximized; +#endif + + // New state is now the current synched state + m_synchedWindowState = predictedState; +} + +bool QCocoaWindow::setWindowModified(bool modified) +{ + if (!m_nsWindow) + return false; + [m_nsWindow setDocumentEdited:(modified?YES:NO)]; + return true; +} + +void QCocoaWindow::setMenubar(QCocoaMenuBar *mb) +{ + m_menubar = mb; +} + +QCocoaMenuBar *QCocoaWindow::menubar() const +{ + return m_menubar; +} + +void QCocoaWindow::setWindowCursor(NSCursor *cursor) +{ + // This function is called (via QCocoaCursor) by Qt to set + // the cursor for this window. It can be called for a window + // that is not currenly under the mouse pointer (for example + // for a popup window.) Qt expects the set cursor to "stick": + // it should be accociated with the window until a different + // cursor is set. + if (m_windowCursor != cursor) { + [m_windowCursor release]; + m_windowCursor = [cursor retain]; + } + + // Use the built in cursor rect API if the QCocoaWindow has a NSWindow. + // Othervise, set the cursor if this window is under the mouse. In + // this case QNSView::cursorUpdate will set the cursor as the pointer + // moves. + if (m_nsWindow && m_qtView) { + [m_nsWindow invalidateCursorRectsForView : m_qtView]; + } else { + if (m_windowUnderMouse) + [cursor set]; + } +} + +void QCocoaWindow::registerTouch(bool enable) +{ + m_registerTouchCount += enable ? 1 : -1; + if (enable && m_registerTouchCount == 1) + [m_contentView setAcceptsTouchEvents:YES]; + else if (m_registerTouchCount == 0) + [m_contentView setAcceptsTouchEvents:NO]; +} + +void QCocoaWindow::setContentBorderThickness(int topThickness, int bottomThickness) +{ + m_topContentBorderThickness = topThickness; + m_bottomContentBorderThickness = bottomThickness; + bool enable = (topThickness > 0 || bottomThickness > 0); + m_drawContentBorderGradient = enable; + + applyContentBorderThickness(m_nsWindow); +} + +void QCocoaWindow::registerContentBorderArea(quintptr identifier, int upper, int lower) +{ + m_contentBorderAreas.insert(identifier, BorderRange(identifier, upper, lower)); + applyContentBorderThickness(m_nsWindow); +} + +void QCocoaWindow::setContentBorderAreaEnabled(quintptr identifier, bool enable) +{ + m_enabledContentBorderAreas.insert(identifier, enable); + applyContentBorderThickness(m_nsWindow); +} + +void QCocoaWindow::setContentBorderEnabled(bool enable) +{ + m_drawContentBorderGradient = enable; + applyContentBorderThickness(m_nsWindow); +} + +void QCocoaWindow::applyContentBorderThickness(NSWindow *window) +{ + if (!window) + return; + + if (!m_drawContentBorderGradient) { + [window setStyleMask:[window styleMask] & ~NSTexturedBackgroundWindowMask]; + return; + } + + // Find consecutive registered border areas, starting from the top. + QList ranges = m_contentBorderAreas.values(); + std::sort(ranges.begin(), ranges.end()); + int effectiveTopContentBorderThickness = m_topContentBorderThickness; + foreach (BorderRange range, ranges) { + // Skip disiabled ranges (typically hidden tool bars) + if (!m_enabledContentBorderAreas.value(range.identifier, false)) + continue; + + // Is this sub-range adjacent to or overlaping the + // existing total border area range? If so merge + // it into the total range, + if (range.upper <= (effectiveTopContentBorderThickness + 1)) + effectiveTopContentBorderThickness = qMax(effectiveTopContentBorderThickness, range.lower); + else + break; + } + + int effectiveBottomContentBorderThickness = m_bottomContentBorderThickness; + + [window setStyleMask:[window styleMask] | NSTexturedBackgroundWindowMask]; + + [window setContentBorderThickness:effectiveTopContentBorderThickness forEdge:NSMaxYEdge]; + [window setAutorecalculatesContentBorderThickness:NO forEdge:NSMaxYEdge]; + + [window setContentBorderThickness:effectiveBottomContentBorderThickness forEdge:NSMinYEdge]; + [window setAutorecalculatesContentBorderThickness:NO forEdge:NSMinYEdge]; +} + +void QCocoaWindow::updateNSToolbar() +{ + if (!m_nsWindow) + return; + + NSToolbar *toolbar = QCocoaIntegration::instance()->toolbar(window()); + + if ([m_nsWindow toolbar] == toolbar) + return; + + [m_nsWindow setToolbar: toolbar]; + [m_nsWindow setShowsToolbarButton:YES]; +} + +bool QCocoaWindow::testContentBorderAreaPosition(int position) const +{ + return m_nsWindow && m_drawContentBorderGradient && + 0 <= position && position < [m_nsWindow contentBorderThicknessForEdge: NSMaxYEdge]; +} + +qreal QCocoaWindow::devicePixelRatio() const +{ +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + NSWindow* window = [m_contentView window]; + if (window) { + return qreal([window backingScaleFactor]); + } else { + return 1.0; + } + } else +#endif + { + return 1.0; + } +} + +// Returns whether the window can be expose, which it can +// if it is on screen and has a valid geometry. +bool QCocoaWindow::isWindowExposable() +{ + QSize size = geometry().size(); + bool validGeometry = (size.width() > 0 && size.height() > 0); + bool validScreen = ([[m_contentView window] screen] != 0); + bool nonHiddenSuperView = ![[m_contentView superview] isHidden]; + return (validGeometry && validScreen && nonHiddenSuperView); +} + +// Exposes the window by posting an expose event to QWindowSystemInterface +void QCocoaWindow::exposeWindow() +{ + m_geometryUpdateExposeAllowed = true; + + if (!isWindowExposable()) + return; + + if (!m_isExposed) { + m_isExposed = true; + m_exposedGeometry = geometry(); + m_exposedDevicePixelRatio = devicePixelRatio(); + QWindowSystemInterface::handleExposeEvent(window(), QRegion(geometry())); + } +} + +// Obscures the window by posting an empty expose event to QWindowSystemInterface +void QCocoaWindow::obscureWindow() +{ + if (m_isExposed) { + m_geometryUpdateExposeAllowed = false; + m_isExposed = false; + QWindowSystemInterface::handleExposeEvent(window(), QRegion()); + } +} + +// Updates window geometry by posting an expose event to QWindowSystemInterface +void QCocoaWindow::updateExposedGeometry() +{ + // updateExposedGeometry is not allowed to send the initial expose. If you want + // that call exposeWindow(); + if (!m_geometryUpdateExposeAllowed) + return; + + if (!isWindowExposable()) + return; + + if (m_exposedGeometry == geometry() && m_exposedDevicePixelRatio == devicePixelRatio()) + return; + + m_isExposed = true; + m_exposedGeometry = geometry(); + m_exposedDevicePixelRatio = devicePixelRatio(); + QWindowSystemInterface::handleExposeEvent(window(), QRegion(geometry())); +} + +QWindow *QCocoaWindow::childWindowAt(QPoint windowPoint) +{ + QWindow *targetWindow = window(); + foreach (QObject *child, targetWindow->children()) + if (QWindow *childWindow = qobject_cast(child)) + if (QPlatformWindow *handle = childWindow->handle()) + if (handle->isExposed() && childWindow->geometry().contains(windowPoint)) + targetWindow = static_cast(handle)->childWindowAt(windowPoint - childWindow->position()); + + return targetWindow; +} + +QMargins QCocoaWindow::frameMargins() const +{ + NSRect frameW = [m_nsWindow frame]; + NSRect frameC = [m_nsWindow contentRectForFrameRect:frameW]; + + return QMargins(frameW.origin.x - frameC.origin.x, + (frameW.origin.y + frameW.size.height) - (frameC.origin.y + frameC.size.height), + (frameW.origin.x + frameW.size.width) - (frameC.origin.x + frameC.size.width), + frameC.origin.y - frameW.origin.y); +} + +void QCocoaWindow::setFrameStrutEventsEnabled(bool enabled) +{ + m_frameStrutEventsEnabled = enabled; +} diff --git a/Telegram/metaemoji_plugin_import.cpp b/Telegram/metaemoji_plugin_import.cpp new file mode 100644 index 000000000..7c0d09542 --- /dev/null +++ b/Telegram/metaemoji_plugin_import.cpp @@ -0,0 +1,13 @@ +// This file is autogenerated by qmake. It imports static plugin classes for +// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS. variables. +#include +Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin) +Q_IMPORT_PLUGIN(QDDSPlugin) +Q_IMPORT_PLUGIN(QICNSPlugin) +Q_IMPORT_PLUGIN(QICOPlugin) +Q_IMPORT_PLUGIN(QJp2Plugin) +Q_IMPORT_PLUGIN(QMngPlugin) +Q_IMPORT_PLUGIN(QTgaPlugin) +Q_IMPORT_PLUGIN(QTiffPlugin) +Q_IMPORT_PLUGIN(QWbmpPlugin) +Q_IMPORT_PLUGIN(QWebpPlugin) From 0c7baa86a463646b78ade79b0a68132d01b7100f Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 25 Jun 2014 11:25:55 +0400 Subject: [PATCH 10/14] version 0.5.5 - first release build of os x version --- .../_other/Style.plist => Packer.plist} | 18 +- Telegram/Packer.pro | 32 + Telegram/Packer.xcodeproj/project.pbxproj | 823 ++++++++++++++++++ Telegram/Packer.xcodeproj/qt_preprocess.mak | 52 ++ Telegram/Prepare.sh | 32 + Telegram/SourceFiles/_other/packer.cpp | 148 +++- Telegram/SourceFiles/_other/packer.h | 4 + Telegram/SourceFiles/_other/updater_osx.m | 207 +++++ Telegram/SourceFiles/application.cpp | 9 +- Telegram/SourceFiles/config.h | 8 +- Telegram/SourceFiles/history.cpp | 4 +- Telegram/SourceFiles/logs.cpp | 9 +- Telegram/SourceFiles/pspecific_mac.cpp | 682 ++++----------- Telegram/SourceFiles/pspecific_mac_p.h | 24 +- Telegram/SourceFiles/pspecific_mac_p.mm | 158 ++-- Telegram/SourceFiles/settings.cpp | 3 + Telegram/SourceFiles/settings.h | 1 + Telegram/SourceFiles/stdafx.h | 4 + Telegram/SourceFiles/window.cpp | 2 + Telegram/Telegram.pro | 3 - Telegram/Telegram.xcodeproj/project.pbxproj | 41 +- Telegram/Updater.xcodeproj/project.pbxproj | 237 +++++ Telegram/packer_plugin_import.cpp | 13 + 23 files changed, 1900 insertions(+), 614 deletions(-) rename Telegram/{SourceFiles/_other/Style.plist => Packer.plist} (73%) create mode 100644 Telegram/Packer.pro create mode 100644 Telegram/Packer.xcodeproj/project.pbxproj create mode 100644 Telegram/Packer.xcodeproj/qt_preprocess.mak create mode 100755 Telegram/Prepare.sh create mode 100644 Telegram/SourceFiles/_other/updater_osx.m create mode 100644 Telegram/Updater.xcodeproj/project.pbxproj create mode 100644 Telegram/packer_plugin_import.cpp diff --git a/Telegram/SourceFiles/_other/Style.plist b/Telegram/Packer.plist similarity index 73% rename from Telegram/SourceFiles/_other/Style.plist rename to Telegram/Packer.plist index 2df9c0113..f1583971a 100644 --- a/Telegram/SourceFiles/_other/Style.plist +++ b/Telegram/Packer.plist @@ -2,21 +2,21 @@ - NSPrincipalClass - NSApplication + CFBundleExecutable + Packer + CFBundleGetInfoString + Update packer utility for tdesktop CFBundleIconFile + CFBundleIdentifier + com.ddesktop.${PRODUCT_NAME:rfc1034identifier} CFBundlePackageType APPL - CFBundleGetInfoString - Created by Qt/QMake CFBundleSignature ???? - CFBundleExecutable - MetaStyle - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:rfc1034identifier} NOTE - This file was generated by Qt/QMake. + + NSPrincipalClass + NSApplication diff --git a/Telegram/Packer.pro b/Telegram/Packer.pro new file mode 100644 index 000000000..4fb98d457 --- /dev/null +++ b/Telegram/Packer.pro @@ -0,0 +1,32 @@ +QT += core + +CONFIG(debug, debug|release) { + DEFINES += _DEBUG + OBJECTS_DIR = ./../Mac/DebugIntermediatePacker + MOC_DIR = ./GeneratedFiles/Debug + DESTDIR = ./../Mac/DebugPacker +} +CONFIG(release, debug|release) { + OBJECTS_DIR = ./../Mac/ReleaseIntermediatePacker + MOC_DIR = ./GeneratedFiles/Release + DESTDIR = ./../Mac/ReleasePacker +} + +macx { + QMAKE_INFO_PLIST = ./SourceFiles/_other/Packer.plist + QMAKE_LFLAGS += -framework Cocoa +} + +SOURCES += \ + ./SourceFiles/_other/packer.cpp \ + +HEADERS += \ + ./SourceFiles/_other/packer.h \ + +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\ + ./../../Libraries/QtStatic/qtbase/include\ + ./../../Libraries/lzma/C + +LIBS += -lcrypto -lssl -lz + diff --git a/Telegram/Packer.xcodeproj/project.pbxproj b/Telegram/Packer.xcodeproj/project.pbxproj new file mode 100644 index 000000000..4ae0e10f9 --- /dev/null +++ b/Telegram/Packer.xcodeproj/project.pbxproj @@ -0,0 +1,823 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 6E977D353048DB44129F752B /* Preprocess */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */; + buildPhases = ( + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */, + ); + dependencies = ( + ); + name = Preprocess; + productName = "Qt Preprocess"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; + 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; + 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; }; + 52B661A713AE959F9084E291 /* packer_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; }; + 59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F0681BC551FC8A2B132FC646 /* qjp2 */; }; + 668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9742F24EE18EA44D52824F1E /* CoreServices.framework */; }; + 7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 31120EDB269DFF13E1D49847 /* qicns */; }; + 7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DCEFD9167C239650120B0145 /* qtga */; }; + 8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D4B32C2222F82AC56BADEB21 /* OpenGL.framework */; }; + 8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = A1A67BEAA744704B29168D39 /* IOKit.framework */; }; + 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D6193B79CECC9DD0142D1200 /* qtharfbuzzng */; }; + 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 04391BE7A8B9D811E255100A /* Qt5Gui */; }; + A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8CF51323544B886B8F4A2232 /* qwbmp */; }; + A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D3D1BE0BEA3AEE0551AD39AC /* qdds */; }; + B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 5A80A1907B6CFFB524C1E57D /* Qt5Core */; }; + BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */; }; + C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F2453BA07315EB9F34F1CD57 /* qtiff */; }; + D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D53D8E6A188E05078A114294 /* qcocoa */; }; + D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */; }; + E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */; }; + EAA05789DF6EBAD24D3EFF96 /* packer.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */; settings = {ATTRIBUTES = (); }; }; + F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = FCC237CA5AD60B9BA4447615 /* Foundation.framework */; }; + F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = ADC6308023253CEA51F86E21 /* qwebp */; }; + F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */; }; + F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9DFF62A901D70814B8A323D4 /* Carbon.framework */; }; + FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 83D37373949868693FB7816D /* qmng */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 072AB35C1955F39D00328D9B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6E977D353048DB44129F752B; + remoteInfo = "Qt Preprocess"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.3.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 5520A59148EC5EC44EF0D3CD /* Packer.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Packer.pro; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5AA25EFD83BC060B26945285 /* packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = packer.h; path = SourceFiles/_other/packer.h; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A5588D4B50885E2A9CAA5505 /* Packer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Packer.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = packer_plugin_import.cpp; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = packer.cpp; path = SourceFiles/_other/packer.cpp; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D1C883685E82D5676953459A /* Link Binary With Libraries */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */, + 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */, + 668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */, + F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */, + F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */, + 8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */, + E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */, + D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */, + F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */, + 8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */, + 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */, + D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */, + BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */, + A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */, + 7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */, + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */, + 59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */, + FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */, + 7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */, + C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */, + A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */, + F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, + 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, + 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, + ); + name = "Link Binary With Libraries"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2EB56BE3C2D93CDAB0C52E67 /* Sources */ = { + isa = PBXGroup; + children = ( + 73F2E45FDEB381A085D37A49 /* SourceFiles */, + CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */, + ); + name = Sources; + sourceTree = ""; + }; + 31562E815E3DF5B1A777D3EF /* _other */ = { + isa = PBXGroup; + children = ( + E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */, + 5AA25EFD83BC060B26945285 /* packer.h */, + ); + name = _other; + sourceTree = ""; + }; + 73F2E45FDEB381A085D37A49 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 31562E815E3DF5B1A777D3EF /* _other */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 74B182DB50CB5611B5C1C297 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 5520A59148EC5EC44EF0D3CD /* Packer.pro */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */, + AB745978DF0F41D1801ABDA6 /* .qmake.stash */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + AF39DD055C3EF8226FBE929D /* Frameworks */ = { + isa = PBXGroup; + children = ( + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, + DFD7912080BC557230093752 /* ApplicationServices.framework */, + 9742F24EE18EA44D52824F1E /* CoreServices.framework */, + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */, + FCC237CA5AD60B9BA4447615 /* Foundation.framework */, + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */, + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */, + D53D8E6A188E05078A114294 /* qcocoa */, + 9DFF62A901D70814B8A323D4 /* Carbon.framework */, + A1A67BEAA744704B29168D39 /* IOKit.framework */, + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */, + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */, + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */, + D3D1BE0BEA3AEE0551AD39AC /* qdds */, + 31120EDB269DFF13E1D49847 /* qicns */, + 8F500B5166907B6D9A7C3E3D /* qico */, + F0681BC551FC8A2B132FC646 /* qjp2 */, + 83D37373949868693FB7816D /* qmng */, + DCEFD9167C239650120B0145 /* qtga */, + F2453BA07315EB9F34F1CD57 /* qtiff */, + 8CF51323544B886B8F4A2232 /* qwbmp */, + ADC6308023253CEA51F86E21 /* qwebp */, + 04391BE7A8B9D811E255100A /* Qt5Gui */, + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */, + 5A80A1907B6CFFB524C1E57D /* Qt5Core */, + ); + name = Frameworks; + sourceTree = ""; + }; + E8C543AB96796ECAA2E65C57 /* Packer */ = { + isa = PBXGroup; + children = ( + 2EB56BE3C2D93CDAB0C52E67 /* Sources */, + 74B182DB50CB5611B5C1C297 /* Supporting Files */, + AF39DD055C3EF8226FBE929D /* Frameworks */, + FE0A091FDBFB3E9C31B7A1BD /* Products */, + ); + name = Packer; + sourceTree = ""; + }; + FE0A091FDBFB3E9C31B7A1BD /* Products */ = { + isa = PBXGroup; + children = ( + A5588D4B50885E2A9CAA5505 /* Packer.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + FD92333211119EF3CA40F70D /* Packer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */; + buildPhases = ( + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */, + D1C883685E82D5676953459A /* Link Binary With Libraries */, + ); + buildRules = ( + ); + dependencies = ( + A7CD3B627B093BF0A5BBA9AE /* PBXTargetDependency */, + ); + name = Packer; + productInstallPath = ../Mac/DebugPacker/; + productName = Packer; + productReference = A5588D4B50885E2A9CAA5505 /* Packer.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6DB9C3763D02B1415CD9D565 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; + buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = E8C543AB96796ECAA2E65C57 /* Packer */; + productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + FD92333211119EF3CA40F70D /* Packer */, + 6E977D353048DB44129F752B /* Preprocess */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "Qt Preprocessors"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "make -C . -f Packer.xcodeproj/qt_preprocess.mak"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EAA05789DF6EBAD24D3EFF96 /* packer.cpp in Compile Sources */, + 52B661A713AE959F9084E291 /* packer_plugin_import.cpp in Compile Sources */, + ); + name = "Compile Sources"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A7CD3B627B093BF0A5BBA9AE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6E977D353048DB44129F752B /* Preprocess */; + targetProxy = 072AB35C1955F39D00328D9B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 339EE1B2CC4FC24589A0EA95 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1.0; + DYLIB_CURRENT_VERSION = 1.0.0; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, + ../../Libraries/QtStatic/qtbase/include, + /usr/local/include, + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + GeneratedFiles/Debug, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Packer.plist; + INSTALL_DIR = "../Mac/$(CONFIGURATION)"; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_LDFLAGS = ( + "-headerpad_max_install_names", + "-stdlib=libc++", + "-lcrypto", + "-lssl", + "-L/usr/local/Qt-5.3.0/lib", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + "-llzma", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Release; + }; + 3AA6C32AC930069E80220CF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_COMPATIBILITY_VERSION = 1.0; + DYLIB_CURRENT_VERSION = 1.0.0; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, + ../../Libraries/QtStatic/qtbase/include, + /usr/local/include, + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + GeneratedFiles/Debug, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Packer.plist; + INSTALL_DIR = "../Mac/$(CONFIGURATION)"; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_LDFLAGS = ( + "-headerpad_max_install_names", + "-stdlib=libc++", + "-lcrypto", + "-lssl", + "-L/usr/local/Qt-5.3.0/lib", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + "-llzma", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Debug; + }; + 6666AA5E688052234F6758D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + }; + name = Release; + }; + 77418F46922677BB04ED38DD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 77418F46922677BB04ED38DD /* Debug */, + 6666AA5E688052234F6758D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3AA6C32AC930069E80220CF1 /* Debug */, + 339EE1B2CC4FC24589A0EA95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */; +} diff --git a/Telegram/Packer.xcodeproj/qt_preprocess.mak b/Telegram/Packer.xcodeproj/qt_preprocess.mak new file mode 100644 index 000000000..cb1a0f014 --- /dev/null +++ b/Telegram/Packer.xcodeproj/qt_preprocess.mak @@ -0,0 +1,52 @@ +############################################################################# +# Makefile for building: ../Mac/DebugPacker/Packer.app/Contents/MacOS/Packer +# Generated by qmake (3.0) (Qt 5.3.0) +# Project: Packer.pro +# Template: app +# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro +############################################################################# + +MAKEFILE = project.pbxproj + +MOC = /usr/local/Qt-5.3.0/bin/moc +UIC = +LEX = flex +LEXFLAGS = +YACC = yacc +YACCFLAGS = -d +DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB +INCPATH = -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +DEL_FILE = rm -f +MOVE = mv -f + +IMAGES = +PARSERS = +preprocess: $(PARSERS) compilers +clean preprocess_clean: parser_clean compiler_clean + +parser_clean: +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +check: first + +compilers: +compiler_objective_c_make_all: +compiler_objective_c_clean: +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_header_make_all: +compiler_moc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_rez_source_make_all: +compiler_rez_source_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: + diff --git a/Telegram/Prepare.sh b/Telegram/Prepare.sh new file mode 100755 index 000000000..dfdbb5c5a --- /dev/null +++ b/Telegram/Prepare.sh @@ -0,0 +1,32 @@ +AppVersionStr=0.5.5 +AppVersion=5005 + +if [ -d "deploy/$AppVersionStr" ]; then + echo "Deploy folder for version $AppVersionStr already exists!" + exit 1 +fi + +if [ -f "tupdate$AppVersion" ]; then + echo "Update file for version $AppVersion already exists!" + exit 1 +fi + +if [ ! -d "Telegram.app" ]; then + echo "Telegram.app not found!" + exit 1 +fi +echo "Preparing version $AppVersionStr, executing Packer.." +./Packer.app/Contents/MacOS/Packer -path Telegram.app -version $AppVersion +echo "Packer done!" + +if [ ! -d "deploy/" ]; then + mkdir "deploy" +fi +echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStr.."; +mkdir "deploy/$AppVersionStr" +mkdir "deploy/$AppVersionStr/Telegram" +mv Telegram.app deploy/$AppVersionStr/Telegram/ +mv tmacupd$AppVersion deploy/$AppVersionStr/ +mv Telegram.dmg deploy/$AppVersionStr/ +echo "Version $AppVersionStr prepared!"; + diff --git a/Telegram/SourceFiles/_other/packer.cpp b/Telegram/SourceFiles/_other/packer.cpp index b3b6097fb..49fe55453 100644 --- a/Telegram/SourceFiles/_other/packer.cpp +++ b/Telegram/SourceFiles/_other/packer.cpp @@ -111,12 +111,26 @@ int32 *hashSha1(const void *data, uint32 len, void *dest) { int main(int argc, char *argv[]) { + QString workDir; +#ifdef Q_OS_MAC + if (QDir(QString()).absolutePath() == "/") { + QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString(); + if (!first.isEmpty()) { + QFileInfo info(first); + if (info.exists()) { + QDir result(info.absolutePath() + "/../../.."); + workDir = result.absolutePath() + '/'; + } + } + } +#endif + QString remove; int version = 0; QFileInfoList files; for (int i = 0; i < argc; ++i) { if (string("-path") == argv[i] && i + 1 < argc) { - QString path = QString(argv[i + 1]); + QString path = workDir + QString(argv[i + 1]); QFileInfo info(path); files.push_back(info); if (remove.isEmpty()) remove = info.canonicalPath() + "/"; @@ -126,8 +140,12 @@ int main(int argc, char *argv[]) } if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999) { // not for release =) +#ifdef Q_OS_WIN cout << "Usage: Packer.exe -path {file} -version {version} OR Packer.exe -path {dir} -version {version}\n"; - return 0; +#elif defined Q_OS_MAC + cout << "Usage: Packer.app -path {file} -version {version} OR Packer.app -path {dir} -version {version}\n"; +#endif + return -1; } bool hasDirs = true; @@ -147,6 +165,10 @@ int main(int argc, char *argv[]) } else if (!info.isReadable()) { cout << "Can't read: " << info.absoluteFilePath().toUtf8().constData() << "\n"; return -1; + } else if (info.isHidden()) { + hasDirs = true; + files.erase(i); + break; } } } @@ -182,6 +204,9 @@ int main(int argc, char *argv[]) } QByteArray inner = f.readAll(); stream << name << quint32(inner.size()) << inner; +#if defined Q_OS_MAC || defined Q_OS_LINUX + stream << (QFileInfo(fullName).isExecutable() ? true : false); +#endif } if (stream.status() != QDataStream::Ok) { cout << "Stream status is bad: " << stream.status() << "\n"; @@ -193,20 +218,19 @@ int main(int argc, char *argv[]) cout << "Compression start, size: " << resultSize << "\n"; QByteArray compressed, resultCheck; - +#ifdef Q_OS_WIN // use Lzma SDK for win const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size size_t compressedLen = compressed.size() - hSize; - uchar outProps[LZMA_PROPS_SIZE]; size_t outPropsSize = LZMA_PROPS_SIZE; int res = LzmaCompress((uchar*)(compressed.data() + hSize), &compressedLen, (const uchar*)(result.constData()), result.size(), (uchar*)(compressed.data() + hSigLen + hShaLen), &outPropsSize, 9, 64 * 1024 * 1024, 0, 0, 0, 0, 0); if (res != SZ_OK) { cout << "Error in compression: " << res << "\n"; return -1; } - compressed.resize(hSize + compressedLen); + compressed.resize(int(hSize + compressedLen)); memcpy(compressed.data() + hSigLen + hShaLen + hPropsLen, &resultSize, hOriginalSizeLen); cout << "Compressed to size: " << compressedLen << "\n"; @@ -228,10 +252,112 @@ int main(int argc, char *argv[]) cout << "Uncompress failed: " << uncompressRes << "\n"; return -1; } - if (resultLen != result.size()) { + if (resultLen != size_t(result.size())) { cout << "Uncompress bad size: " << resultLen << ", was: " << result.size() << "\n"; return -1; } +#else // use liblzma for others + const int32 hSigLen = 128, hShaLen = 20, hPropsLen = 0, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hOriginalSizeLen; // header + + compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size + + size_t compressedLen = compressed.size() - hSize; + + lzma_stream stream = LZMA_STREAM_INIT; + + int preset = 9 | LZMA_PRESET_EXTREME; + lzma_ret ret = lzma_easy_encoder(&stream, preset, LZMA_CHECK_CRC64); + if (ret != LZMA_OK) { + const char *msg; + switch (ret) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; + case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error initializing the encoder: " << msg << " (error code " << ret << ")\n"; + return -1; + } + + stream.avail_in = resultSize; + stream.next_in = (uint8_t*)result.constData(); + stream.avail_out = compressedLen; + stream.next_out = (uint8_t*)(compressed.data() + hSize); + + lzma_ret res = lzma_code(&stream, LZMA_FINISH); + compressedLen -= stream.avail_out; + lzma_end(&stream); + if (res != LZMA_OK && res != LZMA_STREAM_END) { + const char *msg; + switch (res) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_DATA_ERROR: msg = "File size limits exceeded"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error in compression: " << msg << " (error code " << res << ")\n"; + return -1; + } + + compressed.resize(int(hSize + compressedLen)); + memcpy(compressed.data() + hSigLen + hShaLen, &resultSize, hOriginalSizeLen); + + cout << "Compressed to size: " << compressedLen << "\n"; + + cout << "Checking uncompressed..\n"; + + int32 resultCheckLen; + memcpy(&resultCheckLen, compressed.constData() + hSigLen + hShaLen, hOriginalSizeLen); + if (resultCheckLen <= 0 || resultCheckLen > 1024 * 1024 * 1024) { + cout << "Bad result len: " << resultCheckLen << "\n"; + return -1; + } + resultCheck.resize(resultCheckLen); + + size_t resultLen = resultCheck.size(); + + stream = LZMA_STREAM_INIT; + + ret = lzma_stream_decoder(&stream, UINT64_MAX, LZMA_CONCATENATED); + if (ret != LZMA_OK) { + const char *msg; + switch (ret) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; + case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error initializing the decoder: " << msg << " (error code " << ret << ")\n"; + return -1; + } + + stream.avail_in = compressedLen; + stream.next_in = (uint8_t*)(compressed.constData() + hSize); + stream.avail_out = resultLen; + stream.next_out = (uint8_t*)resultCheck.data(); + + res = lzma_code(&stream, LZMA_FINISH); + if (stream.avail_in) { + cout << "Error in decompression, " << stream.avail_in << " bytes left in _in of " << compressedLen << " whole.\n"; + return -1; + } else if (stream.avail_out) { + cout << "Error in decompression, " << stream.avail_out << " bytes free left in _out of " << resultLen << " whole.\n"; + return -1; + } + lzma_end(&stream); + if (res != LZMA_OK && res != LZMA_STREAM_END) { + const char *msg; + switch (res) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_FORMAT_ERROR: msg = "The input data is not in the .xz format"; break; + case LZMA_OPTIONS_ERROR: msg = "Unsupported compression options"; break; + case LZMA_DATA_ERROR: msg = "Compressed file is corrupt"; break; + case LZMA_BUF_ERROR: msg = "Compressed data is truncated or otherwise corrupt"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error in decompression: " << msg << " (error code " << res << ")\n"; + return -1; + } +#endif if (memcmp(result.constData(), resultCheck.constData(), resultLen)) { cout << "Data differ :(\n"; return -1; @@ -242,7 +368,7 @@ int main(int argc, char *argv[]) cout << "Counting SHA1 hash..\n"; uchar sha1Buffer[20]; - memcpy(compressed.data() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, compressedLen + hPropsLen + hOriginalSizeLen, sha1Buffer), hShaLen); // count sha1 + memcpy(compressed.data() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, uint32(compressedLen + hPropsLen + hOriginalSizeLen), sha1Buffer), hShaLen); // count sha1 uint32 siglen = 0; @@ -283,7 +409,15 @@ int main(int argc, char *argv[]) cout << "Signature verified!\n"; RSA_free(pbKey); +#ifdef Q_OS_WIN QString outName(QString("tupdate%1").arg(version)); +#elif defined Q_OS_MAC + QString outName(QString("tmacupd%1").arg(version)); +#elif defined Q_OS_LINUX + QString outName(QString("tlinuxupd%1").arg(version)); +#else +#error Unknown platform! +#endif QFile out(outName); if (!out.open(QIODevice::WriteOnly)) { cout << "Can't open '" << outName.toUtf8().constData() << "' for write..\n"; diff --git a/Telegram/SourceFiles/_other/packer.h b/Telegram/SourceFiles/_other/packer.h index 5679cfdad..3ce13e004 100644 --- a/Telegram/SourceFiles/_other/packer.h +++ b/Telegram/SourceFiles/_other/packer.h @@ -34,7 +34,11 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include #include +#ifdef Q_OS_WIN // use Lzma SDK for win #include +#else +#include +#endif #include #include diff --git a/Telegram/SourceFiles/_other/updater_osx.m b/Telegram/SourceFiles/_other/updater_osx.m new file mode 100644 index 000000000..7fe9d245e --- /dev/null +++ b/Telegram/SourceFiles/_other/updater_osx.m @@ -0,0 +1,207 @@ +/* +This file is part of Telegram Desktop, +an unofficial desktop messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +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://tdesktop.com +*/ +#import + +NSString *appName = @"Telegram.app"; +NSString *appDir = nil; +NSString *workDir = nil; + +#ifdef _DEBUG +BOOL _debug = YES; +#else +BOOL _debug = NO; +#endif + +NSFileHandle *_logFile = nil; +void openLog() { + if (!_debug || _logFile) return; + NSString *logDir = [workDir stringByAppendingString:@"DebugLogs"]; + if (![[NSFileManager defaultManager] createDirectoryAtPath:logDir withIntermediateDirectories:YES attributes:nil error:nil]) { + return; + } + + NSDateFormatter *fmt = [[NSDateFormatter alloc] initWithDateFormat:@"DebugLogs/%Y%m%d %H%M%S_upd.txt" allowNaturalLanguage:NO]; + NSString *logPath = [workDir stringByAppendingString:[fmt stringFromDate:[NSDate date]]]; + [[NSFileManager defaultManager] createFileAtPath:logPath contents:nil attributes:nil]; + _logFile = [NSFileHandle fileHandleForWritingAtPath:logPath]; +} + +void closeLog() { + if (!_logFile) return; + + [_logFile closeFile]; +} + +void writeLog(NSString *msg) { + if (!_logFile) return; + + [_logFile writeData:[[msg stringByAppendingString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding]]; + [_logFile synchronizeFile]; +} + +void delFolder() { + [[NSFileManager defaultManager] removeItemAtPath:[workDir stringByAppendingString:@"tupdates/ready"] error:nil]; + rmdir([[workDir stringByAppendingString:@"tupdates"] fileSystemRepresentation]); +} + +int main(int argc, const char * argv[]) { + NSString *path = [[NSBundle mainBundle] bundlePath]; + if (!path) { + return -1; + } + NSRange range = [path rangeOfString:appName options:NSBackwardsSearch]; + if (range.location == NSNotFound) { + return -1; + } + appDir = [path substringToIndex:range.location > 0 ? range.location : 0]; + + openLog(); + pid_t procId = 0; + BOOL update = YES, toSettings = NO, autoStart = NO; + NSString *key = nil; + for (int i = 0; i < argc; ++i) { + if ([@"-workpath" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + if (++i < argc) { + workDir = [NSString stringWithUTF8String:argv[i]]; + } + } else if ([@"-procid" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + if (++i < argc) { + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; + procId = [[formatter numberFromString:[NSString stringWithUTF8String:argv[i]]] intValue]; + } + } else if ([@"-noupdate" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + update = NO; + } else if ([@"-tosettings" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + toSettings = YES; + } else if ([@"-autostart" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + autoStart = YES; + } else if ([@"-debug" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + _debug = YES; + } else if ([@"-key" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + if (++i < argc) key = [NSString stringWithUTF8String:argv[i]]; + } + } + if (!workDir) workDir = appDir; + openLog(); + NSMutableArray *argsArr = [[NSMutableArray alloc] initWithCapacity:argc]; + for (int i = 0; i < argc; ++i) { + [argsArr addObject:[NSString stringWithUTF8String:argv[i]]]; + } + writeLog([[NSArray arrayWithObjects:@"Arguments: '", [argsArr componentsJoinedByString:@"' '"], @"'..", nil] componentsJoinedByString:@""]); + if (key) writeLog([@"Key: " stringByAppendingString:key]); + if (toSettings) writeLog(@"To Settings!"); + + if (procId) { + NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + for (int i = 0; i < 5 && app != nil && ![app isTerminated]; ++i) { + usleep(200000); + app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + } + if (app) [app forceTerminate]; + app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + for (int i = 0; i < 5 && app != nil && ![app isTerminated]; ++i) { + usleep(200000); + app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + } + } + + if (update) { + writeLog(@"Starting update files iteration!"); + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *srcDir = [workDir stringByAppendingString:@"tupdates/ready/"]; + NSArray *keys = [NSArray arrayWithObject:NSURLIsDirectoryKey]; + NSDirectoryEnumerator *enumerator = [fileManager + enumeratorAtURL:[NSURL fileURLWithPath:[workDir stringByAppendingString:@"tupdates/ready"]] + includingPropertiesForKeys:keys + options:0 + errorHandler:^(NSURL *url, NSError *error) { + return NO; + }]; + for (NSURL *url in enumerator) { + NSString *srcPath = [url path]; + writeLog([@"Handling file " stringByAppendingString:srcPath]); + NSRange r = [srcPath rangeOfString:srcDir]; + if (r.location != 0) { + writeLog([@"Bad file found, no base path " stringByAppendingString:srcPath]); + delFolder(); + break; + } + NSString *pathPart = [srcPath substringFromIndex:r.length]; + if ([pathPart rangeOfString:appName].location != 0) { + writeLog([@"Skipping not app file " stringByAppendingString:srcPath]); + continue; + } + NSString *dstPath = [appDir stringByAppendingString:pathPart]; + NSError *error; + NSNumber *isDirectory = nil; + writeLog([[NSArray arrayWithObjects: @"Copying file ", srcPath, @" to ", dstPath, nil] componentsJoinedByString:@""]); + if (![url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&error]) { + writeLog([@"Failed to get IsDirectory for file " stringByAppendingString:[url path]]); + delFolder(); + break; + } + if ([isDirectory boolValue]) { + if (![fileManager createDirectoryAtPath:dstPath withIntermediateDirectories:YES attributes:nil error:nil]) { + writeLog([@"Failed to force path for directory " stringByAppendingString:dstPath]); + delFolder(); + break; + } + } else if ([fileManager fileExistsAtPath:dstPath]) { + if (![[NSData dataWithContentsOfFile:srcPath] writeToFile:dstPath atomically:YES]) { + writeLog([@"Failed to edit file " stringByAppendingString:dstPath]); + delFolder(); + break; + } + } else { + if (![fileManager copyItemAtPath:srcPath toPath:dstPath error:nil]) { + writeLog([@"Failed to copy file to " stringByAppendingString:dstPath]); + delFolder(); + break; + } + } + } + delFolder(); + } + + NSString *appPath = [[NSArray arrayWithObjects:appDir, appName, nil] componentsJoinedByString:@""]; + NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:@"-noupdate", nil]; + if (toSettings) [args addObject:@"-tosettings"]; + if (_debug) [args addObject:@"-debug"]; + if (autoStart) [args addObject:@"-autostart"]; + if (key) { + [args addObject:@"-key"]; + [args addObject:key]; + } + writeLog([[NSArray arrayWithObjects:@"Running application '", appPath, @"' with args '", [args componentsJoinedByString:@"' '"], @"'..", nil] componentsJoinedByString:@""]); + NSError *error = nil; + NSRunningApplication *result = [[NSWorkspace sharedWorkspace] + launchApplicationAtURL:[NSURL fileURLWithPath:appPath] + options:NSWorkspaceLaunchDefault + configuration:[NSDictionary + dictionaryWithObject:args + forKey:NSWorkspaceLaunchConfigurationArguments] + error:&error]; + if (!result) { + writeLog([@"Could not run application, error: " stringByAppendingString:error ? [error localizedDescription] : @"(nil)"]); + } + closeLog(); + return result ? 0 : -1; +} + diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 4a71418d8..395b23c56 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -183,7 +183,7 @@ void Application::updateGotCurrent() { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^tupdate\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { QFile(i->absoluteFilePath()).remove(); } } @@ -191,6 +191,7 @@ void Application::updateGotCurrent() { emit updateLatest(); } startUpdateCheck(true); + App::writeConfig(); } void Application::updateFailedCurrent(QNetworkReply::NetworkError e) { @@ -409,16 +410,16 @@ void Application::startUpdateCheck(bool forceWait) { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^tupdate\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { sendRequest = true; } } } } - if ((cManyInstance() && !cDebug()) || cPlatform() == dbipMac) return; // only main instance is updating + if ((cManyInstance() && !cDebug()) || cPlatform() == dbipLinux) return; // only main instance is updating if (sendRequest) { - QNetworkRequest checkVersion(QUrl(qsl("http://tdesktop.com/win/tupdates/current"))); + QNetworkRequest checkVersion(cUpdateURL()); if (updateReply) updateReply->deleteLater(); App::setProxySettings(updateManager); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index ce996a5c8..bc4f5f8fd 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,13 @@ Copyright (c) 2014 John Preston, https://tdesktop.com */ #pragma once -static const int32 AppVersion = 5004; -static const wchar_t *AppVersionStr = L"0.5.4"; +static const int32 AppVersion = 5005; +static const wchar_t *AppVersionStr = L"0.5.5"; +#ifdef Q_OS_WIN static const wchar_t *AppName = L"Telegram Win (Unofficial)"; +#else +static const wchar_t *AppName = L"Telegram Desktop"; +#endif static const wchar_t *AppId = L"{53F49750-6209-4FBF-9CA8-7A333C87D1ED}"; #include "settings.h" diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index ca838cd8d..226293581 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -528,7 +528,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { // draw check if (last->out() && last->needCheck()) { - const QRect *check; + const style::sprite *check; if (last->id > 0) { if (last->unread()) { check = act ? &st::dlgActiveCheckImg : &st::dlgCheckImg; @@ -538,7 +538,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { } else { check = act ? &st::dlgActiveSendImg : &st::dlgSendImg; } - rectForName.setWidth(rectForName.width() - check->width() - st::dlgCheckSkip); + rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dlgCheckSkip); p.drawPixmap(QPoint(rectForName.left() + rectForName.width() + st::dlgCheckLeft, rectForName.top() + st::dlgCheckTop), App::sprite(), *check); } diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index d09a6581f..8b6c30e41 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -69,9 +69,8 @@ void debugLogWrite(const char *file, int32 line, const QString &v) { debugLogStream->flush(); #ifdef Q_OS_WIN OutputDebugString(reinterpret_cast(msg.utf16())); -#endif -#ifdef Q_OS_MAC - objc_outputDebugString(msg.toUtf8().constData()); +#elif defined Q_OS_MAC + objc_outputDebugString(msg); #endif } } @@ -118,9 +117,7 @@ void logsInit() { if (mainLogStream) return; #ifdef Q_OS_MAC - if (QDir(cWorkingDir()).absolutePath() == qsl("/")) { - cSetWorkingDir(cExeDir()); - } + cForceWorkingDir(psAppDataPath()); #endif QString oldDir = cWorkingDir(); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 60f108282..27045ad52 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -34,63 +34,9 @@ namespace { bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) { Window *wnd = Application::wnd(); if (!wnd) return false; -/* - MSG *msg = (MSG*)message; - if (msg->message == WM_ENDSESSION) { - App::quit(); - return false; - } - if (msg->hwnd == wnd->psHwnd() || msg->hwnd && !wnd->psHwnd()) { - return mainWindowEvent(msg->hwnd, msg->message, msg->wParam, msg->lParam, (LRESULT*)result); - }*/ + return false; } -/* - bool mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result) { - if (tbCreatedMsgId && msg == tbCreatedMsgId) { - if (CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&tbListInterface) != S_OK) { - tbListInterface = 0; - } - } - switch (msg) { - - case WM_DESTROY: { - App::quit(); - } return false; - - case WM_ACTIVATE: { - if (LOWORD(wParam) == WA_CLICKACTIVE) { - App::wnd()->inactivePress(true); - } - } return false; - - case WM_SIZE: { - if (App::wnd()) { - if (wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED || wParam == SIZE_MINIMIZED) { - if (wParam != SIZE_RESTORED || App::wnd()->windowState() != Qt::WindowNoState) { - Qt::WindowState state = Qt::WindowNoState; - if (wParam == SIZE_MAXIMIZED) { - state = Qt::WindowMaximized; - } else if (wParam == SIZE_MINIMIZED) { - state = Qt::WindowMinimized; - } - emit App::wnd()->windowHandle()->windowStateChanged(state); - } else { - App::wnd()->psUpdatedPosition(); - } - int changes = (wParam == SIZE_MINIMIZED || wParam == SIZE_MAXIMIZED) ? _PsShadowHidden : (_PsShadowResized | _PsShadowShown); - _psShadowWindows.update(changes); - } - } - } return false; - - case WM_MOVE: { - _psShadowWindows.update(_PsShadowMoved); - App::wnd()->psUpdatedPosition(); - } return false; - } - return false; - }*/ }; _PsEventFilter *_psEventFilter = 0; @@ -176,50 +122,9 @@ bool PsMainWindow::psIsActive(int state) const { } void PsMainWindow::psRefreshTaskbarIcon() { - /*QWidget *w = new QWidget(this); - w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); - w->setGeometry(x() + 1, y() + 1, 1, 1); - QPalette p(w->palette()); - p.setColor(QPalette::Background, st::titleBG->c); - QWindow *wnd = w->windowHandle(); - w->setPalette(p); - w->show(); - w->activateWindow(); - delete w;*/ } void PsMainWindow::psUpdateWorkmode() { - /*switch (cWorkMode()) { - case dbiwmWindowAndTray: { - setupTrayIcon(); - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); - psRefreshTaskbarIcon(); - } - } break; - - case dbiwmTrayOnly: { - setupTrayIcon(); - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (!psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, (LONG)ps_tbHider_hWnd); - } - } break; - - case dbiwmWindowOnly: { - if (trayIconMenu) trayIconMenu->deleteLater(); - trayIconMenu = 0; - if (trayIcon) trayIcon->deleteLater(); - trayIcon = 0; - - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); - psRefreshTaskbarIcon(); - } - } break; - }*/ } void PsMainWindow::psUpdateCounter() { @@ -228,59 +133,38 @@ void PsMainWindow::psUpdateCounter() { setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - _private.setWindowBadge(counter ? cnt.toUtf8().constData() : ""); + _private.setWindowBadge(counter ? cnt : QString()); } -/*namespace { - HMONITOR enumMonitor = 0; - RECT enumMonitorWork; - - BOOL CALLBACK _monitorEnumProc( - _In_ HMONITOR hMonitor, - _In_ HDC hdcMonitor, - _In_ LPRECT lprcMonitor, - _In_ LPARAM dwData - ) { - MONITORINFOEX info; - info.cbSize = sizeof(info); - GetMonitorInfo(hMonitor, &info); - if (dwData == hashCrc32(info.szDevice, sizeof(info.szDevice))) { - enumMonitor = hMonitor; - enumMonitorWork = info.rcWork; - return FALSE; - } - return TRUE; - } -}*/ - void PsMainWindow::psInitSize() { setMinimumWidth(st::wndMinWidth); setMinimumHeight(st::wndMinHeight); TWindowPos pos(cWindowPos()); - if (cDebug()) { // temp while design - pos.w = 800; - pos.h = 600; - } QRect avail(QDesktopWidget().availableGeometry()); bool maximized = false; QRect geom(avail.x() + (avail.width() - st::wndDefWidth) / 2, avail.y() + (avail.height() - st::wndDefHeight) / 2, st::wndDefWidth, st::wndDefHeight); if (pos.w && pos.h) { - if (pos.y < 0) pos.y = 0; - //enumMonitor = 0; - //EnumDisplayMonitors(0, 0, &_monitorEnumProc, pos.moncrc); - /*if (enumMonitor) { - int32 w = enumMonitorWork.right - enumMonitorWork.left, h = enumMonitorWork.bottom - enumMonitorWork.top; - if (w >= st::wndMinWidth && h >= st::wndMinHeight) { - if (pos.w > w) pos.w = w; - if (pos.h > h) pos.h = h; - pos.x += enumMonitorWork.left; - pos.y += enumMonitorWork.top; - if (pos.x < enumMonitorWork.right - 10 && pos.y < enumMonitorWork.bottom - 10) { - geom = QRect(pos.x, pos.y, pos.w, pos.h); + QList screens = App::app()->screens(); + for (QList::const_iterator i = screens.cbegin(), e = screens.cend(); i != e; ++i) { + QByteArray name = (*i)->name().toUtf8(); + if (pos.moncrc == hashCrc32(name.constData(), name.size())) { + QRect screen((*i)->geometry()); + int32 w = screen.width(), h = screen.height(); + if (w >= st::wndMinWidth && h >= st::wndMinHeight) { + if (pos.w > w) pos.w = w; + if (pos.h > h) pos.h = h; + pos.x += screen.x(); + pos.y += screen.y(); + if (pos.x < screen.x() + screen.width() - 10 && pos.y < screen.y() + screen.height() - 10) { + geom = QRect(pos.x, pos.y, pos.w, pos.h); + } } + break; } - }*/ + } + + if (pos.y < 0) pos.y = 0; maximized = pos.maximized; } setGeometry(geom); @@ -300,31 +184,36 @@ void PsMainWindow::psInitFrameless() { void PsMainWindow::psSavePosition(Qt::WindowState state) { if (state == Qt::WindowActive) state = windowHandle()->windowState(); if (state == Qt::WindowMinimized || !posInited) return; -/* + TWindowPos pos(cWindowPos()), curPos = pos; if (state == Qt::WindowMaximized) { curPos.maximized = 1; } else { - RECT w; - GetWindowRect(ps_hWnd, &w); - curPos.x = w.left; - curPos.y = w.top; - curPos.w = w.right - w.left; - curPos.h = w.bottom - w.top; + QRect r(geometry()); + curPos.x = r.x(); + curPos.y = r.y(); + curPos.w = r.width(); + curPos.h = r.height(); curPos.maximized = 0; } - HMONITOR hMonitor = MonitorFromWindow(ps_hWnd, MONITOR_DEFAULTTONEAREST); - if (hMonitor) { - MONITORINFOEX info; - info.cbSize = sizeof(info); - GetMonitorInfo(hMonitor, &info); - if (!curPos.maximized) { - curPos.x -= info.rcWork.left; - curPos.y -= info.rcWork.top; + int px = curPos.x + curPos.w / 2, py = curPos.y + curPos.h / 2, d = 0; + QScreen *chosen = 0; + QList screens = App::app()->screens(); + for (QList::const_iterator i = screens.cbegin(), e = screens.cend(); i != e; ++i) { + int dx = (*i)->geometry().x() + (*i)->geometry().width() / 2 - px; if (dx < 0) dx = -dx; + int dy = (*i)->geometry().y() + (*i)->geometry().height() / 2 - py; if (dy < 0) dy = -dy; + if (!chosen || dx + dy < d) { + d = dx + dy; + chosen = *i; } - curPos.moncrc = hashCrc32(info.szDevice, sizeof(info.szDevice)); + } + if (chosen) { + curPos.x -= chosen->geometry().x(); + curPos.y -= chosen->geometry().y(); + QByteArray name = chosen->name().toUtf8(); + curPos.moncrc = hashCrc32(name.constData(), name.size()); } if (curPos.w >= st::wndMinWidth && curPos.h >= st::wndMinHeight) { @@ -332,20 +221,20 @@ void PsMainWindow::psSavePosition(Qt::WindowState state) { cSetWindowPos(curPos); App::writeConfig(); } - }*/ + } } void PsMainWindow::psUpdatedPosition() { - //psUpdatedPositionTimer.start(4000); + psUpdatedPositionTimer.start(4000); } void PsMainWindow::psStateChanged(Qt::WindowState state) { psUpdateSysMenu(state); psUpdateMargins(); - /*if (state == Qt::WindowMinimized && GetWindowLong(ps_hWnd, GWL_HWNDPARENT)) { - minimizeToTray(); - } - psSavePosition(state);*/ +// if (state == Qt::WindowMinimized && GetWindowLong(ps_hWnd, GWL_HWNDPARENT)) { +// minimizeToTray(); +// } + psSavePosition(state); } void PsMainWindow::psFirstShow() { @@ -620,7 +509,7 @@ void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { _private.showOverAll(notify->winId()); --count; } else { - _private.showNotify(notifyItem->history()->peer->id, notifyItem->history()->peer->name.toUtf8().constData(), notifyItem->notificationHeader().toUtf8().constData(), notifyItem->notificationText().toUtf8().constData()); + _private.showNotify(notifyItem->history()->peer->id, notifyItem->history()->peer->name, notifyItem->notificationHeader(), notifyItem->notificationText()); } uint64 ms = getms(); @@ -1083,23 +972,7 @@ void PsUpdateDownloader::partFailed(QNetworkReply::NetworkError e) { } void PsUpdateDownloader::deleteDir(const QString &dir) { - /*std::wstring wDir = QDir::toNativeSeparators(dir).toStdWString(); - WCHAR path[4096]; - memcpy(path, wDir.c_str(), (wDir.size() + 1) * sizeof(WCHAR)); - path[wDir.size() + 1] = 0; - SHFILEOPSTRUCT file_op = { - NULL, - FO_DELETE, - path, - L"", - FOF_NOCONFIRMATION | - FOF_NOERRORUI | - FOF_SILENT, - false, - 0, - L"" - }; - int res = SHFileOperation(&file_op);*/ + objc_deleteDir(dir); } void PsUpdateDownloader::fatalFail() { @@ -1111,15 +984,25 @@ void PsUpdateDownloader::clearAll() { deleteDir(cWorkingDir() + qsl("tupdates")); } +#ifdef Q_OS_WIN +typedef DWORD VerInt; +typedef WCHAR VerChar; +#else +typedef int VerInt; +typedef wchar_t VerChar; +#endif + void PsUpdateDownloader::unpackUpdate() { - /*QByteArray packed; + QByteArray packed; if (!outputFile.open(QIODevice::ReadOnly)) { LOG(("Update Error: cant read updates file!")); return fatalFail(); } - +#ifdef Q_OS_WIN // use Lzma SDK for win const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header - +#else + const int32 hSigLen = 128, hShaLen = 20, hPropsLen = 0, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hOriginalSizeLen; // header +#endif QByteArray compressed = outputFile.readAll(); int32 compressedLen = compressed.size() - hSize; if (compressedLen <= 0) { @@ -1164,12 +1047,57 @@ void PsUpdateDownloader::unpackUpdate() { uncompressed.resize(uncompressedLen); size_t resultLen = uncompressed.size(); +#ifdef Q_OS_WIN // use Lzma SDK for win SizeT srcLen = compressedLen; int uncompressRes = LzmaUncompress((uchar*)uncompressed.data(), &resultLen, (const uchar*)(compressed.constData() + hSize), &srcLen, (const uchar*)(compressed.constData() + hSigLen + hShaLen), LZMA_PROPS_SIZE); if (uncompressRes != SZ_OK) { LOG(("Update Error: could not uncompress lzma, code: %1").arg(uncompressRes)); return fatalFail(); } +#else + lzma_stream stream = LZMA_STREAM_INIT; + + lzma_ret ret = lzma_stream_decoder(&stream, UINT64_MAX, LZMA_CONCATENATED); + if (ret != LZMA_OK) { + const char *msg; + switch (ret) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; + case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + LOG(("Error initializing the decoder: %1 (error code %2)").arg(msg).arg(ret)); + return fatalFail(); + } + + stream.avail_in = compressedLen; + stream.next_in = (uint8_t*)(compressed.constData() + hSize); + stream.avail_out = resultLen; + stream.next_out = (uint8_t*)uncompressed.data(); + + lzma_ret res = lzma_code(&stream, LZMA_FINISH); + if (stream.avail_in) { + LOG(("Error in decompression, %1 bytes left in _in of %2 whole.").arg(stream.avail_in).arg(compressedLen)); + return fatalFail(); + } else if (stream.avail_out) { + LOG(("Error in decompression, %1 bytes free left in _out of %2 whole.").arg(stream.avail_out).arg(resultLen)); + return fatalFail(); + } + lzma_end(&stream); + if (res != LZMA_OK && res != LZMA_STREAM_END) { + const char *msg; + switch (res) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_FORMAT_ERROR: msg = "The input data is not in the .xz format"; break; + case LZMA_OPTIONS_ERROR: msg = "Unsupported compression options"; break; + case LZMA_DATA_ERROR: msg = "Compressed file is corrupt"; break; + case LZMA_BUF_ERROR: msg = "Compressed data is truncated or otherwise corrupt"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + LOG(("Error in decompression: %1 (error code %2)").arg(msg).arg(res)); + return fatalFail(); + } +#endif tempDir.mkdir(tempDir.absolutePath()); @@ -1200,22 +1128,30 @@ void PsUpdateDownloader::unpackUpdate() { LOG(("Update Error: update is empty!")); return fatalFail(); } - for (int32 i = 0; i < filesCount; ++i) { + for (uint32 i = 0; i < filesCount; ++i) { QString relativeName; quint32 fileSize; QByteArray fileInnerData; + bool executable = false; stream >> relativeName >> fileSize >> fileInnerData; +#if defined Q_OS_MAC || defined Q_OS_LINUX + stream >> executable; +#endif if (stream.status() != QDataStream::Ok) { LOG(("Update Error: cant read file from downloaded stream, status: %1").arg(stream.status())); return fatalFail(); } - if (fileSize != fileInnerData.size()) { + if (fileSize != quint32(fileInnerData.size())) { LOG(("Update Error: bad file size %1 not matching data size %2").arg(fileSize).arg(fileInnerData.size())); return fatalFail(); } QFile f(tempDirPath + '/' + relativeName); + if (!QDir().mkpath(QFileInfo(f).absolutePath())) { + LOG(("Update Error: cant mkpath for file '%1'").arg(tempDirPath + '/' + relativeName)); + return fatalFail(); + } if (!f.open(QIODevice::WriteOnly)) { LOG(("Update Error: cant open file '%1' for writing").arg(tempDirPath + '/' + relativeName)); return fatalFail(); @@ -1226,13 +1162,19 @@ void PsUpdateDownloader::unpackUpdate() { return fatalFail(); } f.close(); + if (executable) { + QFileDevice::Permissions p = f.permissions(); + p |= QFileDevice::ExeOwner | QFileDevice::ExeUser | QFileDevice::ExeGroup | QFileDevice::ExeOther; + f.setPermissions(p); + } } // create tdata/version file tempDir.mkdir(QDir(tempDirPath + qsl("/tdata")).absolutePath()); std::wstring versionString = ((version % 1000) ? QString("%1.%2.%3").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000)).arg(int(version % 1000)) : QString("%1.%2").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000))).toStdWString(); - DWORD versionNum = DWORD(version), versionLen = DWORD(versionString.size() * sizeof(WCHAR)); - WCHAR versionStr[32]; + + VerInt versionNum = VerInt(version), versionLen = VerInt(versionString.size() * sizeof(VerChar)); + VerChar versionStr[32]; memcpy(versionStr, versionString.c_str(), versionLen); QFile fVersion(tempDirPath + qsl("/tdata/version")); @@ -1240,8 +1182,8 @@ void PsUpdateDownloader::unpackUpdate() { LOG(("Update Error: cant write version file '%1'").arg(tempDirPath + qsl("/version"))); return fatalFail(); } - fVersion.write((const char*)&versionNum, sizeof(DWORD)); - fVersion.write((const char*)&versionLen, sizeof(DWORD)); + fVersion.write((const char*)&versionNum, sizeof(VerInt)); + fVersion.write((const char*)&versionLen, sizeof(VerInt)); fVersion.write((const char*)&versionStr[0], versionLen); fVersion.close(); } @@ -1253,7 +1195,7 @@ void PsUpdateDownloader::unpackUpdate() { deleteDir(tempDirPath); outputFile.remove(); - emit App::app()->updateReady();*/ + emit App::app()->updateReady(); } PsUpdateDownloader::~PsUpdateDownloader() { @@ -1261,208 +1203,22 @@ PsUpdateDownloader::~PsUpdateDownloader() { reply = 0; } -/*namespace { - BOOL CALLBACK _ActivateProcess(HWND hWnd, LPARAM lParam) { - uint64 &processId(*(uint64*)lParam); - - DWORD dwProcessId; - ::GetWindowThreadProcessId(hWnd, &dwProcessId); - - if ((uint64)dwProcessId == processId) { // found top-level window - static const int32 nameBufSize = 1024; - WCHAR nameBuf[nameBufSize]; - int32 len = GetWindowText(hWnd, nameBuf, nameBufSize); - if (len && len < nameBufSize) { - if (QRegularExpression(qsl("^Telegram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) { - BOOL res = ::SetForegroundWindow(hWnd); - return FALSE; - } - } - } - return TRUE; - } -}*/ - void psActivateProcess(uint64 pid) { - //::EnumWindows((WNDENUMPROC)_ActivateProcess, (LPARAM)&pid); + objc_activateProgram(); } QString psCurrentCountry() { - /*int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrCountry[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, wstrCountry, chCount); - return len ? QString::fromStdWString(std::wstring(wstrCountry)) : QString::fromLatin1(DefaultCountry); - } - return QString::fromLatin1(DefaultCountry);*/ - return QString(""); - //TODO + QString country = objc_currentCountry(); + return country.isEmpty() ? QString::fromLatin1(DefaultCountry) : country; } -/*namespace { - QString langById(int lngId) { - int primary = lngId & 0xFF; - switch (primary) { - case 0x36: return qsl("af"); - case 0x1C: return qsl("sq"); - case 0x5E: return qsl("am"); - case 0x01: return qsl("ar"); - case 0x2B: return qsl("hy"); - case 0x4D: return qsl("as"); - case 0x2C: return qsl("az"); - case 0x45: return qsl("bn"); - case 0x6D: return qsl("ba"); - case 0x2D: return qsl("eu"); - case 0x23: return qsl("be"); - case 0x1A: - if (lngId == LANG_CROATIAN) { - return qsl("hr"); - } else if (lngId == LANG_BOSNIAN_NEUTRAL || lngId == LANG_BOSNIAN) { - return qsl("bs"); - } - return qsl("sr"); - break; - case 0x7E: return qsl("br"); - case 0x02: return qsl("bg"); - case 0x92: return qsl("ku"); - case 0x03: return qsl("ca"); - case 0x04: return qsl("zh"); - case 0x83: return qsl("co"); - case 0x05: return qsl("cs"); - case 0x06: return qsl("da"); - case 0x65: return qsl("dv"); - case 0x13: return qsl("nl"); - case 0x09: return qsl("en"); - case 0x25: return qsl("et"); - case 0x38: return qsl("fo"); - case 0x0B: return qsl("fi"); - case 0x0c: return qsl("fr"); - case 0x62: return qsl("fy"); - case 0x56: return qsl("gl"); - case 0x37: return qsl("ka"); - case 0x07: return qsl("de"); - case 0x08: return qsl("el"); - case 0x6F: return qsl("kl"); - case 0x47: return qsl("gu"); - case 0x68: return qsl("ha"); - case 0x0D: return qsl("he"); - case 0x39: return qsl("hi"); - case 0x0E: return qsl("hu"); - case 0x0F: return qsl("is"); - case 0x70: return qsl("ig"); - case 0x21: return qsl("id"); - case 0x5D: return qsl("iu"); - case 0x3C: return qsl("ga"); - case 0x34: return qsl("xh"); - case 0x35: return qsl("zu"); - case 0x10: return qsl("it"); - case 0x11: return qsl("ja"); - case 0x4B: return qsl("kn"); - case 0x3F: return qsl("kk"); - case 0x53: return qsl("kh"); - case 0x87: return qsl("rw"); - case 0x12: return qsl("ko"); - case 0x40: return qsl("ky"); - case 0x54: return qsl("lo"); - case 0x26: return qsl("lv"); - case 0x27: return qsl("lt"); - case 0x6E: return qsl("lb"); - case 0x2F: return qsl("mk"); - case 0x3E: return qsl("ms"); - case 0x4C: return qsl("ml"); - case 0x3A: return qsl("mt"); - case 0x81: return qsl("mi"); - case 0x4E: return qsl("mr"); - case 0x50: return qsl("mn"); - case 0x61: return qsl("ne"); - case 0x14: return qsl("no"); - case 0x82: return qsl("oc"); - case 0x48: return qsl("or"); - case 0x63: return qsl("ps"); - case 0x29: return qsl("fa"); - case 0x15: return qsl("pl"); - case 0x16: return qsl("pt"); - case 0x67: return qsl("ff"); - case 0x46: return qsl("pa"); - case 0x18: return qsl("ro"); - case 0x17: return qsl("rm"); - case 0x19: return qsl("ru"); - case 0x3B: return qsl("se"); - case 0x4F: return qsl("sa"); - case 0x32: return qsl("tn"); - case 0x59: return qsl("sd"); - case 0x5B: return qsl("si"); - case 0x1B: return qsl("sk"); - case 0x24: return qsl("sl"); - case 0x0A: return qsl("es"); - case 0x41: return qsl("sw"); - case 0x1D: return qsl("sv"); - case 0x28: return qsl("tg"); - case 0x49: return qsl("ta"); - case 0x44: return qsl("tt"); - case 0x4A: return qsl("te"); - case 0x1E: return qsl("th"); - case 0x51: return qsl("bo"); - case 0x73: return qsl("ti"); - case 0x1F: return qsl("tr"); - case 0x42: return qsl("tk"); - case 0x22: return qsl("uk"); - case 0x20: return qsl("ur"); - case 0x80: return qsl("ug"); - case 0x43: return qsl("uz"); - case 0x2A: return qsl("vi"); - case 0x52: return qsl("cy"); - case 0x88: return qsl("wo"); - case 0x78: return qsl("ii"); - case 0x6A: return qsl("yo"); - } - return QString::fromLatin1(DefaultLanguage); - } -}*/ - QString psCurrentLanguage() { -/* int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrLocale[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, wstrLocale, chCount); - if (!len) return QString::fromLatin1(DefaultLanguage); - QString locale = QString::fromStdWString(std::wstring(wstrLocale)); - QRegularExpressionMatch m = QRegularExpression("(^|[^a-z])([a-z]{2})-").match(locale); - if (m.hasMatch()) { - return m.captured(2); - } - } - chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrLocale[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, wstrLocale, chCount), lngId = 0; - if (len < 5) return QString::fromLatin1(DefaultLanguage); - - for (int i = 0; i < 4; ++i) { - WCHAR ch = wstrLocale[i]; - lngId *= 16; - if (ch >= WCHAR('0') && ch <= WCHAR('9')) { - lngId += (ch - WCHAR('0')); - } else if (ch >= WCHAR('A') && ch <= WCHAR('F')) { - lngId += (10 + ch - WCHAR('A')); - } else { - return QString::fromLatin1(DefaultLanguage); - } - } - return langById(lngId); - } - return QString::fromLatin1(DefaultLanguage);*/ - return QString("en"); + QString lng = objc_currentLang(); + return lng.isEmpty() ? QString::fromLatin1(DefaultLanguage) : lng; } QString psAppDataPath() { - /*static const int maxFileLen = MAX_PATH * 10; - WCHAR wstrPath[maxFileLen]; - if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { - QDir appData(QString::fromStdWString(std::wstring(wstrPath))); - return appData.absolutePath() + "/" + QString::fromWCharArray(AppName) + "/"; - }*/ - return QString(); + return objc_appDataPath(); } QString psCurrentExeDirectory(int argc, char *argv[]) { @@ -1485,81 +1241,20 @@ void psDoCleanup() { } int psCleanup() { - /*__try - { - psDoCleanup(); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - return 0; - }*/ + psDoCleanup(); return 0; } void psDoFixPrevious() { - /*try { - static const int bufSize = 4096; - DWORD checkType, checkSize = bufSize * 2; - WCHAR checkStr[bufSize]; - - QString appId = QString::fromStdWString(AppId); - QString newKeyStr1 = QString("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString newKeyStr2 = QString("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString oldKeyStr1 = QString("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString oldKeyStr2 = QString("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - HKEY newKey1, newKey2, oldKey1, oldKey2; - LSTATUS newKeyRes1 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr1.toStdWString().c_str(), 0, KEY_READ, &newKey1); - LSTATUS newKeyRes2 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr2.toStdWString().c_str(), 0, KEY_READ, &newKey2); - LSTATUS oldKeyRes1 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str(), 0, KEY_READ, &oldKey1); - LSTATUS oldKeyRes2 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str(), 0, KEY_READ, &oldKey2); - - bool existNew1 = (newKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(newKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existNew2 = (newKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(newKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existOld1 = (oldKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existOld2 = (oldKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - - if (newKeyRes1 == ERROR_SUCCESS) RegCloseKey(newKey1); - if (newKeyRes2 == ERROR_SUCCESS) RegCloseKey(newKey2); - if (oldKeyRes1 == ERROR_SUCCESS) RegCloseKey(oldKey1); - if (oldKeyRes2 == ERROR_SUCCESS) RegCloseKey(oldKey2); - - if (existNew1 || existNew2) { - oldKeyRes1 = existOld1 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str()) : ERROR_SUCCESS; - oldKeyRes2 = existOld2 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str()) : ERROR_SUCCESS; - } - - QString userDesktopLnk, commonDesktopLnk; - WCHAR userDesktopFolder[MAX_PATH], commonDesktopFolder[MAX_PATH]; - HRESULT userDesktopRes = SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, userDesktopFolder); - HRESULT commonDesktopRes = SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, commonDesktopFolder); - if (SUCCEEDED(userDesktopRes)) { - userDesktopLnk = QString::fromWCharArray(userDesktopFolder) + "\\Telegram.lnk"; - } - if (SUCCEEDED(commonDesktopRes)) { - commonDesktopLnk = QString::fromWCharArray(commonDesktopFolder) + "\\Telegram.lnk"; - } - QFile userDesktopFile(userDesktopLnk), commonDesktopFile(commonDesktopLnk); - if (QFile::exists(userDesktopLnk) && QFile::exists(commonDesktopLnk) && userDesktopLnk != commonDesktopLnk) { - bool removed = QFile::remove(commonDesktopLnk); - } - } catch (...) { - }*/ } int psFixPrevious() { - /*__try - { - psDoFixPrevious(); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - return 0; - }*/ + psDoFixPrevious(); return 0; } bool psCheckReadyUpdate() { - /*QString readyPath = cWorkingDir() + qsl("tupdates/ready"); + QString readyPath = cWorkingDir() + qsl("tupdates/ready"); if (!QDir(readyPath).exists()) { return false; } @@ -1573,8 +1268,8 @@ bool psCheckReadyUpdate() { PsUpdateDownloader::clearAll(); return false; } - DWORD versionNum; - if (fVersion.read((char*)&versionNum, sizeof(DWORD)) != sizeof(DWORD)) { + VerInt versionNum; + if (fVersion.read((char*)&versionNum, sizeof(VerInt)) != sizeof(VerInt)) { LOG(("Update Error: cant read version from file '%1'").arg(versionPath)); PsUpdateDownloader::clearAll(); return false; @@ -1587,19 +1282,25 @@ bool psCheckReadyUpdate() { } } +#ifdef Q_OS_WIN QString curUpdater = (cExeDir() + "Updater.exe"); QFileInfo updater(cWorkingDir() + "tupdates/ready/Updater.exe"); +#elif defined Q_OS_MAC + QString curUpdater = (cExeDir() + "Telegram.app/Contents/Frameworks/Updater"); + QFileInfo updater(cWorkingDir() + "tupdates/ready/Telegram.app/Contents/Frameworks/Updater"); +#endif if (!updater.exists()) { QFileInfo current(curUpdater); if (!current.exists()) { PsUpdateDownloader::clearAll(); return false; } - if (CopyFile(current.absoluteFilePath().toStdWString().c_str(), updater.absoluteFilePath().toStdWString().c_str(), TRUE) == FALSE) { + if (!QFile(current.absoluteFilePath()).copy(updater.absoluteFilePath())) { PsUpdateDownloader::clearAll(); return false; } } +#ifdef Q_OS_WIN if (CopyFile(updater.absoluteFilePath().toStdWString().c_str(), curUpdater.toStdWString().c_str(), FALSE) == FALSE) { PsUpdateDownloader::clearAll(); return false; @@ -1607,34 +1308,27 @@ bool psCheckReadyUpdate() { if (DeleteFile(updater.absoluteFilePath().toStdWString().c_str()) == FALSE) { PsUpdateDownloader::clearAll(); return false; - }*/ - return false; // TODO + } +#elif defined Q_OS_MAC + QFileInfo to(curUpdater); + QDir().mkpath(to.absolutePath()); + if (!objc_moveFile(updater.absoluteFilePath(), curUpdater)) { + PsUpdateDownloader::clearAll(); + return false; + } +#endif + return true; } void psPostprocessFile(const QString &name) { - /*std::wstring zoneFile = QDir::toNativeSeparators(name).toStdWString() + L":Zone.Identifier"; - HANDLE f = CreateFile(zoneFile.c_str(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (f == INVALID_HANDLE_VALUE) { // :( - return; - } - - const char data[] = "[ZoneTransfer]\r\nZoneId=3\r\n"; - - DWORD written = 0; - BOOL result = WriteFile(f, data, sizeof(data), &written, NULL); - CloseHandle(f); - - if (!result || written != sizeof(data)) { // :( - return; - }*/ } void psOpenFile(const QString &name, bool openWith) { - objc_openFile(name.toUtf8().constData(), openWith); + objc_openFile(name, openWith); } void psShowInFolder(const QString &name) { - objc_showInFinder(name.toUtf8().constData(), QFileInfo(name).absolutePath().toUtf8().constData()); + objc_showInFinder(name, QFileInfo(name).absolutePath()); } void psFinish() { @@ -1642,69 +1336,15 @@ void psFinish() { } void psExecUpdater() { - /*QString targs = qsl("-update"); - if (cFromAutoStart()) targs += qsl(" -autostart"); - if (cDebug()) targs += qsl(" -debug"); - - QString updater(QDir::toNativeSeparators(cExeDir() + "Updater.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); - - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Updater.exe").arg(targs)); - HINSTANCE r = ShellExecute(0, 0, updater.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); - if (long(r) < 32) { - DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(updater).arg(wdir).arg(long(r))); + if (!objc_execUpdater()) { QString readyPath = cWorkingDir() + qsl("tupdates/ready"); PsUpdateDownloader::deleteDir(readyPath); - }*/ + } } void psExecTelegram() { - /*QString targs = qsl("-noupdate -tosettings"); - if (cFromAutoStart()) targs += qsl(" -autostart"); - if (cDebug()) targs += qsl(" -debug"); - if (cDataFile() != (cTestMode() ? qsl("data_test") : qsl("data"))) targs += qsl(" -key \"") + cDataFile() + '"'; - - QString telegram(QDir::toNativeSeparators(cExeDir() + "Telegram.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); - - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Telegram.exe").arg(targs)); - HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); - if (long(r) < 32) { - DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r))); - }*/ + objc_execTelegram(); } void psAutoStart(bool start, bool silent) { - /*WCHAR startupFolder[MAX_PATH]; - HRESULT hres = SHGetFolderPath(0, CSIDL_STARTUP, 0, SHGFP_TYPE_CURRENT, startupFolder); - if (SUCCEEDED(hres)) { - QString lnk = QString::fromWCharArray(startupFolder) + "\\Telegram.lnk"; - if (start) { - IShellLink* psl; - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); - if (SUCCEEDED(hres)) { - IPersistFile* ppf; - - QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + "//Telegram.exe"), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); - psl->SetArguments(L"-autostart"); - psl->SetPath(exe.toStdWString().c_str()); - psl->SetWorkingDirectory(dir.toStdWString().c_str()); - psl->SetDescription(L"Telegram autorun link.\nYou can disable autorun in Telegram settings."); - - hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); - - if (SUCCEEDED(hres)) { - hres = ppf->Save(lnk.toStdWString().c_str(), TRUE); - ppf->Release(); - } else { - if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hres)); - } - psl->Release(); - } else { - if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hres)); - } - } else { - QFile::remove(lnk); - } - } else { - if (!silent) LOG(("App Error: could not get CSIDL_STARTUP folder %1").arg(hres)); - }*/ } diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index c6edd9349..b11bfc561 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -24,14 +24,14 @@ public: PsMacWindowPrivate(); - void setWindowBadge(const char *utf8str); + void setWindowBadge(const QString &str); void startBounce(); void holdOnTop(WId winId); void showOverAll(WId winId); void activateWnd(WId winId); - void showNotify(unsigned long long peer, const char *utf8title, const char *subtitle, const char *utf8msg); - void clearNotifies(unsigned long long peer = 0); + void showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg); + void clearNotifies(uint64 peer = 0); void enableShadow(WId winId); @@ -48,10 +48,20 @@ public: }; -void objc_debugShowAlert(const char *utf8str); -void objc_outputDebugString(const char *utf8str); +void objc_debugShowAlert(const QString &str); +void objc_outputDebugString(const QString &str); int64 objc_idleTime(); -void objc_showInFinder(const char *utf8file, const char *utf8path); -void objc_openFile(const char *utf8file, bool openwith); +void objc_showInFinder(const QString &file, const QString &path); +void objc_openFile(const QString &file, bool openwith); void objc_finish(); +bool objc_execUpdater(); +void objc_execTelegram(); + +void objc_activateProgram(); +bool objc_moveFile(const QString &from, const QString &to); +void objc_deleteDir(const QString &dir); + +QString objc_appDataPath(); +QString objc_currentCountry(); +QString objc_currentLang(); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 5a0611fd3..3f3fbf7f2 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -26,21 +26,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com class QNSString { public: - QNSString(const QString &str) : _str([[NSString alloc] initWithUTF8String:str.toUtf8().constData()]) { + QNSString(const QString &str) : _str([NSString stringWithUTF8String:str.toUtf8().constData()]) { } - QNSString &operator=(const QNSString &other) { - if (this != &other) { - [_str release]; - _str = [other._str copy]; - } - return *this; - } - QNSString(const QNSString &other) : _str([other._str copy]) { - } - ~QNSString() { - [_str release]; - } - NSString *s() { return _str; } @@ -163,10 +150,8 @@ PsMacWindowPrivate::PsMacWindowPrivate() : data(new PsMacWindowData(this)) { [center setDelegate:data->notifyHandler]; } -void PsMacWindowPrivate::setWindowBadge(const char *utf8str) { - NSString *badgeString = [[NSString alloc] initWithUTF8String:utf8str]; - [[NSApp dockTile] setBadgeLabel:badgeString]; - [badgeString release]; +void PsMacWindowPrivate::setWindowBadge(const QString &str) { + [[NSApp dockTile] setBadgeLabel:QNSString(str).s()]; } void PsMacWindowPrivate::startBounce() { @@ -190,25 +175,15 @@ void PsMacWindowPrivate::activateWnd(WId winId) { [wnd orderFront:wnd]; } -void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8title, const char *utf8subtitle, const char *utf8msg) { +void PsMacWindowPrivate::showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg) { NSUserNotification *notification = [[NSUserNotification alloc] init]; - NSDictionary *uinfo = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",[NSNumber numberWithUnsignedLongLong:cInstance()],@"inst",nil]; - [notification setUserInfo:uinfo]; - [uinfo release]; + [notification setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",[NSNumber numberWithUnsignedLongLong:cInstance()],@"inst",nil]]; - NSString *title = [[NSString alloc] initWithUTF8String:utf8title]; - [notification setTitle:title]; - [title release]; - - NSString *subtitle = [[NSString alloc] initWithUTF8String:utf8subtitle]; - [notification setSubtitle:subtitle]; - [subtitle release]; + [notification setTitle:QNSString(title).s()]; + [notification setSubtitle:QNSString(subtitle).s()]; + [notification setInformativeText:QNSString(msg).s()]; - NSString *msg = [[NSString alloc] initWithUTF8String:utf8msg]; - [notification setInformativeText:msg]; - [msg release]; - [notification setHasReplyButton:YES]; [notification setSoundName:nil]; @@ -238,18 +213,12 @@ void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { } } -void objc_debugShowAlert(const char *utf8str) { - NSString *text = [[NSString alloc] initWithUTF8String: utf8str]; - NSAlert *alert = [NSAlert alertWithMessageText:@"Debug Message" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", text]; - [alert runModal]; - [alert release]; - [text release]; +void objc_debugShowAlert(const QString &str) { + [[NSAlert alertWithMessageText:@"Debug Message" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", QNSString(str).s()] runModal]; } -void objc_outputDebugString(const char *utf8str) { - NSString *text = [[NSString alloc] initWithUTF8String:utf8str]; - NSLog(@"%@", text); - [text release]; +void objc_outputDebugString(const QString &str) { + NSLog(@"%@", QNSString(str).s()); } PsMacWindowPrivate::~PsMacWindowPrivate() { @@ -306,11 +275,8 @@ int64 objc_idleTime() { // taken from https://github.com/trueinteractions/tint/i return (result == err) ? -1 : int64(result); } -void objc_showInFinder(const char *utf8file, const char *utf8path) { - NSString *file = [[NSString alloc] initWithUTF8String:utf8file], *path = [[NSString alloc] initWithUTF8String:utf8path]; - [[NSWorkspace sharedWorkspace] selectFile:file inFileViewerRootedAtPath:path]; - [file release]; - [path release]; +void objc_showInFinder(const QString &file, const QString &path) { + [[NSWorkspace sharedWorkspace] selectFile:QNSString(file).s() inFileViewerRootedAtPath:QNSString(path).s()]; } @interface NSURL(CompareUrls) @@ -456,8 +422,8 @@ void objc_showInFinder(const char *utf8file, const char *utf8path) { @end -void objc_openFile(const char *utf8file, bool openwith) { - NSString *file = [[NSString alloc] initWithUTF8String:utf8file]; +void objc_openFile(const QString &f, bool openwith) { + NSString *file = QNSString(f).s(); if (openwith || [[NSWorkspace sharedWorkspace] openFile:file] == NO) { @try { NSURL *url = [NSURL fileURLWithPath:file]; @@ -558,7 +524,7 @@ void objc_openFile(const char *utf8file, bool openwith) { [openPanel setAllowsMultipleSelection:NO]; [openPanel setResolvesAliases:YES]; [openPanel setTitle:objc_lang(lng_mac_choose_app).s()]; - [openPanel setMessage:[objc_lang(lng_mac_choose_text).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name]]; + [openPanel setMessage:[[objc_lang(lng_mac_choose_text).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name] stringByAppendingFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]]]; NSArray *appsPaths = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationDirectory inDomains:NSLocalDomainMask]; if ([appsPaths count]) [openPanel setDirectoryURL:[appsPaths firstObject]]; @@ -606,3 +572,93 @@ void objc_finish() { objcLang.clear(); } } + +BOOL _execUpdater(BOOL update = YES) { + NSString *path = @"", *args = @""; + @try { + path = [[NSBundle mainBundle] bundlePath]; + if (!path) { + LOG(("Could not get bundle path!!")); + return NO; + } + path = [path stringByAppendingString:@"/Contents/Frameworks/Updater"]; + + NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:@"-workpath", QNSString(cWorkingDir()).s(), @"-tosettings", @"-procid", nil]; + [args addObject:[NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]]]; + if (!update) [args addObject:@"-noupdate"]; + if (cFromAutoStart()) [args addObject:@"-autostart"]; + if (cDebug()) [args addObject:@"-debug"]; + if (cDataFile() != (cTestMode() ? qsl("data_test") : qsl("data"))) { + [args addObject:@"-key"]; + [args addObject:QNSString(cDataFile()).s()]; + } + + DEBUG_LOG(("Application Info: executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([[args componentsJoinedByString:@" "] cStringUsingEncoding:NSUTF8StringEncoding]))); + if (![NSTask launchedTaskWithLaunchPath:path arguments:args]) { + LOG(("Task not launched while executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([[args componentsJoinedByString:@" "] cStringUsingEncoding:NSUTF8StringEncoding]))); + return NO; + } + } + @catch (NSException *exception) { + LOG(("Exception caught while executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([args cStringUsingEncoding:NSUTF8StringEncoding]))); + return NO; + } + @finally { + } + return YES; +} + +bool objc_execUpdater() { + return !!_execUpdater(); +} + +void objc_execTelegram() { + _execUpdater(NO); +} + +void objc_activateProgram() { + [NSApp activateIgnoringOtherApps:YES]; +} + +bool objc_moveFile(const QString &from, const QString &to) { + NSString *f = QNSString(from).s(), *t = QNSString(to).s(); + if ([[NSFileManager defaultManager] fileExistsAtPath:t]) { + NSData *data = [NSData dataWithContentsOfFile:f]; + if (data) { + if ([data writeToFile:t atomically:YES]) { + if ([[NSFileManager defaultManager] removeItemAtPath:f error:nil]) { + return true; + } + } + } + } else { + if ([[NSFileManager defaultManager] moveItemAtPath:f toPath:t error:nil]) { + return true; + } + } + return false; +} + +void objc_deleteDir(const QString &dir) { + [[NSFileManager defaultManager] removeItemAtPath:QNSString(dir).s() error:nil]; +} + +QString objc_appDataPath() { + NSURL *url = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; + if (url) { + return QString::fromUtf8([[url path] fileSystemRepresentation]) + '/' + QString::fromWCharArray(AppName) + '/'; + } + return QString(); +} + +QString objc_currentCountry() { + NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale. + NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; + return countryCode ? QString::fromUtf8([countryCode cStringUsingEncoding:NSUTF8StringEncoding]) : QString(); +} + +QString objc_currentLang() { + NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale. + NSString *currentLang = [currentLocale objectForKey:NSLocaleLanguageCode]; + return currentLang ? QString::fromUtf8([currentLang cStringUsingEncoding:NSUTF8StringEncoding]) : QString(); +} diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 411d7d42b..7fd4066fc 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -74,10 +74,13 @@ uint64 gInstance = 0.; #ifdef Q_OS_WIN DBIPlatform gPlatform = dbipWindows; +QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/win/tupdates/current")); #elif defined Q_OS_MAC DBIPlatform gPlatform = dbipMac; +QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/mac/tupdates/current")); #elif defined Q_OS_LINUX DBIPlatform gPlatform = dbipLinux; +QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/linux/tupdates/current")); #else #error Unknown platform #endif diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 52bb4708d..48572950f 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -138,5 +138,6 @@ DeclareSetting(bool, CustomNotifies); DeclareReadSetting(uint64, Instance); DeclareReadSetting(DBIPlatform, Platform); +DeclareReadSetting(QUrl, UpdateURL); void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index 49b2f0e36..6ac7aec17 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -34,7 +34,11 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include #include +#ifdef Q_OS_WIN // use Lzma SDK for win #include +#else +#include +#endif #if defined Q_OS_WIN #define _NEED_WIN_GENERATE_DUMP diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 3356d7003..7d0f6e4db 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -450,6 +450,8 @@ bool Window::eventFilter(QObject *obj, QEvent *evt) { if (App::main()) { App::main()->mainStateChanged(state); } + } else if (obj == this && (evt->type() == QEvent::Move || evt->type() == QEvent::Resize)) { + psUpdatedPosition(); } return PsMainWindow::eventFilter(obj, evt); } diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index f21d06e91..1f9496cf2 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -194,6 +194,3 @@ LIBS += ./../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a RESOURCES += \ ./SourceFiles/telegram.qrc -CONFIG(debug, debug|release) { - DEFINES += _DEBUG -} diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index aa926d49c..835dd6d1d 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -202,6 +202,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 07084688195445A700B5AE3A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 07084684195445A600B5AE3A /* Updater.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 07084678195445A600B5AE3A; + remoteInfo = Updater; + }; 07C3AF22194335970016CFF1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; @@ -226,6 +233,7 @@ 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; 07055CC3194EE85B0008DEF6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "./../../Libraries/openssl-xcode/libcrypto.a"; sourceTree = ""; }; + 07084684195445A600B5AE3A /* Updater.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Updater.xcodeproj; sourceTree = SOURCE_ROOT; }; 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; 0771C4C94B623FC34BF62983 /* intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = intro.cpp; path = SourceFiles/intro/intro.cpp; sourceTree = ""; }; 07C3AF24194335ED0016CFF1 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Telegram/Images.xcassets; sourceTree = SOURCE_ROOT; }; @@ -652,6 +660,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 07084685195445A600B5AE3A /* Products */ = { + isa = PBXGroup; + children = ( + 07084689195445A700B5AE3A /* Updater */, + ); + name = Products; + sourceTree = ""; + }; 130BDDB6FC4D60CF394D95AF /* GeneratedFiles */ = { isa = PBXGroup; children = ( @@ -1139,6 +1155,7 @@ E8C543AB96796ECAA2E65C57 /* Telegram */ = { isa = PBXGroup; children = ( + 07084684195445A600B5AE3A /* Updater.xcodeproj */, 2EB56BE3C2D93CDAB0C52E67 /* Sources */, 25B08E2869634E9BCBA333A2 /* Generated Sources */, 74B182DB50CB5611B5C1C297 /* Supporting Files */, @@ -1198,6 +1215,12 @@ mainGroup = E8C543AB96796ECAA2E65C57 /* Telegram */; productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 07084685195445A600B5AE3A /* Products */; + ProjectRef = 07084684195445A600B5AE3A /* Updater.xcodeproj */; + }, + ); projectRoot = ""; targets = ( 7CCA95B9FCAD34D929431AD6 /* Telegram */, @@ -1207,6 +1230,16 @@ }; /* End PBXProject section */ +/* Begin PBXReferenceProxy section */ + 07084689195445A700B5AE3A /* Updater */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = Updater; + remoteRef = 07084688195445A700B5AE3A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + /* Begin PBXResourcesBuildPhase section */ 07C3AF25194336160016CFF1 /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -1476,7 +1509,7 @@ ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, - ./../../Libraries/lzma/C, + /usr/local/include, "./../../Libraries/libexif-0.6.20", "/usr/local/Qt-5.3.0/include", "/usr/local/Qt-5.3.0/include/QtMultimedia", @@ -1512,6 +1545,7 @@ "-Wall", "-W", "-fPIE", + "-D_WITH_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", @@ -1532,6 +1566,7 @@ "-Wall", "-W", "-fPIE", + "-D_WITH_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", @@ -1558,6 +1593,7 @@ "-L/usr/local/Qt-5.3.0/plugins/imageformats", "-lz", "-lm", + "-llzma", ); PRODUCT_NAME = Telegram; QT_LIBRARY_SUFFIX = ""; @@ -1596,7 +1632,7 @@ ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, - ./../../Libraries/lzma/C, + /usr/local/include, "./../../Libraries/libexif-0.6.20", "/usr/local/Qt-5.3.0/include", "/usr/local/Qt-5.3.0/include/QtMultimedia", @@ -1681,6 +1717,7 @@ "-L/usr/local/Qt-5.3.0/plugins/imageformats", "-lz", "-lm", + "-llzma", ); PRODUCT_NAME = Telegram; QT_LIBRARY_SUFFIX = _debug; diff --git a/Telegram/Updater.xcodeproj/project.pbxproj b/Telegram/Updater.xcodeproj/project.pbxproj new file mode 100644 index 000000000..bc88eefa7 --- /dev/null +++ b/Telegram/Updater.xcodeproj/project.pbxproj @@ -0,0 +1,237 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 070846A619544CDD00B5AE3A /* updater_osx.m in Sources */ = {isa = PBXBuildFile; fileRef = 070846A519544CDD00B5AE3A /* updater_osx.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 07084676195445A600B5AE3A /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 07084678195445A600B5AE3A /* Updater */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Updater; sourceTree = BUILT_PRODUCTS_DIR; }; + 070846A519544CDD00B5AE3A /* updater_osx.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = updater_osx.m; path = SourceFiles/_other/updater_osx.m; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 07084675195445A600B5AE3A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0708466F195445A600B5AE3A = { + isa = PBXGroup; + children = ( + 0708467A195445A600B5AE3A /* Updater */, + 07084679195445A600B5AE3A /* Products */, + ); + sourceTree = ""; + }; + 07084679195445A600B5AE3A /* Products */ = { + isa = PBXGroup; + children = ( + 07084678195445A600B5AE3A /* Updater */, + ); + name = Products; + sourceTree = ""; + }; + 0708467A195445A600B5AE3A /* Updater */ = { + isa = PBXGroup; + children = ( + 070846A519544CDD00B5AE3A /* updater_osx.m */, + ); + path = Updater; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 07084677195445A600B5AE3A /* Updater */ = { + isa = PBXNativeTarget; + buildConfigurationList = 07084681195445A600B5AE3A /* Build configuration list for PBXNativeTarget "Updater" */; + buildPhases = ( + 07084674195445A600B5AE3A /* Sources */, + 07084675195445A600B5AE3A /* Frameworks */, + 07084676195445A600B5AE3A /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Updater; + productName = Updater; + productReference = 07084678195445A600B5AE3A /* Updater */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 07084670195445A600B5AE3A /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; + buildConfigurationList = 07084673195445A600B5AE3A /* Build configuration list for PBXProject "Updater" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 0708466F195445A600B5AE3A; + productRefGroup = 07084679195445A600B5AE3A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 07084677195445A600B5AE3A /* Updater */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 07084674195445A600B5AE3A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 070846A619544CDD00B5AE3A /* updater_osx.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 0708467F195445A600B5AE3A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Telegram.app/Contents/Frameworks"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediateUpdater"; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = "-D_DEBUG"; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Debug; + }; + 07084680195445A600B5AE3A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Telegram.app/Contents/Frameworks"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediateUpdater"; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Release; + }; + 07084682195445A600B5AE3A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 07084683195445A600B5AE3A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 07084673195445A600B5AE3A /* Build configuration list for PBXProject "Updater" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0708467F195445A600B5AE3A /* Debug */, + 07084680195445A600B5AE3A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 07084681195445A600B5AE3A /* Build configuration list for PBXNativeTarget "Updater" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 07084682195445A600B5AE3A /* Debug */, + 07084683195445A600B5AE3A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 07084670195445A600B5AE3A /* Project object */; +} diff --git a/Telegram/packer_plugin_import.cpp b/Telegram/packer_plugin_import.cpp new file mode 100644 index 000000000..7c0d09542 --- /dev/null +++ b/Telegram/packer_plugin_import.cpp @@ -0,0 +1,13 @@ +// This file is autogenerated by qmake. It imports static plugin classes for +// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS. variables. +#include +Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin) +Q_IMPORT_PLUGIN(QDDSPlugin) +Q_IMPORT_PLUGIN(QICNSPlugin) +Q_IMPORT_PLUGIN(QICOPlugin) +Q_IMPORT_PLUGIN(QJp2Plugin) +Q_IMPORT_PLUGIN(QMngPlugin) +Q_IMPORT_PLUGIN(QTgaPlugin) +Q_IMPORT_PLUGIN(QTiffPlugin) +Q_IMPORT_PLUGIN(QWbmpPlugin) +Q_IMPORT_PLUGIN(QWebpPlugin) From e5d083ca13cf66d22e3685acaf785f2bc41dd5ad Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 25 Jun 2014 21:50:27 +0400 Subject: [PATCH 11/14] fixed win version after os x build --- Telegram/SourceFiles/_other/genemoji.h | 6 +++--- Telegram/SourceFiles/_other/genlang.h | 6 +++--- Telegram/SourceFiles/_other/genstyles.h | 6 +++--- Telegram/SourceFiles/art/grid.png | Bin 2083 -> 0 bytes Telegram/SourceFiles/art/grid_125x.png | Bin 2666 -> 0 bytes Telegram/SourceFiles/art/grid_150x.png | Bin 3224 -> 0 bytes Telegram/SourceFiles/art/grid_200x.png | Bin 4505 -> 0 bytes Telegram/SourceFiles/art/sprite_125x.png | Bin 59262 -> 0 bytes Telegram/SourceFiles/art/sprite_150x.png | Bin 69851 -> 0 bytes Telegram/SourceFiles/gui/twidget.h | 2 +- Telegram/SourceFiles/pspecific_wnd.cpp | 5 +++-- Telegram/SourceFiles/pspecific_wnd.h | 2 +- Telegram/SourceFiles/types.h | 6 +++--- Telegram/Telegram.vcxproj | 4 ++-- 14 files changed, 19 insertions(+), 18 deletions(-) delete mode 100644 Telegram/SourceFiles/art/grid.png delete mode 100644 Telegram/SourceFiles/art/grid_125x.png delete mode 100644 Telegram/SourceFiles/art/grid_150x.png delete mode 100644 Telegram/SourceFiles/art/grid_200x.png delete mode 100644 Telegram/SourceFiles/art/sprite_125x.png delete mode 100644 Telegram/SourceFiles/art/sprite_150x.png diff --git a/Telegram/SourceFiles/_other/genemoji.h b/Telegram/SourceFiles/_other/genemoji.h index d29ffeeef..bd3dcee0d 100644 --- a/Telegram/SourceFiles/_other/genemoji.h +++ b/Telegram/SourceFiles/_other/genemoji.h @@ -40,17 +40,17 @@ using std::exception; class Exception : public exception { public: - Exception(const QString &msg) : _msg(msg) { + Exception(const QString &msg) : _msg(msg.toUtf8()) { } virtual const char *what() const throw() { - return _msg.toUtf8().constData(); + return _msg.constData(); } virtual ~Exception() throw() { } private: - QString _msg; + QByteArray _msg; }; bool genEmoji(QString emoji_in, const QString &emoji_out, const QString &emoji_png); diff --git a/Telegram/SourceFiles/_other/genlang.h b/Telegram/SourceFiles/_other/genlang.h index e4bc246dd..0648ad953 100644 --- a/Telegram/SourceFiles/_other/genlang.h +++ b/Telegram/SourceFiles/_other/genlang.h @@ -38,17 +38,17 @@ using std::exception; class Exception : public exception { public: - Exception(const QString &msg) : _msg(msg) { + Exception(const QString &msg) : _msg(msg.toUtf8()) { } virtual const char *what() const throw() { - return _msg.toUtf8().constData(); + return _msg.constData(); } virtual ~Exception() throw() { } private: - QString _msg; + QByteArray _msg; }; bool genLang(const QString &lang_in, const QString &lang_out); diff --git a/Telegram/SourceFiles/_other/genstyles.h b/Telegram/SourceFiles/_other/genstyles.h index 855ce8668..6066654d0 100644 --- a/Telegram/SourceFiles/_other/genstyles.h +++ b/Telegram/SourceFiles/_other/genstyles.h @@ -37,17 +37,17 @@ using std::exception; class Exception : public exception { public: - Exception(const QString &msg) : _msg(msg) { + Exception(const QString &msg) : _msg(msg.toUtf8()) { } virtual const char *what() const throw() { - return _msg.toUtf8().constData(); + return _msg.constData(); } virtual ~Exception() throw() { } private: - QString _msg; + QByteArray _msg; }; bool genStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out, const QString &path_to_sprites); diff --git a/Telegram/SourceFiles/art/grid.png b/Telegram/SourceFiles/art/grid.png deleted file mode 100644 index 07ab30f8b62c8553bf0ac266e959aa9b785b3ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2083 zcmeAS@N?(olHy`uVBq!ia0y~yUTueFrz5eN&qZz$Xvo1bi-Zi`UUD>v-h8g|O+<#Ry-rsRI z&wc%&*z2#qz6eclZvOvougqR1pA}u#ZckqvcW?i{w}JDoU*7aR_S^n{f47_c_*-51 zU;d=i&9;fxA9u~aTYjJa^u6+%&A%<2zAlx$ykvh&f!TlAy-W`uEShzy7X?-v7Sz^wa2X`%d3W`uXtFzkLC}%63;C z{IcMU^f#klr_Zqemy=kyX`Agc3#&{1+um<~ZTn%4@5v%Fl@)99zgqUa%e{Z%^ z)@Q*o8tblSZ<`a|#C7K7OymCVifgA83tsu$(SPLUrv%2PDz%3bD<(fZ_{8Q0zks1r zYkH3DrLxErttPJXx3sG4d$*oeKP(V3W2WGnfEZ`6>yK#K8!UfytFVGMDxmRa$o0O* z*%yGuFzjzi`O4vbOBK>Ri`eu!yE@JIZ)?P7r@FFLFp7@zqT5i|b<&kofXc!|x|N*s@oA zSi||RDc$n?zca7H<@V|M2RxKauLwV|LhkR)>-taYw%aTRT80ta$CowqpV9nk;K=&# zQ_S077SS1(FDSnh<~_YU`ThZsJ5!j@qUZRsux(c_Grpf68uQRN?Oxk@yKI*9+xNno zcJ2Bl{(iOoDX#g3kInAO;+nDu-z`r@4ZcAqW zk_r4>={x`XXCL=djCNNZy|~&Ac5s;qhXF= z>FINq4{~S~?9pA8W0@c&;mF#TKFO|Og6A)W3T0x-X$&hK_5M8|;d6;yz`#@9V9i|j zv_Fa~Hq2snOZ)S1nTW#?4$&~<$1>lI*L@ae5e+keFx4@V7*TZu$nJYL__b#h_WhQ; z{__WaiuwERYya-i`&}mC2DDUCeb4N|x%(AXY*++g+7||Mp=B*%iz%SDV5ao{cPLAq zw6AzWe)~g2romsGVFVM=9)vjX#ObF+J7e;;-#+;Ipxm4E8(03nwQkv=p7i}5u-0er MboFyt=akR{0J*MA>i_@% diff --git a/Telegram/SourceFiles/art/grid_125x.png b/Telegram/SourceFiles/art/grid_125x.png deleted file mode 100644 index 96ebd1ef01da1861fb150dd7a96f9d5a07982d88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2666 zcmd5;e>l^59RG}*8j*;_P#n7zu~cY&RHs;JvU*~PRvJ$~#B?)1!YElsw5Z5xcV|(T z^CM4=)wIG^xl*T4vaMUQ=Zw)QHdDJzJWo%T=kDpc=ea*V&-eL!KJU-_$LsU@yx!kq zo3Q?~p_Whpz-&x_9}WP>CGD8`g=WRw=}wsDGb=6te-HozQ|*9&vkVvjP&meK^_E1& zK+nVYk^r4m!Ck+q)k{^?VrxDzEZ*?m1y5;=ih;TD3j<@>pJJ znz@kE>7SpJo$9sk7tDAPLNbFK>+T`S*r#lJVg>nmYXzA20+p+t#g@2 zA4VVj*$&4g*NfTKObleg?wA?C+v%-3on;DY(eZ0v+`R0(7D|ZnucX1NpW;{^0-AK2 z7y6*F@D0N`hc6!_S7ZYtg?}zR7&qYB#j2-aqC_dB36@4QJN@eA!eUR;`VE0sV8Uy0< z8AIjA8X1K|HB%a$<6s2;nng`l&Rcl!sZ2T+o@->;^o{MiQYPKKcUTKZQjvwI)I`XB zUg8~LhXaGkj^k$97!3tFMLlNiXL|ifh5%Kj`X~{+5G`-lEg`BE1AqcoEm4j4By7*< z?5olM4|~Z|^leP%*F+1YA$4Nt^{u{9Y~z2;s%aQ$6CDc*p4Q##a)((MIpX?b!$Ts4 zgzYe{ws<*o#S?(@)QULk%&x2tEAK6a<%$tff}h|o|h zrQoWX`BwUQ(lsZnuEgn3E0n$kmMG$$ZDyi5!~T2myg>X}bG@!}zx({E5#!La!|`Zzk3rH)Jhr2IWgN>2`R_S?dBji{|Qd^^DUk zQQ?v6XNu-%d2m*Zh31X4Uy7gzhOS8If8Y(gM)xLOXNvqA^9vU@*5R>4oN>y6tn~2jXgXkHW_dZ?KpF!iM zVdH=9S@!Z(tVUT0=(BS6Af;!J*f83t%XK*BZqGpr0w*O$OIV=`1BNo@RLUOIW_J{Hsc%c9UHF)e~ zQTW}%Xe5yJEk_R0?JB;(CD`@zKnie1TSRp4D?hIguAfjGxIHQ~9NtmVP& z9F7|=IU~!I3y-=6vrMX?^o9l{7Fm35InnkkFq9e7T?UuUqU&4?>m=W;iCBOGWPAC3 z!EejrD=cVc+|s=(JwJJZ*Pr*cEBKlw%r&TsDT%K@_(8ur5Z;O8Cue9M`7;dU z;LMG|HMVq}N|zODThg>QEx|(T8%;K+%GgF$(o(wk{MGy&bC3ihf2@+@OUk#LTw}UU zO3?dK_VJD|C3Jtg``RN#7bMigbZ-$eJmq+m;?g6YYt|^gP@Kc@EIZJm)!s4{Rc1w^ zT&@+*g&yCt#_|J VYgb3Bv*u3{0L)sfU*#G?=AY-eBntol diff --git a/Telegram/SourceFiles/art/grid_150x.png b/Telegram/SourceFiles/art/grid_150x.png deleted file mode 100644 index f8a9436d381601eb8edb0d8a6876de1a12e4ce74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3224 zcmd^BYgAKL7CsRn(ZIw96vkIjlvJTbWRwJBqDUPXtrVDoydo`{I6z23il8A61Zrzb z&|!cIDQRn4+To>S5oFLLA{em&YL`VIfh5QZ4k0AKfT1@Dlh|RF&Z3>JHKTv}<6Gz4 zeeXJVfBSy>+xPu9j{M$j`I_Yb0JrdiVNn3UYz`n?>=8CCeT#irMn4$G1OU0(0T`$d zcmd%0hw!j{f6NgW2Jij3@;Zzc`Dh%H?znMM#Sjb@8FIEUDAW$&YiK?$ql_Ar8;w)X`UA&lD*U~;NwMrji#cZ|IEHZ^qln+wj zSA(pB`^F*tc{FJs0#|Yrk)}STg_9`nZ13jCIAoS2werIuad}TjnrekTo_0U4HB-hp z&WaH)n{Q9Df)&H((cskswH1jmj060v*UT`@K!hzZYb|s!#rpQwXb_q>$t0DO-TSf# zNr!7kRlfe0UtjO33GknB+WVgAUr?L#rsEA9MDU45poMo+OZy0{RgD9kNLqv$7SnV$ z99caa%mIj%Pl3TigT%FSn>z}scNI8tAcP10{cE>FPjV76D`%!w2PA1dCi;u<`kwp( z;dDjT-gmrpr4pr3kUX_i3+H{X5))ls(sD5+$$sv&*^-)5%~#R5-hhk=C!U=wZ^a?2 zEUiWBTIOq!>2p5Q;_=H_@olIpJ2sAV6rhve42pf@KrtJ4^U}_Y_bMUa9cG3tigu<2 z(5WLL>*^sNZ~HcI$~m-z^zCs+b?lix1J(B^;7PRR48~?pq1MHk^O#5*OK-U>JfoPP zLBpRg3enhx@SgBncP+Pnp@2yJNSTmqT?@BS3(*)0uyjiq^i;d_9z@lwFFWehA#vGW z_;dL$@M`yC;m&ysEj9N;U9o}(smypP!P8HnABa;6X}eJvi$Jaj7|(_`c#Jj;2x2OG zI<~Dm`U<~+yc>05F|Pl~{drsy$Ps{~!}9y1&G*kw$5W5gbit1tHsj7Yx?CIW*PYgc ztJ{Uf;(pW(TI0t#>vii?)t%cEcW8~wz22NB44w)z4zXMWxlz;l){PdKmruqp>vy^g z|IdfVTD3aDv$}j*qYL{<9U+I}Cq31hFqs_QhB9V!$m(-LmoUnHSX?n9J@PsHyH22b zhGmY;-QWdse(T6@lf~X|r8g`YO)Na;htcYRQRk@wA+c_iFfy{9P4e!FB7y={cE`M; z^v<@}NZFd&ld@G4$HusuME{^yo^Hygb?3s>S z=*)$6)SMT1K*DW9)@u&6p*{@SbcaNDRyW@N1sWVu!HwOOV>~#5csGaGy88!Rr`mlU&eZ9&z+|%nfNjq`!RIO2)>Pk zS{+;s5>vvM{wr(J146)s(S?s-H-+tdXlrta7Ji#fboRgLs0d;a@ zPvM-a|BcAw8#4J?sU+K)>8>1OiNCj|*FdNDtyCFo!H?(OW>1Km8mTil;?{iZ0mU0->{`@_58flpcHh@NZjT%T<~TfV%swg|k+1!&&mW+N+e9D^XrTF+drIo!L^0*sHk>UYGQdwQU?)9m4sy+!PD z7Lr`dP1EJZC|}|_o=yFS8>cz1a*wU<(sUd(A@|l#`Nd)$^1sG%6;%L4gz$a-{d#?! zFH(JNu-q=0LiQ!k%np=^PyX0-9Fnw~o5|gjChDYT8_HB)g*OomyXYdhbSINgL;Zku ztp)Y$f5h{cr3+^|W-1S}UVd@Ie6M1zR{V-&CZ?p2rkeO>mfGDWQ6OKWBA$opE)-Lh mVgr`nIn5KkrFJoQabcV1c$-p^EW!5P2H~$A39AoHKKoDl+$^;K diff --git a/Telegram/SourceFiles/art/grid_200x.png b/Telegram/SourceFiles/art/grid_200x.png deleted file mode 100644 index 6ec78ce5f3df5ce3dce6b7dfd251f6af97390221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4505 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 A<^TWy diff --git a/Telegram/SourceFiles/art/sprite_150x.png b/Telegram/SourceFiles/art/sprite_150x.png deleted file mode 100644 index 3e4fa0109a2e498408599c1ae89b386bb725670e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69851 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

-CF+fsF7{jsZ_c@J1NnQ*o#;_I8(|^I*ka=lfsL=)8PwVrQ2}x@-F ziBSG0^*rZf^*H>~x_R&feGC1_S-DV_xQ}cr$J%}IM!FpPH1-OS%f9Bg@Z$wM`Qg-R z=@&V8Jp+rq9{;VtNZxnJ$(E&SFTHNUPTTrj?0)RWPkXAAA@}X=V^kjitP=@@^^F{+ z*Q5$}YVUrWCx#|UC0gSKE>kt7cNHf=;HfNj}?l;m=a@G6X>Zvs%!+cepFpR(jvpcogk17(kmA*IT!e=ipgVT&} zkhD`bn}xwh5`{I24=dDfP%U= zGV9P%#zLS>a(}8Qno~tOV(4J#BrLef3Fo~B!fT=;zmXb3y`}t70}*$QB5^%2<&mR8 zl-o(X3p4Uc4~`Z0L;G&>w>^($${E;dH+@WoUwq<(SJLWOk4xzGpwe?E-O*mqeLMu} zmWg0K9!{5869D(HJ31Jgh>^@g4Lr(wJq8^6-QCCk45YJVAGNr=tz@$9V<*M3XuT>< zs@~=Um_nh`n?HC@kMX`&e6rX)L9RjiWVy3To}3+jVdw>k6#^eTURYjzE3E9-@H z{?YN-`xfAW>6|;~Y=;aT*C}ckPAmm_#_Z9=%C!!}!yP1xJf%}s36C_syuRg9| z3RwF*Jmc)sw<(LBG@29GxLVvp3GA(-U;zRqk+u;`BbhoJNT}@^a{A`<2ZEO3@OSTl zP|cGKWagSrXwPPXLNLvSoKN0@Q&{8{hm*5@e@{2(&QL)X<&6A&6n_$e&qFzEd$2XR zb@b0=V2`+G9<;lFFhOss*{Lu$+7e(|3a!r`^htcbL+H)BB7Y?ZkA>5FJ>qefaB?T<0;j8otzzNjUyd{3#&B7A*#Ph-7K!9&OY>+Q2zLt=%$6$yza4W{Ob(_;- zGhH7W`u)|M2FFjabq=Ds)oDlo?0imCrhLJdU+=?R#mM6WsVa>B^KI3&cP{WUo?8kL zFKXcn*`40F+2@Ll%->?PIFr2S4=_RA&SYYKzo1?rDBnuVXN;w zf2CKodw6W8sWQB1hV551)Tj8}+FQrRJK{9zk)FIy6RpU5_=*?{nAjbYg*a5w&^s!v zQJi^m9eCm*DAl@6AEf^ByTV#!2Cl+s>{kLCuM(v{^F{ft z5Ta^*>Keke*WUKEb{Z#Cy8LXD;iCNF#&@B1t%VL>aqLr&@Jxm|;bEq;t@CQX_1U;v zD`nfwjr>gX%Ei}^a|c^N_JW#-ya>suIH^Xt0m36dTrPIOD)4VizRJU8L~soNOGXZ> zCf)et?g|m$yHbn?YxNyB3Mim>;|nY4(c5+bJOOEH#l9kj-hMSuD5|(-Q@&U z!IpRQ*74E}FUOb&tO}ynvh7NB@7--5#5@oiuj6G)#%r-ClkU3u4TzA5+lx#DMr`We zh1Z+^`{=&7r`&qu_6$>$u<%F#L;6cyYk^A2p?KlK@ecmmcq;&N6JPf`L3 zr$@*;N3b`EO#U?8*?FSr=zw0gnjAMZIX*umA2|hdimD2vq^aH0M{_VA< zqA}e_PwTwvfA-rqFW>cD?p_|AT7!Rz+X`gHbs`NM)L>+nsr!gIFHLYlemx9k%?(2n6fnMTI8E>6D zsI4~Kt0G1E2gZNGA6$q}bPPT~cw7?9uNRPPoim6LCnG#UH7?0bSg0k_*;n^Pq4oV5BADF8ZJ|k}My0L2hnH6P38u$k`y&9h)0-Zs*g_8#ESjvOv26neVCH zs-;IsY}LI0!Rp7qW^~ER|&-*4AA$JR$FBiIbpA38kAIJ6L4rlf82Sk7g9ZD&GzmyxR+YfB59@k#czUIt zEFJ>5zDJq+`8uNMu_3WH-ez)$v}IOp*Cdm!njpgt5p3qreHOXO2jZrw zTkJ2?|KdN1^|@v0ck4=m$RnGF1g-ffb^KEp0MeoapSQRLXGG&XV{C9JxQHLTH+-PC zcXo}})#h$ppH_w_byknPwz?MjithTXf-X4|w?e;cLu-A&ZFF%j_-T^3afkU{lH2~w z5qFFk4G2X7UF1k)v1Kcu^ei()P`GgtWeRZ`+tNuWY2ZfkZif&JI^aUA*-iu^6kf2J zzBv)S z(M>n*W7UXdWaANLYcxEQBHUU2Y^E@+iEfT=hQhQ4&?%zZB)JO8Avhf8{O4G?Y-ike z8t9`Xuct&@R8{Z(I5+VijaP8J9A>>jopL{n(+4D)IPou~8iP6&_H!6Q%641qh-e?~ z|LExWud^|?{+|{Armg&JC|AW|0Z2BU``EkXLHAf$U+;EaW7_0Y zz$TU!ZwQl|<$oV_7RGqbw7<7E7Cp+|YX|UK3V37%EY(1B6NEc>x}JMN+x3*S$x_IH zmqGK(GWA_o%XQUt?a+!BAn9aLBL@zKub8Q9!8{GWAx!O-z|2hNi|h!su#5_5Y~_QM zav{>nDp~7CiY)mRu&fMu$97L^0aIxaEZCEHNrmrf@1|v#)(!9q6(&B7vP7 zDjY@c{7O@E;;9Y(m&1Rrvwx>v?Ta_oS5$D4x{;^c&AhSV_;Fkm>b+zSPEE6W8sGMZjJK0Gi&P(w$qWz zx-U=+hKwifg#e%RD4m<@^0CG0NR+ea?Le+D@#Cx|`|+B^*F=U%Ql4j|F-SHmLY$W@ zwnlHH+-!+QT2<&)XgtnpCgo#%t!!)hp1*GEtQRzDy%@S+{|qRXd;GThbywD>GY>A_ zB+}Uq+Q}e!Tg4bTe@6Pf%ZlLh2Hi$J%M9^q185|%9&*3M$k-Y+FlTJt1-jgyb2c+G zbIp?rxDtil`rEuXv38cL+oWOoDFz81cJ$V_GP=bUmCHzP6y?|yly*?fl zf>Kswh@Lq*ko+uiw=*BS$D2SOgh$jbzhxxG*ZzS|^lB~n3OJ{DUVQ!jZ;Vr;*rwd| z7Hn9sMh;d61!Y{8X$cMx{&{cuC_2fv;kzLWU)?!A)^iK&?&y#y5OmX2gf{-rb;JpDjR3)sKfm7+LFtau#K^UHQsyOIpj-t za4wtr6Rnt&q`CR5@JBQ)DBHyOPBUjrfn~1!&h9T^*{a&jCwk_QmM;^>Mtm-%;-C*z zeD(%M-I?*WQ^7SCLj@mE!j|mp1eNJ$KcDCvCrYhK;V z^43Q^kUR;tyy+5nQ0qh{d|@}X#%UkE?H)g^$9lKmuLVr0j}2}#sp%*k9iWD{8sMpxe z0HJ8wxu&?1vW8+$baVB7Rs`dFa=-)?Wf3*$>j_5Qt(unXbdRsl^U#IpQ5AhF>G}z2 zq^9#x{`|5W)V~>goIjkk#U)rDB-0@9WI)DAHj%^T*w=+#_Zn0`$iT3g;i&Ul$K~vX z?CWh+T+B$oP&HZ$@j}A%g+ydtPic(GPv*Fs*UL=-TL;<`Z@pKk3bLVu*F#c8RGb$( znqu!*X_^3`^yUFb%ZPBeH{}(B%)q0y;N{>dzD020YnCXG@1*&)NB?m6uH5pBkK%nW%zyJkVLOsDdC^;5Q8pv>Q&KZ%aA zL#{?o_D!jGw)w!cScz_N@5iXVg)V*Xo1*$ymBGkyOC(&zRzxLJ1DKS$J>*TU55EPx z+P7(M7QAwq;Jo0}FpT;csIMRST6rG(AcQ!yEI&V=@;{*Vh&O0#9ds#AJ+)u~e*2mX zhtt$q2a5$5WU4$r=gzmMBKnhpC}Qg~lW%@>-uqe<;x)2*KM;W$QL#r80+%oar}!J9 z6DCEv5ytQH1?()Eyv)dsPNbxXvudC(-BVybKHYW~#3z+)!9gUuB9cK=&m5oP;WO{_ ztas+UmQ2#Dc8jU@*q6*M5|YUYv&4`5oQL_}D;q5$Gl}sMqddDFOrH1ns|4^P{~>;6 zaT`lM`PUPuM`Xovs{^; zrIZb4wF*6Pi`)7^N@ceE2Yt7S#j^O|)_6A3|8 z8yw!Sbv-;TyF3FL5$4(i)8*W6pqKT!iEq4~)2-am*I!6u5tl!u zi}=i2uW+(jkQMP3Ghy?U0xH*&3T+h+;06r%0Gv|;CN<2N>Up)(OlS>pn$zhXNQh8PFp@ z@VN(v>x+gX4XB%qWx}v!S{i9mqzK)c=hw zY_X~A@z>ia4Ic3;s|nMaqoQAAREcgALV}b+-}^j0RonWeYHH}o45nea56T5G&k!-> zs(HS*MC{Lu6D!5uz4pvbw&1AD^KpT76I_fGprM?>8CBzKD+R)2aTW1?V$$ZLt;RUj z&9P6E3dXu_@b#A3NtS2I|E3PfXexLZ>pK zr{<%Vq&uv`^2d}F<3sHZ$0*6qhO!>)s=lrL%8DC(gSo^-W$bKUB-^u28Q>2}O2FDz zzmY_;^J#Tlm(kG$mVR^k>oU%JT6+$w2c#$}C*r)oLW2!lub5HnUKH%ky5|vvSQiP~ z(yjuqoGGE}Fri_?$7xDx(2kL}B$m11TlYpNl7>-&iO(M4>?#a7%sw<0`GeKM22Ink@^q4?x3R#(_i{N8}Rr8d`xRgrLA#MZRknd z{V&hC&WP+!|9o^mIw+uhu)^2f|9+0F8^8IRkhZ;zx_R$mo`d)NH!q{XJoJYtkqYLo z%t8UQhkpnVC|Eq|N8S%OZ>)>*`zeP}6->SNBXlsv#QdA^hruoUDP08yh|gG>&o*vs zP3h$b_oa%;#WXzy%$k?QIs3+&Dhdbc9}7MLW3ZWT(b7$x7yjJ0zIQ7(39v17mh+05I zPjdQQH-ei!PrPIfPe%JWT(&5pMmX;egJ)pCAR0wlNlI$kM`-D4zoc~z%Wq`DCJfQY z^Yy=tW1C7djJ-|3bbj))Em}xOIW+$dMSq=An~QcC%%1Too$f~2V_ebBUPFVvQODO> zdEP4cX8TcUHteNgC0m*0|1A++Je9V8?ygD|={K(Fkffois>+c$(Lw{7!h8YUSF%YI zE;j}S#0wvw^GRt-OABpQ@`-_~LYGY9Rsg!V!H5^uiB^*giKa086o!0=96zO1wnyT8 zq$dOH0q5Y(4$jJ(kT$`0j(tFl#{FEV)o@+j7ewcbjje5%ZSd4t>y$)B^BcOgXW!g) zN85PLK$f@Oe9^k5y04e!(kjR@56-GCa4`sKilj4(xG7T-4i)z{?0xI12d6$)FIEbw zIv5m!%zH|zce8UfMehvui4mwrk>O4T-+|OkkwY z69n!ty=!5#3+BTI7C60NOS5?K$wI(v!MM|Rwr*KMK}AibW|fTjQFndS!TZRN8xqWs z@2bs?{QT7a#S}A0zy4pYp+qSU^aNCQ=MZ~{}{Vlht;?qPq9%F!i3(1J1yt=urWooj<|#)}16CeXwj zP}0z!v4(y-&y)$R$H1f;utKGdKS1!bDN|;7SFl5v2w-$7zugQ!eUGMVcW~O;*m(Xh zu5&ovL;Y2plkdY*sdDkZwW{JGJ;L_Epy-sYBBXunOH$)$>sWf!P*$LDIYs6Lnza5#=Tm~7+5w}zn2g+4^iO`5pw(|^4gi}Jll13>)Khlo zCJNdRfLOqP)$r~YbG7n+EFzjI!g3B{`VpKy`z~(CPL&LYm+QM4Otq(`<*^3(r~Y=BBJ#}fEv%oTm^V=*Q*ABt%gEgfS-IvYZY3o$rWat<%8+NY&p^pg9bKoXw1&Iq_rQ1Vd2RbI%mCL^Pv~1QQI- zSeP6alA#phbsodP8n7#jEU$m+VhDRY?3L| z^^BEd`jjJQe70@>8?EYpod)Q?TQGNKjIiJ{ZiE zyivF~u~FVc=%o8bM)WMdS@2`WqG7dlojNPWl}`K+C)Fy4)8$0e!f%57ELxw!uZv{aXEP&j4fLOy zmUE#gek0&fo{h9S?JwyRNru>XuKR%40y_~DI-=kAw$G}fnM^aKm*z^aw$kjI1ZH9y z>~DRr$Lp#mTcj#n0XH$m-rh*#<>Qx;MpMpZrn+E(VqwbP$t3ux$4>MSi`hE9{>Gu7 zqec^FVmiLmRvd{L{T|{*0^8|& zBuOSuNo-t}`9rP8X;&|m&jFn4vPI#V+Pc0TMW>X#nkQf$&2<5%ryt_^=11kTZ)RWL z$W&(Re0gT=Iw<ia9!c6mDL+*C8 zctroH1R7JS{PP0rp|iu6mMZ|jkD^?@(|UW1v(Sq(&t0h)I`*ryn`f$xlm>JqQ=idQ zi$k^W?MIXd8h`D@U)+t4`x1LH*JnRJ%~>*?lK&Pu{OcFhmz7&}1Q!7B*ztI%q z*Lh9VqD7S-2oc!sr$dw-Z0dI76D*|F<}7Eg=%q_v+HP96d+qhRNOY(Hr^x};&^JJY z_f*&Q$pEQa)~NKzXQ%+$Bs9d7?WF-}rLy_pzd9+7)*3&K?zgTH8_0ed`ZJTR-ig>3 z7%;lt?IB+T_&mORWaYeK<5=^Az?qwxYkDH{@3{QZv`_s*UyG!}htYK7CE7(v6_A#! z%fWv`obpS$MU6oR^033zJ1f5TD06!Z zPLTla`oLEjHYBz-??=PKLsgts&mol#fL&f`f6eXI@i(P)`467N+b@H7(7(Af)BLh( z9@v>D`_wLeujaTq5*aGzL03byqMyI_U?EO;Yk zuT)-Q&<)tt8J{@u&Xk?U`P6m&)63Ajw6s)<i@7x~oS~g2->zz$2>hexo3vtVA_P8z6~QTUMsy4*$iUDyO}NB2-t;^ap1) zT0DC^qs83YMl9KmrrvT`R-H+sUQocjuEGRP1=_IqKHJCf^3X#RI*sEUYp4FZG;}pc zBSDb9QEm^ZlS)(|t|3c#KAaVuB3H|z8^3i8_Mmf<`y0)A%V`^2IL*X@Cv+1Cd%6@X zvVDmM)0gG|#V--Yn_u&eZN2W10mTcyB0B_0J{d^M2j4A{e6~^UU?u7)TE_6}9H1wC z-uTQm$Y)ZHHsC!`c%p@3fPjsyreQW>o%VNCkd<}YMO}}fYooaaUCcSQCcIx)5Q4bk zYE}+qr^PdoIZ1d+jOBvR+2!}MtH((PlkR^?gvffdp_9RF8Ja(Tke_76h6U9sLxj{* zJEgHnUE4uoRD+LoFeeL7G2 zi39NH@1lmYjN?WR$IH=`HBg>w z{Gb&*lVrluv-vRoMdnO60({Hb$XfV|Jm8r%|4y|vPD9mMMJe5d;lKmyQN5lCMA@@# z_13b(`)F$0vnQ^&QXNQXynJmG(L?Gx6Y!{3r0ZMS*5BTg7kM76reb#ukYn13R*3iKII-riPx#4@K8_U+=&&(@R zUDa^xsWj5#Ny(nB7_Nr!&}?DOyT&8G)@|}Zt;g3RzQS0amfuRDHJVH%B_$wIha{w1 z`Eo|IOL=GXtY4Uf0$>z6DECI z2<}_kHruJMW!|J>PW1&++|%pG9nHa*0l%K<`)l1(#%PS_WI}#DDzb=H{Q-q8C!=G+ zuY+}~E%nJ<-b^BTJ!ft>{n*O7|7{-JPf;p5QQ}Bz(^P)=*8Ua<;b575DrW>N#7(U4 zevx7cz3o>%djm|c+2Uy9k!j-5=?Y>8MNR#UGzN4?g?9?e*8p&um3qaUfgzQ zXHeNHz5+R(n4~>H*je6#7iSIO_H>4?gDNvKqLOdOyjG@Cr$#Zo9jyrE#s`cr1h{B& zq)DTD{Qkrn&}IRo)s{JGJ_^gdrUC^M=MhO^AW(5%Jcm6R!SJaJ4U)%T?=B<>v^~h3 zoDsh27HXg}h*saBYqa?HKFXVJF?`wCdFjsyur*E8tqkkaI~|*lt0yjuZvup%=)%R_ zP;*ePmfDD6ZT$02H11mf$tKKRrXpbF=y-o`B!He^B`Ff=khE+zaDT;t<=o(Xi`x?m zSp1^12rFzrZ?=rCB7g*?kvyr@LnVo#{pDomUz$#0F_#&c%5N6Q{cRudfGu&3Qy84Uw07rD-oPi1Wal zF{7p|-wG{3lcul$@{!Z}&rFNhUNUfP;r|&e-1+5M|9}9W3nUWxwDyKk@0u2ix#nf+ z>}11-2rRoNMiE*B`cva2yqN0;i>7=tv_8V$nQgRR_ntQK%wjHu3@dUC6Ale-qPi1e z-khCPZw5J&EO9Z>;^NF3CKj4b{|8I9$ksxJqVNB4jhe!g?JrJyMM%hmYe8i3${n|bT#OPN|!~At_~U%=%8dK zuLXFbkQ3lNQTUN@)fHS&id`hR3W*iWMDhNK!KRM7dX?L^rNcQE&&23FYTn}=nX1i3fEzjjJ_M8$R|DpJ3Bkoyb{w@hTL?&TvhJrx8on) zT-9b3aI%2WtMt+YpDDYLf;1q!!$huoG+xfxN4?=EL(?0E4^*&#_AW=CzVlsH%Vv`@ zcHQo-GlFlS%-=-Hi7*h={J#9>GBm>a!Mc@{QU1=>{h*bz?b3)a#S6?FmVx`>Q?V5d zG)Bn=WMD`GYv;!#E1jMa;I&Mt0E6063e3j0!PHFkP-;Nq7m%`YJTxPOP6#5_!Sb!* z3>G;qGPo_lA8@+8=EUnQ0?olk>xGMfSr;bzXe%S-b%SFvlOw%W{P#uoWV&+0m~-Imr}mlOzLKIt<$keZm>%#F zYDRZq)2OP9cj#m~x%w4+1VUnr1zqyr4=}TsI5#TVV5drzC-)|HmM}Nt43phq`#kE6 zKgVj*QZo>MO8vRqJTj(SKS+>UxlQXLefcR7FltgHt?@s*sBd>d@fm#KT8rYtTDfb0 z2#B76qU!uJnrPCQIbbJ&aR0zcT=;y$kL^cC#Lulmfr*aC=}+tH+lP+xlc{429LZ#9 z4TQBhYGiy)ER{c)@R}9g1Dk7CK;|o32RC!`6&YsAAASGW5QpN0YV8gf@bLU-{;G(@ zY)foEeVBbzv%cM3pfDw!mTk|G%_a(-%3eh*I9rLH%dKy}TtR}@7lQbAuJ1%hr_T;R z%oy9xd5!6`z1b}3XgnL;euZ+!D}Czo{C1(7!;1GV0tb3DPNU`|M)On4{(eK=fXU^V z-HReg16aSv3%?>Zf@iyGcT`>!7Ck0=kII;5&sh(y-DTf=On(*e3FS$BPGNp}n&m-z$DEq9)rhh~OlL*<*2-+9&X2fRDn$RIenZ z$zl|5^y$sl&gCF^btBRnrB8H+A9P6T{@V=H$5GlskrU`W(e+b#*@g*9(6FBJCw zF5>&kO#DfhiB9Ou>a*w}j&CbP{ZjT>vKO@>GXRD0i)yC79^KFFes#p~TV`y^xs_Rm ziF9U?m?^%kwqrWkp_0}6A-^WL=zV_@^VutK9b&7;TKe;PXCO{b@C|`y9qEwl(UAi? zW@5#!%+nJy>lY|##&@`4-z5nMH2QJHCH7mYtk-WMf2E+ss6tnXL4s4X6k4Eoa4TNi-3rBu6)3b&thj4&ZK1e36oLnepoILw`;FAz5*NWg$A0R`A+ryu|U0Y}f8lEAsm`INw_V z@aCvk;6+@mZBaJ81Or#d>lDG%Yrz8nHK9`QXeSxJqKcfnh~trcFlywvsI<8sn#PSx zP4wKXb-E+OvAI1*`GLd#dQ!*y?(B*1D|rW8;?i32P>0Ac9<*f&nAtwtaVCU$5!Eor z#T(+=eSS^}brAt7_@5V!TI#8e_9jn?{J^WlWX3mm6e>8g_L=SZLKx8%L1Mg)LkF zb(Gl8f~ngn*`Tj+FkLc2tBD7RQZ{O~GOdU7WJT3q6Ofb(2L^%Xm_9gK=_hnZR_I|~eJy;y z&C{vJUWnKTW2$uQI(9g6}P0xDuTi!wBXJoSO+ z@$mZ?=Vdvslg9ai+cF1{^x;Uw8>&IRjv2UCBcB022{UGLsSIz0epJpV(5QRMplMkY zDt9tvlsJUA`HYevDcS+sdRCx9UsI?-1G+>|J$`q3a!PWBiQwujQ2ryI0L1mh*tIE^ zU;JiP)@i?C&&3-$@j|9gH%oTV@6rrI#aJxpl_lUZ4L(50QLGJM7+-l7=_i#ncFnSWrCgFD^o;Gn zNCd0ace+=YfrdcpW9uY;Ec2J1>JrAiK~vN0OHhUgZ)tUnO4VJ86y?ud^ug+2;&zk=@}RHPY;WcMNmaiA4YgAadU$wZCdM@)Whq{^xQ@r?OxvhOD9O?TJ|b9fJZ>SduLPQ=uA8B5><_F1!>>H2|^k6w4utTcVbFV*f^PmC-9RNz5o15Gf?vTJ))N#mw6a**iIzC_?u! zTIla6D=`2~=m%)iO3=q~Q)Q^(cpzb@BTK~x{a|CR>mBP9*_%?I`+ct1CtC2p&+!$R z3qe@fwly^NtN*~dt_FLd-xjX@`INB2=2ZE$;g2&iU^Fv5KvMFr1W?72@PmPM=)RMPs!FKsuAVMUTKG|XF8tAfdK*CNPq z38YeBgH!D{CsJBm1sKvQDl=_g78icdT^Re^ZVwH1YNYW<-P3hk-R{Z+khxi~_IaL# zufatJ_|8^*r|~TX2>$2Ux*|O7ie!OPD4G&%d`QFSKSx(oMaAL5SXf}m=+k{ExOfmi zp1BK{v&7FCK8w?*#V$!Hk$rV;YDY;Wj=fpYaS+f&dkrQXrkXq)xm#F-TibQ_f!8Cs z*cCJB*}FE22+g@#y87mW=fdzEU3jY+&*v-mnVr=!U--Y$Ta}j5mk>B$K18!j82$4C zf5%){y{8eMnAqnm#R&zd!H@R2*D<}_Zh~r(f5lZRHH&g? zRo2T7FV;?HE|pPHT^hrQ`1bHskHShqwwe?LMw~=ZdQo zoE9Ax3LY{GArEI}2D|j>4JieT{>(I!ZE>`uw=}Tu8JF4)hcIwaDOIE6DFp5E+{=%D z$fm2;C8I_*{<4R0E5@q8-YP@k9L4m)c0udNy5ly6=9PDvHz@whk(!!%IHxSqcb?m5_Tl-PR0?I%@LfBihV6U^4{A>XEYAi*r9 zk1E}^9zNgXL<2vADSfjC(%2_wXOoF)x{Q`u;`NY6etJ{l*E-dEDu*MxIC{TQ_D1J?0> zUJ72yZ_@7%9DHN`rDfJ<6<#1*E1>%xRBO-!co34Y7_w~4w6M70kia_eBVnAN<8HRiV^OJDFZ_1}^c6SFQz(ArKB*cr`Irkj_nE6HDpH7F4z}a56<=+SN z!&?@)9s>PmiGWD*T9r1$lsg_9rUDR`m2~iv12I3MytZ;*^t%~o$Pj<~wzIWvv#5J} z{wYA1@vU^Oa(932iym(5k*q_nzrdTU8Nhz$^@5_7o@Laqb;@{C`Jlbhb~3tVoa)ad;VYl;jh zjxKwoADKLb@Ramv15fN%%cTNnl%9b>#J_*#7do<$MIxy{xPb6{_VkBeGuW1HEXQbgZ{RQxL?468r#vyNdXGPj`&(pLCc6~f05U8hSBpqH7uKt zqz-cf;2M=w7VmV^m2ohBC-LD1ZM6Ltp|H6Z?1yq@tVJ$q8P`mqM{OrhLViBic!Ehw zOU?{P%u#$c zqvJNG(L!f2Iz0_hbuKq-5OXoJaPwVP_ckh=dxHn1mexUvc`1QC3&Mb4GlDJFVkz(d z)=;5vjuy7o@9)^|a-rI=KYft!;(+ezYS&xFwYj;dm)ucaQnDQ>8Kk`ypwGI%O?T?K zxj73M-vg@z>t-{1Z)T)PmeKY%B`z6nPT57D7x;=m<3Cr@WlCr$Fj1?2+g{#2O?{+n zFx-Ozm3j;!x@00}`o7pxzOetgTV&W3t^s)NhG+G-b*E-st{LmmD10aXoE#)Sm3c@7|KWq~cp)AqIZA{p;cz44OLs6ja8yUAD zR9F9C7-LwlUlb$h0NpCrwRFEugLb@j&o}ctjPn0Yg4yb3rrqYm3O)2l&0T z#?{L)(tZID5EHd5QQimjWiFmCsS_|k0fA6=37Np}lut5tqN`?aoUDV#6_xzDDl9++zVbVTis$zIk7_;2Te46PK9|!vV(CJ4q!x~&b_wd z>SZ(w+0Z#?g9g_e?#8^vH>UM>V|=fdn=mxKJ%c>~Lu~;Ys6%bfvjRTr4*JSonC<5R zI?y-1^ht_h5%kLoP)EY=hhg;`6u|)07d1USy_^^bs1=h#(MvONn~;s}r>Y4|sL)!u zU{b}ib>kRo@Wkm)y<<`Eu>^>|8ho46S>42j$+n4~HOm6a@_q62-<+UK0RSN0sN!zm zglU8fkk-eV@AQE?JqzFWhiB?na}?hVs~$F^%=ziENwaGw45b@=K{FE)du!b&!5imm zUirY_=CJW!@7@^G-d=bN5%Ck+C+nGZBV^nZ_5O_$bn99+QB!{%@qE>%1C3oo4~^UP z7F#lSE~UT5mgAG`9^Ui2&c#d1y=6S3o88gM<6}}bpJkT6axYbY=k5Ib2b2~U`uh>} z8Bg{8-NMYL-={$n&_yL^itr^mKnKI`-;64gS?_ojpd~M-ei#uPVpSRtk~oay2wI06 z{_1&pyuVJmlE~0MlOfjEP~*BB`@%s3AeXK9Y5j=DCk&y;y9RN>)El5Lcx#$xKvI<+ zk=Vlt!RO_P4sp3HRz5&MO=jJ_3BSSkLFB*(&T4ytA~}0|L>EkvI=XJ?vSTRcPJJE0 zWZvv*_DSE7{le+e2rx`CQ$N&>NSiwEZlS(|`>z?4zoAuQBYkt5Qj%S1uC+KuB|=x2 zcKWzgq>yg+E90MMrQ><}Ja+24pudNZDo6EPy$mG5Wxl7P-&7yxT79ihyy+KNm8DCM z>+a_5vOk=1b!=`39LnhPu&7PFdq-4jWK z#8=#vkePfYTL3wh$OU=Se(k~UbLf=pa+8b6>YqP1^V@uc8CU9=g5O@^F)%RLySON$ zOj&p@vk!btwj%$18j4+6p_M;A7~BG<(*Co7vgc2|HmL{|zP z>}uJ2UYsgjH92Ix;dtYVI<0t9KD+Qr*43w;*8R1b@4nR?eg~gp_5?3?p;xCQr;m21 z=9M|Xm;(L^E_<(jLhGo~tw3P0ywA)@(8S0ho5}49wWMkY2vOX5CkdK4gQHqfR`v|_ zu=B2U6J1VU17(LxE;%G$xiRfD#lL5<`gr_Zw=5_Ft!HEu^ST}eCXFll=HR7jKJOiq@Nji= zlR3O}VXF_{P@X>=eXVe{8+Zi^{ChfwMFvAR5{YrQbOBuA8#; z%VY-=I*H!SzVH<(SFbxK3N@;3KWz*8c>=xK>=TkF6NV6NjG*QM70uY_!dxs0y$Xh% zqTUwvK_(0@CMQkfORB~f0n{JNWDS+?w6iRPv~1k&J~>k$xJELvx*;YAgXo6%NDZm6 z!*?yVrq9$<#p9^q5)b=eanQ3YY&n+6=fP!50RZX6=pRLG`+T!Pkq2v^GyWL>45PMW zk+Fe95R_29^PsmgJ`g3d8;yjlj~2L3JOB$ErkMBZpPw37HoP)v`3jEZ$yEY0+#7ki zlEp!Pw3@mC0NJfXJs-Ax?#^SoD`O9;6l2HI;A;r%P}!x<5SH=4$k<|lMn03w!1(?E z&}uZ&9HgMOk&C6b6FArlHk+&YWna})>-Y);&nDw)mv%>QU8VG=CBU&}o)+22g*J}?!92Tc`)t7T1xelNk@%|(**+F%cIr~T;j zZ$rc-;@g|{KGFM{h7z77&-Q+5JxnaqSpsuA@^oJK7d<}MMd>?MqOc*$n>rK-f#_*G zBJS6bPj;>?o6%t?%Z$B_pnLKAK~fkej&}B zN9`Q7$Ll4B-Bnx3%;!f8MNpS;ZDd?H&o6{EGGcTekM<7rT+v3>xmfLOT6{lzt1Xq@ zxT#1X$5M<1s0J4+qi|pr#sNn$C6}$H!qqyUb_nsvPy@9&ATfzQ!fchPS{J$fLjJc?Z>K<*OB- z7o1FPE}mYDxSj(ZnxtdaGviQ%tc{TWs95E0IQ$+7j?A7KcZxlr-J!d>BAbx|Tt_5J#08)J2Xy=1Lxg>WJW*16+y(Ex=p_z5 z`}pfk#Z2CCL#74Y;Z4Z;7PXHTthR(F0z+!9rqtBfZo4>|`IRW9C0;mlMRrb?iUA(p z7ysUIWOQJWIRlEr{1E#ARTb(4vW`R5toj~<> zt8j@mL5{>ZPnJ}Xpwl4P?Rk5V+{1F4zNzsunltk4kS8N5pKBZMkKGPXK+AWo*s)y2 z+i~T_62{;EbD9WeeegB`vj7DM6k6WB#Uun{)GJ~?9jnp4%~7$R!sJz`W!oHWwdAeD zw|H#^kl)2TcMzdX+WX7t@JUqR&a19bd6SsVuSpmK;2v1@U=YTRD`>JMn_!jA)LdKS z2%BA-ALkWwTYE4X*8;e2Cy57l&feH3v!;QZ03NU1wRNK_`Q9z+i-lX5gLo`I?R~8< z?=p|26!Y^E6__%L-~1FkoV-*xl0^X7mrl0Xl;Snx`atuM;Cd-ft6tb$ftYWN{Jb=aUvE6o?# z!Q}GLB^K_Y3NWFPe2#`*320~~Rv+DhGX9%FqN!D8nUd~v`I2}IwO2%#^y!J<(BER5 z6Wo3;p)2375_ti94|WQRz>st4HISHxhc(E@w-taRiFdw6gQXmZc$Hx(tC)hYRq-wtkg?*4jD6Iy#C`9y4Xq zPhwa9}d4;Q}?8skjcD_WG-1?gj1ku)tv3aSl z@;_v#I|oW^b6(+R2@%-})1023+!~f3HX_6iMm;!{HgN!&I}y`Q7xC}u>EC&{Pyb}- zK31?BRW^Fl?M7zl%4_b1)O4#-MY+*jbTgOOP(H6R8{t<1J+La(>>9N>e9~*Ymwd6f zpr}?ECG8NJ$Ml{|z-vGsVAtRyHGqpL)Gc)Z|2M>u=h%L@Mt$pqp(kP*JzR+5Ded_| z3tt$udyo@-0M5IGWw?c^5v63x=D{>l50gM~n%Q)Ty06#~ALZVf#UhN<`n>v&HVKvu zK@NqugxiV(r+GhI@G&=$54cOm2~~y4Dn#mr0zOl)DWL1B+%9ob9NjM=g5QxBEO4p& zFfA_51R++N^V8?HNA+)2Nt@ZXng(z(vlr&le^wXpuKo2D1TrO;M1`;^MCj6qxKD%w z-#9rp{Grsp)^N^3`QRAhpo;VkjvubyDzPdk8&}kh6wlzWK?l&>ic&V9s8ew z3ejJ|ntAX#h~1xy+#T~^#HRNArM?2w$Uxz$yH}eFAB8RdgR(QO=`5&6nGmhRPLG`b z+U8u}mlDyvl2Tfd`i>_c@qO9LW%N0;xKGc&4`MZug_0FM@5c2v~ms_7he-=7?m*3kPAgU_<2yz5(8|+f(PK9-tRRb+1q#RuJW&Us_Ry zM+1bX3*LFK9a{P75Ygy>wflX#itP{|J<64>a*L^ zRWe_1=to?2nznFe+MqZU7Vx#1B{iA?dQX(bbQIvsXg#0>hnJ|fhG@8i|5S^ORMRhH?|2eVA$~uzN zwz^~$&*z@UgGn%F0edXPv{p7fWtLYzzvuRnE681)@Rl6d5m|Q;K`qr>_4OlHUXMk@ zB|#2-e~FwWK{~rIifBYXeOKFLQhy=85x)njwkO(T-8b6YNKL?qAX>U1*xD$Hh=_QO zoj=OhGKaN$CU5t+WgMKzBzi4wTrxvIMn~`_6Qy!Z<+TXIXNtZ&iGYA;K-?`DaOP`< z6tj!Rh7!~J+T&iF*Ar~#{IAmszV#R+hUKN8iqU(|1ML7*@$2M|>B>v#`kr#yKs;o` zIiCtJA$3-_C!qUEr1lbv4JA*rF$A+Xgn8!Htd3*W%6=No@WrA}S9vDRYaMqr05

  • 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

    n4Te29+aN(xor`E_`Mch|Zc=NZ zz%LAuhcXP;bf$x>*hyB2HazVD2$xHjdpjx?7Gf!$B5=EhB@bi+ZOmVPKa@_6Kt%$e z%HW_15UhRllXvn02S+vQbHU+hkW#$fX%JxH_e_eo)W7n9&JdZyy!3FwY-d@5X*|#? z?VT2e8is*2R@vAXo!6l{;O<0sNKwIiBc*XQ`3bRyQAf>GJckf%1LPQ`3ut~tl|A}N@B1(U~)u;=lyJ;oJ9lp*JE z@;ZJduDzt1?EF4m&kN{nV?c=G>iy8=%4(cQ=+#^^@=+;#fn_=}5{ZJJ z;jzp*jcgNlcwuL=7>Zvby6+3s?mgoQV{TeYiC{|ve5777KWcz=8*cF zu1G#0ZcdhGW@jT&uDUg=;A3y_twQQQL6XH#iNl1cagL-NyH~5@3&q)t4~M?pSL=3GR3wk9s;CiC zcWUK{JQxCgW-ku-Z%6vVO>Zw zu&^%c6@Hc#5fCC%&~cw23wZw@GvJH5F~U_q9gv`n)LOwB)SmyGB&kYRP!J}4ITtKu5VO(mc0NQgTNmUsO2|&Svkc>}*Ex1lN ztepH}(asLKyAr3_Gnhp8sWiilwK#;XH9u$Gub}xpz3{;XVPm>KVZ!fMbv`-YO-j&; zpw{1Ey+_?JnEsZ8`!UU*&KFrRoAy}dV0H6%(cam4;O1lqI}dg6c?gvSa(a4Nz)=$L zRR-~-)^)pWzIF8RGFlmVL~-eU9q(VV^0d3R#*|VRgqSkNIHL`fu4#Qt9%HV}1CHg~ zA<$l;#bOjEhk`?6sE+{h_kblh_jL_X-l=)e{uIYlSjsN;apctdhRamfP>BY|RL>|eT|LlZXY-VOA_j1!b1&s11|1~4*sT)Al zQY{^Z$3dpLfWeiyi2(?T>4iVrkO5eLA)JJ>4G$LcnMyH?e<7dr))wWV{k?%h?T-fE z$fcyERZq<0P9M{3=!t6>HId|t8$lUy(WlcBg9&QPxRtDZ53&;+l{SfYx~uk(@3 zUUdp8Pvj>QJg#&2UDksNSrKxX!t6tA#bSK`*(B{>hPwCtIA>; zFIVwR8T$)${aX$H0(ihkL;9pttFzQT3_*Wz;AOhoT40n}a%0sL3sR{EPn5(-!%zNm zeUNFFGpO6HeJoE!QC;(>5MTUAkPZW4IwtPGsPJ}xqik}wz^@$f>};tcsU2cVyLG~r zYHkH;Q31ZURnY9u9nYWYUO8_~&^YozrGz4W*%W~ELv=gvxNzgfyt4tTGAp^d^tJ2h zV@|aGkuplILb?yu%p2_WIzh!WJ)Xa9iPhios{N6tQs9wRR9LR4iihrt&rK38`>@%6 zno*O`b;(g#5KF4f(0|`m=qUrq(t@?8=a?dOrDWYp>uZRId#~L``;6GjUUSWHIalI^ zQa;u1;y`W{lHm7nQpFDZ{wnuYjGhSSRfWs)Z_?R}8$V7fzZzPBZj3XWZ_}T3@H{*@ zNgo`>h<#*(4~VlE@`+3axBQwzr1Diz1?7fSZbuAR%QQoDX-*$CV3&InOtyO|Nh>N) zxSr&;G-&|-FehY;& zv%p?`H@+?x%1=JtqaPaU>gawH^0JJr(j}Oh1D*a7csYK8+u5YcZ&La``d3WbJr1#J(7XHe>hi$dd$J>c!4nYQ zD-E${q;bf6iHKcuR16?z3u2u;vgJ!lQtZ-4ec!vTkd3lWuDO&(RtURH_Wn;dT}SPU z?U7;4BzgvGlq)RR7F_4_p&xJ|0!t_Bzkg#)U2?CXbp3YgW7w!W+=v^2GW>9imiX8; ze86~MXe?3SRSDB0gcV`E*9yJ5;S%Re14#~52*2RP<}TMwu{9C0pdN(R7π5*jK; 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 diff --git a/Telegram/SourceFiles/gui/twidget.h b/Telegram/SourceFiles/gui/twidget.h index 559b9e2f9..5fbf1600c 100644 --- a/Telegram/SourceFiles/gui/twidget.h +++ b/Telegram/SourceFiles/gui/twidget.h @@ -31,7 +31,7 @@ public: return dynamic_cast(parentWidget()); } - virtual void leaveToChildEvent(QEvent */*e*/) { // e -- from enterEvent() of child TWidget + virtual void leaveToChildEvent(QEvent *e) { // e -- from enterEvent() of child TWidget } protected: diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index d0127d8a3..45fa01185 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -895,8 +895,9 @@ void PsMainWindow::psIdleTimeout() { } } -bool PsMainWindow::psIsActive() const { - return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized) && !psIdle; +bool PsMainWindow::psIsActive(int state) const { + if (state < 0) state = this->windowState(); + return isActiveWindow() && isVisible() && !(state & Qt::WindowMinimized) && !psIdle; } bool PsMainWindow::psIsOnline(int windowState) const { diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index 109316d88..cb188d63c 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -102,7 +102,7 @@ public: void psFlash(); void psNotifySettingGot(); - bool psIsActive() const; + bool psIsActive(int state = -1) const; bool psIsOnline(int windowState) const; void psUpdateWorkmode(); diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 363286ba2..81bbc3323 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -49,7 +49,7 @@ using std::swap; class Exception : public exception { public: - Exception(const QString &msg, bool isFatal = true) : _fatal(isFatal), _msg(msg) { + Exception(const QString &msg, bool isFatal = true) : _fatal(isFatal), _msg(msg.toUtf8()) { LOG(("Exception: %1").arg(msg)); } bool fatal() const { @@ -57,14 +57,14 @@ public: } virtual const char *what() const throw() { - return _msg.toUtf8().constData(); + return _msg.constData(); } virtual ~Exception() throw() { } private: bool _fatal; - QString _msg; + QByteArray _msg; }; class MTPint; diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index 6110d47d1..8b2d0b436 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -793,11 +793,11 @@ .\GeneratedFiles\style_classes.h - "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" + "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art" .\GeneratedFiles\style_auto.h - "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" + "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art" .\GeneratedFiles\lang.h From cb1e9e8ff19ad5da380949b10e63b26e16c00511 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 25 Jun 2014 21:55:30 +0400 Subject: [PATCH 12/14] fixed custom build step for win --- Telegram/Telegram.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index 8b2d0b436..735b600e7 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -793,11 +793,11 @@ .\GeneratedFiles\style_classes.h - "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art" + "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art\\" .\GeneratedFiles\style_auto.h - "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art" + "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art\\" .\GeneratedFiles\lang.h From 1420ff720e7dcf97a23aaf72cf9e8a837394b53b Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 26 Jun 2014 00:15:34 +0400 Subject: [PATCH 13/14] build instructions done for os x version --- MSVC.md | 113 ++++++++++++++++ README.md | 126 ++--------------- Telegram/Telegram.plist | 2 +- Telegram/Telegram.xcodeproj/project.pbxproj | 6 +- XCODE.md | 97 ++++++++++++++ build-msvc2013.txt | 141 -------------------- 6 files changed, 227 insertions(+), 258 deletions(-) create mode 100644 MSVC.md create mode 100644 XCODE.md delete mode 100644 build-msvc2013.txt diff --git a/MSVC.md b/MSVC.md new file mode 100644 index 000000000..eb0104b24 --- /dev/null +++ b/MSVC.md @@ -0,0 +1,113 @@ +##Build instructions for Visual Studio 2013 + +###Prepare folder + +Choose a folder for the future build, for example **D:\TBuild\**. There you will have two folders, **Libraries** for third-party libs and **tdesktop** (or **tdesktop-master**) for the app. + +###Clone source code + +By git – in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild** and run + + git clone https://github.com/telegramdesktop/tdesktop.git + +or download in ZIP and extract to **D:\TBuild\**, rename **tdesktop-master** to **tdesktop** to have **D:\TBuild\tdesktop\Telegram.sln** solution + +###Prepare libraries + +####OpenSSL 1.0.1g + +https://www.openssl.org/related/binaries.html > **OpenSSL for Windows** > Download [**Win32 OpenSSL v1.0.1g** (16 Mb)](http://slproweb.com/download/Win32OpenSSL-1_0_1g.exe) + +Install to **D:\TBuild\Libraries\OpenSSL-Win32**, while installing **Copy OpenSSL DLLs to** choose **The OpenSSL binaries (/bin) directory** + +####LZMA SDK 9.20 + +http://www.7-zip.org/sdk.html > Download [**LZMA SDK (C, C++, C#, Java)** 9.20](http://downloads.sourceforge.net/sevenzip/lzma920.tar.bz2) + +Extract to **D:\TBuild\Libraries** + +#####Building library + +* Open in VS2013 **D:\TBuild\Libraries\lzma\C\Util\LzmaLib\LzmaLib.dsw** > One-way upgrade – **OK** +* For **Debug** and **Release** configurations + * LzmaLib Properties > General > Configuration Type = **Static library (.lib)** – **OK** + * LzmaLib Properties > Librarian > General > Target Machine = **MachineX86 (/MACHINE:X86)** – **OK** +* Build Debug configuration +* Build Release configuration + +####zlib 1.2.8 + +http://www.zlib.net/ > Download [**zlib source code, version 1.2.8, zipfile format**](http://zlib.net/zlib128.zip) + +Extract to **D:\TBuild\Libraries\** + +#####Building library + +* Open in VS2013 **D:\TBuild\Libraries\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln** > One-way upgrade – **OK** +* We are interested only in **zlibstat** project, but it depends on some custom pre-build step, so build all +* For **Debug** configuration + * zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded Debug (/MTd)** – **OK** +* For **Release** configuration + * zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded (/MT)** – **OK** +* Build Solution for Debug configuration – only **zlibstat** project builds successfully +* Build Solution for Release configuration – only **zlibstat** project builds successfully + +####libexif 0.6.20 + +Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git – in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild/libraries** and run + + git clone https://github.com/telegramdesktop/libexif-0.6.20.git + +or download in ZIP and extract to **D:\TBuild\Libraries\**, rename **libexif-0.6.20-master** to **libexif-0.6.20** to have **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln** solution + +#####Building library + +* Open in VS2013 **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln** +* Build Debug configuration +* Build Release configuration + +####Qt 5.3.0, slightly patched + +http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.zip + +Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.3.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder + +Apply patch – copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_3\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** + +#####Building library + +* Install Python 3.3.2 from https://www.python.org/download/releases/3.3.2 > [**Windows x86 MSI Installer (3.3.2)**](https://www.python.org/ftp/python/3.3.2/python-3.3.2.msi) +* Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\** folder) + +There go to Qt directory + + D: + cd TBuild\Libraries\QtStatic + +and after that run configure + + configure -debug-and-release -opensource -static -opengl desktop -mp -nomake examples -platform win32-msvc2013 + y + +to configure Qt build. After configuration is complete run + + nmake + nmake install + +building (**nmake** command) will take really long time. + +####Qt Visual Studio Addin 1.2.3 + +http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.3-opensource.exe + +Close all VS2013 instances and install to default location + +###Building Telegram Desktop + +* Launch VS2013 for configuring Qt Addin +* QT5 > Qt Options > Add + * Version name: **QtStatic.5.3.0** + * Path: **D:\TBuild\Libraries\QtStatic\qtbase** +* Default Qt/Win version: **QtStatic.5.3.0** – **OK** +* File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln** +* Build \ Build Solution (Debug and Release configurations) diff --git a/README.md b/README.md index 548046310..7b7fdf084 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,15 @@ Source code is published under GPL v3, license is available [here](https://githu ###Supported systems -Only Windows systems are supported at this moment, OS X and Linux builds are on their way. +Only Windows and OS X systems are supported at this moment, Linux builds are on their way. * Windows XP * Windows Vista * Windows 7 * Windows 8 (**not** RT) * Windows 8.1 (**not** RT) +* OS X 10.9 +* OS X 10.7-10.8 (not tested) ###Third-party @@ -21,121 +23,12 @@ Only Windows systems are supported at this moment, OS X and Linux builds are on * zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html)) * libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)) * LZMA SDK 9.20 ([public domain](http://www.7-zip.org/sdk.html)) +* liblzma ([public domain](http://tukaani.org/xz/)) * Open Sans font ([Apache License](http://www.apache.org/licenses/LICENSE-2.0.html)) -##Build instructions for Visual Studio 2013 +###[Build instructions for Visual Studio 2013](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md) -###Prepare folder - -Choose a folder for the future build, for example **D:\TBuild\**. There you will have two folders, **Libraries** for third-party libs and **tdesktop** (or **tdesktop-master**) for the app. - -###Clone source code - -By git – in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild** and run - - git clone https://github.com/telegramdesktop/tdesktop.git - -or download in ZIP and extract to **D:\TBuild\**, rename **tdesktop-master** to **tdesktop** to have **D:\TBuild\tdesktop\Telegram.sln** solution - -###Prepare libraries - -####OpenSSL 1.0.1g - -https://www.openssl.org/related/binaries.html > **OpenSSL for Windows** > Download [**Win32 OpenSSL v1.0.1g** (16 Mb)](http://slproweb.com/download/Win32OpenSSL-1_0_1g.exe) - -Install to **D:\TBuild\Libraries\OpenSSL-Win32**, while installing **Copy OpenSSL DLLs to** choose **The OpenSSL binaries (/bin) directory** - -####LZMA SDK 9.20 - -http://www.7-zip.org/sdk.html > Download [**LZMA SDK (C, C++, C#, Java)** 9.20](http://downloads.sourceforge.net/sevenzip/lzma920.tar.bz2) - -Extract to **D:\TBuild\Libraries** - -#####Building library - -* Open in VS2013 **D:\TBuild\Libraries\lzma\C\Util\LzmaLib\LzmaLib.dsw** > One-way upgrade – **OK** -* For **Debug** and **Release** configurations - * LzmaLib Properties > General > Configuration Type = **Static library (.lib)** – **OK** - * LzmaLib Properties > Librarian > General > Target Machine = **MachineX86 (/MACHINE:X86)** – **OK** -* Build Debug configuration -* Build Release configuration - -####zlib 1.2.8 - -http://www.zlib.net/ > Download [**zlib source code, version 1.2.8, zipfile format**](http://zlib.net/zlib128.zip) - -Extract to **D:\TBuild\Libraries\** - -#####Building library - -* Open in VS2013 **D:\TBuild\Libraries\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln** > One-way upgrade – **OK** -* We are interested only in **zlibstat** project, but it depends on some custom pre-build step, so build all -* For **Debug** configuration - * zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded Debug (/MTd)** – **OK** -* For **Release** configuration - * zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded (/MT)** – **OK** -* Build Solution for Debug configuration – only **zlibstat** project builds successfully -* Build Solution for Release configuration – only **zlibstat** project builds successfully - -####libexif 0.6.20 - -Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git – in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild/libraries** and run - - git clone https://github.com/telegramdesktop/libexif-0.6.20.git - -or download in ZIP and extract to **D:\TBuild\Libraries\**, rename **libexif-0.6.20-master** to **libexif-0.6.20** to have **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln** solution - -#####Building library - -* Open in VS2013 **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln** -* Build Debug configuration -* Build Release configuration - -####Qt 5.3.0, slightly patched - -http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.zip - -Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.3.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder - -Apply patch – copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_3\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** - -#####Building library - -* Install Python 3.3.2 from https://www.python.org/download/releases/3.3.2 > [**Windows x86 MSI Installer (3.3.2)**](https://www.python.org/ftp/python/3.3.2/python-3.3.2.msi) -* Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\** folder) - -There go to Qt directory - - D: - cd TBuild\Libraries\QtStatic - -and after that run configure - - configure -debug-and-release -opensource -static -opengl desktop -mp -nomake examples -platform win32-msvc2013 - y - -to configure Qt build. After configuration is complete run - - nmake - nmake install - -building (**nmake** command) will take really long time. - -####Qt Visual Studio Addin 1.2.3 - -http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.3-opensource.exe - -Close all VS2013 instances and install to default location - -###Building Telegram Desktop - -* Launch VS2013 for configuring Qt Addin -* QT5 > Qt Options > Add - * Version name: **QtStatic.5.3.0** - * Path: **D:\TBuild\Libraries\QtStatic\qtbase** -* Default Qt/Win version: **QtStatic.5.3.0** – **OK** -* File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln** -* Build \ Build Solution (Debug and Release configurations) +###[Build instructions for XCode 5.1.1](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md) ##Projects in Telegram solution @@ -153,12 +46,17 @@ compiles given files to single update file, compresses it with lzma and signs wi ####Prepare -prepares a release for deployment, puts all files to deploy/{version} folder +prepares a release for deployment, puts all files to deploy/{version} folder, for Win: * current tsetup{version}exe installer * current Telegram.exe * current Telegram.pdb (debug info for crash minidumps view) * current tupdate{updversion} binary lzma update archive +for Mac: +* current tsetup{version}dmg +* current Telegram.app +* current tmacupd{updversion} binary lzma update archive + ####MetaEmoji from two folders diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index e6aa25d60..c4e8ffab3 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.5.4 + 0.5.5 CFBundleSignature ???? NOTE diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 835dd6d1d..e2b170c38 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1493,7 +1493,7 @@ COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 0.5.4; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.4; + DYLIB_CURRENT_VERSION = 0.5.5; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; @@ -1557,6 +1557,7 @@ "-Wno-switch", "-Wno-comment", "-I./../../Libraries/openssl-xcode/include", + "-DCUSTOM_API_ID", ); OTHER_CPLUSPLUSFLAGS = ( "-pipe", @@ -1578,6 +1579,7 @@ "-Wno-switch", "-Wno-comment", "-I./../../Libraries/openssl-xcode/include", + "-DCUSTOM_API_ID", ); OTHER_LDFLAGS = ( "-headerpad_max_install_names", @@ -1616,7 +1618,7 @@ CURRENT_PROJECT_VERSION = 0.5.4; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.4; + DYLIB_CURRENT_VERSION = 0.5.5; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; diff --git a/XCODE.md b/XCODE.md new file mode 100644 index 000000000..121a47109 --- /dev/null +++ b/XCODE.md @@ -0,0 +1,97 @@ +##Build instructions for Xcode 5.1.1 + +###Prepare folder + +Choose a folder for the future build, for example **/Users/user/TBuild** There you will have two folders, **Libraries** for third-party libs and **tdesktop** (or **tdesktop-master**) for the app. + +###Clone source code + +By git – in Terminal go to **/Users/user/TBuild** and run + + git clone https://github.com/telegramdesktop/tdesktop.git + +or download in ZIP and extract to **/Users/user/TBuild** rename **tdesktop-master** to **tdesktop** to have **/Users/user/TBuild/tdesktop/Telegram/Telegram.xcodeproj** project + +###Prepare libraries + +####OpenSSL 1.0.1g + +Get sources from https://github.com/telegramdesktop/openssl-xcode, by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone https://github.com/telegramdesktop/openssl-xcode.git + +or download in ZIP and extract to **/Users/user/TBuild/Libraries**, rename **openssl-xcode-master** to **openssl-xcode** to have **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj** project + +http://www.openssl.org/source/ > Download [**openssl-1.0.1h.tar.gz**](http://www.openssl.org/source/openssl-1.0.1h.tar.gz) (4.3 Mb) + +Extract openssl-1.0.1h.tar.gz and copy everything from **openssl-1.0.1h** to **/Users/user/TBuild/Libraries/openssl-xcode** to have “/Users/user/TBuild/Libraries/openssl-xcode/include” + +#####Building library + +* Open **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj* with Xcode +* Product > Build + +####liblzma + +http://tukaani.org/xz/ > Download [**xz-5.0.5.tar.gz](http://tukaani.org/xz/xz-5.0.5.tar.gz) + +Extract to **/Users/user/TBuild/Libraries** + +#####Building library + +* in Terminal go to **/Users/user/TBuild/Libraries/xz-5.0.5** +* there run + + ./configure + make + sudo make install + +####zlib 1.2.8 + +Using se system lib + +####libexif 0.6.20 + +Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone https://github.com/telegramdesktop/libexif-0.6.20.git + +or download in ZIP and extract to **/Users/user/TBuild/Libraries**, rename **libexif-0.6.20-master** to **libexif-0.6.20** to have **/Users/user/TBuild/Libraries/libexif-0.6.20/configure** script + +#####Building library + +* in Terminal go to **/Users/user/TBuild/Libraries/libexif-0.6.20** +* there run + + ./configure + make + sudo make install + +####Qt 5.3.0, slightly patched + +http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.tar.gz + +Extract to **/Users/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.3.0** to **QtStatic** to have **/Users/user/TBuild/Libraries/QtStatic/qtbase** folder + +Apply patch – copy (with overwrite!) everything from **/Users/user/TBuild/tdesktop/\_qt\_5\_3\_0\_patch/** to **/Users/user/TBuild/Libraries/QtStatic/** + +#####Building library + +* in Terminal go to **/Users/user/TBuild/Libraries/QtStatic** +* there run + + ./configure -debug-and-release -opensource -static -opengl desktop -nomake examples -platform macx-clang + y + make + sudo make install + +building (**make** command) will take really long time. + +###Building Telegram Desktop + +* Launch Xcode, all projects will be taken from **/Users/user/TBuild/tdesktop/Telegram** +* Open MetaStyle.xcodeproj and build for Debug (Release optionally) +* Open MetaEmoji.xcodeproj and build for Debug (Release optionally) +* Open MetaLang.xcodeproj and build for Debug (Release optionally) +* Open Telegram.xcodeproj and build for Debug +* Release Telegram build will require removing of **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 5.1 - Custom Compiler Flags > Other C / C++ Flags > Release) diff --git a/build-msvc2013.txt b/build-msvc2013.txt deleted file mode 100644 index 18e8ebd5e..000000000 --- a/build-msvc2013.txt +++ /dev/null @@ -1,141 +0,0 @@ -Build with Visual Studio 2013, Windows 8.1 - -Prepare folder: - - Choose folder for future build, for example "D:\TBuild\". - There you will have two folders, "Libraries" for third-party libs and "tdesktop" for the app. - -Clone sources: - - - By git: in Git Bash go to "/d/tbuild" and run "git clone https://github.com/telegramdesktop/tdesktop.git" - - Or download in ZIP and extract to "D:\TBuild\", rename "tdesktop-master" to "tdesktop" to have "D:\TBuild\tdesktop\Telegram.sln" solution - -Prepare libraries: - -OpenSSL (1.0.1g) - - https://www.openssl.org/related/binaries.html > "OpenSSL for Windows" > "Win32 OpenSSL v1.0.1g" (16 Mb) - - Install to "D:\TBuild\Libraries\OpenSSL-Win32", while installing "Copy OpenSSL DLLs to" choose "The OpenSSL binaries (/bin) directory" - -LZMA (9.20) - - http://www.7-zip.org/sdk.html > Download 9.20 "LZMA SDK (C, C++, C#, Java)" - - Extract to "D:\TBuild\Libraries\lzma\" - - Building Lib: - - - Open "D:\TBuild\Libraries\lzma\C\Util\LzmaLib\LzmaLib.dsw" with Visual Studio 2013 > One-way upgrade OK - - For Debug and Release configurations: - - LzmaLib Properties > General > Configuration Type = "Static library (.lib)" > OK - - LzmaLib Properties > Librarian > General > Target Machine = "MachineX86 (/MACHINE:X86)" > OK - - Build Debug - - Build Release - -zlib (1.2.8) - - http://www.zlib.net/ > "zlib source code, version 1.2.8, zipfile format" > http://zlib.net/zlib128.zip - - Extract to "D:\TBuild\Libraries\" - - Building Lib: - - Open "D:\TBuild\Libraries\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln" > Upgrade .. > OK - - We are interested in only "zlibstat" project, but it depends on some custom pre-build step - - For Debug configuration: - - zlibstat Properties > C/C++ > Code Generation > Runtime Library = "Multi-threaded Debug (/MTd)" > OK - - For Release configuration: - - zlibstat Properties > C/C++ > Code Generation > Runtime Library = "Multi-threaded (/MT)" > OK - - Build Solution for Debug - only "zlibstat" project build successfully, and we need only it - - Build Solution for Release - only "zlibstat" project build successfully, and we need only it - -libexif (0.6.20) - prepared - - https://github.com/telegramdesktop/libexif-0.6.20 - - By git: in Git Bash go to "/d/tbuild/libraries" and run "git clone https://github.com/telegramdesktop/libexif-0.6.20.git" - - Or download in ZIP and extract to "D:\TBuild\Libraries\", rename "libexif-0.6.20-master" to "libexif-0.6.20" to have "D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln" solution - - Building Lib: - - Open "D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln" - - Build Debug - - Build Release - -Qt (5.3.0) - - http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.zip - - Extract to "D:\TBuild\Libraries\Tmp\" - - Copy everything from "D:\TBuild\Libraries\Tmp\qt-everywhere-opensource-src-5.3.0" to "D:\TBuild\Libraries\QtStatic" - - Copy (with overwrite) everything from "D:\TBuild\tdesktop\_qt_5_3_0_patch" to "D:\TBuild\Libraries\QtStatic" - - Building Lib: - - - Install Python (3.3.2) from https://www.python.org/download/releases/3.3.2 > "Windows x86 MSI Installer (3.3.2)" (https://www.python.org/ftp/python/3.3.2/python-3.3.2.msi) - - Open "VS2013 x86 Native Tools Command Prompt.bat" (should be in "\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts") - - Go to Qt directory ("D:" > Enter > "cd TBuild\Libraries\QtStatic" > Enter) and run "configure -debug-and-release -opensource -static -opengl desktop -mp -nomake examples -platform win32-msvc2013", then "y" (accept), after configuration is complete run "nmake" and then "nmake install", nmake will take really long time. - -Qt Visual Studio Addin 1.2.3 - - http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.3-opensource.exe - - Install to default location - -Building Telegram Desktop: - - - Launch Microsoft Visual Studio 2013 - - QT5 > Qt Options > Add: - Version name: QtStatic.5.3.0 - Path: D:\TBuild\Libraries\QtStatic\qtbase - - Default Qt/Win version: QtStatic.5.3.0 > OK - - File > Open > Project/Solution > D:\TBuild\tdesktop\Telegram.sln - - Build > Build Solution - -Projects in Telegram solution: - - Telegram: - tdesktop messenger - - Updater: - little app, that is launched by Telegram when update is ready, replaces all files and launches it back - - Packer: - compiles given files to single update file, compresses it with lzma and signs with a private key, - it was not included to Telegram solution, because private key is inaccessible - - Prepare: - prepares a release for deployment: puts all files to deploy/{version} folder - current tsetup{version}exe installer - current Telegram.exe - current Telegram.pdb (debug info for crash minidumps view) - current tupdate{updversion} binary lzma update archive - - MetaEmoji: - from two folders - SourceFiles/art/Emoji - SourceFiles/art/Emoji_200x - and some inner config creates four sprites and text2emoji replace code: - SourceFiles/art/emoji.png - SourceFiles/art/emoji_125x.png - SourceFiles/art/emoji_150x.png - SourceFiles/art/emoji_200x.png - SourceFiles/gui/emoji_config.cpp - - MetaStyle: - from two files and two sprites - Resources/style_classes.txt - Resources/style.txt - SourceFiles/art/sprite.png - SourceFiles/art/sprite_200x.png - creates two other sprites, four sprite grids and style constants code: - SourceFiles/art/sprite_125x.png - SourceFiles/art/sprite_150x.png - SourceFiles/art/grid.png - SourceFiles/art/grid_125x.png - Sourcefiles/art/grid_150x.png - SourceFiles/art/grid_200x.png - GeneratedFiles/style_classes.h - GeneratedFiles/style_auto.h - GeneratedFiles/style_auto.cpp - - MetaLang: - from langpack file - Resources/lang.txt - creates lang constants code and lang file parse code: - GeneratedFiles/lang.h - GeneratedFiles/lang.cpp From b31735e25c0c05c83d25f9b8e37519c994cd1c13 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 26 Jun 2014 09:39:54 +0400 Subject: [PATCH 14/14] fixed build instructions --- README.md | 2 +- XCODE.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7b7fdf084..b1422e9e0 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Only Windows and OS X systems are supported at this moment, Linux builds are on ###[Build instructions for Visual Studio 2013](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md) -###[Build instructions for XCode 5.1.1](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md) +###[Build instructions for XCode 5.1.1](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) ##Projects in Telegram solution diff --git a/XCODE.md b/XCODE.md index 121a47109..8d4865014 100644 --- a/XCODE.md +++ b/XCODE.md @@ -24,11 +24,11 @@ or download in ZIP and extract to **/Users/user/TBuild/Libraries**, rename **ope http://www.openssl.org/source/ > Download [**openssl-1.0.1h.tar.gz**](http://www.openssl.org/source/openssl-1.0.1h.tar.gz) (4.3 Mb) -Extract openssl-1.0.1h.tar.gz and copy everything from **openssl-1.0.1h** to **/Users/user/TBuild/Libraries/openssl-xcode** to have “/Users/user/TBuild/Libraries/openssl-xcode/include” +Extract openssl-1.0.1h.tar.gz and copy everything from **openssl-1.0.1h** to **/Users/user/TBuild/Libraries/openssl-xcode** to have **/Users/user/TBuild/Libraries/openssl-xcode/include** #####Building library -* Open **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj* with Xcode +* Open **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj** with Xcode * Product > Build ####liblzma @@ -94,4 +94,4 @@ building (**make** command) will take really long time. * Open MetaEmoji.xcodeproj and build for Debug (Release optionally) * Open MetaLang.xcodeproj and build for Debug (Release optionally) * Open Telegram.xcodeproj and build for Debug -* Release Telegram build will require removing of **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 5.1 - Custom Compiler Flags > Other C / C++ Flags > Release) +* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 5.1 - Custom Compiler Flags > Other C / C++ Flags > Release)