/**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** 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, Nokia gives you certain additional ** rights. These rights are described in the Nokia 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. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include #include #include "stdio.h" #include "stdlib.h" QT_BEGIN_NAMESPACE #include "qconfig_eval.cpp" static const char boilerplate_unsuported[] = "\nQt %1 Evaluation License\n" "Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).\n" "All rights reserved.\n\n" "This trial version may only be used for evaluation purposes\n" "and will shut down after 120 minutes.\n" "Registered to:\n" " Licensee: %2\n\n" "The evaluation expires in %4 days\n\n" "Contact http://qt.nokia.com/about/contact-us for pricing and purchasing information.\n"; static const char boilerplate_supported[] = "\nQt %1 Evaluation License\n" "Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).\n" "All rights reserved.\n\n" "This trial version may only be used for evaluation purposes\n" "Registered to:\n" " Licensee: %2\n\n" "The evaluation expires in %4 days\n\n" "Contact http://qt.nokia.com/about/contact-us for pricing and purchasing information.\n"; static const char boilerplate_expired[] = "This software is using the trial version of the Qt GUI toolkit.\n" "The trial period has expired. If you need more time to\n" "evaluate Qt, or if you have any questions about Qt, contact us\n" "at: http://qt.nokia.com/about/contact-us.\n\n"; static const char will_shutdown_1min[] = "\nThe evaluation of Qt will SHUT DOWN in 1 minute.\n" "Contact http://qt.nokia.com/about/contact-us for pricing and purchasing information.\n"; static const char will_shutdown_now[] = "\nThe evaluation of Qt has now reached its automatic\n" "timeout and will shut down.\n" "Contact http://qt.nokia.com/about/contact-us for pricing and purchasing information.\n"; static int qt_eval_is_supported() { const char *const license_key = qt_eval_key_data + 12; // fast fail if (!qt_eval_key_data[0] || !*license_key) return -1; // is this an unsupported evaluation? const char* typecode = license_key; int field = 2; for ( ; field && *typecode; ++typecode) if (*typecode == '-') --field; if (!field && typecode[1] == '4' && typecode[2] == 'M') { if (typecode[0] == 'Q') return 0; else if (typecode[0] == 'R' || typecode[0] == 'Z') return 1; } return -1; } static int qt_eval_days_left() { if (qt_eval_is_supported() < 0) return -2; QDate today = QDate::currentDate(); QDate build = QLibraryInfo::buildDate(); return qMax(-1, today.daysTo(build) + 30); } static QString qt_eval_string() { const char *msg; switch (qt_eval_is_supported()) { case 0: msg = boilerplate_unsuported; break; case 1: msg = boilerplate_supported; break; default: return QString(); msg = 0; } return QString::fromLatin1(msg) .arg(QLatin1String(QT_VERSION_STR)) .arg(QLibraryInfo::licensee()) .arg(qt_eval_days_left()); } #define WARN_TIMEOUT 60 * 1000 * 119 #define KILL_DELAY 60 * 1000 * 1 class QCoreFuriCuri : public QObject { public: int warn; int kill; QCoreFuriCuri() : QObject(), warn(-1), kill(-1) { if (!qt_eval_is_supported()) { warn = startTimer(WARN_TIMEOUT); kill = 0; } } void timerEvent(QTimerEvent *e) { if (e->timerId() == warn) { killTimer(warn); fprintf(stderr, "%s\n", will_shutdown_1min); kill = startTimer(KILL_DELAY); } else if (e->timerId() == kill) { fprintf(stderr, "%s\n", will_shutdown_now); QCoreApplication::instance()->quit(); } } }; #if defined(QT_BUILD_CORE_LIB) || defined (QT_BOOTSTRAPPED) void qt_core_eval_init(uint type) { if (!type) return; // GUI app switch (qt_eval_days_left()) { case -2: return; case -1: fprintf(stderr, "%s\n", boilerplate_expired); if (type == 0) { // if we're a console app only. exit(0); } default: fprintf(stderr, "%s\n", qPrintable(qt_eval_string())); if (type == 0) { Q_UNUSED(new QCoreFuriCuri()); } } } #endif #ifdef QT_BUILD_GUI_LIB QT_BEGIN_INCLUDE_NAMESPACE #include #include #include #include #include #include #include QT_END_INCLUDE_NAMESPACE static const char * const qtlogo_eval_xpm[] = { /* columns rows colors chars-per-pixel */ "46 55 174 2", " c #002E02", ". c #00370D", "X c #003A0E", "o c #003710", "O c #013C13", "+ c #043E1A", "@ c #084F0A", "# c #0B520C", "$ c #054413", "% c #0C4C17", "& c #07421D", "* c #09451D", "= c #0D491E", "- c #125515", "; c #13541A", ": c #17591B", "> c #1B5C1D", ", c #1F611F", "< c #20621E", "1 c #337B1E", "2 c #0B4521", "3 c #0F4923", "4 c #114B24", "5 c #154D2A", "6 c #175323", "7 c #1C5924", "8 c #1C532F", "9 c #1E5432", "0 c #245936", "q c #265938", "w c #295C3B", "e c #246324", "r c #266823", "t c #2A6C24", "y c #276628", "u c #2D7026", "i c #327427", "p c #367927", "a c #37782A", "s c #397C2A", "d c #2E613E", "f c #336C37", "g c #2F6040", "h c #356545", "j c #3C6B4E", "k c #3F6C51", "l c #406E4F", "z c #406D52", "x c #477457", "c c #497557", "v c #4B7857", "b c #517B5E", "n c #3C8423", "m c #3E812C", "M c #53A61D", "N c #41862C", "B c #458A2D", "V c #498F2D", "C c #479324", "Z c #489226", "A c #4D952C", "S c #478B30", "D c #488C30", "F c #4D9232", "G c #509632", "H c #549A33", "J c #589F35", "K c #56A526", "L c #57A821", "P c #5BAA27", "I c #57A32A", "U c #5CA72E", "Y c #5DAB2A", "T c #5CA336", "R c #60AD2E", "E c #63B12D", "W c #65AF35", "Q c #62A53F", "! c #65AE39", "~ c #66B036", "^ c #6AB437", "/ c #67B138", "( c #6AB339", ") c #6DB838", "_ c #70BA3C", "` c #4D8545", "' c #4E8942", "] c #548851", "[ c #6FAF4A", "{ c #6DB243", "} c #71B546", "| c #70B840", " . c #73B648", ".. c #79BA4E", "X. c #7CBB53", "o. c #598266", "O. c #62886D", "+. c #6A8F75", "@. c #6B9173", "#. c #70937A", "$. c #799F79", "%. c #7BAF66", "&. c #81BD5B", "*. c #85BF60", "=. c #85AC7F", "-. c #8DBA7B", ";. c #87C061", ":. c #8AC364", ">. c #8DC46A", ",. c #90C56E", "<. c #93C771", "1. c #96CA73", "2. c #9ACB7C", "3. c #9FD07D", "4. c #779981", "5. c #7F9F89", "6. c #809F88", "7. c #82A18B", "8. c #86A192", "9. c #8DA994", "0. c #8FA998", "q. c #94AF9B", "w. c #97B991", "e. c #97B19E", "r. c #9DB6A3", "t. c #A3BCA7", "y. c #A6BCAB", "u. c #A9BEB1", "i. c #9ECD81", "p. c #A2CF85", "a. c #A5D284", "s. c #A6D189", "d. c #A9D28E", "f. c #ABD491", "g. c #B1D797", "h. c #B1D699", "j. c #B5D89E", "k. c #ADC5AC", "l. c #B1CAAE", "z. c #B9DAA3", "x. c #BDDDA8", "c. c #ADC1B4", "v. c #B2C6B6", "b. c #B5C6BC", "n. c #B6C9BA", "m. c #BCD1BA", "M. c #C6E1B4", "N. c #CDE5BD", "B. c #C2D2C6", "V. c #CADEC2", "C. c #C6D3CC", "Z. c #C8D7CB", "A. c #CEDAD2", "S. c #D2DDD4", "D. c #D3E9C6", "F. c #D7EBC9", "G. c #D9EBCD", "H. c #DEEED4", "J. c #D6E0D9", "K. c #DAE4DC", "L. c #E0EFD7", "P. c #E5F2DD", "I. c #DFE8E0", "U. c #E4EBE5", "Y. c #E9EFEA", "T. c #EDF4EB", "R. c #F0FAE6", "E. c #F1F8EC", "W. c #EDF0F0", "Q. c #F4F7F3", "!. c #F6F9F4", "~. c #F8FAF7", "^. c #FEFEFE", "/. c None", /* pixels */ "/././././.c h ' Q / W _ &.p././././././././././././././././././././././././././././././././.", "/././.4 O % Z ~ ~ W ~ W R U R R ( X.>.p././././././././././././././././././././././././././.", "/./.. * = J _ ~ ~ ~ ~ ~ / / / / W W U P P U W .;.2././././././././././././././././././././.", "/.= = & a ) W ~ ~ ~ ~ ~ / W / ~ ~ ~ ^ ( ( ^ ~ R R U P Y ~ .;.2././././././././././././././.", "O.O = = T ^ W ~ ~ ~ ~ ~ ~ W W / W ~ ~ ~ ~ ~ ~ ~ ( ( ( ( ~ W Y Y Y Y W { &.1././././././././.", "0 = * 7 ~ ~ ~ ~ ~ ~ ~ ~ ~ / / W ~ ~ ~ ~ ~ ~ ~ ~ W W W ~ ~ ~ ~ ( ( ( W W R U P U W { X.1.f./.", "= = & e ^ W ~ ~ ~ ~ ~ ~ ~ ~ / / ~ ~ ~ ~ ~ ~ ~ ~ W ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ^ ( ( / ~ W R U U Y ", "= = & e ^ W ~ ~ ~ ~ ~ ~ ~ ~ W W ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W ( W ~ ~ ~ ^ ^ ( ", "= = * e ^ W ~ ~ ~ ~ ~ ~ / W / W ! ( / ~ W ^ ( ( ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W ~ W W ~ ~ ~ ~ ~ ~ ", "= = & e ^ ! ~ ~ ~ ~ ~ ~ W W ^ _ ~ K Y W W R P Y W ( ~ ~ ~ ~ ~ ~ ~ W / ~ ~ ~ ^ W ~ ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ ~ ~ ~ ~ W ) W 1 ` w.V.L.H.D.z.,.~ Y ^ ~ ~ ~ ~ ~ W ~ ~ ~ ( ~ W W ~ ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ ~ ~ ~ W ) V = 8.~.^.^.^.^.^.^.^.U.<.Y ~ ~ ~ ~ ~ W W ! ~ Y W ^ W ~ ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ ~ ~ W ^ B O u.^.~.^.^.^.^.~.~.^.^.^.h.Y ^ ~ ~ ^ F $ k.R.G.1.Y / ~ ~ ~ ~ ~ ~ ", "= = & e ^ ~ ~ ~ / W ( J X 7.^.~.^.^.^.^.^.^.^.^.^.^.^.s.Y / W ) a 2 U.^.^.d.U ( ~ ~ ~ ~ ~ ~ ", "= = & e ^ W / ~ ~ ~ ^ > w ~.^.^.^.^.^.F.%.v c.^.^.^.^.~.X.W ~ ^ > h ^.^.^.d.P ( ~ ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ W ^ H o e.^.^.^.^.^.G.Y E n . y.^.^.^.^.M.Y ( ! $ @.^.~.^.f.U ( / ~ ~ W ~ ~ ", "= = & e ^ W ~ W ! ) t 4 U.^.^.^.^.^.>.U ( _ , 9 ~.^.^.^.~...^ A y.^.~.^.s.M W Y ~ ~ ~ ~ ~ ", "= 3 & e ^ W ~ ( ^ ( $ c ^.^.^.^.^.E.) ~ ~ ^ S o n.^.^.^.^.=.- l.v.Y.^.^.^.M.:.:.X.~ ~ ~ ~ ~ ", "= = & e ^ ! W W ( J X 7.^.^.^.^.^.F.Y ( W ^ T X 6.^.^.~.^.c.. J.^.^.^.^.^.^.^.^.P.~ ~ ~ ~ ~ ", "= = & r ^ W / W ) B o v.^.~.^.^.^.M.U / ~ ~ ! $ o.^.^.^.^.K.* S.^.^.^.^.^.^.^.^.P.~ ~ ~ ~ ~ ", "= = & e ^ ! ~ W ) a + S.^.^.^.^.^.z.P ( W ~ ( % z ^.^.^.^.~.f t.U.^.^.^.^.~.^.^.P.~ ~ ~ ~ ~ ", "* = & e ^ W ~ W ) t 3 Y.^.^.^.^.^.f.P ( ~ ~ ^ ; h ^.^.^.^.^.:.@ j ^.^.^.^.h.{ X.&.~ ~ ~ ~ ~ ", "3 = & e ^ W ~ ~ ^ e 8 Q.^.^.^.^.^.s.P ~ ~ W ^ > 0 ~.^.^.^.^.1.# z ^.^.^.^.d.L W R ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ ^ > q ~.^.^.^.^.^.p.U ^ ~ W ) e 9 ~.^.^.^.^.3.# k ^.^.^.^.f.Y ( / ~ ~ ~ ~ ~ ", "= = & e ^ W / W ^ > w ~.^.^.^.^.^.i.Y / ~ W ^ e 8 Q.^.^.^.^.a.# z ^.^.^.^.f.Y / ~ ~ ~ ~ ~ ~ ", "= = & e ^ W / W ^ > w ^.^.^.^.^.^.2.Y / ~ ~ ) e 8 Q.^.^.^.^.s.# z ^.^.^.^.d.P ( ~ ~ ~ ~ ~ ~ ", "= = & e ^ W W W ^ > q ^.^.^.^.^.^.p.Y / ~ ~ ^ e 9 Q.^.^.^.^.a.@ z ^.^.^.^.f.U / ~ ~ ~ ~ ~ ~ ", "= = & e ^ W / W ) 7 9 Q.^.^.^.^.^.a.P / ~ W ) , 9 Q.^.^.^.^.3.# z ^.^.~.^.f.P ^ ~ ~ ~ ~ ~ ~ ", "= = & e ^ W / W ) r 5 T.^.^.^.^.^.d.Y / ~ W ) > q ~.^.^.^.^.1.# k ^.^.^.^.f.Y ( ~ ~ ~ ~ ~ ~ ", "= = & e ^ / / W ) i 2 I.^.^.^.^.^.h.P ( ~ W ( > g ^.^.^.^.^.:.# z ^.^.^.^.f.P / ~ ~ ~ ~ ~ ~ ", "= = & e ( W / W ) m O Z.^.^.^.^.^.x.P / ~ ~ ( ; j ^.^.^.^.~.&.- k ^.^.~.^.f.P / ~ ~ ~ ~ ~ ~ ", "= = & e ( W / W ) F o y.^.~.^.^.^.N.U ( ~ ~ W $ b ^.^.^.^.R._ - k ^.^.^.^.f.Y ( ~ ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ ^ J X 4.^.^.^.^.^.L.~ ~ W ^ T X #.^.^.^.^.F.~ ; j ^.^.^.^.f.U ( ~ ~ ~ ~ ~ ~ ", "= = & e ^ ~ ~ ~ / ^ % l ^.^.^.^.^.!. .R ^ ^ G . r.^.~.^.^.j.E : j ^.^.^.^.f.P ) ( ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ W ) u = U.^.^.^.^.^.1.Y ! ) a & K.^.^.^.^.;.~ : j ^.^.~.^.z.M I I / ~ ~ W ~ ", "= = & e ( W ~ ~ W ( G . q.^.^.^.^.^.D.U ^ ! X o.^.^.^.^.P.~ ^ > g ^.^.^.^.E.-.$.m.X.W ~ ~ ~ ", "= = & e ^ / ~ ~ ^ ! ( > w ~.^.^.^.^.^.h.T > j T.^.^.~.^.a.Y _ i 3 U.^.^.^.^.^.^.^.X.R ~ ~ ~ ", "= = & e ^ / ~ ~ W W ^ H . 9.^.~.^.^.^.^.K.C.~.^.^.^.^.H.W W ^ T . q.^.~.^.^.^.^.^.X.R ~ ~ ~ ", "= = + e ^ W / ~ W W W ) m + B.^.~.^.^.^.^.^.^.^.^.^.E.X.Y ( W ^ B 6 y.^.^.^.E.D.2.( ~ ~ ~ ~ ", "= = * e ^ ! / ! W ^ W W ) a 4 b.^.^.^.^.^.^.^.^.^.P...Y ( ! W ! ^ W Z [ *.X.{ Y U ~ ~ ~ ~ ~ ", "= = & e ( W ~ ~ W / W / W ) A < +.A.~.^.^.^.^.!.p.W R ~ ~ ~ ~ ~ W / ) E U W W / ^ ~ ~ ~ ~ ~ ", "= = & e ^ W ~ ~ / W / / / W ( _ Z X 6.^.^.^.^.E.W ~ ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ / ~ ~ ~ ~ ~ ~ ~ ~ ", "= = & e ^ ~ ~ ~ W W / W ~ ~ ~ ~ ) ; h ^.^.^.^.^.d.M U ~ / ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W ", "= = & e ^ W ~ ~ ^ W W / ~ ~ ~ W ) p + S.^.^.^.^.~.M.f. .W ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ .", "= = & e ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W ( T O +.^.~.^.^.^.^.^.&.Y ( ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W ( Y 2.", "= = & e ( W ~ ~ ~ ~ ~ ~ ~ ~ ~ / W ) N + b.^.^.^.^.^.^.&.R ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W /.", "= = & e ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W ^ N 7 r.W.^.^.^.!.X.W ~ ~ W ~ W ~ ~ ~ ~ ~ ~ / ( ( K p./.", "= = & e ( W ~ ~ W ~ ~ ~ ~ ~ ~ ~ ~ ~ W ( W C Q &.:.X.| ~ ~ ~ ~ W ~ / ~ ( / ( ~ W E U P 1././.", "= = + e ^ / / / ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W / ) ^ R Y W W ~ ~ ( / ( / W R Y Y U R ( X.,././././.", "= = * e ( / ~ / ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ W W W ! ( ( ( W W E U P Y W ( X.,.d./././././././././.", "= = * e ( W ~ ~ ~ ~ W ! ~ W ~ W ~ ( ( / ^ W W U Y P W ( X.,.d./././././././././././././././.", "8 $ * e ( W ~ ~ ~ ! ( ( ( / ( W R Y Y Y R ( X.>.d./././././././././././././././././././././.", "/.d . y ^ / / / ( W Y Y P P W ( X.>.d./././././././././././././././././././././././././././.", "/./.h : ^ R R R W ( X.<.f./././././././././././././././././././././././././././././././././.", "/././.] _ *.3./././././././././././././././././././././././././././././././././././././././." }; class EvalMessageBox : public QDialog { public: EvalMessageBox(bool expired) { setWindowTitle(QLatin1String(" ")); QString str = qt_eval_string(); if (expired) { str = QLatin1String(boilerplate_expired); } else { str = qt_eval_string(); } str = str.trimmed(); QFrame *border = new QFrame(this); QLabel *pixmap_label = new QLabel(border); pixmap_label->setPixmap(qtlogo_eval_xpm); pixmap_label->setAlignment(Qt::AlignTop); QLabel *text_label = new QLabel(str, border); QHBoxLayout *pm_and_text_layout = new QHBoxLayout(); pm_and_text_layout->addWidget(pixmap_label); pm_and_text_layout->addWidget(text_label); QVBoxLayout *master_layout = new QVBoxLayout(border); master_layout->addLayout(pm_and_text_layout); QVBoxLayout *border_layout = new QVBoxLayout(this); border_layout->setMargin(0); border_layout->addWidget(border); if (expired) { QPushButton *cmd = new QPushButton(QLatin1String("OK"), border); cmd->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); cmd->setDefault(true); QHBoxLayout *button_layout = new QHBoxLayout(); master_layout->addLayout(button_layout); button_layout->addWidget(cmd); connect(cmd, SIGNAL(clicked()), this, SLOT(close())); } else { border->setFrameShape(QFrame::WinPanel); border->setFrameShadow(QFrame::Raised); setParent(parentWidget(), Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); QTimer::singleShot(7000, this, SLOT(close())); setAttribute(Qt::WA_DeleteOnClose); } setFixedSize(sizeHint()); } }; class QGuiFuriCuri : public QCoreFuriCuri { public: void timerEvent(QTimerEvent *e) { if (e->timerId() == warn) { killTimer(warn); QMessageBox::information(0, QLatin1String("Automatic Timeout"), QLatin1String(will_shutdown_1min)); kill = startTimer(KILL_DELAY); } else if (e->timerId() == kill) { killTimer(kill); QMessageBox::information(0, QLatin1String("Automatic Timeout"), QLatin1String(will_shutdown_now)); qApp->quit(); } } }; void qt_gui_eval_init(uint) { switch (qt_eval_days_left()) { case -2: return; case -1: { EvalMessageBox box(true); box.exec(); ::exit(0); } default: { EvalMessageBox *box = new EvalMessageBox(false); box->show(); Q_UNUSED(new QGuiFuriCuri()); } } } static QString qt_eval_title_prefix() { return QLatin1String("[Qt Evaluation] "); } QString qt_eval_adapt_window_title(const QString &title) { if (qt_eval_days_left() == -2) return title; return qt_eval_title_prefix() + title; } void qt_eval_init_widget(QWidget *w) { if (qt_eval_days_left() == -2) return; if (w->isTopLevel()) { QString windowTitle = w->windowTitle(); if (windowTitle.isEmpty()) { w->setWindowTitle(QLatin1String(" ")); } else if (!windowTitle.startsWith(qt_eval_title_prefix())) { qt_eval_adapt_window_title(windowTitle); } } } #endif QT_END_NAMESPACE