Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread Thiago Macieira
On Wednesday, 9 de November de 2011 09:17:59 Jeremy Lainé wrote:
 On 11/08/2011 10:57 PM, Thiago Macieira wrote:
  On Tuesday, 8 de November de 2011 19:40:13 Jeremy Lainé wrote:
  - the QNAM-style API seems to be OK
 
  Correct, but all functions in QDnsResolver are static.
 
  That means they could go into QDnsReply and we could rename the class
  simply QDns. It worked for Qt 3...

 The methods are not static, the QDnsResolver instance initially owns all
 QDnsReply objects it returns. It also owns the QThreadPool used to perform
 the lookups.

  No need if all functions are static.

 And since they are not?

They should be. There's no need for a QDnsResolver public object like
QNetworkAccessManager. The idea of a manager in QNAM was to share settings,
open connections and cookies. Usually, applications have only one QNAM and
that's enough for them. However, in some circumstances, connections with
different settings are necessary.

Not so for DNS: the are no settings to be changed. So all queries use the same
settings and resources, which are shared behind the scenes. All lookup
functions should be static returning QDnsReply*, or it should be able to
create the lookup using QDnsReply's constructor.

--
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center
 Intel Sweden AB - Registration Number: 556189-6027
 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden


signature.asc
Description: This is a digitally signed message part.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread André Somers
On Wed, Nov 9, 2011 at 9:17 AM, Jeremy Lainé jeremy.la...@m4x.org wrote:

 On 11/08/2011 10:57 PM, Thiago Macieira wrote:
  On Tuesday, 8 de November de 2011 19:40:13 Jeremy Lainé wrote:
  - the QNAM-style API seems to be OK
  Correct, but all functions in QDnsResolver are static.
 
  That means they could go into QDnsReply and we could rename the class
 simply
  QDns. It worked for Qt 3...
 

 The methods are not static, the QDnsResolver instance initially owns all
 QDnsReply objects
 it returns. It also owns the QThreadPool used to perform the lookups.

Initially? What does that mean exactly? When does QDnsResolver stops owning
the QDnsReply objects?



  - I have implemented QDnsReply::abort() to cancel a lookup request
  Good.
 

 I forgot to mention: you can delete the QDnsReply at any time, as both
 QDnsReply and
 QDnsResolverRunnable access QDnsReplyPrivate via a QSharedPointer.

In that case, wouldn't it make more sense then to return a QDnsReply (so
not a pointer)? Hmmm... but that is of course not possible because it
derives from QObject, right?


  - Robin mentioned adding a static QDnsResolver::instance() method, does
  anyone else have an opinion on this?
  No need if all functions are static.

 And since they are not?

