Kennwortmanager KeePassX Weiterentwicklung der Version 1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
keepassx1/src/lib/ShortcutWidget.cpp

127 lines
3.9 KiB

/***************************************************************************
* Copyright (C) 2005-2008 by Felix Geyer *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; version 2 of the License. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "ShortcutWidget.h"
#if defined(GLOBAL_AUTOTYPE) && defined(Q_WS_X11)
#include <QKeyEvent>
#include <QX11Info>
#include <QPalette>
#include "HelperX11.h"
#include "AutoTypeGlobalX11.h"
ShortcutWidget::ShortcutWidget(QWidget* parent) : QLineEdit(parent), lock(false), failed(false){
}
Shortcut ShortcutWidget::shortcut(){
if (lock)
return pShortcut;
else
return Shortcut();
}
void ShortcutWidget::setShortcut(const Shortcut& s){
lock = true;
displayShortcut(s.key, false, s.ctrl, s.shift, s.alt, s.altgr, s.win);
}
void ShortcutWidget::keyPressEvent(QKeyEvent* event){
keyEvent(event, false);
event->accept();
}
void ShortcutWidget::keyReleaseEvent(QKeyEvent* event){
keyEvent(event, true);
event->accept();
}
void ShortcutWidget::keyEvent(QKeyEvent* event, bool release){
if (release && lock)
return;
AutoTypeGlobalX11* autoTypeGlobal = static_cast<AutoTypeGlobalX11*>(autoType);
unsigned int mods = HelperX11::keyboardModifiers(QX11Info::display());
displayShortcut(event->nativeVirtualKey(), release, mods & ControlMask,
mods & ShiftMask, mods & autoTypeGlobal->maskAlt(),
mods & autoTypeGlobal->maskAltGr(), mods & autoTypeGlobal->maskMeta());
}
void ShortcutWidget::displayShortcut(quint32 key, bool release, bool ctrl, bool shift, bool alt, bool altgr, bool win){
QString text;
if (ctrl)
text.append(tr("Ctrl")).append(" + ");
if (shift)
text.append(tr("Shift")).append(" + ");
if (alt)
text.append(tr("Alt")).append(" + ");
if (altgr)
text.append(tr("AltGr")).append(" + ");
if (win)
text.append(tr("Win")).append(" + ");
if ( !release && (key<XK_Shift_L || key>XK_Hyper_R) && (key<XK_ISO_Lock || key>XK_ISO_Last_Group_Lock) ){
// converts key into orignal key on the keyboard
KeySym keysym = XKeycodeToKeysym(QX11Info::display(), XKeysymToKeycode(QX11Info::display(),key), 0);
if (keysym>=0xfd00 && keysym<=0xffff){
text.append(XKeysymToString(keysym));
}
else{
text.append(static_cast<quint32>(keysym));
}
lock = ctrl || shift || alt || altgr || win;
if (lock){
pShortcut.key = keysym;
pShortcut.ctrl = ctrl;
pShortcut.shift = shift;
pShortcut.alt = alt;
pShortcut.altgr = altgr;
pShortcut.win = win;
failed = autoType->registerGlobalShortcut(pShortcut);
if (!failed)
setBackgroundColor(QColor(255, 150, 150));
else
setBackgroundColor(Qt::white);
}
}
else {
lock = false;
if (failed)
setBackgroundColor(Qt::white);
}
setText(text);
}
void ShortcutWidget::setBackgroundColor(const QColor& c){
QPalette p( palette() );
p.setColor(backgroundRole(), c);
setPalette(p);
}
#else
ShortcutWidget::ShortcutWidget(QWidget* parent) : QLineEdit(parent){
}
#endif