void MInputContext::setFocusWidget(QWidget *focused) { QObject *focusedObject = focused; QGraphicsItem *focusItem = 0; qDebug() << "MInputContext" << "in" << __PRETTY_FUNCTION__ << focused; QInputContext::setFocusWidget(focused); // get detailed focus information from inside qgraphicsview QGraphicsView *graphicsView = qobject_cast<QGraphicsView *>(focusWidget()); if (graphicsView && graphicsView->scene()) { focusItem = graphicsView->scene()->focusItem(); if (focusItem) { focusedObject = dynamic_cast<QObject *>(focusItem); } } const QMap<QString, QVariant> stateInformation = getStateInformation(); if (focused) { // for non-null focus widgets, we'll have this context activated if (!active) { imServer->activateContext(); active = true; #ifdef HAVE_MEEGOTOUCH // Notify whatever application's orientation is currently. notifyOrientationChanged(currOrientation); #endif } imServer->updateWidgetInformation(stateInformation, true); // check if copyable text is selected Qt::InputMethodQuery query = Qt::ImCurrentSelection; QVariant queryResult = focused->inputMethodQuery(query); if (queryResult.isValid()) { copyAvailable = !queryResult.toString().isEmpty(); } if (focusItem) { copyAllowed = !(focusItem->inputMethodHints() & Qt::ImhHiddenText); } else { copyAllowed = !(focused->inputMethodHints() & Qt::ImhHiddenText); } pasteAvailable = !QApplication::clipboard()->text().isEmpty(); connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(handleClipboardDataChange()), Qt::UniqueConnection); } else { copyAvailable = false; copyAllowed = false; imServer->updateWidgetInformation(stateInformation, true); disconnect(QApplication::clipboard(), SIGNAL(dataChanged()), this, 0); } // show or hide Copy/Paste button on input method server notifyCopyPasteState(); if (inputPanelState == InputPanelShowPending && focused) { imServer->showInputMethod(); inputPanelState = InputPanelShown; } if (connectedObject) { connectedObject->disconnect(this); connectedObject = 0; } if (focusedObject && focusedObject->metaObject()) { if (focusedObject->metaObject()->indexOfSignal("copyAvailable(bool)") != -1) { // for MTextEdit connect(focusedObject, SIGNAL(copyAvailable(bool)), this, SLOT(handleCopyAvailabilityChange(bool))); connectedObject = focusedObject; } else if (focusedObject->metaObject()->indexOfSignal("selectedTextChanged()") != -1) {