Commit Graph

791 Commits (ac973cb74fecdaedf31922dfd48ea522a7af8f51)

Author SHA1 Message Date
Lars Knoll a30d4162dd Refactor the input framework
Results of the ongoing workshop in Oslo:
QInputPanel will be the application facing interface
for controlling the input context as well as querying
things like the position of the virtual keyboard.
QInputContext is significantly cleaned up and only there as
a compatibility API for existing code.

Change-Id: Ie8e2ee480930763f414bfaae63247b1fb6500c82
Reviewed-on: http://codereview.qt.nokia.com/4357
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Vesa Rantanen <vesa.rantanen@nokia.com>
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
2011-09-07 14:59:18 +02:00
Matthew Cattell 99414a3b4e send resize event when window resized
Change-Id: I4415f1dbdf9bcc96dda10d00c8982a9d4ee433c4
Reviewed-on: http://codereview.qt.nokia.com/4344
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-09-07 12:46:44 +02:00
Laszlo Agocs 5e9f410eb6 Add timestamp to QInputEvent.
The mouse, touch, key events have no timestamp field currently,
meaning that the timestamp passed to QWindowSystemInterface's
handleMouse, Touch, KeyEvent functions will not be stored in the
generated events. The timestamp can be quite valuable in some cases
(e.g. when performing filtering of touch events) so losing this
information is not desirable. The patch adds a timestamp field to
QInputEvent, which is the base for mouse, touch, key, and other
events, and also makes QGuiApplication to store the timestamp in the
generated events.

Change-Id: Icb9de8b238cb341916eac33ce21603f4955baca7
Reviewed-on: http://codereview.qt.nokia.com/4196
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
2011-09-05 15:13:13 +02:00
Lars Knoll c2aea75c22 Refactor QMouseEvent to contain the position inside the window
Rename the default accessors for positions to localPos, windowPos
and screenPos, to be explicit about their use.
Introduce a QT_NO_INTEGER_EVENT_COORDINATES define so one can make sure
to always use the float based coordinates.
Fixup all Qt code to use the correct constructor that specifies all
three coordinates.

Change-Id: If4bb93b8d1e2eb2440260d99680c468706cfe68f
Reviewed-on: http://codereview.qt.nokia.com/4058
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
2011-09-01 13:27:37 +02:00
Lars Knoll 2c6eae4bca Initialize member variable
Change-Id: I165c267b87dc201ed4970d50e39ff7421cbef35f
Reviewed-on: http://codereview.qt.nokia.com/3981
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
2011-08-31 15:45:50 +02:00
Lars Knoll 94355ca15a Add a QStyleHints class to QtGui
This class encapsulates platform specific style hints
like doubleClickInterval or cursorFlashTime.

Change-Id: I0d88c47a59d564d8d346642184e5b14e1864cf40
Reviewed-on: http://codereview.qt.nokia.com/3927
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-08-31 11:47:21 +02:00
Laszlo Agocs 0e3ac5dea6 Touch event support for QWindow.
Change-Id: I83ddc48a9093856d975b25f0426db96264afeeef
Reviewed-on: http://codereview.qt.nokia.com/3920
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
2011-08-31 10:43:24 +02:00
Gunnar Sletta 11f867c34a pick up the target window for a mouse event when none is specified
Change-Id: Iae0402f63f39a2728b94abe68fa22592d97ea9f3
Reviewed-on: http://codereview.qt.nokia.com/3885
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
2011-08-30 15:05:29 +02:00
Friedemann Kleint 3ed314ca46 Fix compilation/use correct data type for qt_lastx,y.
Change-Id: I6fdc8dcfb19d7498a1eb8013f75113537ce7a213
Reviewed-on: http://codereview.qt.nokia.com/3594
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
2011-08-25 14:31:45 +02:00
Gunnar Sletta 04d0a9626c Merge branch 'master' into refactor
Conflicts:
	src/gui/kernel/qapplication_qpa.cpp
	src/gui/kernel/qcursor_qpa.cpp
	src/gui/kernel/qwindowsysteminterface_qpa.cpp
	src/gui/kernel/qwindowsysteminterface_qpa.h
	src/gui/kernel/qwindowsysteminterface_qpa_p.h
	src/gui/text/qtextcontrol.cpp
	src/plugins/platforms/wayland/wayland.pro
	src/widgets/accessible/qaccessible2.h
	src/widgets/widgets/qwidgetlinecontrol_p.h

Change-Id: I5e6f4eb184159dccc67e8f13673edb884d179c74
2011-08-25 12:48:52 +02:00
Gunnar Sletta 46c9f4c212 Implement "quit on last window closed" logic for QWindow
Change-Id: Ide33578ad60796f3e267b09be76cda87eaf873d0
Reviewed-on: http://codereview.qt.nokia.com/2827
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
2011-08-11 08:20:55 +02:00
Friedemann Kleint 8dc2f81c9f Add WindowStateChanged event.
Not currently considering activation state.

