diff -r 923ff622b8b9 -r 4633027730f5 src/hbcore/inputfw/hbinputfocusobject.cpp --- 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 mFocusedObject; HbEditorInterface mEditorInterface; QString mPreEditString; }; +HbMainWindow *HbInputFocusObjectPrivate::mainWindow() const +{ + QWidget *qWidgetObject = qobject_cast(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(mFocusedObject); + } + + if (graphicsObject) { + if (graphicsObject->scene()) { + QList views = graphicsObject->scene()->views(); + foreach (QGraphicsView *view, views) { + HbMainWindow *mainWindow = qobject_cast(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 -