summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qapplication_s60.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Rewrote most of the regular pointer handling.axis2009-12-091-90/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old implementation had been hacked on for a while and needed cleanup. The new code is heavily based on looking at the behavior of other platforms. It also reuses more of the cross platform code, which improves the handling of Enter and Leave events. We also switched to letting Symbian grab the pointer automatically when pressing down the mouse button, which improves things considerably compared to doing it ourselves. Popups should also work a lot better after this fix, since they were not really handled at all in the old code. The old code had calls to set the Symbian cursor sprite. This code has been removed since that code is now being called from within dispatchEnterLeaveEvents(). In addition, there was code to check whether the up key event had been left out by the platform. This was solved a bit differently now, instead putting the code in the section that handles virtual mouse, since that is where the problem occurs. Task: QTBUG-4990 RevBy: Shane Kearns AutoTest: N/A, Platform specific code that an autotest cannot catch. Lots of manual testing was done on normal examples as well drag'n'drop examples and it seemed to work fine.
* Merge branch 'mmfphonon' into 4.6Gareth Stockwell2009-11-301-1/+41
|\
| * Symbian control invokes slots before and after native draw opsGareth Stockwell2009-11-261-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Direct Screen Access (DSA) allows a client to request notification from the window server when drawing is performed by other threads, into a specified region of the screen. This allows DSA rendering - for example video - to be suspended when notifications are drawn, preventing the video content from overwriting the notification. If the drawing originates from the same thread as that which holds the DSA session, DSA must be suspended while drawing takes place. This change allows a widget to request notification when native drawing is about to be performed by QSymbianControl::Draw. Task-number: QTBUG-5467 Reviewed-by: Jason Barron
| * Allow Symbian widget implementations to select native paint modeGareth Stockwell2009-11-261-1/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On the Symbian platform, the Qt raster paint engine targets an off-screen buffer owned by the Font & Bitmap server (FBSERV). When an area of the screen needs to be refreshed, the window server (WSERV) asks the control environment (CONE) to redraw the control(s) intersecting that screen region. Each Qt native widget has an associated Symbian control, whose Draw function blits the required region of the backing store via WSERV. Use cases involving Direct Screen Access (DSA) may require this behaviour to be modified, to either of the following: - Disable: the Draw function does nothing. In this case, the output of paint events, rendered to the backing store, is not blitted to the screen. This mode was introduced by change 8f445e13. - Zero fill: the Draw function fills all pixels within the redraw region with zeroes. This change allows the widget implementation to select either of these alternative modes by setting a flag in its QWExtra structure. Note that these alternative modes are only suitable for native widgets, because they act on a per-control rather than per-widget basis. Task-number: QTBUG-5467 Reviewed-by: Jason Barron
* | Fix crash in QApplication::beep() on S60Shane Kearns2009-11-251-21/+35
|/ | | | | | | | | | | | | | | | | Using an asynchronous API synchronously caused a crash, because the data structure was deleted while an async request is still pending. Depending on the multimedia implementation on the phone, the crash will happen or you just get no sound (or it can even work if the underlying implementation is blocking). Solution is to use the API asynchronously, and delete the handling object in qt_cleanup. Also raised the tone by one octave to be more similar to the system beep. Task-number: QTBUG-6170 Reviewed-by: Janne Anttila Reviewed-by: Miikka Heikkinen
* Removed window activation hack, unified and fixed title&icon setting.Janne Anttila2009-11-231-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | The window activation hack is not needed anynmore since AppUi()->RemoveFromStack() ensures the next visible window will get the keyboard focus. Hack removal also required change to window title setting logic. Since window title (and icon) are associated to top-level windows, the logical place to set them is the same place where active window is changed i.e. QApplication::setActiveWindow is called. At the same time also window icon setting from show_sys was move to focusChanged to make icon/title setting more consistent. When changing orientation or switching to different statuspane mode we receive KInternalStatusPaneChange events for each window in QSymbianControl::HandleResourceChange. When receiving such event we only need to reset the icon for focused/visible window. If we don't handle it like this, it might happen that invisible widget added to control stack resets the global icon/title. Task-number: QTBUG-5780 Reviewed-by: Axis
* Symbian: QKeyEvent:isAutoRepeat() doesn't workFrans Englich2009-11-191-1/+1
| | | | | Task-number: QTBUG-6011 Reviewed-by: Gareth Stockwell
* Remove fake right mouse button events from long tapShane Kearns2009-11-131-19/+1
| | | | | | | | | | | The context menu is launched by a separate event, not by the right mouse button. Generating the fake right mouse button caused side effects. We now treat the touch screen as a one button mouse, long taps still open the context menu using QContextMenuEvent. Task-number: QTBUG-5180 Reviewed-by: axis
* Merge commit upstream/4.6 into oslo-staging-2/4.6Olivier Goffart2009-11-131-1/+1
|\
| * Fix typo in license headerAlessandro Portale2009-11-121-1/+1
| | | | | | | | | | | | The word 'module' was missing. Reviewed-By: TrustMe
* | Fixed a focusing bug on Symbian.axis2009-11-121-0/+20
| | | | | | | | | | | | | | | | | | | | When Symbian pops up a menu or dialog, Qt should produce FocusOut events using PopupFocusReason rather than deactivating the whole window. This keeps input widgets from losing focus when FEP wants to pop up dialogs. AutoTest: QWidget passed RevBy: Jason Barron
* | Fixed some initializers and saved some memory.axis2009-11-111-1/+5
|/ | | | RevBy: Trust me
* Merge commit 's60/4.6' into mmfphononFrans Englich2009-11-041-3/+12
|\
| * Fixed modal dialog fading support in Symbian.Janne Anttila2009-11-041-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Switched to use S60 API instead of Symbian one, the rationale is given below as an copy/paste from S60 docs: "Cross-application fading support Symbian OS provides some support for fading, but this only covers fading within an application. The S60 UI can have more than one application on the screen at once (in fact, since the system parts of the Status pane are inside EikServer, it always has more than one application on the screen). The S60 UI introduced the fading and drawing system to manage the fading state for the whole system. Application and UI control code for S60 should not attempt to set fade for a popup window directly. Instead, the popup window should implement the MAknFadedComponent interface, and should use the TAknPopupFader support class to set the fade. The application UI base classes interact with the fading and drawing system by informing it when the foreground status of the application changes. They also use it to implement system wide fading." There is also task QTBUG-5393 to implement fading support in future without S60 dependency. Task-number: QTBUG-5181 Reviewed-by: Sami Merila
| * Fix cleanupstack crash on exit in Symbian OS 9.2Shane Kearns2009-11-031-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Destroying the control environment also pops items from the original cleanup stack which is not owned by the control environment. This is a platform issue (and does not occur in 9.3 & 9.4). To avoid this causing a panic, the s60main is changed to not push items on the cleanup stack (instead, it TRAPs the call to main(), and deletes its allocations manually). A further 9.2 cleanup stack crash was caused when application construction fails (because of missing resource files). The resulting exception would bypass deleting the control environment, and return from main with the wrong cleanup stack active. This is resolved by doing the TRAP / cleanup / throw manually instead of using qt_trap_throwing (The control environment cannot be pushed to the cleanup stack, because it owns the cleanup stack at that time). This isn't a 9.2 specific bug, but rather is revealed by 9.2 because the missing resource file is non fatal in 9.3 and 9.4. Fixes many autotests which have crashed on S60 3.1 since the cleanup stack swapping patch. Reviewed-by: axis
* | Call PositionChanged from QSymbianControl::SizeChangedGareth Stockwell2009-11-041-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is necessitated by the fact that CCoeControl::SetExtent calls SizeChanged, but does not call PositionChanged. This causes a bug in the handling of orientation changes. When the screen orientation changes, QSymbianControl::HandleResourceChange(KInternalStatusPaneChange) is called on the top-level widget. This results in a call to SetExtent. Because PositionChanged was not being called, the outcome was that the size of the widget's data.crect variable was updated, but not its position. This meant that mouse events sent to this widget or any of its children were incorrectly handled: 1. QSymbianControl::HandlePointerEventL works out which widget should receive the event. This uses CCoeControl::PositionRelativeToScreen, and therefore calculates the correct widget. 2. In constructing the QMouseEvent object, QWidget::mapFromGlobal is used to translate the event position into the receiving widget's co-ordinate system. This uses data.crect.topLeft(), therefore giving the wrong value, resulting in the widget's event handler discarding the event. Task-number: QTBUG-4697 Reviewed-by: axis
* | Merge branch '4.6' into mmfphononGareth Stockwell2009-11-031-6/+25
|\ \ | |/
| * Fixed statuspane visibility after dialog closed from fullsreen widget.Janne Anttila2009-10-301-6/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Comparing TBool == bool did not work correctly since TBool is effectively int. For example statusPane->IsVisible() in this particular case returns 2, which compared to true as an int fails. Casting to bool seems to solve the problem. Another possibility would be to use Symbian COMPARE_BOOLS macro. - Changing statuspane visibility now affects to widget size also - Some tab/space fixes Task-number: QTBUG-4876 Reviewed-by: Sami Merila
| * Removed the need for extra Symbian traps after QApp construction.axis2009-10-261-0/+13
| | | | | | | | | | | | | | | | | | This was achieved by putting back the old trap handler after the S60 framework construction has finished. Task: QTBUG-4960 AutoTest: Included and passed RevBy: Shane Kearns
* | Fix for unresponsive sliders after orientation switch or full-screenGareth Stockwell2009-11-031-0/+3
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | video playback During the switch to full-screen video playback, the following happens: 1. Double-tapping to enable full-screen results in a call to QSymbianControl::HandleLongTapL 2. This modifies the global variable QApplication::mouse_buttons, OR'ing in Qt::RightButton 3. QWidgetPrivate::create_sys, called as a result of the call to setWindowFlags made by Phonon::VideoWIdget::setFullScreen, schedules a delayed deletion of the same control as in step (1) above 4. The control gets deleted before it receives a HandlePointerEventL for the long tap release, which would have removed Qt::RightButton from the mouse_button bitmask 5. In subsequent calls to QSlider::mousePressEvent, the test (ev->buttons() ^ ev->button()) is false, which results in the event being ignored. Ideally, we would fix this by propagating the m_previousEventLongPress flag from the deleted QSymbianControl to the newly created one. However, this does not work because the new control does not receive the HandlePointerEventL callback for the long press release. We therefore fix the bug by checking for m_previousEventLondPress in the QSymbianControl destructor; if it is set, we clear the Qt::RightButton bit from the QApplication::mouse_buttons mask. Note that QTBUG-5309 (Cannot interact with sliders after orientation switch during audio playback) is still seen after applying this patch. Task-number: QTBUG-5242, QTBUG-5308 Reviewed-by: axis
* Make Symbian emulator behave the same as device for mouse & touchscreenShane Kearns2009-10-211-0/+7
| | | | | | | | | | | | | | | | | Emulator HAL reports that it supports mouse but not touch. Since Qt is changing behaviour based on these values, the emulator works differently from the device. To workaround, the emulator HAL values are ignored and following used: 5.0: mouse 0, touch 1 3.x: mouse 0, touch 0 The mouse can still be used to interact with the emulator, as pointer events are still delivered. Task-number: QTBUG-4803 Task-number: QTBUG-4616 Reviewed-by: Sami Merila
* Cleaned up the API of the Symbian event hooks.axis2009-10-211-44/+64
| | | | | | | | | | | | | | | The two major points were: - Replacing "s60" with "symbian" in all event handling functions, since there is nothing S60-specific about them. - Replace the Symbian event types with the encapsulating QSymbianEvent container. This allows us to cope with more types of events in the future without having to add new virtual functions. AutoTest: QWidget passed Task: QT-1156 RevBy: Jason Barron RevBy: Shane Kearns RevBy: Sami Merila
* Use premultiplied alpha pixel format in SymbianShane Kearns2009-10-201-0/+7
| | | | | | | | | Gives better performance in the raster paint engine. For Symbian 9.3 onwards, this can also be used as the native pixmap format. For 9.2, conversion is required. Reviewed-by: Sami Merila Reviewed-by: Jani Hautakangas
* Merge commit 'origin/4.6' into mmfphononFrans Englich2009-10-161-56/+88
|\
| * Fix pointer grab issues in S60Shane Kearns2009-10-151-56/+88
| | | | | | | | | | | | | | | | | | | | | | Did the long awaited "refactor me" in QSymbianControl::HandlePointerEvent Pointer is grabbed by MousePress, and released by MouseRelease - unless already globally grabbed. Pointer events are routed to the widget that grabbed the mouse. Task-number: QTBUG-4695 Task-number: QTBUG-4674 Reviewed-by: axis
* | Merge commit 'origin/4.6' into mmfphononFrans Englich2009-10-151-2/+3
|\ \ | |/ | | | | | | | | Conflicts: src/corelib/kernel/qcoreevent.cpp src/corelib/kernel/qcoreevent.h
| * Modified QSymbianControl::setFocusSafely to set last focused controlGareth Stockwell2009-10-131-1/+2
| | | | | | | | | | | | to zero only if currently focused Reviewed-by: axis
| * Fixed the QKeyEvent::nativeModifiers() call.axis2009-10-131-1/+1
| | | | | | | | | | | | | | Earlier we returned a copy of the Qt modifiers. This patch fixes the call to return the real native Symbian one. RevBy: Sami Merila
| * Revert "Fixed a few compiler warnings from QtGui for Symbian."Janne Anttila2009-10-131-6/+4
| | | | | | | | | | | | Accidentally used git commit -a when should have used only git commit :( This reverts commit 9c6e466dc09813dd4a641b2cf385f35ac99346f5.
| * Fixed a few compiler warnings from QtGui for Symbian.Janne Anttila2009-10-131-4/+6
| | | | | | | | Reviewed-by: TrustMe
| * Fix for qapplication::testDeleteLaterProcessEvents autotest in Symbian.Janne Anttila2009-10-121-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Deleting qt_desktopWidget eventually ends up to QSymbianControl destructor. Calling setFocusSafely from QSymbianControl destructor causes a new events to be posted to event queue. Posting events tries to wakeup event dispatcher, which was deleted in QApplication destructor before calling delete for qt_desktopWidget. This makes application to panic. The fix is to change is_app_closing and is_app_running flags to correct state immediately after event dispatcher is closed down, and check the is_app_closing flag in QSymbianControl destructor. The change fixes panic in qapplication::testDeleteLaterProcessEvents, and otherwise QApplication and QWidget autotest results are same as before change. Reviewed-by: Miikka Heikkinen Reviewed-by: Brad
* | When reparenting native widget, delayed deletion of Symbian controlGareth Stockwell2009-10-151-0/+5
| | | | | | | | | | | | | | | | | | | | | | until control returns to the event loop. This is necessary because reparenting can be triggered from the context of a control's event handler. If reparenting causes that control to be deleted, a crash can result. Task-number: QTBUG-4664 Reviewed-by: axis
* | Modified QSymbianControl::setFocusSafely to set last focused controlGareth Stockwell2009-10-131-1/+2
|/ | | | | | to zero only if currently focused Reviewed-by: axis
* Fixing Keypad Navigation on N95 devicesAlessandro Portale2009-10-051-1/+6
| | | | | | | | | HAL::Get(HALData::EPen, TInt& result) may set 'result' to 1 on some 3.1 systems (e.g. N95). But we know that S60 systems below 5.0 did not support touch. Let's use tahth knowledge and work-around that N95 HAL bug. Rev-By: Jani Hautakangas
* Doc: silence qdoc warnings in S60 specific documentation.Volker Hilsheimer2009-10-031-1/+2
| | | | Not sure why the migration classes should be are \obsolete.
* Merge commit 'qt/4.6' into mmfphononFrans Englich2009-10-021-2/+49
|\ | | | | | | | | Conflicts: src/gui/kernel/qwidget_s60.cpp
| * S60 qt_init() fix to set system fontmread2009-10-011-0/+4
| | | | | | | | | | | | | | | | | | | | This gives the system font the default font family name, which is appropriate for S60, "Series 60 Sans". Without this, the system font has a requested family name of "Helvetica". Upside of this fix is that it makes tst_qFontComboBox pass on S60 Reviewed-by: Alessandro Portale
| * Merge branch 'focusFixes' into 4.6axis2009-09-301-2/+45
| |\ | | | | | | | | | | | | | | | Conflicts: src/gui/kernel/qwidget_p.h src/gui/kernel/qwidget_s60.cpp
| | * Fixed some focus issues on Symbian.axis2009-09-301-3/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are really two bugs that are fixed in this commit: - SetFocus() in Symbian does not automatically clear focus on the previously focused control, so we have to remember that control and clear it ourselves. - Symbian assumes that it is always the control at the top of the control stack that should have focus, and if this isn't the case, focus may or may not work depending on whether Symbian has had a chance to reset the focus or not. Therefore, whenever we change focus on a control, we have to also readd that control to the top of the stack, to ensure that it stays focused. RevBy: Janne Anttila
| | * Revert "Switched to asynchronous focus handling on Symbian."axis2009-09-301-2/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit b6377f43410b14125a66ffd02acde69cfb6e455e. The asynchronous handling caused too many headaches with input methods, which expect the focus status to be updated immediately. This may break the test case that was originally fixed by this patch (I cannot find out which one at the moment), but that will have to be solved in a different way. Conflicts: src/corelib/kernel/qcoreevent.cpp src/corelib/kernel/qcoreevent.h src/gui/kernel/qwidget.cpp src/gui/kernel/qwidget_p.h src/gui/kernel/qwidget_s60.cpp
* | | Merge branch 'mmfphonon' of git@scm.dev.nokia.troll.no:qt/qt-s60-public into ↵Gareth Stockwell2009-10-011-0/+1
|\ \ \ | |/ / | | | | | | mmfphonon
| * | Merge commit 'qt/4.6' into mmfphononFrans Englich2009-09-291-0/+1
| |\ \ | | |/
| | * Fix bug with posting events from HandleCommandL on Symbian.Jason Barron2009-09-291-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Increase the loop level counter here because this is a system event entry point. Previously, posting a deferred delete event from this function (or triggering an action that posted this event) would end up with the event not being processed on time. The reason is that these events are only processed when the event loop that posted the event returns. Since the loop counter was not previously incremented, this "nested loop" was not detected so the event would only be processed when the main event loop returned which is typically at the end of the application. Reviewed-by: axis
* | | Map redraw rectangle into co-ordinate system of backing store, for native ↵Gareth Stockwell2009-10-011-4/+9
|/ / | | | | | | | | | | child widgets The implementation of QSymbianControl::Draw previously assumed that the co-ordinate system of the control always matched that of the backing store - in other words, that the only widget for which a QSymbianControl was created would be the top-level widget. Now that create_sys has been modified to create a native window (and therefore a QSymbianControl) for child widgets on which winId() is called, this assumption is no longer valid. This function has therefore been modified to map the redraw rectangle into the coordinate system of the backing store.
* | Merge commit 'qt/4.6' into mmfphononFrans Englich2009-09-291-12/+23
|\ \ | |/
| * Add a more proper shutdown sequence for Symbian applications.Jason Barron2009-09-291-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously both EEikCmdExit and EAknSoftkeyExit were hard coded to call exit() which promptly exited the event loop without the chance to do any UI operations. With this patch, we handle the two cases differently and allow people to essentially make the right soft key a hide instead of an exit simply by reimplementing closeEvent() and ignoring the event. EAknSoftkeyExit is now a soft exit since this does not seem to be a mandatory exit in S60. By sending a QCloseEvent to QApplication this has the effect that all windows are closed (sent another QCloseEvent) and if one of them chooses to ignore this event, the application and UI are both kept alive. This is similar to how Qt behaves on other platforms. If all windows accept the close event (default), then the application will quit() as normal. This command is sent from the right soft key. EEikCmdExit is mapped similarly as before, but calls quit() instead of exit() to be aligned with other platforms. This will cause the aboutToQuit signal to be emitted which maps very well to Qt because UI interaction is not permitted from this signal and wouldn't work in S60 anyway because in the case of EEikCmdExit, the UI has already been torn down by the UI framework. This command is sent by the End key. We could take this one step further and intercept the key event and prevent it from going to the UI framework and tearing down the UI, but this is a little too evil IMHO. If people really want to intercept that event, they can do it by reimplementing the platform specific event filter. This is equivalent to how it would be done in S60 (reimplementing HandleWsEvent). Reviewed-by: axis Reviewed-by: mread
| * doc: add some more \since 4.6 tagsVolker Hilsheimer2009-09-281-0/+4
| |
| * Fix app showing a blank screen after switching to it using task switcherShane Kearns2009-09-251-9/+10
| | | | | | | | | | | | | | | | | | | | | | On S60, the widget backing store is dropped when app window is hidden in order to save memory. This has a side effect that the widgets are not redrawn when the backing store is recreated if they have static content. Fix is to invalidate the backing buffer after recreating it, and repaint the widget. Reviewed-by: Jason Barron
* | Removed trace statements from QtGuiGareth Stockwell2009-09-281-63/+1
| |
* | Fixed logical error in QSymbianControl::DrawGareth Stockwell2009-09-281-4/+4
| |