Change-Id: Iea9265d35536947b6cc85639bd9839e9fda69bdf
Reviewed-on: http://codereview.qt.nokia.com/2609
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-08-05 10:41:43 +02:00
Friedemann Kleint 37edacb710 QPlatformFontDatabase: Add default fonts.
Add a default font accessor used to initalize QGuiApplication::font().
Add accessor for default font hash providing the defaults for
QApplication::font(const char *widgetClassName).

Change-Id: Ie4eb6edb251a81e81288ef480ae5550bd1125008
Reviewed-by: Samuel Rødal <sroedal@trolltech.com>
Reviewed-on: http://codereview.qt.nokia.com/2567
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
2011-08-03 14:54:35 +02:00
Jørgen Lind dfd72c6e6c Make QPlatformIntegration not have a factory for eventdispatcher
but rather an accessor for the guiThreadEventDispatcher

Change-Id: I1b9ba14efc9f338c5a67e3e24ddb0caf76c07413
Reviewed-on: http://codereview.qt.nokia.com/2321
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-07-28 10:06:11 +02:00
Jørgen Lind 86e7c36b50 Make it possible to use QSocketNotifier in Lighthouse plugins
The idea is that now the plugin can register the event dispatcher
in its constructor, so it can freely use QSocketNotifier or what not.

If the plugin choses not to do so, then the createFunction will be
called at a later point.

Change-Id: I75fb2ee4180d9619ac94e75fbcf1efd7a2deecbc
Reviewed-on: http://codereview.qt.nokia.com/2287
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-07-27 15:47:49 +02:00
Friedemann Kleint 28fbcb3d2a Lighthouse: Provide default plugin.
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>

Change-Id: I13e78c499f77ac6ad034e61488fc6ef00e2e2be8
Reviewed-on: http://codereview.qt.nokia.com/2124
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
2011-07-25 17:11:25 +02:00
Laszlo Agocs 43f2246995 Add drag and drop events to QWindowSystemInterface.
For non-desktop platforms these are better suited and are more
QPA style than relying purely on QDragManager/QSimpleDrag/sending
drag events directly to the windows.

Change-Id: Id466830cf83427b3d86925602086a858e8f713e5
Reviewed-on: http://codereview.qt.nokia.com/2084
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-07-25 15:26:51 +02:00
Laszlo Agocs d78a677305 Fix for not calling QPlatformCursor's pointerEvent.
The code to pass mouse events to platform cursors is there in 4.8,
however it went missing in refactor. This patch restores it.

Change-Id: I7873c892c1ae907fc084d3f00f7d4e5a6293ba4d
Reviewed-on: http://codereview.qt.nokia.com/2083
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-07-25 14:57:29 +02:00
Samuel Rødal c3da77798b Added workable QScreen API on top of QPlatformScreen.
QPlatformIntegration::screens() no longer has to be implemented,
implementations should call QPlatformIntegration::screenAdded() for each
screen instead. This is for being able to support adding screens at
run-time later on, by connecting it to a signal in QGuiApplication.

The QGuiGLContext API has changed a bit, by not sending in all the
parameters in the constructor but instead having a create() function.
The createPlatformGLContext() factory in QPlatformIntegration takes a
QGuiGLContext * instead of a QSurfaceFormat and a share context, similar
to how the window and backing store factory functions work.

The XCB plugin has experimental support for connecting to multiple X
displays simultaneously, creating one or more QScreen for each.

Change-Id: I248a22a4fd3481280710110272c04a30a8021e8f
Reviewed-on: http://codereview.qt.nokia.com/2103
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
2011-07-25 13:52:09 +02:00
Morten Sorvig 4ed17a6508 Start porting the Mac menu system to QPA.
Global changes: 
qglobal.h: remove code that sets Q_WS_MAC and
Q_MAC_USE_COCOA - this is dead code now. Add 
qt_widget_helpers_mac_p.h/mm which will contain
helper functions needed for widgets on Qt 5. 

Menu-related changes:
Set AA_DontUseNativeMenuBar before creating the 
platform plugin. Change Q_WS_MAC to Q_OS_MAC in the
menu code. Remove Q_MAC_USE_COCOA defines and Carbon
code paths. Move some qt_mac helper functions only
used by the menu system to qmenu_mac.mm. #ifdef out 
some code paths that require further porting.

Native menus are now disabled by default but can 
be enabled by the QPA plugins that want them by
clearing AA_DontUseNativeMenuBar. Since we at compile
time don't know which plugin will be loaded the Mac
menu code is always included when building on OS X.
(The above is currently only relevant for the Cocoa
plugin.)
2011-07-06 09:59:36 +02:00
Morten Johan Sorvig f1975cfc53 Make xcb work again after event dispatcher changes.
The platform plugin/event dispatcher creation order
has now been reversed and the event dispatcher
cannot be accessed during plugin construciton.
2011-06-22 11:37:42 +02:00
Morten Sorvig 4efaf305f5 Add lighthouse event dispatcher API.
Platform plugin creation is now moved forward in
order to have a platform plugin instance at event
dispatcher creation time.