As I argued before: I think they should be, as the class you showed up
contains no actual data (from the user's perspective of it, anyway). It
causes problems with having to keep the instance alive while the DNS
request is running, even though the object itself can not really be
interacted with anymore. It doesn't even provide API to know if it can be
savely deleted, or if it is still in the background managing running
requests. So, when can the API user savely get rid of the requester object?
IMHO, it would make sense to have the methods on QDnsResolver be static,
and let those static methods reference some private (singleton?) instance
of the object that owns stuff like a threadpool and the QDnsReplies. That
frees the user from having to care about the lifetime of the resolver
object.

Andre
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Platform / compiler support

2011-11-09 Thread Olivier Goffart
On Wednesday 09 November 2011 10:10:36 Thiago Macieira wrote:
 On Wednesday, 9 de November de 2011 09:21:20 Turunen Tuukka wrote:
  VS2005
  VS2008
  VS2010
  MinGW 4.4
  Gcc 4.2 - 4.4
  Xcode 4
  Sun Studio 12 (CC 5.9)
  Sun Studio 12.2 (CC 5.11)
  Integrity Multi IDE 6
  xLC 7
  aCC 6.10
  
  For us, if Qt 5 works with these, as well as new versions is a good
  starting point. Making sure that Qt 5 works with latest compilers such
  as
  VS2011 is important, as they typically provide significant advantages
  over the previous version.
  
  It would be good to have more compilers supported, especially for the
  embedded platforms. And definitely it is very important that as few as
  possible compilers are ruled our by design choices in Qt.
 
 Hello Tuukka
 
 Thanks for posting, this is important to us.
 
 The first compilers on the list above are already taken into account and
 should be no problem. XCode 4 isn't a compiler, it's just an IDE using
 either gcc or clang, which we've already discussed.
 
 As for the rest, they are compilers most developers do not have access to.
 It will be very hard for the community to support, so my recommendation to
 Digia, if permitted by the licenses you acquired there, is to provide a
 server for the community to log in and attempt compilation (on request, it
 doesn't have to be all the time).
 
 Still, for those platforms above, I recommend upgrading to the latest
 compilers and discarding the very old ones. For example, discard Sun CC 5.9
 and use 5.11 only; discard xLC 7 and upgrade to xLC 10.
 
 But you're the one with the customers, so we need to know from you what your
 customers are likely to really need. We'd like to know your team's opinion
 for a 2012-2014 timeframe, not word-for-word what the customers say
 (they'll ask to support exactly what they already have).
 
 And we'll need some help to map out the features of those compilers.
 
 Remember: this exercise is to map out what features we can use everywhere
 and which ones could have an impact on existing or future support for a
 given compiler.

Also, it would be nice to have a wiki page listing which the features not 
supported by which compilers. (we use to have that in the very old trolltech 
wiki) Also, this should be reflected in qglobal.h (which deserve a cleanup)

(In qglobal.h, yhere is still stuff like Q_NO_DECLARED_NOT_DEFINED, 
Q_NO_USING_KEYWORD, Q_NO_EXPLICIT_KEYWORD, Q_NO_BOOL_TYPE, 
Q_FULL_TEMPLATE_INSTANTIATION, Q_BROKEN_DEBUG_STREAM, 
Q_BROKEN_TEMPLATE_SPECIALIZATION, Q_NO_TEMPLATE_FRIENDS, ...
Which of them are still required? Which of them do one remember the meaning?)


My point is that it should be known why do don't use a feature of the C++ 
language, but also which feature need not to be used or only within #ifdef.
And if there is no reference telling us that, how are developper supposed to 
know?

So if a feature is not explicitly listed in that wikipage as something we 
should not use, then we can use it.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread Jeremy Lainé

Le Nov 9, 2011 à 10:14 AM, André Somers a écrit :

 
 
 On Wed, Nov 9, 2011 at 9:17 AM, Jeremy Lainé jeremy.la...@m4x.org wrote:
 On 11/08/2011 10:57 PM, Thiago Macieira wrote:
  On Tuesday, 8 de November de 2011 19:40:13 Jeremy Lainé wrote:
  - the QNAM-style API seems to be OK
  Correct, but all functions in QDnsResolver are static.
 
  That means they could go into QDnsReply and we could rename the class simply
  QDns. It worked for Qt 3...
 
 
 The methods are not static, the QDnsResolver instance initially owns all 
 QDnsReply objects
 it returns. It also owns the QThreadPool used to perform the lookups.
 Initially? What does that mean exactly? When does QDnsResolver stops owning 
 the QDnsReply objects?


It means you can use QDnsReply::setParent() to take over ownership of the reply 
(like QNetworkReply).


  
 
  - I have implemented QDnsReply::abort() to cancel a lookup request
  Good.
 
 
 I forgot to mention: you can delete the QDnsReply at any time, as both 
 QDnsReply and
 QDnsResolverRunnable access QDnsReplyPrivate via a QSharedPointer.
 In that case, wouldn't it make more sense then to return a QDnsReply (so not 
 a pointer)? Hmmm... but that is of course not possible because it derives 
 from QObject, right?
 

Correct, QDnsReply has both an abort() slot and a finished() signal. 


 
  - Robin mentioned adding a static QDnsResolver::instance() method, does
  anyone else have an opinion on this?
  No need if all functions are static.
 
 And since they are not?
 As I argued before: I think they should be, as the class you showed up 
 contains no actual data (from the user's perspective of it, anyway). It 
 causes problems with having to keep the instance alive while the DNS request 
 is running, even though the object itself can not really be interacted with 
 anymore. It doesn't even provide API to know if it can be savely deleted, or 
 if it is still in the background managing running requests. So, when can the 
 API user savely get rid of the requester object? IMHO, it would make sense to 
 have the methods on QDnsResolver be static, and let those static methods 
 reference some private (singleton?) instance of the object that owns stuff 
 like a threadpool and the QDnsReplies. That frees the user from having to 
 care about the lifetime of the resolver object.  
 


Currently, QDnsResolver can be deleted at any time without fear of a crash. 
However if there are outstanding requests, this will block until the 
QThreadPool has finished.

I agree that it looks as though QDnsResolver methods should be static, although 
it does once again raise the question of QDnsReply ownership since the replies 
can no longer be owned by the QDnsResolver. However, I am unsure about putting 
the methods in QDnsReply (even if it gets renamed to just QDns), I don't find 
it very descriptive in terms of API.

Jeremy

___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Platform / compiler support

2011-11-09 Thread Thiago Macieira
On Wednesday, 9 de November de 2011 10:45:42 Olivier Goffart wrote:
 Also, it would be nice to have a wiki page listing which the features not
 supported by which compilers. (we use to have that in the very old trolltech
 wiki) Also, this should be reflected in qglobal.h (which deserve a cleanup)

+1

 (In qglobal.h, yhere is still stuff like Q_NO_DECLARED_NOT_DEFINED,
 Q_NO_USING_KEYWORD, Q_NO_EXPLICIT_KEYWORD, Q_NO_BOOL_TYPE,
 Q_FULL_TEMPLATE_INSTANTIATION, Q_BROKEN_DEBUG_STREAM,
 Q_BROKEN_TEMPLATE_SPECIALIZATION, Q_NO_TEMPLATE_FRIENDS, ...
 Which of them are still required? Which of them do one remember the
 meaning?)

Hopefully we can get rid of these:

Q_NO_DECLARED_NOT_DEFINED - no clue what this is
Q_NO_USING_KEYWORD - Symantec C++, Digital Mars, Borland C++, Comeau, others
Q_NO_EXPLICIT_KEYWORD - Symantec C++, Digital Mars, Borland C++
Q_NO_BOOL_TYPE - Borland C++, Compaq C++ 6, Q_CC_DIAB
Q_BROKEN_DEBUG_STREAM - Apple's gcc 3.1 - 3.3
Q_BROKEN_TEMPLATE_SPECIALIZATION - xlC 4, old EDG compilers
Q_FULL_TEMPLATE_INSTANTIATION - gcc 2.95
Q_NO_STL_WCHAR - gcc 2.95
Q__NO_PACKED_REFERENCE - was broken code I guess
Q_TYPENAME - xlC 4

The member-template and partial-specialisation macros are gone already. We
should also remove all those compilers above that aren't tested by anyone
anymore.

These need more investigation as they are probably still enabled for current
compilers. My guess is they can be gone too.

Q_NO_DEPRECATED_CONSTRUCTORS - gcc on __APPLE__
Q_CANNOT_DELETE_CONSTANT - xlC 4, MSVC
QT_NO_TEMPLATE_TEMPLATE_PARAMETERS - only enabled for Sun CC currently, but
I'm told 5.10 has them

This is currently the only we need to keep:

Q_NO_TEMPLATE_FRIENDS - GCC only for now, but the code says Sun CC 5.10 has it

Then there are all the C++11 features, but they are Q_COMPILER_*

 My point is that it should be known why do don't use a feature of the C++
 language, but also which feature need not to be used or only within #ifdef.
 And if there is no reference telling us that, how are developper supposed to
 know?

Well, we currently have one certain macro for C++98 features, one potential
(TTPs), then we have C++03 and TR1 features, C++11 and extensions (like C99
support).

--
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center
 Intel Sweden AB - Registration Number: 556189-6027
 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden


signature.asc
Description: This is a digitally signed message part.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Platform / compiler support

2011-11-09 Thread David Faure
On Wednesday 09 November 2011 11:32:31 Thiago Macieira wrote:
 Q_NO_DECLARED_NOT_DEFINED - no clue what this is

This sounds like the compilers where doing the usual trick of defining a 
constructor private and never implementing it, since it will never be called 
is not allowed.
No idea which compiler that would be though. MSVC 6?

-- 
David Faure | david.fa...@kdab.com | KDE/Qt Senior Software Engineer
KDAB (France) S.A.S., a KDAB Group company
Tel. France +33 (0)4 90 84 08 53, Sweden (HQ) +46-563-540090
KDAB - Qt Experts - Platform-independent software solutions

___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread André Somers
On Wed, Nov 9, 2011 at 11:26 AM, Jeremy Lainé jeremy.la...@m4x.org wrote:


 Le Nov 9, 2011 à 10:14 AM, André Somers a écrit :



 On Wed, Nov 9, 2011 at 9:17 AM, Jeremy Lainé jeremy.la...@m4x.org wrote:

 On 11/08/2011 10:57 PM, Thiago Macieira wrote:
  On Tuesday, 8 de November de 2011 19:40:13 Jeremy Lainé wrote:
  - the QNAM-style API seems to be OK
  Correct, but all functions in QDnsResolver are static.
 
  That means they could go into QDnsReply and we could rename the class
 simply
  QDns. It worked for Qt 3...
 

 The methods are not static, the QDnsResolver instance initially owns all
 QDnsReply objects
 it returns. It also owns the QThreadPool used to perform the lookups.

 Initially? What does that mean exactly? When does QDnsResolver stops
 owning the QDnsReply objects?



 It means you can use QDnsReply::setParent() to take over ownership of the
 reply (like QNetworkReply).


OK. I would like it more if that was more explicit in the API (also for
QNAM), but ok. I am not a big fan of ::setParent() in such contexts, it
doesn't feel natural to me.






  - I have implemented QDnsReply::abort() to cancel a lookup request
  Good.
 

 I forgot to mention: you can delete the QDnsReply at any time, as both
 QDnsReply and
 QDnsResolverRunnable access QDnsReplyPrivate via a QSharedPointer.

 In that case, wouldn't it make more sense then to return a QDnsReply (so
 not a pointer)? Hmmm... but that is of course not possible because it
 derives from QObject, right?


 Correct, QDnsReply has both an abort() slot and a finished() signal.

QFuture solves this by having the QFuture itself be a value class, and have
a QFutureWatcher that supplies the signals. Might be overkill though here,
and is nicer if the two are combined IMO.




  - Robin mentioned adding a static QDnsResolver::instance() method, does
  anyone else have an opinion on this?
  No need if all functions are static.

 And since they are not?

 As I argued before: I think they should be, as the class you showed up
 contains no actual data (from the user's perspective of it, anyway). It
 causes problems with having to keep the instance alive while the DNS
 request is running, even though the object itself can not really be
 interacted with anymore. It doesn't even provide API to know if it can be
 savely deleted, or if it is still in the background managing running
 requests. So, when can the API user savely get rid of the requester object?
 IMHO, it would make sense to have the methods on QDnsResolver be static,
 and let those static methods reference some private (singleton?) instance
 of the object that owns stuff like a threadpool and the QDnsReplies. That
 frees the user from having to care about the lifetime of the resolver
 object.



 Currently, QDnsResolver can be deleted at any time without fear of a
 crash. However if there are outstanding requests, this will block until the
 QThreadPool has finished.

 I agree that it looks as though QDnsResolver methods should be static,
 although it does once again raise the question of QDnsReply ownership since
 the replies can no longer be owned by the QDnsResolver. However, I am
 unsure about putting the methods in QDnsReply (even if it gets renamed to
 just QDns), I don't find it very descriptive in terms of API.


I agree with you on the putting methods in QDnsReply (and calling it QDns).
I prefer to keep the reply just that: an object representing a (future)
reply to a query, not the query itself.
On the ownership: It looks like you will need to have an object with some
state somewhere anyway. Somebody has to own that QThreadPool, for instance.
So, why not make that object the (first) parent then? Problem then is: who
will cleanup the reply objects, and when will that happen, as the user has
no control over the lifetime. I don't like having the delete of
QDnsResolver block untill are requests are finished.

Once again: returning a shared pointer to the QDnsReply object would solve
that (the QDnsResolverPrivate class would keep a shared pointer around as
long as the request is active), but it seems that is not a favoured
solution.

Would it be difficult to have QObject::connect support
QSharedPointerQObject as the QObject* argument? Or rather, I guess,
classes that overload operator-() that return a QObject*?

Andre
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] V8's location

2011-11-09 Thread Thiago Macieira
On Friday, 28 de October de 2011 12:38:38 lars.kn...@nokia.com wrote:
 We've been moving this lib quite a bit already. If we move it again, I'd
 prefer it would end up at it's final location. The move was done before we
 had the decision to keep QtCore independent of V8 and to separate the QJS*
 classes and the QML engine into it's own module.
 
 With the above decision it might make sense to move V8, the QJS* classes
 and the QML engine all into the same shared library.
 
 Kent  Aaron, any thoughts?

Since they don't seem to have an opinion, can we please move it to top-level 
inside qt5.git?

I've just caught a bad commit in my tree that updates the commit link to v8 
and I'm trying to fix it with an interactive rebase.

-- 
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center
  PGP/GPG: 0x6EF45358; fingerprint:
  E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358


signature.asc
Description: This is a digitally signed message part.
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread morten.sorvig

On Nov 4, 2011, at 9:37 PM, ext Thiago Macieira wrote:

 On Friday, 4 de November de 2011 21:01:30 Andre Somers wrote:
 Me too. My point was, that we have slightly different patters for 
 basically the same sort of thing in different places in Qt. QFuture is 
 currently coupled with QtConcurrent, but is there a strong reason why 
 is must be? I was not privy to that IRC chat, perhaps you could tell us 
 the reasoning why it would not be possible?
 
 There's no reason why it has to be coupled with Concurrent. Or, to put in 
 other words, it could be changed to work without Concurrent.
 
 However, the problem is, it is currently too tightly coupled with 
 QtConcurrent. Unless someone is volunteering to do this work right now...


Actually, is it tightly coupled at all? qfutureinterface.h contains the 
(undocumented) backend class that run/map/filter uses to produce results for 
QFuture. That class could be polished up and documented if we want to use 
QFuture in other places.

Morten
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread Peter Hartmann
On 11/09/2011 06:43 PM, ext Jeremy Lainé wrote:
 (...)
 A/ static QDnsReply* QDnsReply::lookup(QDnsReply::Type, QString);

 pro: easy to connect to the QDnsReply's signal
 con: it's entirely up to the user to handle deletion. Judging by your 
 comments above, I
 doubt you favor it?

 or

 B/ static QSharedPointerQDnsReply  QDnsReply::lookup(QDnsReply::Type, 
 QString);

 pro: memory ownership is explicit
 con: how used are our users to manipulating QSharedPointer with respect to 
 signals and such?

I rather favour option B (lessons learned from QNAM), because I think 
option A might lead to undeleted replies, which is what we experienced 
in the case of
QNetworkReply *QNetworkAccessmanager::get(...).

We probably can mitigate the complexity introduced by QSharedPointer by 
having a simple example in the documentation.

However if people more favour option A, that would not be a problem for 
me either.

Peter


 Jeremy
 ___
 Development mailing list
 Development@qt-project.org
 http://lists.qt-project.org/mailman/listinfo/development


-- 
Qt Developer Days 2011 – REGISTER NOW!
October 24 – 26, Munich
November 29 – December 1, San Francisco
Learn more and Register at http://qt.nokia.com/qtdevdays2011
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread Giuseppe D'Angelo
On 9 November 2011 18:35, Jeremy Lainé jeremy.la...@m4x.org wrote:
 C/ you make QDnsReply's constructor public, and let the user manage the 
 lifetime of the
 object. This is what the Q3Dns API looks like. What I don't like about 
 Q3Dns's API is that
 it's unclear when the request is actually made.

It starts after you return to the event loop, just like all the other
socket classes.

-- 
Giuseppe D'Angelo
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread Andre Somers
Op 9-11-2011 19:35, Jeremy Lainé schreef:
 On 11/09/2011 07:21 PM, Peter Hartmann wrote:
 On 11/09/2011 06:43 PM, ext Jeremy Lainé wrote:
 (...)
 A/ static QDnsReply* QDnsReply::lookup(QDnsReply::Type, QString);

 pro: easy to connect to the QDnsReply's signal
 con: it's entirely up to the user to handle deletion. Judging by your 
 comments above, I
 doubt you favor it?

 or

 B/ static QSharedPointerQDnsReply   QDnsReply::lookup(QDnsReply::Type, 
 QString);

 pro: memory ownership is explicit
 con: how used are our users to manipulating QSharedPointer with respect to 
 signals and
 such?
 I rather favour option B (lessons learned from QNAM), because I think option 
 A might
 lead to undeleted replies, which is what we experienced in the case of
 QNetworkReply *QNetworkAccessmanager::get(...).

 OK, there is always another option:

 C/ you make QDnsReply's constructor public, and let the user manage the 
 lifetime of the
 object. This is what the Q3Dns API looks like. What I don't like about 
 Q3Dns's API is that
 it's unclear when the request is actually made.

You mean, like this?
//user code
QDnsReply* dnsReply = new QDnsReply(this);
QDnsResolver::lookup(dnsQuery, dnsReply);

Not a big fan...

Lets stick to either A or B. *I* prefer B, but that much should be clear 
by now. I also suggest we ask somebody with more template fu than I can 
wield to look into if it would be feasable to let this work:

QSharedPointerQDnsReply dnsReply = QDnsResolver::lookup(dnsQuery);
connect(dnsReply, SIGNAL(finished()), this, SLOT(dnsFinished())); 
//directly connect, instead of:
connect(dnsReply.data(), SIGNAL(finished()), this, SLOT(dnsFinished())); 
//currently needed connect statement

André

___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] Window{} API for QML

2011-11-09 Thread Alan Alpert
On Wed, 9 Nov 2011 06:43:34 Knoll Lars (Nokia-MP-Qt/Oslo) wrote:
 I agree with most of the things in this thread, but not everything. Here's
 my thoughts:
 
 We need a Window {} element to create surfaces on a physical screen. This
 Window object should IMO be more or less a direct representation of
 QQuickView in QML.
 
 So far we all seem to agree.  But I also do not see a need to limit the
 Window {} API to the mobile use cases. I'd rather that we expose the full
 functionality in one Object, and rather document some of the differences
 in behavior between mobile and desktop.

I'm wary of trying to expose desktop APIs for desktop use cases, especially 
before Desktop QML is fully realized. We might end up exposing the wrong then 
and then we're at the same point as before plus we're maintaining and 
supporting use-impaired code. I'm also not fond of providing an element for 
use in mobile contexts with functionality that basically says: Don't use 
this. If it's not to be used on those platforms, why even have it available 
for those platforms?

As far as I'm aware there is a lot of features in this gap. Window 
decorations, modality, even geometry could be construed as desktop only.
 
 Using the Window {} object anywhere in QML creates a new top level window.
 This implies that a Window{} as the root item of a QQuickView would create
 an empty QQuickView and a second top-level created through the WIndow
 object. But at least this would mean there's no magic involved.
 

Yep.
 
 Like that we can change the default way of using QML to be symmetric
 between Desktop and Mobile. You instantiate a QQuickEngine, and then load
 a QML file that contains a WIndow {} as the outermost element. If we
 remove the Window {} in QtComponents and use this instead, we can then
 make this fully symmetrical on the QML side between desktop and mobile.
 The only difference would be in the default behavior of Window (most
 likely full screen on mobile, windowed on desktop).

One of the changes talked about on the qt-components mailing list is that with 
this approach you no longer have a Window{} as the outermost element in 
desktop components.

I would rather have the C++ controlled windows exposed manually through C++ 
and have the QML Window{}'s separate. This sounds easily exposed through 
ApplicationWindow{} anyways.

 Differentiation between mobile and desktop can then happen on the
 ApplicationWindow level in QtComponents, where the ApplicationWindow for
 the desktop would support menu- and toolbars, the mobile version would
 support pages and whatever else is needed there.
 
 In addition, it should be easy to associate a Window {} with a certain
 physical screen. For this I'd propose, we somehow expose the list of
 screens as objects in Qt.application, and give Window {} a screen property
 that can be bound to a screen.
 
 So
 
 Window {
 screen: Qt.application.primaryScreen // the default behavior
 }
 
 would create a Window on the primary screen.
 
 The main question I'm unsure about is what to do with Windows on screens
 that are going away (by unplugging the VGA cable going to the projectorŠ).

I've been thinking about the screen issue, and my conclusion was that this 
approach wouldn't work. Exposing the screens this way through Qt.application 
wasn't deemed useful in the QScreen API thread, and a lot of the same problems 
arise here. Aside from the primary screen, it will be very difficult to bind 
this window to the right other screen, you can't just go off of list index 
(except perhaps in the common case of external displays) so you need to query 
the new screens on screenAdded/startup and imperatively assign windows. If 
you're going to do it the imperative way anyways, you may as well do it in C++ 
and just move Window{} objects out of the main QML file into another canvas 
(that way they were created in the same engine and have useful bindings).

So here's my suggestion for what would work. Leave the general case for C++ as 
explained above, and offer a convenience of the common case of an external 
display. Example:

ExternalDisplay{
Rectangle{
anchors.fill: parent
}
}

Arguably you could require a Window instead and automatically rescreen it, but 
I prefer relaxing the restriction to any QQuickItem and it's just like the 
root item in another view.

As you can guess, the effect of the ExternalDisplay{} is that it will 
dynamically load and unload the child component and place it on any secondary 
display when it's available. The root item for that display will be scaled 
much like a QQuickView.

I've been trying to prototype it recently, but my efforts are currently 
stalled by the XCB plugin crashing when you try to do any GL on a secondary 
screen :( . So I'm sorry, but I don't have the code for this yet.
 
 So my proposal would be something exposing most of the QWindow API:
 
 Window {
 property Screen screen
 property Orientation orientation // { Portrait, 

[Development] Public Qt infrastructure update: Saturday 12th November 2011

2011-11-09 Thread mark.keir
Dear developers,
Please be informed that the Public Qt infrastructure, JIRA, Greenhopper 
(bugreports.qt.nokia.com), Fisheye, Crowd (bugdiffs.qt.nokia.com) and Gerrit 
(codereview.qt-project.org) will be disrupted by a maintenance window this 
weekend on Saturday the 12th November 2011 between 9:00-18:00 CET.  The core 
outage will be an update of the Atlassian products JIRA, Greenhopper, Fisheye 
and Crowd to new versions for security, performance and functionality reasons.  
As the Gerrit server is dependent on this infrastructure for authentication via 
HTTPS, this service will also experience some loss of functionality.  The 
maintenance window allows for an upgrade, validation and rollback period so 
that the total outage period could be roughly half the projected window.
All being well after the upgrade, the Fisheye system configuration will be 
updated to begin tracking the module git repos for Qt5 to allow an enhanced 
binding between issues in JIRA and the code that has been merged to correct 
them.
Best Regards
Mark
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development


Re: [Development] API review for a new QDnsResolver class

2011-11-09 Thread Jeremy Lainé
On 11/09/2011 07:41 PM, Giuseppe D'Angelo wrote:
 On 9 November 2011 18:35, Jeremy Lainéjeremy.la...@m4x.org  wrote:
 C/ you make QDnsReply's constructor public, and let the user manage the 
 lifetime of the
 object. This is what the Q3Dns API looks like. What I don't like about 
 Q3Dns's API is that
 it's unclear when the request is actually made.
 It starts after you return to the event loop, just like all the other
 socket classes

What I mean is that the Q3Dns has setters as well as a constructor with 
arguments, so for 
instance:

Q3Dns *dns = new Q3Dns;
dns-setLabel(foodomain.org);// will a request be triggered if I stop here 
and don't 
specify the record type?
dns-setRecordType(Q3Dns::);

.. later ..

dns-setLabel(bardomain.org); // will a new request be issued, since I 
changed the 
queried domain? What happens to the existing results?

Jeremy
___
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development