Merge 0.4 branch to trunk

git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@319 b624d157-de02-0410-bad0-e51aec6abb33
master
sniperbeamer 16 years ago
parent 82f4fc4749
commit 8ec1eeefa4
  1. BIN
      share/keepassx/icons/go-home.png
  2. BIN
      share/keepassx/icons/go-next.png
  3. BIN
      share/keepassx/icons/go-previous.png
  4. BIN
      share/keepassx/icons/help_about.png
  5. 10
      src/Application_X11.cpp
  6. 3
      src/CMakeLists.txt
  7. 9
      src/Kdb3Database.cpp
  8. 4
      src/KpxConfig.h
  9. 2
      src/crypto/twofish.cpp
  10. 2
      src/dialogs/AboutDlg.cpp
  11. 11
      src/dialogs/HelpDlg.cpp
  12. 15
      src/dialogs/HelpDlg.h
  13. 12
      src/dialogs/SelectIconDlg.cpp
  14. 3
      src/dialogs/SettingsDlg.cpp
  15. 155
      src/forms/AboutDlg.ui
  16. 202
      src/forms/HelpDlg.ui
  17. 540
      src/forms/MainWindow.ui
  18. 832
      src/forms/SettingsDlg.ui
  19. 3
      src/keepassx.h
  20. 31
      src/lib/AutoTypeGlobalX11.cpp
  21. 3
      src/lib/AutoTypeGlobalX11.h
  22. 19
      src/lib/AutoTypeX11.cpp
  23. 4
      src/lib/AutoTypeX11.h
  24. 20
      src/lib/EntryView.cpp
  25. 10
      src/lib/GroupView.cpp
  26. 1
      src/lib/GroupView.h
  27. 2
      src/main.cpp
  28. 58
      src/mainwindow.cpp
  29. 5
      src/mainwindow.h
  30. BIN
      src/res/docs/external.png
  31. 49
      src/res/docs/faq.html
  32. 20
      src/res/docs/features.html
  33. 82
      src/res/docs/index.html
  34. 50
      src/res/docs/installation.html
  35. 233
      src/res/docs/quickstart.html
  36. 46
      src/res/docs/systemreq.html
  37. 15
      src/res/resources.qrc
  38. 3
      src/src.pro
  39. 3203
      src/translations/keepassx-es_ES.ts
  40. 172
      src/translations/keepassx-it_IT.ts

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -29,6 +29,7 @@ bool KeepassApplication::x11EventFilter(XEvent* event){
if (autoType == NULL) if (autoType == NULL)
return QApplication::x11EventFilter(event); return QApplication::x11EventFilter(event);
#ifdef GLOBAL_AUTOTYPE
if (remove_invalid == 0) { if (remove_invalid == 0) {
AutoTypeGlobalX11* autoTypeGlobal = static_cast<AutoTypeGlobalX11*>(autoType); AutoTypeGlobalX11* autoTypeGlobal = static_cast<AutoTypeGlobalX11*>(autoType);
remove_invalid = ControlMask | ShiftMask | autoTypeGlobal->maskAlt() | remove_invalid = ControlMask | ShiftMask | autoTypeGlobal->maskAlt() |
@ -44,7 +45,12 @@ bool KeepassApplication::x11EventFilter(XEvent* event){
autoType->performGlobal(); autoType->performGlobal();
return true; return true;
} }
else{ #endif
return QApplication::x11EventFilter(event);
if (event->type == MappingNotify) {
dynamic_cast<AutoTypeX11*>(autoType)->updateKeymap();
remove_invalid = 0;
} }
return QApplication::x11EventFilter(event);
} }

