--- a/src/hbcore/inputfw/hbinputfocusobject.cpp Tue Jul 06 14:36:53 2010 +0300
+++ b/src/hbcore/inputfw/hbinputfocusobject.cpp Wed Aug 18 10:05:37 2010 +0300
@@ -37,9 +37,14 @@
#include "hbinputeditorinterface.h"
#include "hbinputvkbhost.h"
#include "hbinputstandardfilters.h"
+#include "hbdeviceprofile.h"
#include "hbinpututils.h"
#include "hbnamespace_p.h"
+#include "hbmainwindow.h"
#include "hbevent.h"
+#include "hbwidget.h"
+#include "hbinputmainwindow_p.h"
+
/*!
@alpha
@hbcore
@@ -75,35 +80,79 @@
}
}
-
class HbInputFocusObjectPrivate
{
+ Q_DECLARE_PUBLIC(HbInputFocusObject)
+
public:
HbInputFocusObjectPrivate(QObject *focusedObject)
: mFocusedObject(focusedObject),
mEditorInterface(focusedObject)
{}
+ HbMainWindow *mainWindow() const;
+
public:
+ HbInputFocusObject *q_ptr;
QPointer<QObject> mFocusedObject;
HbEditorInterface mEditorInterface;
QString mPreEditString;
};
+HbMainWindow *HbInputFocusObjectPrivate::mainWindow() const
+{
+ QWidget *qWidgetObject = qobject_cast<QWidget *>(mFocusedObject);
+ QGraphicsObject *graphicsObject = 0;
+
+ // check for graphics view related widgets.
+ if (qWidgetObject) {
+ if (qWidgetObject->graphicsProxyWidget()) {
+ graphicsObject = qWidgetObject->graphicsProxyWidget();
+ } else {
+ return HbInputMainWindow::instance();
+ }
+ } else {
+ graphicsObject = qobject_cast<QGraphicsObject *>(mFocusedObject);
+ }
+
+ if (graphicsObject) {
+ if (graphicsObject->scene()) {
+ QList<QGraphicsView*> views = graphicsObject->scene()->views();
+ foreach (QGraphicsView *view, views) {
+ HbMainWindow *mainWindow = qobject_cast<HbMainWindow*>(view);
+ if (mainWindow) {
+ return mainWindow;
+ }
+ }
+ // not a HbMainWindow.
+ return HbInputMainWindow::instance();
+ }
+ }
+
+ return 0;
+}
/// @endcond
HbInputFocusObject::HbInputFocusObject(QObject *focusedObject)
: d_ptr(new HbInputFocusObjectPrivate(focusedObject))
{
+ Q_D(HbInputFocusObject);
+ d->q_ptr = this;
+
if (focusedObject) {
HbEvent *event = new HbEvent(HbEvent::InputMethodFocusIn);
QCoreApplication::sendEvent(focusedObject, event);
delete event;
+
+ HbMainWindow *mainWindow = d->mainWindow();
+ if (mainWindow) {
+ connect(mainWindow, SIGNAL(aboutToChangeOrientation()), this, SIGNAL(aboutToChangeOrientation()));
+ connect(mainWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SIGNAL(orientationChanged()));
+ }
}
}
-
HbInputFocusObject::~HbInputFocusObject()
{
Q_D(HbInputFocusObject);
@@ -176,7 +225,6 @@
}
}
-
/*!
Posts given event to focused editor in an asynchronous manner.
*/
@@ -703,5 +751,23 @@
}
}
+/*!
+Returns the screen orientation in editor widget's context. For widgets
+living in HbMainWindow, it is main window's orientation. For everything
+else, it is device profile's screen orientation.
+*/
+Qt::Orientation HbInputFocusObject::orientation() const
+{
+ Q_D(const HbInputFocusObject);
+
+ HbMainWindow *mainWindow = d->mainWindow();
+ if (mainWindow) {
+ return mainWindow->orientation();
+ }
+
+ return HbDeviceProfile::current().orientation();
+}
+
+#include "moc_hbinputfocusobject.cpp"
+
// End of file
-