Plugins are now responsible for implementing
PlatformIntegration::createEventDispatcher and returning
an QAbstractEventDispatcher subclass.
2011-06-22 09:47:49 +02:00
Samuel Rødal 4a189c188c QWindowContext / QWindowFormat refactor.
To enable having a single GL context used for multiple drawables we need
to de-couple the context class a bit more from the window class in the
plugin API. Now contexts are created stand-alone based on a GL format
and a share context, and when calling makeCurrent() a desired surface
is specified. This maps well to GLX, EGL, Cocoa, AGL, and WGL, which all
support this use case.

QWindowContext is renamed to QGuiGLContext, and QWindowFormat is renamed
to QGuiGLFormat. We have the ability to introduce a pbuffer or similar
other offscreen GL drawable abstraction in the future.
2011-06-10 09:24:56 +02:00
Morten Sorvig e3410908a2 Add QEventDispatcherMac.
Create it directly in QGuiApplication for now, 
later on we'll move it to the cocoa plugin.
2011-06-09 11:19:12 +02:00
Laszlo Agocs 4469de4ce7 Cursor support in xcb plug-in.
Custom cursor pixmaps with depth greater than 1 are not yet supported
and will be converted to monochrome always.

Reviewed-by: Samuel Rødal
2011-06-08 14:47:22 +02:00
Lars Knoll 88f3b059a9 Avoid out of bounds write
Reviewed-by: Samuel
2011-06-08 14:46:50 +02:00
Lars Knoll 779e1aaa35 Protect against deleted windows
Check that the window is still there before
trying to deliver an event to it.

Reviewed-by: Samuel
2011-06-07 15:50:54 +02:00
Samuel Rødal 078e4ef6c7 Made tst_QWidget::updateWhileMinimized() pass.
This requires adding a couple of window system interface events, namely
Map, Unmap, and Expose. When a widget is minimized on X11 it is
unmapped, and thus update requests should not be delivered. Instead the
event will delivered when the widget is mapped, which causes an Expose
event to be sent. The Unmap and Expose event thus need to be handled in
QWidgetWindow, and Map is also added for the purpose of API symmetry
(and for future needs).
2011-06-06 16:03:38 +02:00
Laszlo Agocs 9bd270f64d Have a sensible default double click interval.
Having 0 as default would disable double clicks completely which
is not really good.

Reviewed-by: Samuel Rødal
2011-05-31 14:18:47 +02:00
Laszlo Agocs e277d14425 Add focus and modal dialog support.
Reviewed-by: Samuel Rødal
2011-05-30 14:41:14 +02:00
Olli Werwolff ed529bbf49 Compile fix for QtGui when configure with -qpa on Windows
Reviewed-by: Friedemann Kleint
2011-05-26 08:50:23 +02:00
Friedemann Kleint dcffd9c25f Compile fix for -qpa/Linux.
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
2011-05-23 13:53:18 +02:00
Lars Knoll fd7bfc6184 Add QGuiApp::topLevelAt and fix visibility flag
Add and remove windows to the list of top level windows.
Correctly set the visibility flag for windows and implement
a QGuiApplication::topLevelAt() method that uses the
QPlatformScreen.
2011-05-22 13:52:17 +02:00
Samuel Rødal af4e5576f4 Added QGuiApplication::activeWindow(). 2011-05-20 13:45:55 +02:00
Lars Knoll e577d02cc9 move files in src/gui into their final locations
Rename the guikernel subdir to kernel
and guiutil to util.
2011-05-11 20:18:42 +02:00
Lars Knoll 401f078386 split kernel/ up according to the future library split
Create a guikernel/ directory that contains the files that'll go
into libQtGui. What remains in kernel/ will go into QtWidgets.
In addition to that image/, painting/ and text will end up
int QtGui.
2011-05-04 12:50:14 +02:00
Lars Knoll 2e9fd1325f move keyboardInputLocale and keyboardInputDirection into QGuiApplication 2011-05-04 09:31:54 +02:00
Lars Knoll 492bbdefd3 Remove more QApp dependencies
platformIntegration() lives in QGuiApplication
QFont and QFontDatabase can live with QGuiApp only
as well.
2011-05-04 09:11:33 +02:00
Lars Knoll 5df3d517b4 move layoutDirection from QApplication to QGuiApplication
The concept is needed in both QWidgets and QML,
so it has to be in QGuiApplication.
2011-05-03 21:06:20 +02:00
Lars Knoll ac6878a2f1 rename qwindow_qpa to qwindow 2011-05-03 20:31:37 +02:00
Lars Knoll 5a91925514 QGuiApplication is not QPA specific
Rename files to reflect that QGuiApplication is
going to be used everywhere.
2011-05-03 20:31:37 +02:00