@ -20,6 +20,7 @@ SET(keepassx_HEADERS
dialogs/EditEntryDlg.h dialogs/EditEntryDlg.h
dialogs/EditGroupDlg.h dialogs/EditGroupDlg.h
dialogs/ExpiredEntriesDlg.h dialogs/ExpiredEntriesDlg.h
dialogs/HelpDlg.h
dialogs/ManageBookmarksDlg.h dialogs/ManageBookmarksDlg.h
dialogs/PasswordDlg.h dialogs/PasswordDlg.h
dialogs/PasswordGenDlg.h dialogs/PasswordGenDlg.h
@ -76,6 +77,7 @@ SET(keepassx_SOURCES
dialogs/EditEntryDlg.cpp dialogs/EditEntryDlg.cpp
dialogs/EditGroupDlg.cpp dialogs/EditGroupDlg.cpp
dialogs/ExpiredEntriesDlg.cpp dialogs/ExpiredEntriesDlg.cpp
dialogs/HelpDlg.cpp
dialogs/ManageBookmarksDlg.cpp dialogs/ManageBookmarksDlg.cpp
dialogs/PasswordDlg.cpp dialogs/PasswordDlg.cpp
dialogs/PasswordGenDlg.cpp dialogs/PasswordGenDlg.cpp
@ -104,6 +106,7 @@ SET(keepassx_FORMS
forms/EditEntryDlg.ui forms/EditEntryDlg.ui
forms/EditGroupDlg.ui forms/EditGroupDlg.ui
forms/ExpiredEntriesDlg.ui forms/ExpiredEntriesDlg.ui
forms/HelpDlg.ui
forms/MainWindow.ui forms/MainWindow.ui
forms/ManageBookmarksDlg.ui forms/ManageBookmarksDlg.ui
forms/PasswordDlg.ui forms/PasswordDlg.ui

@ -21,6 +21,7 @@
#include "crypto/twoclass.h" #include "crypto/twoclass.h"
#include <QBuffer> #include <QBuffer>
#include <algorithm>
#define UNEXP_ERROR error=QString("Unexpected error in: %1, Line:%2").arg(__FILE__).arg(__LINE__); #define UNEXP_ERROR error=QString("Unexpected error in: %1, Line:%2").arg(__FILE__).arg(__LINE__);
@ -595,12 +596,16 @@ bool Kdb3Database::loadReal(QString filename, bool readOnly, bool differentEncod
else if(Algorithm == Twofish_Cipher){ else if(Algorithm == Twofish_Cipher){
CTwofish twofish; CTwofish twofish;
if (twofish.init(FinalKey, 32, EncryptionIV) != true){ if (twofish.init(FinalKey, 32, EncryptionIV) != true){
error=tr("Unable to initalize the twofish algorithm."); error=tr("Unable to initialize the twofish algorithm.");
LOAD_RETURN_CLEANUP LOAD_RETURN_CLEANUP
} }
crypto_size = (unsigned long)twofish.padDecrypt((quint8 *)buffer + DB_HEADER_SIZE, crypto_size = (unsigned long)twofish.padDecrypt((quint8 *)buffer + DB_HEADER_SIZE,
total_size - DB_HEADER_SIZE, (quint8 *)buffer + DB_HEADER_SIZE); total_size - DB_HEADER_SIZE, (quint8 *)buffer + DB_HEADER_SIZE);
} }
else{
error=tr("Unknown encryption algorithm.");
LOAD_RETURN_CLEANUP
}
if ((crypto_size > 2147483446) || (!crypto_size && NumGroups)){ if ((crypto_size > 2147483446) || (!crypto_size && NumGroups)){
error=tr("Decryption failed.\nThe key is wrong or the file is damaged."); error=tr("Decryption failed.\nThe key is wrong or the file is damaged.");
@ -1972,7 +1977,7 @@ int KeyTransformBenchmark::benchmark(int pMSecs){
ktbRight->start(); ktbRight->start();
ktbLeft->wait(); ktbLeft->wait();
ktbRight->wait(); ktbRight->wait();
int num = ktbLeft->rounds + ktbRight->rounds; int num = std::min(ktbLeft->rounds, ktbRight->rounds);
delete ktbLeft; delete ktbLeft;
delete ktbRight; delete ktbRight;

@ -64,7 +64,6 @@ public:
QString lastKeyLocation(){return settings.value("Options/LastKeyLocation").toString();} QString lastKeyLocation(){return settings.value("Options/LastKeyLocation").toString();}
tKeyType lastKeyType(){return stringToKeyType(settings.value("Options/LastKeyType").toString());} tKeyType lastKeyType(){return stringToKeyType(settings.value("Options/LastKeyType").toString());}
QByteArray mainWindowGeometry(); QByteArray mainWindowGeometry();
bool minimizeToTray(){return settings.value("Options/MinimizeToTray",false).toBool();}
bool minimizeTray(){return settings.value("Options/MinimizeTray",false).toBool();} bool minimizeTray(){return settings.value("Options/MinimizeTray",false).toBool();}
bool startMinimized(){return settings.value("Options/StartMinimized",false).toBool();} bool startMinimized(){return settings.value("Options/StartMinimized",false).toBool();}
bool startLocked(){return settings.value("Options/StartLocked",false).toBool();} bool startLocked(){return settings.value("Options/StartLocked",false).toBool();}
@ -101,7 +100,7 @@ public:
bool askBeforeDelete(){return settings.value("Options/AskBeforeDelete",true).toBool();} bool askBeforeDelete(){return settings.value("Options/AskBeforeDelete",true).toBool();}
#ifdef AUTOTYPE #ifdef AUTOTYPE
int autoTypePreGap(){return settings.value("Options/AutoTypePreGap",500).toInt();} int autoTypePreGap(){return settings.value("Options/AutoTypePreGap",500).toInt();}
int autoTypeKeyStrokeDelay(){return settings.value("Options/AutoTypeKeyStrokeDelay",0).toInt();} int autoTypeKeyStrokeDelay(){return settings.value("Options/AutoTypeKeyStrokeDelay",5).toInt();}
#endif #endif
#ifdef GLOBAL_AUTOTYPE #ifdef GLOBAL_AUTOTYPE
Shortcut globalShortcut(); Shortcut globalShortcut();
@ -131,7 +130,6 @@ public:
void setLastKeyLocation(const QString& value){settings.setValue("Options/LastKeyLocation",value);} void setLastKeyLocation(const QString& value){settings.setValue("Options/LastKeyLocation",value);}
void setLastKeyType(tKeyType value){settings.setValue("Options/LastKeyType",keyTypeToString(value));} void setLastKeyType(tKeyType value){settings.setValue("Options/LastKeyType",keyTypeToString(value));}
void setMainWindowGeometry(const QByteArray& value){settings.setValue("UI/MainWindowGeometry",value);} void setMainWindowGeometry(const QByteArray& value){settings.setValue("UI/MainWindowGeometry",value);}
void setMinimizeToTray(bool value){settings.setValue("Options/MinimizeToTray",value);}
void setMinimizeTray(bool value){settings.setValue("Options/MinimizeTray",value);} void setMinimizeTray(bool value){settings.setValue("Options/MinimizeTray",value);}
void setStartMinimized(bool value){settings.setValue("Options/StartMinimized",value);} void setStartMinimized(bool value){settings.setValue("Options/StartMinimized",value);}
void setStartLocked(bool value){settings.setValue("Options/StartLocked",value);} void setStartLocked(bool value){settings.setValue("Options/StartLocked",value);}

@ -1362,7 +1362,7 @@ void Twofish_prepare_key( Twofish_Byte key[], int key_len, Twofish_key * xkey )
* To stop such security disasters, we use blunt force. * To stop such security disasters, we use blunt force.
* If your program hangs here: fix the fatal routine! * If your program hangs here: fix the fatal routine!
*/ */
for(;;); /* Infinite loop, which beats being insecure. */ for(;;) ; /* Infinite loop, which beats being insecure. */
} }
/* Check for valid key length. */ /* Check for valid key length. */

@ -71,7 +71,7 @@ AboutDialog::AboutDialog(QWidget* parent):QDialog(parent)
Edit_License->setHtml(QString::fromUtf8(gpl.readAll())); Edit_License->setHtml(QString::fromUtf8(gpl.readAll()));
connect(ButtonBox, SIGNAL(accepted()), SLOT(close())); connect(ButtonBox, SIGNAL(rejected()), SLOT(close()));
} }
void AboutDialog::paintEvent(QPaintEvent *event){ void AboutDialog::paintEvent(QPaintEvent *event){

@ -0,0 +1,11 @@
#include "HelpDlg.h"
HelpDlg::HelpDlg(QWidget* parent) : QDialog(parent) {
setupUi(this);
textBrowser->setSource(QUrl("qrc:/docs/index.html"));
buttonPrevious->setIcon(getIcon("go-previous"));
buttonNext->setIcon(getIcon("go-next"));
buttonFirst->setIcon(getIcon("go-home"));
showMaximized();
}

@ -0,0 +1,15 @@
#ifndef HELPDLG_H
#define HELPDLG_H
#include "ui_HelpDlg.h"
class HelpDlg : public QDialog, private Ui_HelpDlg
{
Q_OBJECT
public:
HelpDlg(QWidget* parent);
};
#endif // HELPDLG_H

@ -41,13 +41,17 @@ CSelectIconDlg::CSelectIconDlg(IDatabase* database,int CurrentId,QWidget* parent
void CSelectIconDlg::updateView(){ void CSelectIconDlg::updateView(){
List->clear(); List->clear();
for(int i=0; i<db->numIcons(); i++){ for(int i=0; i<db->numIcons(); i++){
QListWidgetItem* item; QListWidgetItem* item = NULL;
if(i<BUILTIN_ICONS) if(i<BUILTIN_ICONS)
List->addItem(item=new QListWidgetItem(QIcon(db->icon(i)),QString::number(i))); item = new QListWidgetItem(QIcon(db->icon(i)),QString::number(i));
else else
if(!db->icon(i).isNull()) if(!db->icon(i).isNull())
List->addItem(item=new QListWidgetItem(QIcon(db->icon(i)),"["+QString::number(i)+"]")); item = new QListWidgetItem(QIcon(db->icon(i)),"["+QString::number(i)+"]");
item->setData(32,i);
if (item) {
item->setData(32,i);
List->addItem(item);
}
} }
} }

@ -34,7 +34,6 @@ CSettingsDlg::CSettingsDlg(QWidget* parent):QDialog(parent,Qt::Dialog)
connect(DialogButtons, SIGNAL( rejected() ), this, SLOT( OnCancel() ) ); connect(DialogButtons, SIGNAL( rejected() ), this, SLOT( OnCancel() ) );
connect(DialogButtons, SIGNAL( clicked(QAbstractButton*)), this, SLOT(OnOtherButton(QAbstractButton*))); connect(DialogButtons, SIGNAL( clicked(QAbstractButton*)), this, SLOT(OnOtherButton(QAbstractButton*)));
connect(CheckBox_ShowSysTrayIcon, SIGNAL( toggled(bool) ), CheckBox_CloseToTray, SLOT( setEnabled(bool) ) );
connect(CheckBox_ShowSysTrayIcon, SIGNAL( toggled(bool) ), CheckBox_MinimizeTray, SLOT( setEnabled(bool) ) ); connect(CheckBox_ShowSysTrayIcon, SIGNAL( toggled(bool) ), CheckBox_MinimizeTray, SLOT( setEnabled(bool) ) );
connect(CheckBox_OpenLast, SIGNAL( toggled(bool) ), CheckBox_RememberLastKey, SLOT( setEnabled(bool) ) ); connect(CheckBox_OpenLast, SIGNAL( toggled(bool) ), CheckBox_RememberLastKey, SLOT( setEnabled(bool) ) );
connect(CheckBox_OpenLast, SIGNAL( toggled(bool) ), CheckBox_StartMinimized, SLOT( setEnabled(bool) ) ); connect(CheckBox_OpenLast, SIGNAL( toggled(bool) ), CheckBox_StartMinimized, SLOT( setEnabled(bool) ) );
@ -82,7 +81,6 @@ CSettingsDlg::CSettingsDlg(QWidget* parent):QDialog(parent,Qt::Dialog)
CheckBox_OpenLast->setChecked(config->openLastFile()); CheckBox_OpenLast->setChecked(config->openLastFile());
CheckBox_RememberLastKey->setChecked(config->rememberLastKey()); CheckBox_RememberLastKey->setChecked(config->rememberLastKey());
CheckBox_ShowSysTrayIcon->setChecked(config->showSysTrayIcon()); CheckBox_ShowSysTrayIcon->setChecked(config->showSysTrayIcon());
CheckBox_CloseToTray->setChecked(config->minimizeToTray());
CheckBox_MinimizeTray->setChecked(config->minimizeTray()); CheckBox_MinimizeTray->setChecked(config->minimizeTray());
CheckBox_StartMinimized->setChecked(config->startMinimized()); CheckBox_StartMinimized->setChecked(config->startMinimized());
CheckBox_StartLocked->setChecked(config->startLocked()); CheckBox_StartLocked->setChecked(config->startLocked());
@ -235,7 +233,6 @@ void CSettingsDlg::apply(){
//General (1) //General (1)
config->setShowSysTrayIcon(CheckBox_ShowSysTrayIcon->isChecked()); config->setShowSysTrayIcon(CheckBox_ShowSysTrayIcon->isChecked());
config->setMinimizeToTray(CheckBox_CloseToTray->isChecked());
config->setMinimizeTray(CheckBox_MinimizeTray->isChecked()); config->setMinimizeTray(CheckBox_MinimizeTray->isChecked());
config->setStartMinimized(CheckBox_StartMinimized->isChecked()); config->setStartMinimized(CheckBox_StartMinimized->isChecked());
config->setStartLocked(CheckBox_StartLocked->isChecked()); config->setStartLocked(CheckBox_StartLocked->isChecked());

@ -1,7 +1,8 @@
<ui version="4.0" > <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AboutDlg</class> <class>AboutDlg</class>
<widget class="QDialog" name="AboutDlg" > <widget class="QDialog" name="AboutDlg">
<property name="geometry" > <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
@ -9,22 +10,22 @@
<height>305</height> <height>305</height>
</rect> </rect>
</property> </property>
<property name="windowTitle" > <property name="windowTitle">
<string>About</string> <string>About</string>
</property> </property>
<layout class="QVBoxLayout" > <layout class="QVBoxLayout">
<property name="spacing" > <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
<item> <item>
<spacer> <spacer>
<property name="orientation" > <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
<property name="sizeType" > <property name="sizeType">
<enum>QSizePolicy::Fixed</enum> <enum>QSizePolicy::Fixed</enum>
</property> </property>
<property name="sizeHint" stdset="0" > <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>20</width>
<height>50</height> <height>50</height>
@ -33,65 +34,57 @@
</spacer> </spacer>
</item> </item>
<item> <item>
<widget class="QTabWidget" name="tabWidget" > <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex" > <property name="currentIndex">
<number>0</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab" > <widget class="QWidget" name="tab">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title" >
<string>About</string> <string>About</string>
</attribute> </attribute>
<layout class="QVBoxLayout" > <layout class="QVBoxLayout">
<property name="spacing" > <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
<item> <item>
<layout class="QHBoxLayout" > <layout class="QHBoxLayout">
<item> <item>
<widget class="QLabel" name="labelAppName" > <widget class="QLabel" name="labelAppName">
<property name="sizePolicy" > <property name="sizePolicy">
<sizepolicy vsizetype="Preferred" hsizetype="Minimum" > <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="font" > <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
<weight>75</weight> <weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
<property name="text" > <property name="text">
<string>AppName</string> <string>AppName</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="labelAppFunc" > <widget class="QLabel" name="labelAppFunc">
<property name="sizePolicy" > <property name="sizePolicy">
<sizepolicy vsizetype="Preferred" hsizetype="Expanding" > <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="font" > <property name="font">
<font> <font>
<pointsize>9</pointsize> <pointsize>9</pointsize>
</font> </font>
</property> </property>
<property name="text" > <property name="text">
<string>AppFunc</string> <string>AppFunc</string>
</property> </property>
<property name="alignment" > <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
@ -99,19 +92,19 @@
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" > <layout class="QHBoxLayout">
<property name="spacing" > <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
<item> <item>
<spacer> <spacer>
<property name="orientation" > <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeType" > <property name="sizeType">
<enum>QSizePolicy::Fixed</enum> <enum>QSizePolicy::Fixed</enum>
</property> </property>
<property name="sizeHint" stdset="0" > <property name="sizeHint" stdset="0">
<size> <size>
<width>10</width> <width>10</width>
<height>20</height> <height>20</height>
@ -120,24 +113,24 @@
</spacer> </spacer>
</item> </item>
<item> <item>
<layout class="QVBoxLayout" > <layout class="QVBoxLayout">
<item> <item>
<widget class="LinkLabel" name="label_5" > <widget class="LinkLabel" name="label_5">
<property name="text" > <property name="text">
<string>http://keepassx.sourceforge.net</string> <string>http://keepassx.sourceforge.net</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="LinkLabel" name="label_3" > <widget class="LinkLabel" name="label_3">
<property name="text" > <property name="text">
<string>keepassx@gmail.com</string> <string>keepassx@gmail.com</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="label_4" > <widget class="QLabel" name="label_4">
<property name="text" > <property name="text">
<string>Copyright (C) 2005 - 2009 KeePassX Team <string>Copyright (C) 2005 - 2009 KeePassX Team
KeePassX is distributed under the terms of the KeePassX is distributed under the terms of the
General Public License (GPL) version 2.</string> General Public License (GPL) version 2.</string>
@ -150,75 +143,51 @@ General Public License (GPL) version 2.</string>
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab_2" > <widget class="QWidget" name="tab_2">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title" >
<string>Credits</string> <string>Credits</string>
</attribute> </attribute>
<layout class="QVBoxLayout" > <layout class="QVBoxLayout">
<property name="spacing" > <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
<item> <item>
<widget class="QTextEdit" name="Edit_Thanks" > <widget class="QTextEdit" name="Edit_Thanks">
<property name="readOnly" > <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab_4" > <widget class="QWidget" name="tab_4">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title" >
<string>Translation</string> <string>Translation</string>
</attribute> </attribute>
<layout class="QVBoxLayout" > <layout class="QVBoxLayout">
<property name="spacing" > <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
<item> <item>
<widget class="QTextEdit" name="Edit_Translation" > <widget class="QTextEdit" name="Edit_Translation">
<property name="readOnly" > <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab_3" > <widget class="QWidget" name="tab_3">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title" >
<string>License</string> <string>License</string>
</attribute> </attribute>
<layout class="QVBoxLayout" > <layout class="QVBoxLayout">
<property name="spacing" > <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
<item> <item>
<widget class="QTextEdit" name="Edit_License" > <widget class="QTextEdit" name="Edit_License">
<property name="readOnly" > <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
@ -228,15 +197,15 @@ General Public License (GPL) version 2.</string>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QDialogButtonBox" name="ButtonBox" > <widget class="QDialogButtonBox" name="ButtonBox">
<property name="standardButtons" > <property name="standardButtons">
<set>QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Close</set>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<layoutdefault spacing="6" margin="11" /> <layoutdefault spacing="6" margin="11"/>
<customwidgets> <customwidgets>
<customwidget> <customwidget>
<class>LinkLabel</class> <class>LinkLabel</class>

@ -0,0 +1,202 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>HelpDlg</class>
<widget class="QDialog" name="HelpDlg">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Help Contents - KeePassX</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="buttonPrevious">
<property name="toolTip">
<string>Previous Page</string>
</property>
<property name="text">
<string>Previous Page</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="buttonNext">
<property name="toolTip">
<string>Next Page</string>
</property>
<property name="text">
<string>Next Page</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="buttonFirst">
<property name="toolTip">
<string>First Page</string>
</property>
<property name="text">
<string>First Page</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QTextBrowser" name="textBrowser">
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>textBrowser</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>HelpDlg</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>HelpDlg</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonPrevious</sender>
<signal>clicked()</signal>
<receiver>textBrowser</receiver>
<slot>backward()</slot>
<hints>
<hint type="sourcelabel">
<x>64</x>
<y>17</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonNext</sender>
<signal>clicked()</signal>
<receiver>textBrowser</receiver>
<slot>forward()</slot>
<hints>
<hint type="sourcelabel">
<x>176</x>
<y>17</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonFirst</sender>
<signal>clicked()</signal>
<receiver>textBrowser</receiver>
<slot>home()</slot>
<hints>
<hint type="sourcelabel">
<x>274</x>
<y>17</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>textBrowser</sender>
<signal>backwardAvailable(bool)</signal>
<receiver>buttonPrevious</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>199</x>
<y>150</y>
</hint>
<hint type="destinationlabel">
<x>64</x>
<y>17</y>
</hint>
</hints>
</connection>
<connection>
<sender>textBrowser</sender>
<signal>forwardAvailable(bool)</signal>
<receiver>buttonNext</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>199</x>
<y>150</y>
</hint>
<hint type="destinationlabel">
<x>176</x>
<y>17</y>
</hint>
</hints>
</connection>
</connections>
</ui>

@ -1,8 +1,9 @@
<ui version="4.0" > <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author>Tarek Saidi</author> <author>Tarek Saidi</author>
<class>MainWindow</class> <class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow" > <widget class="QMainWindow" name="MainWindow">
<property name="geometry" > <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
@ -10,102 +11,94 @@
<height>468</height> <height>468</height>
</rect> </rect>
</property> </property>
<property name="mouseTracking" > <property name="mouseTracking">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="windowTitle" > <property name="windowTitle">
<string>KeePassX</string> <string>KeePassX</string>
</property> </property>
<widget class="QWidget" name="centralWidget" > <widget class="QWidget" name="centralWidget">
<property name="geometry" > <layout class="QVBoxLayout">
<rect>
<x>0</x>
<y>29</y>
<width>724</width>
<height>439</height>
</rect>
</property>
<layout class="QVBoxLayout" >
<item> <item>
<widget class="QSplitter" name="VSplitter" > <widget class="QSplitter" name="VSplitter">
<property name="orientation" > <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<widget class="KeepassGroupView" name="GroupView" > <widget class="KeepassGroupView" name="GroupView">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="sizePolicy" > <property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>30</horstretch> <horstretch>30</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="acceptDrops" > <property name="acceptDrops">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="showDropIndicator" stdset="0" > <property name="showDropIndicator" stdset="0">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="dragEnabled" > <property name="dragEnabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<column> <column>
<property name="text" > <property name="text">
<string>Groups</string> <string>Groups</string>
</property> </property>
</column> </column>
</widget> </widget>
<widget class="QSplitter" name="HSplitter" > <widget class="QSplitter" name="HSplitter">
<property name="sizePolicy" > <property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>70</horstretch> <horstretch>70</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="orientation" > <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
<widget class="KeepassEntryView" name="EntryView" > <widget class="KeepassEntryView" name="EntryView">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="sizePolicy" > <property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>70</verstretch> <verstretch>70</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="selectionMode" > <property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum> <enum>QAbstractItemView::ExtendedSelection</enum>
</property> </property>
<property name="rootIsDecorated" > <property name="rootIsDecorated">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="sortingEnabled" > <property name="sortingEnabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
<widget class="QTextBrowser" name="DetailView" > <widget class="QTextBrowser" name="DetailView">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="sizePolicy" > <property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>30</verstretch> <verstretch>30</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize" > <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
<height>30</height> <height>30</height>
</size> </size>
</property> </property>
<property name="readOnly" > <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="openLinks" > <property name="openLinks">
<bool>false</bool> <bool>false</bool>
</property> </property>
</widget> </widget>
@ -114,483 +107,480 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QMenuBar" name="menuBar" > <widget class="QMenuBar" name="menuBar">
<property name="geometry" > <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>724</width> <width>724</width>
<height>29</height> <height>24</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuHilfe" > <widget class="QMenu" name="menuHelp">
<property name="title" > <property name="title">
<string>&amp;Help</string> <string>&amp;Help</string>
</property> </property>
<addaction name="HelpHandbookAction" /> <addaction name="HelpHandbookAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="HelpAboutAction" /> <addaction name="HelpAboutAction"/>
</widget> </widget>
<widget class="QMenu" name="menuDatei" > <widget class="QMenu" name="menuFile">
<property name="title" > <property name="title">
<string>&amp;File</string> <string>&amp;File</string>
</property> </property>
<widget class="QMenu" name="menuExport" > <widget class="QMenu" name="menuExport">
<property name="title" > <property name="title">
<string>&amp;Export to...</string> <string>&amp;Export to...</string>
</property> </property>
</widget> </widget>
<widget class="QMenu" name="menuImport" > <widget class="QMenu" name="menuImport">
<property name="title" > <property name="title">
<string>&amp;Import from...</string> <string>&amp;Import from...</string>
</property> </property>
</widget> </widget>
<widget class="QMenu" name="menuBookmarks" > <widget class="QMenu" name="menuBookmarks">
<property name="title" > <property name="title">
<string>&amp;Bookmarks</string> <string>&amp;Bookmarks</string>
</property> </property>
</widget> </widget>
<addaction name="FileNewAction" /> <addaction name="FileNewAction"/>
<addaction name="FileOpenAction" /> <addaction name="FileOpenAction"/>
<addaction name="menuBookmarks" /> <addaction name="menuBookmarks"/>
<addaction name="FileCloseAction" /> <addaction name="FileCloseAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="FileSaveAction" /> <addaction name="FileSaveAction"/>
<addaction name="FileSaveAsAction" /> <addaction name="FileSaveAsAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="FileSettingsAction" /> <addaction name="FileSettingsAction"/>
<addaction name="FileChangeKeyAction" /> <addaction name="FileChangeKeyAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="menuImport" /> <addaction name="menuImport"/>
<addaction name="menuExport" /> <addaction name="menuExport"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="FileUnLockWorkspaceAction" /> <addaction name="FileUnLockWorkspaceAction"/>
<addaction name="FileExitAction" /> <addaction name="FileExitAction"/>
</widget> </widget>
<widget class="QMenu" name="menuEntries" > <widget class="QMenu" name="menuEntries">
<property name="title" > <property name="title">
<string>&amp;Entries</string> <string>&amp;Entries</string>
</property> </property>
<addaction name="EditNewEntryAction" /> <addaction name="EditNewEntryAction"/>
<addaction name="EditCloneEntryAction" /> <addaction name="EditCloneEntryAction"/>
<addaction name="EditEditEntryAction" /> <addaction name="EditEditEntryAction"/>
<addaction name="EditDeleteEntryAction" /> <addaction name="EditDeleteEntryAction"/>
<addaction name="EditAutoTypeAction" /> <addaction name="EditAutoTypeAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="EditUsernameToClipboardAction" /> <addaction name="EditUsernameToClipboardAction"/>
<addaction name="EditPasswordToClipboardAction" /> <addaction name="EditPasswordToClipboardAction"/>
<addaction name="EditOpenUrlAction" /> <addaction name="EditOpenUrlAction"/>
<addaction name="EditCopyUrlAction" /> <addaction name="EditCopyUrlAction"/>
<addaction name="EditSaveAttachmentAction" /> <addaction name="EditSaveAttachmentAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="EditSearchAction" /> <addaction name="EditSearchAction"/>
<addaction name="EditGroupSearchAction" /> <addaction name="EditGroupSearchAction"/>
</widget> </widget>
<widget class="QMenu" name="ViewMenu" > <widget class="QMenu" name="ViewMenu">
<property name="title" > <property name="title">
<string>&amp;View</string> <string>&amp;View</string>
</property> </property>
<widget class="QMenu" name="menuTool_Button_Sizes" > <widget class="QMenu" name="menuTool_Button_Sizes">
<property name="title" > <property name="title">
<string>Toolbar &amp;Icon Size</string> <string>Toolbar &amp;Icon Size</string>
</property> </property>
<addaction name="ViewToolButtonSize16Action" /> <addaction name="ViewToolButtonSize16Action"/>
<addaction name="ViewToolButtonSize22Action" /> <addaction name="ViewToolButtonSize22Action"/>
<addaction name="ViewToolButtonSize28Action" /> <addaction name="ViewToolButtonSize28Action"/>
</widget> </widget>
<widget class="QMenu" name="menuColumns" > <widget class="QMenu" name="menuColumns">
<property name="title" > <property name="title">
<string>&amp;Columns</string> <string>&amp;Columns</string>
</property> </property>
<addaction name="ViewColumnsGroupAction" /> <addaction name="ViewColumnsGroupAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="ViewColumnsTitleAction" /> <addaction name="ViewColumnsTitleAction"/>
<addaction name="ViewColumnsUsernameAction" /> <addaction name="ViewColumnsUsernameAction"/>
<addaction name="ViewColumnsUrlAction" /> <addaction name="ViewColumnsUrlAction"/>
<addaction name="ViewColumnsPasswordAction" /> <addaction name="ViewColumnsPasswordAction"/>
<addaction name="ViewColumnsCommentAction" /> <addaction name="ViewColumnsCommentAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="ViewColumnsExpireAction" /> <addaction name="ViewColumnsExpireAction"/>
<addaction name="ViewColumnsCreationAction" /> <addaction name="ViewColumnsCreationAction"/>
<addaction name="ViewColumnsLastChangeAction" /> <addaction name="ViewColumnsLastChangeAction"/>
<addaction name="ViewColumnsLastAccessAction" /> <addaction name="ViewColumnsLastAccessAction"/>
<addaction name="ViewColumnsAttachmentAction" /> <addaction name="ViewColumnsAttachmentAction"/>
</widget> </widget>
<addaction name="ViewShowEntryDetailsAction" /> <addaction name="ViewShowEntryDetailsAction"/>
<addaction name="ViewShowStatusbarAction" /> <addaction name="ViewShowStatusbarAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="ViewHideUsernamesAction" /> <addaction name="ViewHideUsernamesAction"/>
<addaction name="ViewHidePasswordsAction" /> <addaction name="ViewHidePasswordsAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="menuColumns" /> <addaction name="menuColumns"/>
<addaction name="menuTool_Button_Sizes" /> <addaction name="menuTool_Button_Sizes"/>
</widget> </widget>
<widget class="QMenu" name="menuExtras" > <widget class="QMenu" name="menuExtras">
<property name="title" > <property name="title">
<string>E&amp;xtras</string> <string>E&amp;xtras</string>
</property> </property>
<addaction name="ExtrasPasswordGenAction" /> <addaction name="ExtrasPasswordGenAction"/>
<addaction name="ExtrasShowExpiredEntriesAction" /> <addaction name="ExtrasShowExpiredEntriesAction"/>
<addaction name="ExtrasTrashCanAction" /> <addaction name="ExtrasTrashCanAction"/>
<addaction name="separator" /> <addaction name="separator"/>
<addaction name="ExtrasSettingsAction" /> <addaction name="ExtrasSettingsAction"/>
</widget> </widget>
<widget class="QMenu" name="menuGroups" > <widget class="QMenu" name="menuGroups">
<property name="title" > <property name="title">
<string>&amp;Groups</string> <string>&amp;Groups</string>
</property> </property>
<addaction name="EditNewGroupAction" /> <addaction name="EditNewGroupAction"/>
<addaction name="EditNewSubgroupAction" /> <addaction name="EditNewSubgroupAction"/>
<addaction name="EditEditGroupAction" /> <addaction name="EditEditGroupAction"/>
<addaction name="EditDeleteGroupAction" /> <addaction name="EditDeleteGroupAction"/>
<addaction name="EditGroupSortAction" /> <addaction name="EditGroupSortAction"/>
</widget> </widget>
<addaction name="menuDatei" /> <addaction name="menuFile"/>
<addaction name="menuEntries" /> <addaction name="menuEntries"/>
<addaction name="menuGroups" /> <addaction name="menuGroups"/>
<addaction name="ViewMenu" /> <addaction name="ViewMenu"/>
<addaction name="menuExtras" /> <addaction name="menuExtras"/>
<addaction name="menuHilfe" /> <addaction name="menuHelp"/>
</widget> </widget>
<action name="ManageBookmarksAction" > <action name="ManageBookmarksAction">
<property name="text" > <property name="text">
<string>&amp;Manage Bookmarks...</string> <string>&amp;Manage Bookmarks...</string>
</property> </property>
</action> </action>
<action name="FileOpenAction" > <action name="FileOpenAction">
<property name="text" > <property name="text">
<string>&amp;Open Database...</string> <string>&amp;Open Database...</string>
</property> </property>
</action> </action>
<action name="FileCloseAction" > <action name="FileCloseAction">
<property name="text" > <property name="text">
<string>&amp;Close Database</string> <string>&amp;Close Database</string>
</property> </property>
</action> </action>
<action name="FileSaveAction" > <action name="FileSaveAction">
<property name="text" > <property name="text">
<string>&amp;Save Database</string> <string>&amp;Save Database</string>
</property> </property>
</action> </action>
<action name="FileSaveAsAction" > <action name="FileSaveAsAction">
<property name="text" > <property name="text">
<string>Save Database &amp;As...</string> <string>Save Database &amp;As...</string>
</property> </property>
</action> </action>
<action name="FileSettingsAction" > <action name="FileSettingsAction">
<property name="text" > <property name="text">
<string>&amp;Database Settings...</string> <string>&amp;Database Settings...</string>
</property> </property>
</action> </action>
<action name="FileChangeKeyAction" > <action name="FileChangeKeyAction">
<property name="text" > <property name="text">
<string>Change &amp;Master Key...</string> <string>Change &amp;Master Key...</string>
</property> </property>
</action> </action>
<action name="FileUnLockWorkspaceAction" > <action name="FileUnLockWorkspaceAction">
<property name="text" > <property name="text">
<string>&amp;Lock Workspace</string> <string>&amp;Lock Workspace</string>
</property> </property>
</action> </action>
<action name="FileExitAction" > <action name="FileExitAction">
<property name="text" > <property name="text">
<string>&amp;Quit</string> <string>&amp;Quit</string>
</property> </property>
<property name="menuRole" > <property name="menuRole">
<enum>QAction::QuitRole</enum> <enum>QAction::QuitRole</enum>
</property> </property>
</action> </action>
<action name="EditNewSubgroupAction" > <action name="EditNewSubgroupAction">
<property name="text" > <property name="text">
<string>&amp;Add New Subgroup...</string> <string>&amp;Add New Subgroup...</string>
</property> </property>
</action> </action>
<action name="EditEditGroupAction" > <action name="EditEditGroupAction">
<property name="text" > <property name="text">
<string>&amp;Edit Group...</string> <string>&amp;Edit Group...</string>
</property> </property>
</action> </action>
<action name="EditDeleteGroupAction" > <action name="EditDeleteGroupAction">
<property name="text" > <property name="text">
<string>&amp;Delete Group</string> <string>&amp;Delete Group</string>
</property> </property>
</action> </action>
<action name="EditPasswordToClipboardAction" > <action name="EditPasswordToClipboardAction">
<property name="text" > <property name="text">
<string>Copy Password &amp;to Clipboard</string> <string>Copy Password &amp;to Clipboard</string>
</property> </property>
</action> </action>
<action name="EditUsernameToClipboardAction" > <action name="EditUsernameToClipboardAction">
<property name="text" > <property name="text">
<string>Copy &amp;Username to Clipboard</string> <string>Copy &amp;Username to Clipboard</string>
</property> </property>
</action> </action>
<action name="EditOpenUrlAction" > <action name="EditOpenUrlAction">
<property name="text" > <property name="text">
<string>&amp;Open URL</string> <string>&amp;Open URL</string>
</property> </property>
</action> </action>
<action name="EditSaveAttachmentAction" > <action name="EditSaveAttachmentAction">
<property name="text" > <property name="text">
<string>&amp;Save Attachment As...</string> <string>&amp;Save Attachment As...</string>
</property> </property>
</action> </action>
<action name="EditNewEntryAction" > <action name="EditNewEntryAction">
<property name="text" > <property name="text">
<string>Add &amp;New Entry...</string> <string>Add &amp;New Entry...</string>
</property> </property>
</action> </action>
<action name="EditEditEntryAction" > <action name="EditEditEntryAction">
<property name="text" > <property name="text">
<string>&amp;View/Edit Entry...</string> <string>&amp;View/Edit Entry...</string>
</property> </property>
</action> </action>
<action name="EditDeleteEntryAction" > <action name="EditDeleteEntryAction">
<property name="text" > <property name="text">
<string>De&amp;lete Entry</string> <string>De&amp;lete Entry</string>
</property> </property>
</action> </action>
<action name="EditCloneEntryAction" > <action name="EditCloneEntryAction">
<property name="text" > <property name="text">
<string>&amp;Clone Entry</string> <string>&amp;Clone Entry</string>
</property> </property>
</action> </action>
<action name="EditSearchAction" > <action name="EditSearchAction">
<property name="text" > <property name="text">
<string>Search &amp;in Database...</string> <string>Search &amp;in Database...</string>
</property> </property>
</action> </action>
<action name="EditGroupSearchAction" > <action name="EditGroupSearchAction">
<property name="text" > <property name="text">
<string>Search in this &amp;Group...</string> <string>Search in this &amp;Group...</string>
</property> </property>
</action> </action>
<action name="ViewShowEntryDetailsAction" > <action name="ViewShowEntryDetailsAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>Show &amp;Entry Details</string> <string>Show &amp;Entry Details</string>
</property> </property>
</action> </action>
<action name="ViewHideUsernamesAction" > <action name="ViewHideUsernamesAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>Hide &amp;Usernames</string> <string>Hide &amp;Usernames</string>
</property> </property>
</action> </action>
<action name="ViewHidePasswordsAction" > <action name="ViewHidePasswordsAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>Hide &amp;Passwords</string> <string>Hide &amp;Passwords</string>
</property> </property>
</action> </action>
<action name="ViewColumnsTitleAction" > <action name="ViewColumnsTitleAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;Title</string> <string>&amp;Title</string>
</property> </property>
</action> </action>
<action name="ViewColumnsUsernameAction" > <action name="ViewColumnsUsernameAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>User&amp;name</string> <string>User&amp;name</string>
</property> </property>
</action> </action>
<action name="ViewColumnsUrlAction" > <action name="ViewColumnsUrlAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;URL</string> <string>&amp;URL</string>
</property> </property>
</action> </action>
<action name="ViewColumnsPasswordAction" > <action name="ViewColumnsPasswordAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;Password</string> <string>&amp;Password</string>
</property> </property>
</action> </action>
<action name="ViewColumnsCommentAction" > <action name="ViewColumnsCommentAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;Comment</string> <string>&amp;Comment</string>
</property> </property>
</action> </action>
<action name="ViewColumnsExpireAction" > <action name="ViewColumnsExpireAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>E&amp;xpires</string> <string>E&amp;xpires</string>
</property> </property>
</action> </action>
<action name="ViewColumnsCreationAction" > <action name="ViewColumnsCreationAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>C&amp;reation</string> <string>C&amp;reation</string>
</property> </property>
</action> </action>
<action name="ViewColumnsLastChangeAction" > <action name="ViewColumnsLastChangeAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;Last Change</string> <string>&amp;Last Change</string>
</property> </property>
</action> </action>
<action name="ViewColumnsLastAccessAction" > <action name="ViewColumnsLastAccessAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>Last &amp;Access</string> <string>Last &amp;Access</string>
</property> </property>
</action> </action>
<action name="ViewColumnsAttachmentAction" > <action name="ViewColumnsAttachmentAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>A&amp;ttachment</string> <string>A&amp;ttachment</string>
</property> </property>
</action> </action>
<action name="ExtrasSettingsAction" > <action name="ExtrasSettingsAction">
<property name="text" > <property name="text">
<string>&amp;Settings...</string> <string>&amp;Settings...</string>
</property> </property>
<property name="menuRole" > <property name="menuRole">
<enum>QAction::PreferencesRole</enum> <enum>QAction::PreferencesRole</enum>
</property> </property>
</action> </action>
<action name="HelpAboutAction" > <action name="HelpAboutAction">
<property name="text" > <property name="text">
<string>&amp;About...</string> <string>&amp;About...</string>
</property> </property>
<property name="menuRole" > <property name="menuRole">
<enum>QAction::AboutRole</enum> <enum>QAction::AboutRole</enum>
</property> </property>
</action> </action>
<action name="ViewShowStatusbarAction" > <action name="ViewShowStatusbarAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>Show &amp;Statusbar</string> <string>Show &amp;Statusbar</string>
</property> </property>
</action> </action>
<action name="HelpHandbookAction" > <action name="HelpHandbookAction">
<property name="text" > <property name="text">
<string>&amp;KeePassX Handbook...</string> <string>&amp;KeePassX Handbook...</string>
</property> </property>
<property name="visible" >
<bool>false</bool>
</property>
</action> </action>
<action name="HideSearchResultsAction" > <action name="HideSearchResultsAction">
<property name="text" > <property name="text">
<string>Hide</string> <string>Hide</string>
</property> </property>
</action> </action>
<action name="EditAutoTypeAction" > <action name="EditAutoTypeAction">
<property name="text" > <property name="text">
<string>&amp;Perform AutoType</string> <string>&amp;Perform AutoType</string>
</property> </property>
</action> </action>
<action name="ViewToolButtonSize16Action" > <action name="ViewToolButtonSize16Action">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;16x16</string> <string>&amp;16x16</string>
</property> </property>
</action> </action>
<action name="ViewToolButtonSize22Action" > <action name="ViewToolButtonSize22Action">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;22x22</string> <string>&amp;22x22</string>
</property> </property>
</action> </action>
<action name="ViewToolButtonSize28Action" > <action name="ViewToolButtonSize28Action">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>2&amp;8x28</string> <string>2&amp;8x28</string>
</property> </property>
</action> </action>
<action name="FileNewAction" > <action name="FileNewAction">
<property name="text" > <property name="text">
<string>&amp;New Database...</string> <string>&amp;New Database...</string>
</property> </property>
</action> </action>
<action name="ExtrasPasswordGenAction" > <action name="ExtrasPasswordGenAction">
<property name="text" > <property name="text">
<string>&amp;Password Generator...</string> <string>&amp;Password Generator...</string>
</property> </property>
</action> </action>
<action name="ViewColumnsGroupAction" > <action name="ViewColumnsGroupAction">
<property name="checkable" > <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="checked" > <property name="checked">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text" > <property name="text">
<string>&amp;Group (search results only)</string> <string>&amp;Group (search results only)</string>
</property> </property>
</action> </action>
<action name="ExtrasShowExpiredEntriesAction" > <action name="ExtrasShowExpiredEntriesAction">
<property name="text" > <property name="text">
<string>Show &amp;Expired Entries...</string> <string>Show &amp;Expired Entries...</string>
</property> </property>
</action> </action>
<action name="ExtrasTrashCanAction" > <action name="ExtrasTrashCanAction">
<property name="text" > <property name="text">
<string>Recycle Bin...</string> <string>Recycle Bin...</string>
</property> </property>
<property name="visible" > <property name="visible">
<bool>false</bool> <bool>false</bool>
</property> </property>
</action> </action>
<action name="AddBookmarkAction" > <action name="AddBookmarkAction">
<property name="text" > <property name="text">
<string>&amp;Add Bookmark...</string> <string>&amp;Add Bookmark...</string>
</property> </property>
</action> </action>
<action name="AddThisAsBookmarkAction" > <action name="AddThisAsBookmarkAction">
<property name="text" > <property name="text">
<string>Bookmark &amp;this Database...</string> <string>Bookmark &amp;this Database...</string>
</property> </property>
</action> </action>
<action name="EditCopyUrlAction" > <action name="EditCopyUrlAction">
<property name="text" > <property name="text">
<string>Copy URL to Clipboard</string> <string>Copy URL to Clipboard</string>
</property> </property>
</action> </action>
<action name="EditNewGroupAction" > <action name="EditNewGroupAction">
<property name="text" > <property name="text">
<string>Add New Group...</string> <string>Add New Group...</string>
</property> </property>
</action> </action>
<action name="EditGroupSortAction" > <action name="EditGroupSortAction">
<property name="text" > <property name="text">
<string>Sort groups</string> <string>Sort groups</string>
</property> </property>
</action> </action>

File diff suppressed because it is too large Load Diff

@ -26,7 +26,7 @@
#define APP_CODE_NAME "keepassx" #define APP_CODE_NAME "keepassx"
#define APP_SHORT_FUNC "Password Manager" #define APP_SHORT_FUNC "Password Manager"
#define APP_LONG_FUNC "Cross Platform Password Manager" #define APP_LONG_FUNC "Cross Platform Password Manager"
#define APP_VERSION "0.4.0" #define APP_VERSION "0.4.1beta"
#define BUILTIN_ICONS 69 #define BUILTIN_ICONS 69
@ -35,7 +35,6 @@
#ifdef __cplusplus #ifdef __cplusplus
#include <cstdlib> #include <cstdlib>
#include <cmath> #include <cmath>
#include <QApplication> #include <QApplication>

@ -34,13 +34,22 @@ void initAutoType(KeepassMainWindow* mainWin) {
AutoTypeGlobalX11::AutoTypeGlobalX11(KeepassMainWindow* mainWin) : AutoTypeX11(mainWin) { AutoTypeGlobalX11::AutoTypeGlobalX11(KeepassMainWindow* mainWin) : AutoTypeX11(mainWin) {
wm_state = XInternAtom(dpy, "WM_STATE", true); wm_state = XInternAtom(dpy, "WM_STATE", true);
windowRoot = XRootWindow(dpy, mainWin->x11Info().screen()); windowRoot = XRootWindow(dpy, mainWin->x11Info().screen());
shortcut.key = 0;
focusedWindow = 0; focusedWindow = 0;
oldCode = 0;
oldMod = 0;
//windowBlacklist << "kicker" << "KDE Desktop"; //windowBlacklist << "kicker" << "KDE Desktop";
classBlacklist << "desktop_window" << "gnome-panel"; // Gnome classBlacklist << "desktop_window" << "gnome-panel"; // Gnome
classBlacklist << "kdesktop" << "kicker"; // KDE 3 classBlacklist << "kdesktop" << "kicker"; // KDE 3
classBlacklist << "Plasma"; // KDE 4
classBlacklist << "xfdesktop" << "xfce4-panel"; // Xfce 4 classBlacklist << "xfdesktop" << "xfce4-panel"; // Xfce 4
} }
void AutoTypeGlobalX11::updateKeymap() {
AutoTypeX11::updateKeymap();
registerGlobalShortcut(shortcut);
}
void AutoTypeGlobalX11::perform(IEntryHandle* entry, bool hideWindow, int nr, bool wasLocked){ void AutoTypeGlobalX11::perform(IEntryHandle* entry, bool hideWindow, int nr, bool wasLocked){
if (focusedWindow && (!hideWindow || wasLocked)) { // detect if global auto-type if (focusedWindow && (!hideWindow || wasLocked)) { // detect if global auto-type
XSetInputFocus(dpy, focusedWindow, RevertToPointerRoot, CurrentTime); XSetInputFocus(dpy, focusedWindow, RevertToPointerRoot, CurrentTime);
@ -216,12 +225,15 @@ void AutoTypeGlobalX11::performGlobal(){
} }
bool AutoTypeGlobalX11::registerGlobalShortcut(const Shortcut& s){ bool AutoTypeGlobalX11::registerGlobalShortcut(const Shortcut& s){
if (s.key==shortcut.key && s.ctrl==shortcut.ctrl && s.shift==shortcut.shift && s.alt==shortcut.alt && s.altgr==shortcut.altgr && s.win==shortcut.win) if (s.key == 0)
return true; return false;
int code=XKeysymToKeycode(dpy, HelperX11::getKeysym(s.key)); int code=XKeysymToKeycode(dpy, HelperX11::getKeysym(s.key));
uint mod=HelperX11::getShortcutModifierMask(s); uint mod=HelperX11::getShortcutModifierMask(s);
if (s.key==shortcut.key && s.ctrl==shortcut.ctrl && s.shift==shortcut.shift && s.alt==shortcut.alt && s.altgr==shortcut.altgr && s.win==shortcut.win && code==oldCode && mod==oldMod)
return true;
HelperX11::startCatchErrors(); HelperX11::startCatchErrors();
XGrabKey(dpy, code, mod, windowRoot, true, GrabModeAsync, GrabModeAsync); XGrabKey(dpy, code, mod, windowRoot, true, GrabModeAsync, GrabModeAsync);
XGrabKey(dpy, code, mod | Mod2Mask, windowRoot, true, GrabModeAsync, GrabModeAsync); XGrabKey(dpy, code, mod | Mod2Mask, windowRoot, true, GrabModeAsync, GrabModeAsync);
@ -239,6 +251,8 @@ bool AutoTypeGlobalX11::registerGlobalShortcut(const Shortcut& s){
else { else {
unregisterGlobalShortcut(); unregisterGlobalShortcut();
shortcut = s; shortcut = s;
oldCode = code;
oldMod = mod;
return true; return true;
} }
} }
@ -246,15 +260,14 @@ bool AutoTypeGlobalX11::registerGlobalShortcut(const Shortcut& s){
void AutoTypeGlobalX11::unregisterGlobalShortcut(){ void AutoTypeGlobalX11::unregisterGlobalShortcut(){
if (shortcut.key==0) return; if (shortcut.key==0) return;
int code=XKeysymToKeycode(dpy, HelperX11::getKeysym(shortcut.key)); XUngrabKey(dpy, oldCode, oldMod, windowRoot);
uint mod=HelperX11::getShortcutModifierMask(shortcut); XUngrabKey(dpy, oldCode, oldMod | Mod2Mask, windowRoot);
XUngrabKey(dpy, oldCode, oldMod | LockMask, windowRoot);
XUngrabKey(dpy, code, mod, windowRoot); XUngrabKey(dpy, oldCode, oldMod | Mod2Mask | LockMask, windowRoot);
XUngrabKey(dpy, code, mod | Mod2Mask, windowRoot);
XUngrabKey(dpy, code, mod | LockMask, windowRoot);
XUngrabKey(dpy, code, mod | Mod2Mask | LockMask, windowRoot);
shortcut.key = 0; shortcut.key = 0;
oldCode = 0;
oldMod = 0;
} }
QString AutoTypeGlobalX11::getRootGroupName(IEntryHandle* entry){ QString AutoTypeGlobalX11::getRootGroupName(IEntryHandle* entry){

@ -31,6 +31,7 @@ class AutoTypeGlobalX11 : public AutoTypeX11, public AutoTypeGlobal {
bool registerGlobalShortcut(const Shortcut& s); bool registerGlobalShortcut(const Shortcut& s);
void unregisterGlobalShortcut(); void unregisterGlobalShortcut();
QStringList getAllWindowTitles(); QStringList getAllWindowTitles();
void updateKeymap();
inline int maskAlt() { return alt_mask; }; inline int maskAlt() { return alt_mask; };
inline int maskAltGr() { return altgr_mask; }; inline int maskAltGr() { return altgr_mask; };
inline int maskMeta() { return meta_mask; }; inline int maskMeta() { return meta_mask; };
@ -44,6 +45,8 @@ class AutoTypeGlobalX11 : public AutoTypeX11, public AutoTypeGlobal {
QSet<QString> classBlacklist; QSet<QString> classBlacklist;
Atom wm_state; Atom wm_state;
Window focusedWindow; Window focusedWindow;
int oldCode;
uint oldMod;
}; };
#endif // _AUTOTYPEGLOBALX11_H_ #endif // _AUTOTYPEGLOBALX11_H_

@ -45,9 +45,16 @@ AutoTypeX11::AutoTypeX11(KeepassMainWindow* mainWin) {
altgr_mask = 0; altgr_mask = 0;
altgr_keysym = NoSymbol; altgr_keysym = NoSymbol;
updateKeymap();
reReadKeymap = false;
}
void AutoTypeX11::updateKeymap() {
ReadKeymap(); ReadKeymap();
if (!altgr_mask) if (!altgr_mask)
AddModifier(XK_Mode_switch); AddModifier(XK_Mode_switch);
if (!meta_mask)
meta_mask = Mod4Mask;
} }
void AutoTypeX11::perform(IEntryHandle* entry, bool hideWindow, int nr, bool wasLocked){ void AutoTypeX11::perform(IEntryHandle* entry, bool hideWindow, int nr, bool wasLocked){
@ -109,6 +116,14 @@ void AutoTypeX11::perform(IEntryHandle* entry, bool hideWindow, int nr, bool was
} }
} }
/* Re-read keymap before first auto-type,
seems to be necessary on X.Org Server 1.6,
when KeePassX is in autostart */
if (!reReadKeymap) {
updateKeymap();
reReadKeymap = true;
}
if (hideWindow) if (hideWindow)
mainWin->hide(); mainWin->hide();
@ -138,8 +153,6 @@ void AutoTypeX11::perform(IEntryHandle* entry, bool hideWindow, int nr, bool was
else{ else{
if (hideWindow && !(config->showSysTrayIcon() && config->minimizeTray()) ) if (hideWindow && !(config->showSysTrayIcon() && config->minimizeTray()) )
mainWin->showMinimized(); mainWin->showMinimized();
if (wasLocked)
mainWin->OnUnLockWorkspace();
} }
} }
@ -557,7 +570,7 @@ void AutoTypeX11::ReadKeymap()
XDisplayKeycodes(dpy, &min_keycode, &max_keycode); XDisplayKeycodes(dpy, &min_keycode, &max_keycode);
if (keysym_table != NULL) XFree(keysym_table); if (keysym_table != NULL) XFree(keysym_table);
keysym_table = XGetKeyboardMapping(dpy, keysym_table = XGetKeyboardMapping(dpy,
min_keycode, max_keycode - min_keycode + 1, min_keycode, max_keycode - min_keycode + 1,
&keysym_per_keycode); &keysym_per_keycode);
for (keycode = min_keycode; keycode <= max_keycode; keycode++) { for (keycode = min_keycode; keycode <= max_keycode; keycode++) {
/* if the first keysym is alphabet and the second keysym is NoSymbol, /* if the first keysym is alphabet and the second keysym is NoSymbol,

@ -39,10 +39,11 @@ class AutoTypeX11 : public AutoType {
public: public:
AutoTypeX11(KeepassMainWindow* mainWin); AutoTypeX11(KeepassMainWindow* mainWin);
void perform(IEntryHandle* entry, bool hideWindow=true, int nr=0, bool wasLocked=false); void perform(IEntryHandle* entry, bool hideWindow=true, int nr=0, bool wasLocked=false);
virtual void updateKeymap();
protected: protected:
void sleepTime(int msec); void sleepTime(int msec);
inline void sleepKeyStrokeDelay(){ sleep(config->autoTypeKeyStrokeDelay()); }; inline void sleepKeyStrokeDelay(){ sleepTime(config->autoTypeKeyStrokeDelay()); };
void templateToKeysyms(const QString& Template, QList<AutoTypeAction>& KeySymList,IEntryHandle* entry); void templateToKeysyms(const QString& Template, QList<AutoTypeAction>& KeySymList,IEntryHandle* entry);
void stringToKeysyms(const QString& string,QList<AutoTypeAction>& KeySymList); void stringToKeysyms(const QString& string,QList<AutoTypeAction>& KeySymList);
@ -63,6 +64,7 @@ class AutoTypeX11 : public AutoType {
int meta_mask; int meta_mask;
int altgr_mask; int altgr_mask;
KeySym altgr_keysym; KeySym altgr_keysym;
bool reReadKeymap;
}; };
#endif // _AUTOTYPEX11_H_ #endif // _AUTOTYPEX11_H_

@ -202,7 +202,13 @@ void KeepassEntryView::updateEntry(EntryViewItem* item){
} }
} }
if (Columns.at(4)){ if (Columns.at(4)){
item->setText(j++,entry->comment().section('\n',0,0));} QString comment = entry->comment();
int toPos = comment.indexOf(QRegExp("[\\r\\n]"));
if (toPos == -1)
item->setText(j++,comment);
else
item->setText(j++,comment.left(toPos));
}
if (Columns.at(5)){ if (Columns.at(5)){
item->setText(j++,entry->expire().dateToString(Qt::SystemLocaleDate));} item->setText(j++,entry->expire().dateToString(Qt::SystemLocaleDate));}
if (Columns.at(6)){ if (Columns.at(6)){
@ -361,8 +367,8 @@ void KeepassEntryView::OnClipboardTimeOut(){
Clipboard->clear(QClipboard::Selection); Clipboard->clear(QClipboard::Selection);
} }
#ifdef Q_WS_X11 #ifdef Q_WS_X11
QProcess::execute("dcop klipper klipper clearClipboardHistory"); QProcess::startDetached("dcop klipper klipper clearClipboardHistory");
QProcess::execute("dbus-send --type=method_call --dest=org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory"); QProcess::startDetached("dbus-send --type=method_call --dest=org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory");
#endif #endif
} }
@ -446,7 +452,13 @@ void KeepassEntryView::createItems(QList<IEntryHandle*>& entries){
} }
} }
if (Columns.at(4)){ if (Columns.at(4)){
item->setText(j++,entries[i]->comment().section('\n',0,0));} QString comment = entries[i]->comment();
int toPos = comment.indexOf(QRegExp("[\\r\\n]"));
if (toPos == -1)
item->setText(j++,comment);
else
item->setText(j++,comment.left(toPos));
}
if (Columns.at(5)){ if (Columns.at(5)){
item->setText(j++,entries[i]->expire().dateToString(Qt::SystemLocaleDate));} item->setText(j++,entries[i]->expire().dateToString(Qt::SystemLocaleDate));}
if (Columns.at(6)){ if (Columns.at(6)){

@ -162,7 +162,8 @@ void KeepassGroupView::OnEditGroup(){
void KeepassGroupView::contextMenuEvent(QContextMenuEvent* e){ void KeepassGroupView::contextMenuEvent(QContextMenuEvent* e){
if(!(GroupViewItem*)itemAt(e->pos())) if(!(GroupViewItem*)itemAt(e->pos()))
setCurrentItem(NULL); return;
e->accept(); e->accept();
if(currentItem()==SearchResultItem) if(currentItem()==SearchResultItem)
ContextMenuSearchGroup->popup(e->globalPos()); ContextMenuSearchGroup->popup(e->globalPos());
@ -191,6 +192,13 @@ void KeepassGroupView::setCurrentGroup(IGroupHandle* group){
setCurrentItem(Items[i]); setCurrentItem(Items[i]);
} }
void KeepassGroupView::selectFirstGroup(){
if (Items.isEmpty())
return;
setCurrentItem(Items[0]);
}
void KeepassGroupView::dragEnterEvent ( QDragEnterEvent * event ){ void KeepassGroupView::dragEnterEvent ( QDragEnterEvent * event ){
LastHoverItem=NULL; LastHoverItem=NULL;
InsLinePos=-1; InsLinePos=-1;

@ -37,6 +37,7 @@ class KeepassGroupView:public QTreeWidget{
void createItems(); void createItems();
void showSearchResults(); void showSearchResults();
void setCurrentGroup(IGroupHandle* group); void setCurrentGroup(IGroupHandle* group);
void selectFirstGroup();
public slots: public slots:
void createGroup(const QString& title, quint32 image, GroupViewItem* group=NULL); void createGroup(const QString& title, quint32 image, GroupViewItem* group=NULL);

@ -53,7 +53,7 @@ int main(int argc, char **argv)
QT_REQUIRE_VERSION(argc, argv, "4.3.0"); QT_REQUIRE_VERSION(argc, argv, "4.3.0");
#if defined(Q_WS_X11) && defined(GLOBAL_AUTOTYPE) #if defined(Q_WS_X11) && defined(AUTOTYPE)
QApplication* app = new KeepassApplication(argc,argv); QApplication* app = new KeepassApplication(argc,argv);
#else #else
QApplication* app = new QApplication(argc,argv); QApplication* app = new QApplication(argc,argv);

@ -17,6 +17,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
#include <QPointer>
#include <QToolBar> #include <QToolBar>
#include <QStatusBar> #include <QStatusBar>
#include "mainwindow.h" #include "mainwindow.h"
@ -40,6 +41,7 @@
//#include "dialogs/TrashCanDlg.h" //TODO TrashCan //#include "dialogs/TrashCanDlg.h" //TODO TrashCan
#include "dialogs/AddBookmarkDlg.h" #include "dialogs/AddBookmarkDlg.h"
#include "dialogs/ManageBookmarksDlg.h" #include "dialogs/ManageBookmarksDlg.h"
#include "dialogs/HelpDlg.h"
Import_KeePassX_Xml import_KeePassX_Xml; Import_KeePassX_Xml import_KeePassX_Xml;
Import_PwManager import_PwManager; Import_PwManager import_PwManager;
@ -49,7 +51,6 @@ Export_KeePassX_Xml export_KeePassX_Xml;
KeepassMainWindow::KeepassMainWindow(const QString& ArgFile,bool ArgMin,bool ArgLock,QWidget *parent, Qt::WFlags flags) :QMainWindow(parent,flags){ KeepassMainWindow::KeepassMainWindow(const QString& ArgFile,bool ArgMin,bool ArgLock,QWidget *parent, Qt::WFlags flags) :QMainWindow(parent,flags){
ShutingDown=false;
IsLocked=false; IsLocked=false;
EventOccurred=true; EventOccurred=true;
inactivityCounter=0; inactivityCounter=0;
@ -91,6 +92,7 @@ KeepassMainWindow::KeepassMainWindow(const QString& ArgFile,bool ArgMin,bool Arg
LockedCentralWidget->setVisible(false); LockedCentralWidget->setVisible(false);
setupConnections(); setupConnections();
connect(qApp, SIGNAL(commitDataRequest(QSessionManager&)), SLOT(OnShutdown(QSessionManager&)));
inactivityTimer = new QTimer(this); inactivityTimer = new QTimer(this);
inactivityTimer->setInterval(500); inactivityTimer->setInterval(500);
@ -186,7 +188,7 @@ void KeepassMainWindow::setupConnections(){
connect(ExtrasShowExpiredEntriesAction,SIGNAL(triggered(bool)),this,SLOT(OnExtrasShowExpiredEntries())); connect(ExtrasShowExpiredEntriesAction,SIGNAL(triggered(bool)),this,SLOT(OnExtrasShowExpiredEntries()));
//connect(ExtrasTrashCanAction,SIGNAL(triggered(bool)),this,SLOT(OnExtrasTrashCan())); //TODO ExtrasTrashCan //connect(ExtrasTrashCanAction,SIGNAL(triggered(bool)),this,SLOT(OnExtrasTrashCan())); //TODO ExtrasTrashCan
//connect(HelpHandbookAction,SIGNAL(triggered()),this,SLOT(OnHelpHandbook())); //TODO Handbook connect(HelpHandbookAction,SIGNAL(triggered()),this,SLOT(OnHelpHandbook()));
connect(HelpAboutAction,SIGNAL(triggered()),this,SLOT(OnHelpAbout())); connect(HelpAboutAction,SIGNAL(triggered()),this,SLOT(OnHelpAbout()));
connect(EntryView,SIGNAL(itemActivated(QTreeWidgetItem*,int)),EntryView,SLOT(OnEntryActivated(QTreeWidgetItem*,int))); connect(EntryView,SIGNAL(itemActivated(QTreeWidgetItem*,int)),EntryView,SLOT(OnEntryActivated(QTreeWidgetItem*,int)));
@ -267,8 +269,8 @@ void KeepassMainWindow::setupIcons(){
#else #else
EditAutoTypeAction->setVisible(false); EditAutoTypeAction->setVisible(false);
#endif #endif
//HelpHandbookAction->setIcon(getIcon("manual")); //TODO Handbook HelpHandbookAction->setIcon(getIcon("manual"));
HelpAboutAction->setIcon(getIcon("help")); HelpAboutAction->setIcon(getIcon("help_about"));
menuBookmarks->menuAction()->setIcon(getIcon("bookmark_folder")); menuBookmarks->menuAction()->setIcon(getIcon("bookmark_folder"));
AddThisAsBookmarkAction->setIcon(getIcon("bookmark_this")); AddThisAsBookmarkAction->setIcon(getIcon("bookmark_this"));
AddBookmarkAction->setIcon(getIcon("bookmark_add")); AddBookmarkAction->setIcon(getIcon("bookmark_add"));
@ -491,6 +493,8 @@ bool KeepassMainWindow::openDatabase(QString filename,bool IsAuto){
setStatusBarMsg(StatusBarReady); setStatusBarMsg(StatusBarReady);
inactivityCounter = 0; inactivityCounter = 0;
GroupView->selectFirstGroup();
return true; return true;
} }
@ -530,7 +534,7 @@ bool KeepassMainWindow::closeDatabase(bool lock){
db->close(); db->close();
delete db; delete db;
db=NULL; db=NULL;
if (QFile::exists(currentFile+".lock")){ if (!dbReadOnly && QFile::exists(currentFile+".lock")){
if (!QFile::remove(currentFile+".lock")) if (!QFile::remove(currentFile+".lock"))
QMessageBox::critical(this, tr("Error"), tr("Couldn't remove database lock file.")); QMessageBox::critical(this, tr("Error"), tr("Couldn't remove database lock file."));
} }
@ -939,7 +943,6 @@ void KeepassMainWindow::OnFileChangeKey(){
} }
void KeepassMainWindow::OnFileExit(){ void KeepassMainWindow::OnFileExit(){
ShutingDown=true;
close(); close();
} }
@ -1035,17 +1038,10 @@ void KeepassMainWindow::OnFileModified(){
} }
void KeepassMainWindow::closeEvent(QCloseEvent* e){ void KeepassMainWindow::closeEvent(QCloseEvent* e){
if(!ShutingDown && config->showSysTrayIcon() && config->minimizeToTray()){
e->ignore();
if (config->lockOnMinimize() && !IsLocked && FileOpen)
OnUnLockWorkspace();
hide();
return;
}
if(FileOpen && !closeDatabase()){ if(FileOpen && !closeDatabase()){
ShutingDown=false;
e->ignore(); e->ignore();
if (!isVisible())
show();
return; return;
} }
@ -1064,6 +1060,7 @@ void KeepassMainWindow::closeEvent(QCloseEvent* e){
config->setShowStatusbar(statusBar()->isVisible()); config->setShowStatusbar(statusBar()->isVisible());
delete SysTray; delete SysTray;
QMainWindow::closeEvent(e);
QApplication::quit(); QApplication::quit();
} }
@ -1136,21 +1133,20 @@ void KeepassMainWindow::OnHelpAbout(){
dlg.exec(); dlg.exec();
} }
//TODO Handbook void KeepassMainWindow::OnHelpHandbook(){
/*void KeepassMainWindow::OnHelpHandbook(){ QPointer<HelpDlg> dlg = new HelpDlg(this);
HelpBrowser->openAssistant(); dlg->exec();
delete dlg;
}
}*/
void KeepassMainWindow::OnViewShowToolbar(bool show){ void KeepassMainWindow::OnViewShowToolbar(bool show){
config->setShowToolbar(show); config->setShowToolbar(show);
toolBar->setVisible(show); toolBar->setVisible(show);
} }
void KeepassMainWindow::OnViewShowEntryDetails(bool show){ void KeepassMainWindow::OnViewShowEntryDetails(bool show){
config->setShowEntryDetails(show); config->setShowEntryDetails(show);
DetailView->setVisible(show); DetailView->setVisible(show);
} }
/*void KeepassMainWindow::OnItemExpanded(QTreeWidgetItem* item){ /*void KeepassMainWindow::OnItemExpanded(QTreeWidgetItem* item){
@ -1301,8 +1297,10 @@ void KeepassMainWindow::OnUnLockWorkspace(){
item = parent; item = parent;
} }
if (closeDatabase(true)) if (closeDatabase(true)) {
setStateFileModified(false);
setLock(); setLock();
}
else else
lockGroup.clear(); lockGroup.clear();
} }
@ -1365,6 +1363,14 @@ void KeepassMainWindow::OnInactivityTimer(){
} }
} }
void KeepassMainWindow::OnShutdown(QSessionManager& manager) {
/* QApplication::commitData() only closes visible windows,
so we need to manually close mainwindow if it's hidden */
if (manager.allowsInteraction() && !isVisible()) {
close();
}
}
void KeepassMainWindow::OnBookmarkTriggered(QAction* action){ void KeepassMainWindow::OnBookmarkTriggered(QAction* action){
if(action==AddBookmarkAction){ if(action==AddBookmarkAction){
AddBookmarkDlg dlg(this); AddBookmarkDlg dlg(this);

@ -21,6 +21,7 @@
#ifndef MAINWINDOW_H #ifndef MAINWINDOW_H
#define MAINWINDOW_H #define MAINWINDOW_H
#include <QSessionManager>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
#include "lib/EntryView.h" #include "lib/EntryView.h"
#include "lib/GroupView.h" #include "lib/GroupView.h"
@ -72,7 +73,7 @@ class KeepassMainWindow : public QMainWindow, private Ui_MainWindow{
void OnExtrasShowExpiredEntries(); void OnExtrasShowExpiredEntries();
//void OnExtrasTrashCan(); //TODO TrashCan //void OnExtrasTrashCan(); //TODO TrashCan
void OnHelpAbout(); void OnHelpAbout();
//void OnHelpHandbook(); //TODO Handbook void OnHelpHandbook();
//void OnItemExpanded(QTreeWidgetItem*); //void OnItemExpanded(QTreeWidgetItem*);
//void OnItemCollaped(QTreeWidgetItem*); //void OnItemCollaped(QTreeWidgetItem*);
void OnShowSearchResults(); void OnShowSearchResults();
@ -84,6 +85,7 @@ class KeepassMainWindow : public QMainWindow, private Ui_MainWindow{
void OnDetailViewUrlClicked(const QUrl& url); void OnDetailViewUrlClicked(const QUrl& url);
void OnLockClose(); void OnLockClose();
void OnInactivityTimer(); void OnInactivityTimer();
void OnShutdown(QSessionManager& manager);
private: private:
void closeEvent(QCloseEvent* event); void closeEvent(QCloseEvent* event);
@ -130,7 +132,6 @@ class KeepassMainWindow : public QMainWindow, private Ui_MainWindow{
QWidget* NormalCentralWidget; QWidget* NormalCentralWidget;
QWidget* LockedCentralWidget; QWidget* LockedCentralWidget;
Ui_WorkspaceLockedWidget WorkspaceLockedWidget; Ui_WorkspaceLockedWidget WorkspaceLockedWidget;
bool ShutingDown;
bool InUnLock; bool InUnLock;
QList<int> lockGroup; QList<int> lockGroup;
QDialog* unlockDlg; QDialog* unlockDlg;

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

@ -0,0 +1,49 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>KeePassX Frequently Asked Questions</title>
</head>
<body>
<a name="top" />
<h1>KeePassX Frequently Asked Questions</h1>
<a name="faq_autotype_support" />
<h3 class="question">Q: Is Auto-Type supported on Mac OS X or Windows?</h3>
<p class="answer">
A: No, Auto-Type is currently supported on Linux only.
</p>
<a name="faq_database_formats" />
<h3 class="question">Q: What password database formats are compatible with KeePassX?</h3>
<p class="answer">
A: KeePassX currently uses the KeePass 1.x (Classic) password database format as
the native format. It can also import KeePassX 1.x XML exports, PwManager databases
and KWallet XML databases. KeePass 2.x database format is not supported.
</p>
<a name="faq_keepass2x_format" />
<h3 class="question">Q: Can I open KeePass 2.x password databases with KeePassX?</h3>
<p class="answer">
A: No, KeePassX does not support the KeePass 2.x (.kdbx) password database
format currently.
However, you can create an export in KeePass 1.x database format (.kdb) from
KeePass 2.x, which KeePassX can read (and use as the native password database).
</p>
<!--
<a name="" />
<h3 class="question">Q: </h3>
<p class="answer">
A:
</p>
<a name="" />
<h2></h2>
<p>
</p>
-->
</body>
</html>

@ -0,0 +1,20 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>KeePassX Features Overview</title>
</head>
<body>
<a name="top" />
<h1>KeePassX Feature Overview</h1>
<!--
<a name="" />
<h2></h2>
<p>
</p>
-->
</body>
</html>

@ -0,0 +1,82 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>KeePassX User Guide</title>
</head>
<body>
<a name="top" />
<h1>KeePassX User Guide</h1>
<p>For version 0.4.0.</p>
<a name="in_short" />
<h2>KeePassX project in short</h2>
<p>
<a href="http://keepassx.org/">KeePassX</a> <img src="external.png" /> (KPX)
is a cross-platform password manager program.
It is mainly designed to be used on *nix platforms,
such as Linux and Mac OS X.
</p>
<p>
KeePassX currently uses same the database file
format as the <a href="http://keepass.info/">KeePass</a> <img src="external.png" />
1.x (Classic) password manager software for Windows.
Although a Windows build for KPX exists, it is
recommended to use the original KeePass on Windows, as
it has more features and is more matured on the platform.
</p>
<p>
Please note that KeePassX and KeePass are entirely
separate projects, maintained by two separate groups of people
and consequently, share no common codebase.
</p>
<p>
Thank you for using KeePassX!
</p>
<a name="installation" />
<h2>Program installation</h2>
<p>
See the <a href="systemreq.html">system requirements</a> and
<a href="installation.html">installation procedures</a> for KeePassX.
If you are viewing this documentation from already installed KeePassX
program, you can safely skip this part.
</p>
<a name="quickstart" />
<h2>Quick-start Guide</h2>
<p>
Master the <a href="quickstart.html">essential core
features of KeePassX</a> in minutes.
</p>
<!--
<a name="features" />
<h2>Features</h2>
<p>
More detailed overview of the <a href="features.html">current
KeePassX features</a>.
</p>
-->
<a name="faq" />
<h2>Frequently Asked Questions</h2>
<p>
See answers to the most <a href="faq.html">Frequently Asked Questions</a>.
</p>
<a name="support" />
<h2>Contact and Support</h2>
<p>
If you have further questions or want to make suggestions
about the program, please visit
<a href="http://www.keepassx.org/forum/">KeePassX forum</a> <img src="external.png" />.
</p>
<!--
<a name="" />
<h2></h2>
<p>
</p>
-->
</body>
</html>

@ -0,0 +1,50 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>KeePassX Installation Guide</title>
</head>
<body>
<a name="top" />
<h1>KeePassX Installation Guide</h1>
<p>
This guide will help you to install KeePassX.
</p>
<a name="installation_binary" />
<h2>Installation from binary</h2>
<p>
Easiest way to use KeePassX is to install from a binary. Ready-built
binaries are available for all commonly used Linux distributions
from their respective binary package repositories. Binaries for
Mac OS X and Windows are available at the <a href="http://keepassx.org/">
project web site</a> <img src="external.png" />.
</p>
<p>Installation commands for some Linux distributions:</p>
<dl>
<dt><b>Ubuntu Linux</b></dt>
<dd><tt>sudo apt-get install keepassx</tt>
<br><br>or use Synaptic Package Manager from the
<b>System</b> > <b>Administation menu.</b></dd>
<dt><b>Fedora</b></dt>
<dd><tt>su -<br>yum install keepassx</tt></dd>
</dl>
<a name="installation_source" />
<h2>Installation from source</h2>
<p>
If your distribution doesn't have ready-built binary for
KeePassX or you would like to try out latest SVN version
of KeePassX, you can try building from source. Instructions
can be found at the <a href="http://www.keepassx.org/howto">
project web site</a> <img src="external.png" />.
</p>
<!--
<a name="" />
<h2></h2>
<p>
</p>
-->
</body>
</html>

@ -0,0 +1,233 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>KeePassX Quick-start Guide</title>
</head>
<body>
<a name="top" />
<h1>KeePassX Quick-start Guide</h1>
<p>
This guide helps you to manage your
passwords efficiently and securely with KeePassX.
</p>
<a name="startup" />
<h2>Starting up</h2>
<p>
After starting KeePassX for the first time, you
are presented with the main window with
no open database file. If you have used KeePassX
(or KeePass Classic on Windows) previously, you can
open your existing database. Otherwise we begin
with creating a new password database.
</p>
<a name="database_create" />
<h2>Creating a new password database</h2>
<p>
KeePassX stores your password entries into
a password database file when the it's not running.
To create a new password database, click the
<span class="gui">&quot;New Database&quot;</span>
icon on the program toolbar (it is the first icon from the
left on the toolbar).
</p>
<p>
Second, you need to set the <b>master key</b> for the
password database. This key is used to encrypt (ie. lock)
the password database so it cannot be read by anybody
else but you. The master key can be a password
or a key file or both.
If you check both, you must provide both the password
and the key file to every time you want to unlock the database.
</p>
<p>
If you decide to use a password,
<a href="http://www.us-cert.gov/cas/tips/ST04-002.html">
choose and protect it carefully</a> <img src="external.png" />.
The password should be strong, ie. long enough
(at least 8 characters) and preferably contain lower and
uppercase characters, numbers and special characters (e.g. !#?).
You should also memorize the password well, because
if you forget it, there is no way retrieving it later
from the locked database. You will be asked
to give the password twice to ensure that
there is no typing errors in the password.
</p>
<p>
The key file can be any file on your computer, e.g. a picture or
a text document.
You can also create a randomly-generated key file by first
selecting the key file check box and clicking
<span class="gui">&quot;Generate Key File...&quot;</span>.
You can store the key file for example on a USB memory stick,
to keep it with you everywhere.
</p>
<a name="password_add" />
<h2>Adding password entries</h2>
<p>
After you have created or opened a database, you
can add password entries to the database.
A password entry essentially consists of a title,
user name and password. It may have other entries
as well, such as URL (Internet link) and comments.
To add a new password entry, select a group from
the list on the left first, then
click the <span class="gui">
&quot;Add New Entry&quot;</span> icon on the program toolbar.
</p>
<p>
In the &quot;New Entry&quot; dialog you can enter
the information you want to into respective text boxes.
If you are creating a new account to e.g. a web forum,
you can use the password generator to generate strong
random passwords for you.
</p>
<a name="database_save" />
<h2>Saving the database</h2>
<p>
If you have added or edited entries in your database,
they are not automatically save to the database file by default.
You can save the database by clicking the <span class="gui">
&quot;Save Database&quot;</span> icon.
</p>
<p>
You may also want to
enable <span class="gui">&quot;Automatically save database
after every change&quot;</span> option from the
<span class="gui">&quot;Extras&quot;</span> &gt;
<span class="gui">&quot;Settings...&quot;</span> &gt;
<span class="gui">&quot;General (2)&quot;</span> page.
(On OS X, the page is found from
<span class="gui">&quot;KeePassX&quot;</span> (Application menu) &gt;
<span class="gui">&quot;Preferences&quot;</span>.)
</p>
<a name="database_open" />
<h2>Opening a database</h2>
<p>
By default, on next startup, KeePassX opens a
<span class="gui">&quot;Enter Master Key&quot;</span>
dialog for the last used password database. If you wish
to open another password database, click
<span class="gui">&quot;Cancel&quot;</span>
and click <span class="gui">&quot;Open Database&quot;</span> icon
on the program toolbar and select the wanted password
database file from the file system. You can, of course,
do this at any point when the KeePassX main window is active.
</p>
<a name="password_edit" />
<h2>Editing and removing password entries</h2>
<p>
If you wish to edit a password entry, you can do
so by double-clicking on the entry title,
or by selecting the entry and then clicking the
<span class="gui">&quot;View/Edit Entry&quot;</span> icon
on the program toolbar.
</p>
<p>
To delete a password entry, first select the
entry and click <span class="gui">&quot;Delete Entry&quot;</span> icon
on the program toolbar or hit <tt>Ctrl-D</tt> (<tt>Cmd+D</tt> on OS X)
on the keyboard.
</p>
<a name="password_copy" />
<h2>Copying password (and user name) to the clipboard</h2>
<p>
You can copy the currently selected password by hitting <tt>Ctrl-C</tt>
(<tt>Cmd-C</tt> on OS X) and user name with <tt>Ctrl-B</tt> (<tt>Cmd-B</tt>
on OS X) on the keyboard. Then you can hit <tt>Ctrl-V</tt>
(<tt>Cmd-V</tt> on OS X) to paste the password or username
to any program that supports pasting from the clipboard.
</p>
<a name="autotype" />
<h2>Setup Auto-Type (currently Linux only)</h2>
<p>
<b>Auto-Type</b> is a feature that allows you to e.g. log in
to web page by hitting only one key combination.
KeePassX does the rest of the typing for you. Auto-Type reads
the title of currently active window on your screen
and matches it to the configured database entries.
If a matching window title is found from the password
database, it executes a predefined key sequence
(by default your username, <tt>TAB</tt>, password, <tt>ENTER</tt>) in
the active window. This feature is currently available
in the Linux version only.
</p>
<p>
To enable Auto-Type, first go to
<span class="gui">&quot;Extras&quot;</span> &gt;
<span class="gui">&quot;Settings...&quot;</span> &gt;
<span class="gui">&quot;Advanced&quot;</span> page
and set the <span class="gui">&quot;Global Auto-Type Shortcut&quot;</span>
by clicking the text box and typing the desired
keyboard shortcut (e.g. <tt>Ctrl-Shift-N</tt>).
Click <span class="gui">&quot;OK&quot;</span> to exit the dialog.
</p>
<p>
Then, for example, open the web page where you
want to be able to log in with Auto-Type. Let's
for example open Google.com into Firefox and
try to do automated search with Auto-Type. Go
to Google.com in Firefox and you'll notice
that your window title is now &quot;Google - Mozilla Firefox&quot;
</p>
<p>
Now, create new password entry, that
contains user name &quot;test&quot;.
Then, click the small <span class="gui">&quot;Tools&quot;</span>
button at the bottom of the <span class="gui">&quot;New Entry&quot;</span>
dialog, and select <span class="gui">&quot;Auto-Type: Select target window&quot;</span>
Select &quot;Google - Mozilla Firefox&quot; from the dropdown menu and
click <span class="gui">&quot;OK&quot;</span>. You should see now a new
line in the <span class="gui">&quot;Comment:&quot;</span> box, which reads:<br/><br/>
<tt>Auto-Type-Window: Google - Mozilla Firefox</tt><br/><br/>
Now you have associated that window title to this entry.
</p>
<p>
Finally, let's customize the Auto-Type key sequence
to just enter your username and hit <tt>ENTER</tt>.
Click again <span class="gui">&quot;Tools&quot;</span>
and select <span class="gui">&quot;Auto-Type: Customize Sequence&quot;</span>.
Now there's another new line in the <span class="gui">&quot;Comment:&quot;</span> box,
which reads:<br/><br/>
<tt>Auto-Type: {USERNAME}{TAB}{PASSWORD}{ENTER}</tt><br/><br/>
Change this line to:<br/><br/>
<tt>Auto-Type: {USERNAME}{ENTER}</tt><br/><br/>
So that it would just type in your username and hit <tt>ENTER</tt>.
Click <span class="gui">&quot;OK&quot;</span> to save the entry.
</p>
<p>
Now, you can test the Auto-Type by returning to the
Firefox window and hitting the global Auto-Type keyboard
shortcut (e.g. <tt>Ctrl-Shift-N</tt>) in it.
If everything went correctly, KeePassX should now enter
&quot;test&quot; in the search box and start the search query
by hitting <tt>ENTER</tt>.
</p>
<p>
By modifing the Auto-Type key sequence you can tailor
Auto-Type to suit almost every web login page you'll enter.
</p>
<!--
<a name="" />
<h2></h2>
<p>
</p>
-->
</body>
</html>

@ -0,0 +1,46 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>KeePassX System Requirements</title>
</head>
<body>
<a name="top" />
<h1>KeePassX System Requirements</h1>
<p>
This guide tells what is required from your system
in order to build or run KeePassX.
</p>
<a name="requirements" />
<h2>Requirements</h2>
<p>
These are the minimum requirements for the KeePassX v0.3.1 and higher
for building KeePassX from source.
</p>
<p>
Build dependencies:
</p>
<ul>
<li>
Qt library version >= 4.3.<br>
(required modules: QtCore, QtGui, QtXML.)
</li>
<li>libXtst</li>
</ul>
<p>
Application bundle:
</p>
<ul>
<li>X11 with XRanR, Xinerama and XTest extensions.</li>
<li>Glibc 2.4</li>
</ul>
<!--
<a name="" />
<h2></h2>
<p>
</p>
-->
</body>
</html>

@ -1,5 +1,12 @@
<!DOCTYPE RCC><RCC version="1.0"> <!DOCTYPE RCC><RCC version="1.0">
<qresource> <qresource>
<file>default-detailview.html</file> <file>default-detailview.html</file>
</qresource> <file>docs/faq.html</file>
</RCC> <file>docs/features.html</file>
<file>docs/index.html</file>
<file>docs/installation.html</file>
<file>docs/quickstart.html</file>
<file>docs/systemreq.html</file>
<file>docs/external.png</file>
</qresource>
</RCC>

@ -132,6 +132,7 @@ FORMS += forms/AboutDlg.ui \
forms/EditEntryDlg.ui \ forms/EditEntryDlg.ui \
forms/EditGroupDlg.ui \ forms/EditGroupDlg.ui \
forms/ExpiredEntriesDlg.ui \ forms/ExpiredEntriesDlg.ui \
forms/HelpDlg.ui \
forms/MainWindow.ui \ forms/MainWindow.ui \
forms/ManageBookmarksDlg.ui \ forms/ManageBookmarksDlg.ui \
forms/PasswordDlg.ui \ forms/PasswordDlg.ui \
@ -207,6 +208,7 @@ HEADERS += main.h \
dialogs/EditEntryDlg.h \ dialogs/EditEntryDlg.h \
dialogs/EditGroupDlg.h \ dialogs/EditGroupDlg.h \
dialogs/ExpiredEntriesDlg.h \ dialogs/ExpiredEntriesDlg.h \
dialogs/HelpDlg.h \
dialogs/ManageBookmarksDlg.h \ dialogs/ManageBookmarksDlg.h \
dialogs/PasswordDlg.h \ dialogs/PasswordDlg.h \
dialogs/PasswordGenDlg.h \ dialogs/PasswordGenDlg.h \
@ -265,6 +267,7 @@ SOURCES += main.cpp \
dialogs/EditEntryDlg.cpp \ dialogs/EditEntryDlg.cpp \
dialogs/EditGroupDlg.cpp \ dialogs/EditGroupDlg.cpp \
dialogs/ExpiredEntriesDlg.cpp \ dialogs/ExpiredEntriesDlg.cpp \
dialogs/HelpDlg.cpp \
dialogs/ManageBookmarksDlg.cpp \ dialogs/ManageBookmarksDlg.cpp \
dialogs/PasswordDlg.cpp \ dialogs/PasswordDlg.cpp \
dialogs/PasswordGenDlg.cpp \ dialogs/PasswordGenDlg.cpp \

File diff suppressed because it is too large Load Diff

@ -544,7 +544,7 @@ Sei sicuro?</translation>
<message> <message>
<location filename="../dialogs/SettingsDlg.cpp" line="424"/> <location filename="../dialogs/SettingsDlg.cpp" line="424"/>
<source>System Language</source> <source>System Language</source>
<translation type="unfinished"></translation> <translation>Lingua di sistema</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1123,7 +1123,7 @@ p, li { white-space: pre-wrap; }
<message> <message>
<location filename="../export/Export.cpp" line="26"/> <location filename="../export/Export.cpp" line="26"/>
<source>Export File...</source> <source>Export File...</source>
<translation type="unfinished"></translation> <translation>Esporta file...</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1329,57 +1329,57 @@ p, li { white-space: pre-wrap; }
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="50"/> <location filename="../forms/PasswordGenDlg.ui" line="50"/>
<source>Random</source> <source>Random</source>
<translation type="unfinished"></translation> <translation>Casuale</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="99"/> <location filename="../forms/PasswordGenDlg.ui" line="99"/>
<source>&amp;Underline</source> <source>&amp;Underline</source>
<translation type="unfinished"></translation> <translation>&amp;Sottolinea</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="116"/> <location filename="../forms/PasswordGenDlg.ui" line="116"/>
<source>&amp;White Spaces</source> <source>&amp;White Spaces</source>
<translation type="unfinished"></translation> <translation>S&amp;pazi bianchi</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="133"/> <location filename="../forms/PasswordGenDlg.ui" line="133"/>
<source>&amp;Minus</source> <source>&amp;Minus</source>
<translation type="unfinished"></translation> <translation>&amp;Meno</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="193"/> <location filename="../forms/PasswordGenDlg.ui" line="193"/>
<source>Exclude look-alike characters</source> <source>Exclude look-alike characters</source>
<translation type="unfinished"></translation> <translation>Escludi caratteri identici</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="200"/> <location filename="../forms/PasswordGenDlg.ui" line="200"/>
<source>Ensure that password contains characters from every group</source> <source>Ensure that password contains characters from every group</source>
<translation type="unfinished"></translation> <translation>Assicurati che la password contenga caratteri di ogni gruppo</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="216"/> <location filename="../forms/PasswordGenDlg.ui" line="216"/>
<source>Pronounceable</source> <source>Pronounceable</source>
<translation type="unfinished"></translation> <translation>Pronunciabile</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="240"/> <location filename="../forms/PasswordGenDlg.ui" line="240"/>
<source>Lower Letters</source> <source>Lower Letters</source>
<translation type="unfinished"></translation> <translation>Lettere minuscole</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="247"/> <location filename="../forms/PasswordGenDlg.ui" line="247"/>
<source>Upper Letters</source> <source>Upper Letters</source>
<translation type="unfinished"></translation> <translation>Lettere maiuscole</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="254"/> <location filename="../forms/PasswordGenDlg.ui" line="254"/>
<source>Numbers</source> <source>Numbers</source>
<translation type="unfinished"></translation> <translation>Numeri</translation>
</message> </message>
<message> <message>
<location filename="../forms/PasswordGenDlg.ui" line="261"/> <location filename="../forms/PasswordGenDlg.ui" line="261"/>
<source>Special Characters</source> <source>Special Characters</source>
<translation type="unfinished"></translation> <translation>Caratteri speciali</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1590,12 +1590,12 @@ La chiave è errata oppure il file è danneggiato.</translation>
<message> <message>
<location filename="../Kdb3Database.cpp" line="598"/> <location filename="../Kdb3Database.cpp" line="598"/>
<source>Unable to initalize the twofish algorithm.</source> <source>Unable to initalize the twofish algorithm.</source>
<translation type="unfinished"></translation> <translation>Impossibile inizializzare l&apos;algoritmo twofish.</translation>
</message> </message>
<message> <message>
<location filename="../Kdb3Database.cpp" line="1333"/> <location filename="../Kdb3Database.cpp" line="1333"/>
<source>The database has been opened read-only.</source> <source>The database has been opened read-only.</source>
<translation type="unfinished"></translation> <translation>Il database è stato aperto in sola lettura.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1629,72 +1629,72 @@ La chiave è errata oppure il file è danneggiato.</translation>
<translation>Eliminare?</translation> <translation>Eliminare?</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="258"/> <location filename="../lib/EntryView.cpp" line="262"/>
<source>Error</source> <source>Error</source>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="258"/> <location filename="../lib/EntryView.cpp" line="262"/>
<source>At least one group must exist before adding an entry.</source> <source>At least one group must exist before adding an entry.</source>
<translation>Deve esistere almeno un gruppo prima di aggiungere una voce.</translation> <translation>Deve esistere almeno un gruppo prima di aggiungere una voce.</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="258"/> <location filename="../lib/EntryView.cpp" line="262"/>
<source>OK</source> <source>OK</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="477"/> <location filename="../lib/EntryView.cpp" line="481"/>
<source>Title</source> <source>Title</source>
<translation>Titolo</translation> <translation>Titolo</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="479"/> <location filename="../lib/EntryView.cpp" line="483"/>
<source>Username</source> <source>Username</source>
<translation>Nome utente</translation> <translation>Nome utente</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="481"/> <location filename="../lib/EntryView.cpp" line="485"/>
<source>URL</source> <source>URL</source>
<translation>URL</translation> <translation>URL</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="483"/> <location filename="../lib/EntryView.cpp" line="487"/>
<source>Password</source> <source>Password</source>
<translation>Password</translation> <translation>Password</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="485"/> <location filename="../lib/EntryView.cpp" line="489"/>
<source>Comments</source> <source>Comments</source>
<translation>Commenti</translation> <translation>Commenti</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="487"/> <location filename="../lib/EntryView.cpp" line="491"/>
<source>Expires</source> <source>Expires</source>
<translation>Scade</translation> <translation>Scade</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="489"/> <location filename="../lib/EntryView.cpp" line="493"/>
<source>Creation</source> <source>Creation</source>
<translation>Creazione</translation> <translation>Creazione</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="491"/> <location filename="../lib/EntryView.cpp" line="495"/>
<source>Last Change</source> <source>Last Change</source>
<translation>Ultima modifica</translation> <translation>Ultima modifica</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="493"/> <location filename="../lib/EntryView.cpp" line="497"/>
<source>Last Access</source> <source>Last Access</source>
<translation>Ultimo accesso</translation> <translation>Ultimo accesso</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="495"/> <location filename="../lib/EntryView.cpp" line="499"/>
<source>Attachment</source> <source>Attachment</source>
<translation>Allegato</translation> <translation>Allegato</translation>
</message> </message>
<message> <message>
<location filename="../lib/EntryView.cpp" line="497"/> <location filename="../lib/EntryView.cpp" line="501"/>
<source>Group</source> <source>Group</source>
<translation>Gruppo</translation> <translation>Gruppo</translation>
</message> </message>
@ -1729,23 +1729,23 @@ La chiave è errata oppure il file è danneggiato.</translation>
<message> <message>
<location filename="../lib/GroupView.cpp" line="90"/> <location filename="../lib/GroupView.cpp" line="90"/>
<source>Are you sure you want to delete this group, all its child groups and all their entries?</source> <source>Are you sure you want to delete this group, all its child groups and all their entries?</source>
<translation type="unfinished"></translation> <translation>Sei sicuro di voler eliminare questo gruppo, tutti i suoi sottogruppi e le loro voci?</translation>
</message> </message>
</context> </context>
<context> <context>
<name>KeepassMainWindow</name> <name>KeepassMainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="1420"/> <location filename="../mainwindow.cpp" line="1421"/>
<source>Ready</source> <source>Ready</source>
<translation>Pronto</translation> <translation>Pronto</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1323"/> <location filename="../mainwindow.cpp" line="1324"/>
<source>Locked</source> <source>Locked</source>
<translation>Bloccato</translation> <translation>Bloccato</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1338"/> <location filename="../mainwindow.cpp" line="1339"/>
<source>Unlocked</source> <source>Unlocked</source>
<translation>Sbloccato</translation> <translation>Sbloccato</translation>
</message> </message>
@ -1845,12 +1845,12 @@ La chiave è errata oppure il file è danneggiato.</translation>
<translation>Il file di database non esiste.</translation> <translation>Il file di database non esiste.</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1423"/> <location filename="../mainwindow.cpp" line="1424"/>
<source>Loading Database...</source> <source>Loading Database...</source>
<translation>Caricamento Database...</translation> <translation>Caricamento Database...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1426"/> <location filename="../mainwindow.cpp" line="1427"/>
<source>Loading Failed</source> <source>Loading Failed</source>
<translation>Caricamento fallito</translation> <translation>Caricamento fallito</translation>
</message> </message>
@ -1877,7 +1877,7 @@ to save the changes?</source>
salvare le modifiche?</translation> salvare le modifiche?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1111"/> <location filename="../mainwindow.cpp" line="1112"/>
<source>new</source> <source>new</source>
<translation>nuovo</translation> <translation>nuovo</translation>
</message> </message>
@ -1887,97 +1887,97 @@ salvare le modifiche?</translation>
<translation>Apri Database...</translation> <translation>Apri Database...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="908"/> <location filename="../mainwindow.cpp" line="909"/>
<source>KeePass Databases (*.kdb)</source> <source>KeePass Databases (*.kdb)</source>
<translation>Database KeePass (*.kdb)</translation> <translation>Database KeePass (*.kdb)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="908"/> <location filename="../mainwindow.cpp" line="909"/>
<source>All Files (*)</source> <source>All Files (*)</source>
<translation>Tutti i files (*)</translation> <translation>Tutti i files (*)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="729"/> <location filename="../mainwindow.cpp" line="730"/>
<source>Expired</source> <source>Expired</source>
<translation>Scaduta</translation> <translation>Scaduta</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="743"/> <location filename="../mainwindow.cpp" line="744"/>
<source>1 Month</source> <source>1 Month</source>
<translation>1 Mese</translation> <translation>1 Mese</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="745"/> <location filename="../mainwindow.cpp" line="746"/>
<source>%1 Months</source> <source>%1 Months</source>
<translation>%1 Mesi</translation> <translation>%1 Mesi</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="751"/> <location filename="../mainwindow.cpp" line="752"/>
<source>1 Year</source> <source>1 Year</source>
<translation>1 Anno</translation> <translation>1 Anno</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="753"/> <location filename="../mainwindow.cpp" line="754"/>
<source>%1 Years</source> <source>%1 Years</source>
<translation>%1 Anni</translation> <translation>%1 Anni</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="759"/> <location filename="../mainwindow.cpp" line="760"/>
<source>1 Day</source> <source>1 Day</source>
<translation>1 Giorno</translation> <translation>1 Giorno</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="761"/> <location filename="../mainwindow.cpp" line="762"/>
<source>%1 Days</source> <source>%1 Days</source>
<translation>%1 Giorni</translation> <translation>%1 Giorni</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="765"/> <location filename="../mainwindow.cpp" line="766"/>
<source>less than 1 day</source> <source>less than 1 day</source>
<translation>meno di 1 giorno</translation> <translation>meno di 1 giorno</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="855"/> <location filename="../mainwindow.cpp" line="856"/>
<source>Clone Entry</source> <source>Clone Entry</source>
<translation>Duplica voce</translation> <translation>Duplica voce</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="857"/> <location filename="../mainwindow.cpp" line="858"/>
<source>Delete Entry</source> <source>Delete Entry</source>
<translation>Elimina voce</translation> <translation>Elimina voce</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="870"/> <location filename="../mainwindow.cpp" line="871"/>
<source>Clone Entries</source> <source>Clone Entries</source>
<translation>Duplica voci</translation> <translation>Duplica voci</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="872"/> <location filename="../mainwindow.cpp" line="873"/>
<source>Delete Entries</source> <source>Delete Entries</source>
<translation>Elimina voci</translation> <translation>Elimina voci</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="912"/> <location filename="../mainwindow.cpp" line="913"/>
<source>File could not be saved.</source> <source>File could not be saved.</source>
<translation>Impossibile salvare il file.</translation> <translation>Impossibile salvare il file.</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="908"/> <location filename="../mainwindow.cpp" line="909"/>
<source>Save Database...</source> <source>Save Database...</source>
<translation>Salva Database...</translation> <translation>Salva Database...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1324"/> <location filename="../mainwindow.cpp" line="1325"/>
<source>Un&amp;lock Workspace</source> <source>Un&amp;lock Workspace</source>
<translation>Sb&amp;locca l&apos;area di lavoro</translation> <translation>Sb&amp;locca l&apos;area di lavoro</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1339"/> <location filename="../mainwindow.cpp" line="1340"/>
<source>&amp;Lock Workspace</source> <source>&amp;Lock Workspace</source>
<translation>&amp;Blocca l&apos;area di lavoro</translation> <translation>&amp;Blocca l&apos;area di lavoro</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1105"/> <location filename="../mainwindow.cpp" line="1106"/>
<source>Show &amp;Toolbar</source> <source>Show &amp;Toolbar</source>
<translation>Mostra barra degli &amp;strumenti</translation> <translation>Mostra barra degli &amp;strumenti</translation>
</message> </message>
@ -1999,12 +1999,12 @@ salvare le modifiche?</translation>
<message> <message>
<location filename="../mainwindow.cpp" line="366"/> <location filename="../mainwindow.cpp" line="366"/>
<source>Ctrl+I</source> <source>Ctrl+I</source>
<translation type="unfinished"></translation> <translation>Ctrl+I</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="407"/> <location filename="../mainwindow.cpp" line="407"/>
<source>Database locked</source> <source>Database locked</source>
<translation type="unfinished"></translation> <translation>Database bloccato</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="411"/> <location filename="../mainwindow.cpp" line="411"/>
@ -2012,28 +2012,31 @@ salvare le modifiche?</translation>
This means that either someone else has opened the file or KeePassX crashed last time it opened the database. This means that either someone else has opened the file or KeePassX crashed last time it opened the database.
Do you want to open it anyway?</source> Do you want to open it anyway?</source>
<translation type="unfinished"></translation> <translation>Il database che stai tentando di aprire è bloccato.
Questo significa che qualcun altro ha aperto il file o che KeePassX si è bloccato l&apos;ultima volta che si è aperto il database.
Vuoi comunque aprirlo?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="517"/> <location filename="../mainwindow.cpp" line="517"/>
<source>The current file was modified. <source>The current file was modified.
Do you want to save the changes?</source> Do you want to save the changes?</source>
<translation type="unfinished"></translation> <translation>Il file attuale è stato modificato. Vuoi salvare le modifiche?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="535"/> <location filename="../mainwindow.cpp" line="535"/>
<source>Couldn&apos;t remove database lock file.</source> <source>Couldn&apos;t remove database lock file.</source>
<translation type="unfinished"></translation> <translation>Impossibile rimuovere il file di blocco del database.</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="414"/> <location filename="../mainwindow.cpp" line="414"/>
<source>Open read-only</source> <source>Open read-only</source>
<translation type="unfinished"></translation> <translation>Apri in sola lettura</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="1429"/> <location filename="../mainwindow.cpp" line="1430"/>
<source>Couldn&apos;t create lock file. Opening the database read-only.</source> <source>Couldn&apos;t create lock file. Opening the database read-only.</source>
<translation type="unfinished"></translation> <translation>Impossibile creare il file di blocco. Apertura del database in sola lettura.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2384,32 +2387,32 @@ Do you want to save the changes?</source>
<message> <message>
<location filename="../forms/MainWindow.ui" line="305"/> <location filename="../forms/MainWindow.ui" line="305"/>
<source>&amp;Add New Subgroup...</source> <source>&amp;Add New Subgroup...</source>
<translation type="unfinished"></translation> <translation>&amp;Aggiungi nuovo sottogruppo...</translation>
</message> </message>
<message> <message>
<location filename="../forms/MainWindow.ui" line="584"/> <location filename="../forms/MainWindow.ui" line="584"/>
<source>Copy URL to Clipboard</source> <source>Copy URL to Clipboard</source>
<translation type="unfinished"></translation> <translation>Copia URL negli Appunti</translation>
</message> </message>
<message> <message>
<location filename="../forms/MainWindow.ui" line="589"/> <location filename="../forms/MainWindow.ui" line="589"/>
<source>Add New Group...</source> <source>Add New Group...</source>
<translation type="unfinished"></translation> <translation>Aggiungi nuovo gruppo...</translation>
</message> </message>
<message> <message>
<location filename="../forms/MainWindow.ui" line="172"/> <location filename="../forms/MainWindow.ui" line="172"/>
<source>&amp;Entries</source> <source>&amp;Entries</source>
<translation type="unfinished"></translation> <translation>&amp;Voci</translation>
</message> </message>
<message> <message>
<location filename="../forms/MainWindow.ui" line="240"/> <location filename="../forms/MainWindow.ui" line="240"/>
<source>&amp;Groups</source> <source>&amp;Groups</source>
<translation type="unfinished"></translation> <translation>&amp;Gruppi</translation>
</message> </message>
<message> <message>
<location filename="../forms/MainWindow.ui" line="594"/> <location filename="../forms/MainWindow.ui" line="594"/>
<source>Sort groups</source> <source>Sort groups</source>
<translation type="unfinished"></translation> <translation>Ordina gruppi</translation>
</message> </message>
</context> </context>
<context> <context>
@ -3024,52 +3027,52 @@ Il file non è leggibile.</translation>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="74"/> <location filename="../forms/SettingsDlg.ui" line="74"/>
<source>General (1)</source> <source>General (1)</source>
<translation type="unfinished"></translation> <translation>Generale (1)</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="79"/> <location filename="../forms/SettingsDlg.ui" line="79"/>
<source>General (2)</source> <source>General (2)</source>
<translation type="unfinished"></translation> <translation>Generale (2)</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="84"/> <location filename="../forms/SettingsDlg.ui" line="84"/>
<source>Appearance</source> <source>Appearance</source>
<translation type="unfinished"></translation> <translation>Aspetto</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="89"/> <location filename="../forms/SettingsDlg.ui" line="89"/>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation>Lingua</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="372"/> <location filename="../forms/SettingsDlg.ui" line="372"/>
<source>Save backups of modified entries into the &apos;Backup&apos; group</source> <source>Save backups of modified entries into the &apos;Backup&apos; group</source>
<translation type="unfinished"></translation> <translation>Salva backup delle voci modificate nel gruppo &apos;Backup&apos;</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="400"/> <location filename="../forms/SettingsDlg.ui" line="400"/>
<source>Delete backup entries older than:</source> <source>Delete backup entries older than:</source>
<translation type="unfinished"></translation> <translation>Elimina le voci di backup più vecchie di:</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="426"/> <location filename="../forms/SettingsDlg.ui" line="426"/>
<source>days</source> <source>days</source>
<translation type="unfinished"></translation> <translation>giorni</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="442"/> <location filename="../forms/SettingsDlg.ui" line="442"/>
<source>Automatically save database after every change</source> <source>Automatically save database after every change</source>
<translation type="unfinished"></translation> <translation>Salva automaticamente il database dopo ogni modifica</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="845"/> <location filename="../forms/SettingsDlg.ui" line="845"/>
<source>Language:</source> <source>Language:</source>
<translation type="unfinished"></translation> <translation>Lingua:</translation>
</message> </message>
<message> <message>
<location filename="../forms/SettingsDlg.ui" line="852"/> <location filename="../forms/SettingsDlg.ui" line="852"/>
<source>Author:</source> <source>Author:</source>
<translation type="unfinished"></translation> <translation>Autore:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -3118,13 +3121,14 @@ Il file non è leggibile.</translation>
<message> <message>
<location filename="../forms/TargetWindowDlg.ui" line="13"/> <location filename="../forms/TargetWindowDlg.ui" line="13"/>
<source>Auto-Type: Select Target Window</source> <source>Auto-Type: Select Target Window</source>
<translation type="unfinished"></translation> <translation>Auto Digitazione: seleziona la finestra da usare</translation>
</message> </message>
<message> <message>
<location filename="../forms/TargetWindowDlg.ui" line="19"/> <location filename="../forms/TargetWindowDlg.ui" line="19"/>
<source>To specify the target window, either select an existing currently-opened window <source>To specify the target window, either select an existing currently-opened window
from the drop-down list, or enter the window title manually:</source> from the drop-down list, or enter the window title manually:</source>
<translation type="unfinished"></translation> <translation>Per specificare la finestra da usare, o selezioni una finestra attualmente aperta
dal menu a tendina, oppure inserisci il titolo della finestra manualmente:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -3132,19 +3136,19 @@ from the drop-down list, or enter the window title manually:</source>
<message> <message>
<location filename="../lib/tools.cpp" line="352"/> <location filename="../lib/tools.cpp" line="352"/>
<source>$TRANSLATION_AUTHOR</source> <source>$TRANSLATION_AUTHOR</source>
<translation type="unfinished">Diego Pierotto</translation> <translation>Diego Pierotto</translation>
</message> </message>
<message> <message>
<location filename="../dialogs/AboutDlg.cpp" line="35"/> <location filename="../dialogs/AboutDlg.cpp" line="35"/>
<source>$TRANSLATION_AUTHOR_EMAIL</source> <source>$TRANSLATION_AUTHOR_EMAIL</source>
<comment>Here you can enter your email or homepage if you want.</comment> <comment>Here you can enter your email or homepage if you want.</comment>
<translation type="unfinished">ita.translations@tiscali.it</translation> <translation>ita.translations@tiscali.it</translation>
</message> </message>
<message> <message>
<location filename="../lib/tools.cpp" line="351"/> <location filename="../lib/tools.cpp" line="351"/>
<source>$LANGUAGE_NAME</source> <source>$LANGUAGE_NAME</source>
<comment>Insert your language name in the format: English (United States)</comment> <comment>Insert your language name in the format: English (United States)</comment>
<translation type="unfinished"></translation> <translation>Italiano (Italia)</translation>
</message> </message>
</context> </context>
<context> <context>