mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 02:36:34 +01:00
WebView: Fix text edit shortcuts not working on non-latin keyboard layout
Closes #1494
This commit is contained in:
parent
bcc9f3f431
commit
f6b679585e
@ -67,17 +67,15 @@ PopupWindow::PopupWindow(PopupWebView* view)
|
|||||||
m_menuBar->addMenu(menuFile);
|
m_menuBar->addMenu(menuFile);
|
||||||
|
|
||||||
m_menuEdit = new QMenu(tr("Edit"));
|
m_menuEdit = new QMenu(tr("Edit"));
|
||||||
m_menuEdit->addAction(QIcon::fromTheme("edit-undo"), tr("&Undo"), m_view, SLOT(editUndo()))->setShortcut(QKeySequence("Ctrl+Z"));
|
m_menuEdit->addAction(m_view->pageAction(QWebPage::Undo));
|
||||||
m_menuEdit->addAction(QIcon::fromTheme("edit-redo"), tr("&Redo"), m_view, SLOT(editRedo()))->setShortcut(QKeySequence("Ctrl+Shift+Z"));
|
m_menuEdit->addAction(m_view->pageAction(QWebPage::Redo));
|
||||||
m_menuEdit->addSeparator();
|
m_menuEdit->addSeparator();
|
||||||
m_menuEdit->addAction(QIcon::fromTheme("edit-cut"), tr("&Cut"), m_view, SLOT(editCut()))->setShortcut(QKeySequence("Ctrl+X"));
|
m_menuEdit->addAction(m_view->pageAction(QWebPage::Cut));
|
||||||
m_menuEdit->addAction(QIcon::fromTheme("edit-copy"), tr("C&opy"), m_view, SLOT(editCopy()))->setShortcut(QKeySequence("Ctrl+C"));
|
m_menuEdit->addAction(m_view->pageAction(QWebPage::Copy));
|
||||||
m_menuEdit->addAction(QIcon::fromTheme("edit-paste"), tr("&Paste"), m_view, SLOT(editPaste()))->setShortcut(QKeySequence("Ctrl+V"));
|
m_menuEdit->addAction(m_view->pageAction(QWebPage::Paste));
|
||||||
m_menuEdit->addSeparator();
|
m_menuEdit->addSeparator();
|
||||||
m_menuEdit->addAction(QIcon::fromTheme("edit-select-all"), tr("Select All"), m_view, SLOT(editSelectAll()))->setShortcut(QKeySequence("Ctrl+A"));
|
m_menuEdit->addAction(m_view->pageAction(QWebPage::SelectAll));
|
||||||
m_menuEdit->addAction(QIcon::fromTheme("edit-find"), tr("Find"), this, SLOT(searchOnPage()))->setShortcut(QKeySequence("Ctrl+F"));
|
m_menuEdit->addAction(QIcon::fromTheme("edit-find"), tr("Find"), this, SLOT(searchOnPage()))->setShortcut(QKeySequence("Ctrl+F"));
|
||||||
connect(m_menuEdit, SIGNAL(aboutToShow()), this, SLOT(aboutToShowEditMenu()));
|
|
||||||
connect(m_menuEdit, SIGNAL(aboutToHide()), this, SLOT(aboutToHideEditMenu()));
|
|
||||||
m_menuBar->addMenu(m_menuEdit);
|
m_menuBar->addMenu(m_menuEdit);
|
||||||
|
|
||||||
m_menuView = new QMenu(tr("View"));
|
m_menuView = new QMenu(tr("View"));
|
||||||
@ -108,8 +106,6 @@ PopupWindow::PopupWindow(PopupWebView* view)
|
|||||||
m_layout->addWidget(m_statusBar);
|
m_layout->addWidget(m_statusBar);
|
||||||
setLayout(m_layout);
|
setLayout(m_layout);
|
||||||
|
|
||||||
aboutToHideEditMenu();
|
|
||||||
|
|
||||||
connect(m_view, SIGNAL(showNotification(QWidget*)), this, SLOT(showNotification(QWidget*)));
|
connect(m_view, SIGNAL(showNotification(QWidget*)), this, SLOT(showNotification(QWidget*)));
|
||||||
connect(m_view, SIGNAL(titleChanged(QString)), this, SLOT(titleChanged()));
|
connect(m_view, SIGNAL(titleChanged(QString)), this, SLOT(titleChanged()));
|
||||||
connect(m_view, SIGNAL(urlChanged(QUrl)), m_locationBar, SLOT(showUrl(QUrl)));
|
connect(m_view, SIGNAL(urlChanged(QUrl)), m_locationBar, SLOT(showUrl(QUrl)));
|
||||||
@ -214,30 +210,6 @@ void PopupWindow::closeEvent(QCloseEvent* event)
|
|||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PopupWindow::aboutToShowEditMenu()
|
|
||||||
{
|
|
||||||
m_menuEdit->actions().at(0)->setEnabled(m_view->pageAction(QWebPage::Undo)->isEnabled());
|
|
||||||
m_menuEdit->actions().at(1)->setEnabled(m_view->pageAction(QWebPage::Redo)->isEnabled());
|
|
||||||
// Separator
|
|
||||||
m_menuEdit->actions().at(3)->setEnabled(m_view->pageAction(QWebPage::Cut)->isEnabled());
|
|
||||||
m_menuEdit->actions().at(4)->setEnabled(m_view->pageAction(QWebPage::Copy)->isEnabled());
|
|
||||||
m_menuEdit->actions().at(5)->setEnabled(m_view->pageAction(QWebPage::Paste)->isEnabled());
|
|
||||||
// Separator
|
|
||||||
m_menuEdit->actions().at(7)->setEnabled(m_view->pageAction(QWebPage::SelectAll)->isEnabled());
|
|
||||||
}
|
|
||||||
|
|
||||||
void PopupWindow::aboutToHideEditMenu()
|
|
||||||
{
|
|
||||||
m_menuEdit->actions().at(0)->setEnabled(false);
|
|
||||||
m_menuEdit->actions().at(1)->setEnabled(false);
|
|
||||||
// Separator
|
|
||||||
m_menuEdit->actions().at(3)->setEnabled(false);
|
|
||||||
m_menuEdit->actions().at(4)->setEnabled(false);
|
|
||||||
m_menuEdit->actions().at(5)->setEnabled(false);
|
|
||||||
// Separator
|
|
||||||
m_menuEdit->actions().at(7)->setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PopupWindow::savePageScreen()
|
void PopupWindow::savePageScreen()
|
||||||
{
|
{
|
||||||
PageScreen* pageScreen = new PageScreen(m_view, this);
|
PageScreen* pageScreen = new PageScreen(m_view, this);
|
||||||
|
@ -59,9 +59,6 @@ private slots:
|
|||||||
void loadProgress(int value);
|
void loadProgress(int value);
|
||||||
void loadFinished();
|
void loadFinished();
|
||||||
|
|
||||||
void aboutToShowEditMenu();
|
|
||||||
void aboutToHideEditMenu();
|
|
||||||
|
|
||||||
void savePageScreen();
|
void savePageScreen();
|
||||||
void searchOnPage();
|
void searchOnPage();
|
||||||
|
|
||||||
|
@ -58,9 +58,6 @@ WebView::WebView(QWidget* parent)
|
|||||||
, m_progress(0)
|
, m_progress(0)
|
||||||
, m_clickedFrame(0)
|
, m_clickedFrame(0)
|
||||||
, m_page(0)
|
, m_page(0)
|
||||||
, m_actionReload(0)
|
|
||||||
, m_actionStop(0)
|
|
||||||
, m_actionsInitialized(false)
|
|
||||||
, m_disableTouchMocking(false)
|
, m_disableTouchMocking(false)
|
||||||
, m_isReloading(false)
|
, m_isReloading(false)
|
||||||
, m_hasRss(false)
|
, m_hasRss(false)
|
||||||
@ -167,6 +164,9 @@ void WebView::setPage(QWebPage* page)
|
|||||||
// Set default zoom level
|
// Set default zoom level
|
||||||
zoomReset();
|
zoomReset();
|
||||||
|
|
||||||
|
// Actions needs to be initialized for every QWebPage change
|
||||||
|
initializeActions();
|
||||||
|
|
||||||
mApp->plugins()->emitWebPageCreated(m_page);
|
mApp->plugins()->emitWebPageCreated(m_page);
|
||||||
|
|
||||||
// Set white background by default.
|
// Set white background by default.
|
||||||
@ -446,11 +446,6 @@ void WebView::slotLoadStarted()
|
|||||||
m_isLoading = true;
|
m_isLoading = true;
|
||||||
m_progress = 0;
|
m_progress = 0;
|
||||||
|
|
||||||
if (m_actionsInitialized) {
|
|
||||||
m_actionStop->setEnabled(true);
|
|
||||||
m_actionReload->setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_rssChecked = false;
|
m_rssChecked = false;
|
||||||
emit rssChanged(false);
|
emit rssChanged(false);
|
||||||
}
|
}
|
||||||
@ -469,11 +464,6 @@ void WebView::slotLoadFinished()
|
|||||||
m_isLoading = false;
|
m_isLoading = false;
|
||||||
m_progress = 100;
|
m_progress = 100;
|
||||||
|
|
||||||
if (m_actionsInitialized) {
|
|
||||||
m_actionStop->setEnabled(false);
|
|
||||||
m_actionReload->setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_isReloading) {
|
if (!m_isReloading) {
|
||||||
mApp->history()->addHistoryEntry(this);
|
mApp->history()->addHistoryEntry(this);
|
||||||
}
|
}
|
||||||
@ -873,35 +863,6 @@ void WebView::createSearchEngine()
|
|||||||
|
|
||||||
void WebView::createContextMenu(QMenu* menu, const QWebHitTestResult &hitTest, const QPoint &pos)
|
void WebView::createContextMenu(QMenu* menu, const QWebHitTestResult &hitTest, const QPoint &pos)
|
||||||
{
|
{
|
||||||
if (!m_actionsInitialized) {
|
|
||||||
m_actionsInitialized = true;
|
|
||||||
|
|
||||||
pageAction(QWebPage::Cut)->setIcon(QIcon::fromTheme("edit-cut"));
|
|
||||||
pageAction(QWebPage::Cut)->setText(tr("Cut"));
|
|
||||||
pageAction(QWebPage::Copy)->setIcon(QIcon::fromTheme("edit-copy"));
|
|
||||||
pageAction(QWebPage::Copy)->setText(tr("Copy"));
|
|
||||||
pageAction(QWebPage::Paste)->setIcon(QIcon::fromTheme("edit-paste"));
|
|
||||||
pageAction(QWebPage::Paste)->setText(tr("Paste"));
|
|
||||||
pageAction(QWebPage::SelectAll)->setIcon(QIcon::fromTheme("edit-select-all"));
|
|
||||||
pageAction(QWebPage::SelectAll)->setText(tr("Select All"));
|
|
||||||
|
|
||||||
pageAction(QWebPage::SetTextDirectionDefault)->setText(tr("Default"));
|
|
||||||
pageAction(QWebPage::SetTextDirectionLeftToRight)->setText(tr("Left to Right"));
|
|
||||||
pageAction(QWebPage::SetTextDirectionRightToLeft)->setText(tr("Right to Left"));
|
|
||||||
pageAction(QWebPage::ToggleBold)->setText(tr("Bold"));
|
|
||||||
pageAction(QWebPage::ToggleItalic)->setText(tr("Italic"));
|
|
||||||
pageAction(QWebPage::ToggleUnderline)->setText(tr("Underline"));
|
|
||||||
|
|
||||||
m_actionReload = new QAction(QIcon::fromTheme(QSL("view-refresh")), tr("&Reload"), this);
|
|
||||||
m_actionStop = new QAction(QIcon::fromTheme(QSL("process-stop")), tr("S&top"), this);
|
|
||||||
|
|
||||||
connect(m_actionReload, SIGNAL(triggered()), this, SLOT(reload()));
|
|
||||||
connect(m_actionStop, SIGNAL(triggered()), this, SLOT(stop()));
|
|
||||||
|
|
||||||
m_actionReload->setEnabled(!isLoading());
|
|
||||||
m_actionStop->setEnabled(isLoading());
|
|
||||||
}
|
|
||||||
|
|
||||||
// cppcheck-suppress variableScope
|
// cppcheck-suppress variableScope
|
||||||
int spellCheckActionCount = 0;
|
int spellCheckActionCount = 0;
|
||||||
|
|
||||||
@ -932,11 +893,7 @@ void WebView::createContextMenu(QMenu* menu, const QWebHitTestResult &hitTest, c
|
|||||||
// Apparently createStandardContextMenu() can return null pointer
|
// Apparently createStandardContextMenu() can return null pointer
|
||||||
if (pageMenu) {
|
if (pageMenu) {
|
||||||
if (qzSettings->enableFormsUndoRedo) {
|
if (qzSettings->enableFormsUndoRedo) {
|
||||||
pageAction(QWebPage::Undo)->setIcon(QIcon::fromTheme("edit-undo"));
|
|
||||||
pageAction(QWebPage::Undo)->setText(tr("Undo"));
|
|
||||||
menu->addAction(pageAction(QWebPage::Undo));
|
menu->addAction(pageAction(QWebPage::Undo));
|
||||||
pageAction(QWebPage::Redo)->setIcon(QIcon::fromTheme("edit-redo"));
|
|
||||||
pageAction(QWebPage::Redo)->setText(tr("Redo"));
|
|
||||||
menu->addAction(pageAction(QWebPage::Redo));
|
menu->addAction(pageAction(QWebPage::Redo));
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
}
|
}
|
||||||
@ -960,7 +917,7 @@ void WebView::createContextMenu(QMenu* menu, const QWebHitTestResult &hitTest, c
|
|||||||
|
|
||||||
if (act == pageAction(QWebPage::Paste)) {
|
if (act == pageAction(QWebPage::Paste)) {
|
||||||
QAction* a = menu->addAction(QIcon::fromTheme("edit-delete"), tr("Delete"), this, SLOT(editDelete()));
|
QAction* a = menu->addAction(QIcon::fromTheme("edit-delete"), tr("Delete"), this, SLOT(editDelete()));
|
||||||
a->setEnabled(!selectedText().isEmpty());
|
a->setShortcut(QKeySequence("Del"));
|
||||||
}
|
}
|
||||||
|
|
||||||
++i;
|
++i;
|
||||||
@ -1018,8 +975,8 @@ void WebView::createPageContextMenu(QMenu* menu, const QPoint &pos)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
menu->addAction(m_actionReload);
|
menu->addAction(pageAction(QWebPage::Reload));
|
||||||
menu->addAction(m_actionStop);
|
menu->addAction(pageAction(QWebPage::Stop));
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
|
|
||||||
if (frameAtPos && page()->mainFrame() != frameAtPos) {
|
if (frameAtPos && page()->mainFrame() != frameAtPos) {
|
||||||
@ -1247,6 +1204,62 @@ void WebView::reloadAllSpeedDials()
|
|||||||
page()->mainFrame()->evaluateJavaScript("reloadAll()");
|
page()->mainFrame()->evaluateJavaScript("reloadAll()");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebView::initializeActions()
|
||||||
|
{
|
||||||
|
QAction* undoAction = pageAction(QWebPage::Undo);
|
||||||
|
undoAction->setText(tr("&Undo"));
|
||||||
|
undoAction->setShortcut(QKeySequence("Ctrl+Z"));
|
||||||
|
undoAction->setIcon(QIcon::fromTheme(QSL("edit-undo")));
|
||||||
|
|
||||||
|
QAction* redoAction = pageAction(QWebPage::Redo);
|
||||||
|
redoAction->setText(tr("&Redo"));
|
||||||
|
redoAction->setShortcut(QKeySequence("Ctrl+Shift+Z"));
|
||||||
|
redoAction->setIcon(QIcon::fromTheme(QSL("edit-redo")));
|
||||||
|
|
||||||
|
QAction* cutAction = pageAction(QWebPage::Cut);
|
||||||
|
cutAction->setText(tr("&Cut"));
|
||||||
|
cutAction->setShortcut(QKeySequence("Ctrl+X"));
|
||||||
|
cutAction->setIcon(QIcon::fromTheme(QSL("edit-cut")));
|
||||||
|
|
||||||
|
QAction* copyAction = pageAction(QWebPage::Copy);
|
||||||
|
copyAction->setText(tr("&Copy"));
|
||||||
|
copyAction->setShortcut(QKeySequence("Ctrl+C"));
|
||||||
|
copyAction->setIcon(QIcon::fromTheme(QSL("edit-copy")));
|
||||||
|
|
||||||
|
QAction* pasteAction = pageAction(QWebPage::Paste);
|
||||||
|
pasteAction->setText(tr("&Paste"));
|
||||||
|
pasteAction->setShortcut(QKeySequence("Ctrl+V"));
|
||||||
|
pasteAction->setIcon(QIcon::fromTheme(QSL("edit-paste")));
|
||||||
|
|
||||||
|
QAction* selectAllAction = pageAction(QWebPage::SelectAll);
|
||||||
|
selectAllAction->setText(tr("Select All"));
|
||||||
|
selectAllAction->setShortcut(QKeySequence("Ctrl+A"));
|
||||||
|
selectAllAction->setIcon(QIcon::fromTheme(QSL("edit-select-all")));
|
||||||
|
|
||||||
|
QAction* reloadAction = pageAction(QWebPage::Reload);
|
||||||
|
reloadAction->setText(tr("&Reload"));
|
||||||
|
reloadAction->setIcon(QIcon::fromTheme(QSL("view-refresh")));
|
||||||
|
|
||||||
|
QAction* stopAction = pageAction(QWebPage::Stop);
|
||||||
|
stopAction->setText(tr("S&top"));
|
||||||
|
stopAction->setIcon(QIcon::fromTheme(QSL("process-stop")));
|
||||||
|
|
||||||
|
pageAction(QWebPage::SetTextDirectionDefault)->setText(tr("Default"));
|
||||||
|
pageAction(QWebPage::SetTextDirectionLeftToRight)->setText(tr("Left to Right"));
|
||||||
|
pageAction(QWebPage::SetTextDirectionRightToLeft)->setText(tr("Right to Left"));
|
||||||
|
pageAction(QWebPage::ToggleBold)->setText(tr("Bold"));
|
||||||
|
pageAction(QWebPage::ToggleItalic)->setText(tr("Italic"));
|
||||||
|
pageAction(QWebPage::ToggleUnderline)->setText(tr("Underline"));
|
||||||
|
|
||||||
|
// Make action shortcuts available for webview
|
||||||
|
addAction(undoAction);
|
||||||
|
addAction(redoAction);
|
||||||
|
addAction(cutAction);
|
||||||
|
addAction(copyAction);
|
||||||
|
addAction(pasteAction);
|
||||||
|
addAction(selectAllAction);
|
||||||
|
}
|
||||||
|
|
||||||
void WebView::wheelEvent(QWheelEvent* event)
|
void WebView::wheelEvent(QWheelEvent* event)
|
||||||
{
|
{
|
||||||
if (mApp->plugins()->processWheelEvent(Qz::ON_WebView, this, event)) {
|
if (mApp->plugins()->processWheelEvent(Qz::ON_WebView, this, event)) {
|
||||||
@ -1389,22 +1402,6 @@ void WebView::keyPressEvent(QKeyEvent* event)
|
|||||||
return QWebView::keyPressEvent(event);
|
return QWebView::keyPressEvent(event);
|
||||||
|
|
||||||
switch (eventKey) {
|
switch (eventKey) {
|
||||||
case Qt::Key_C:
|
|
||||||
if (event->modifiers() == Qt::ControlModifier) {
|
|
||||||
triggerPageAction(QWebPage::Copy);
|
|
||||||
event->accept();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Qt::Key_A:
|
|
||||||
if (event->modifiers() == Qt::ControlModifier) {
|
|
||||||
editSelectAll();
|
|
||||||
event->accept();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Qt::Key_Up:
|
case Qt::Key_Up:
|
||||||
if (event->modifiers() & Qt::ShiftModifier) {
|
if (event->modifiers() & Qt::ShiftModifier) {
|
||||||
triggerPageAction(QWebPage::SelectPreviousLine);
|
triggerPageAction(QWebPage::SelectPreviousLine);
|
||||||
|
@ -183,6 +183,8 @@ private slots:
|
|||||||
void reloadAllSpeedDials();
|
void reloadAllSpeedDials();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void initializeActions();
|
||||||
|
|
||||||
QList<int> m_zoomLevels;
|
QList<int> m_zoomLevels;
|
||||||
int m_currentZoomLevel;
|
int m_currentZoomLevel;
|
||||||
|
|
||||||
@ -199,8 +201,6 @@ private:
|
|||||||
QUrl m_clickedUrl;
|
QUrl m_clickedUrl;
|
||||||
|
|
||||||
WebPage* m_page;
|
WebPage* m_page;
|
||||||
QAction* m_actionReload;
|
|
||||||
QAction* m_actionStop;
|
|
||||||
bool m_actionsInitialized;
|
bool m_actionsInitialized;
|
||||||
|
|
||||||
bool m_disableTouchMocking;
|
bool m_disableTouchMocking;
|
||||||
|
Loading…
Reference in New Issue
Block a user