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/dialogs/AboutDlg.cpp
  10. 11
      src/dialogs/HelpDlg.cpp
  11. 15
      src/dialogs/HelpDlg.h
  12. 10
      src/dialogs/SelectIconDlg.cpp
  13. 3
      src/dialogs/SettingsDlg.cpp
  14. 39
      src/forms/AboutDlg.ui
  15. 202
      src/forms/HelpDlg.ui
  16. 30
      src/forms/MainWindow.ui
  17. 126
      src/forms/SettingsDlg.ui
  18. 3
      src/keepassx.h
  19. 31
      src/lib/AutoTypeGlobalX11.cpp
  20. 3
      src/lib/AutoTypeGlobalX11.h
  21. 17
      src/lib/AutoTypeX11.cpp
  22. 4
      src/lib/AutoTypeX11.h
  23. 20
      src/lib/EntryView.cpp
  24. 10
      src/lib/GroupView.cpp
  25. 1
      src/lib/GroupView.h
  26. 2
      src/main.cpp
  27. 50
      src/mainwindow.cpp
  28. 5
      src/mainwindow.h
  29. BIN
      src/res/docs/external.png
  30. 49
      src/res/docs/faq.html
  31. 20
      src/res/docs/features.html
  32. 82
      src/res/docs/index.html
  33. 50
      src/res/docs/installation.html
  34. 233
      src/res/docs/quickstart.html
  35. 46
      src/res/docs/systemreq.html
  36. 7
      src/res/resources.qrc
  37. 3
      src/src.pro
  38. 3215
      src/translations/keepassx-es_ES.ts
  39. 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)
return QApplication::x11EventFilter(event);
#ifdef GLOBAL_AUTOTYPE
if (remove_invalid == 0) {
AutoTypeGlobalX11* autoTypeGlobal = static_cast<AutoTypeGlobalX11*>(autoType);
remove_invalid = ControlMask | ShiftMask | autoTypeGlobal->maskAlt() |
@ -44,7 +45,12 @@ bool KeepassApplication::x11EventFilter(XEvent* event){
autoType->performGlobal();
return true;
}
else{
return QApplication::x11EventFilter(event);
#endif
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/EditGroupDlg.h
dialogs/ExpiredEntriesDlg.h
dialogs/HelpDlg.h
dialogs/ManageBookmarksDlg.h
dialogs/PasswordDlg.h
dialogs/PasswordGenDlg.h
@ -76,6 +77,7 @@ SET(keepassx_SOURCES
dialogs/EditEntryDlg.cpp
dialogs/EditGroupDlg.cpp
dialogs/ExpiredEntriesDlg.cpp
dialogs/HelpDlg.cpp
dialogs/ManageBookmarksDlg.cpp
dialogs/PasswordDlg.cpp
dialogs/PasswordGenDlg.cpp
@ -104,6 +106,7 @@ SET(keepassx_FORMS
forms/EditEntryDlg.ui
forms/EditGroupDlg.ui
forms/ExpiredEntriesDlg.ui
forms/HelpDlg.ui
forms/MainWindow.ui
forms/ManageBookmarksDlg.ui
forms/PasswordDlg.ui

@ -21,6 +21,7 @@
#include "crypto/twoclass.h"
#include <QBuffer>
#include <algorithm>
#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){
CTwofish twofish;
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
}
crypto_size = (unsigned long)twofish.padDecrypt((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)){
error=tr("Decryption failed.\nThe key is wrong or the file is damaged.");
@ -1972,7 +1977,7 @@ int KeyTransformBenchmark::benchmark(int pMSecs){
ktbRight->start();
ktbLeft->wait();
ktbRight->wait();
int num = ktbLeft->rounds + ktbRight->rounds;
int num = std::min(ktbLeft->rounds, ktbRight->rounds);
delete ktbLeft;
delete ktbRight;

@ -64,7 +64,6 @@ public:
QString lastKeyLocation(){return settings.value("Options/LastKeyLocation").toString();}
tKeyType lastKeyType(){return stringToKeyType(settings.value("Options/LastKeyType").toString());}
QByteArray mainWindowGeometry();
bool minimizeToTray(){return settings.value("Options/MinimizeToTray",false).toBool();}
bool minimizeTray(){return settings.value("Options/MinimizeTray",false).toBool();}
bool startMinimized(){return settings.value("Options/StartMinimized",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();}
#ifdef AUTOTYPE
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
#ifdef GLOBAL_AUTOTYPE
Shortcut globalShortcut();
@ -131,7 +130,6 @@ public:
void setLastKeyLocation(const QString& value){settings.setValue("Options/LastKeyLocation",value);}
void setLastKeyType(tKeyType value){settings.setValue("Options/LastKeyType",keyTypeToString(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 setStartMinimized(bool value){settings.setValue("Options/StartMinimized",value);}
void setStartLocked(bool value){settings.setValue("Options/StartLocked",value);}

@ -71,7 +71,7 @@ AboutDialog::AboutDialog(QWidget* parent):QDialog(parent)
Edit_License->setHtml(QString::fromUtf8(gpl.readAll()));
connect(ButtonBox, SIGNAL(accepted()), SLOT(close()));
connect(ButtonBox, SIGNAL(rejected()), SLOT(close()));
}
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(){
List->clear();
for(int i=0; i<db->numIcons(); i++){
QListWidgetItem* item;
QListWidgetItem* item = NULL;
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
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)+"]");
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( 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_OpenLast, SIGNAL( toggled(bool) ), CheckBox_RememberLastKey, 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_RememberLastKey->setChecked(config->rememberLastKey());
CheckBox_ShowSysTrayIcon->setChecked(config->showSysTrayIcon());
CheckBox_CloseToTray->setChecked(config->minimizeToTray());
CheckBox_MinimizeTray->setChecked(config->minimizeTray());
CheckBox_StartMinimized->setChecked(config->startMinimized());
CheckBox_StartLocked->setChecked(config->startLocked());
@ -235,7 +233,6 @@ void CSettingsDlg::apply(){
//General (1)
config->setShowSysTrayIcon(CheckBox_ShowSysTrayIcon->isChecked());
config->setMinimizeToTray(CheckBox_CloseToTray->isChecked());
config->setMinimizeTray(CheckBox_MinimizeTray->isChecked());
config->setStartMinimized(CheckBox_StartMinimized->isChecked());
config->setStartLocked(CheckBox_StartLocked->isChecked());

@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AboutDlg</class>
<widget class="QDialog" name="AboutDlg">
@ -38,14 +39,6 @@
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title">
<string>About</string>
</attribute>
@ -58,7 +51,7 @@
<item>
<widget class="QLabel" name="labelAppName">
<property name="sizePolicy">
<sizepolicy vsizetype="Preferred" hsizetype="Minimum" >
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -78,7 +71,7 @@
<item>
<widget class="QLabel" name="labelAppFunc">
<property name="sizePolicy">
<sizepolicy vsizetype="Preferred" hsizetype="Expanding" >
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -151,14 +144,6 @@ General Public License (GPL) version 2.</string>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title">
<string>Credits</string>
</attribute>
@ -176,14 +161,6 @@ General Public License (GPL) version 2.</string>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title">
<string>Translation</string>
</attribute>
@ -201,14 +178,6 @@ General Public License (GPL) version 2.</string>
</layout>
</widget>
<widget class="QWidget" name="tab_3">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>397</width>
<height>171</height>
</rect>
</property>
<attribute name="title">
<string>License</string>
</attribute>
@ -230,7 +199,7 @@ General Public License (GPL) version 2.</string>
<item>
<widget class="QDialogButtonBox" name="ButtonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>

@ -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,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author>Tarek Saidi</author>
<class>MainWindow</class>
@ -17,14 +18,6 @@
<string>KeePassX</string>
</property>
<widget class="QWidget" name="centralWidget">
<property name="geometry" >
<rect>
<x>0</x>
<y>29</y>
<width>724</width>
<height>439</height>
</rect>
</property>
<layout class="QVBoxLayout">
<item>
<widget class="QSplitter" name="VSplitter">
@ -36,7 +29,7 @@
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>30</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -58,7 +51,7 @@
</widget>
<widget class="QSplitter" name="HSplitter">
<property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>70</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -71,7 +64,7 @@
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>70</verstretch>
</sizepolicy>
@ -91,7 +84,7 @@
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>30</verstretch>
</sizepolicy>
@ -120,10 +113,10 @@
<x>0</x>
<y>0</y>
<width>724</width>
<height>29</height>
<height>24</height>
</rect>
</property>
<widget class="QMenu" name="menuHilfe" >
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>&amp;Help</string>
</property>
@ -131,7 +124,7 @@
<addaction name="separator"/>
<addaction name="HelpAboutAction"/>
</widget>
<widget class="QMenu" name="menuDatei" >
<widget class="QMenu" name="menuFile">
<property name="title">
<string>&amp;File</string>
</property>
@ -245,12 +238,12 @@
<addaction name="EditDeleteGroupAction"/>
<addaction name="EditGroupSortAction"/>
</widget>
<addaction name="menuDatei" />
<addaction name="menuFile"/>
<addaction name="menuEntries"/>
<addaction name="menuGroups"/>
<addaction name="ViewMenu"/>
<addaction name="menuExtras"/>
<addaction name="menuHilfe" />
<addaction name="menuHelp"/>
</widget>
<action name="ManageBookmarksAction">
<property name="text">
@ -497,9 +490,6 @@
<property name="text">
<string>&amp;KeePassX Handbook...</string>
</property>
<property name="visible" >
<bool>false</bool>
</property>
</action>
<action name="HideSearchResultsAction">
<property name="text">

@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SettingsDialog</class>
<widget class="QDialog" name="SettingsDialog">
@ -40,7 +41,7 @@
<item>
<widget class="QListWidget" name="listWidget">
<property name="sizePolicy">
<sizepolicy vsizetype="Expanding" hsizetype="Fixed" >
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -107,14 +108,6 @@ QListView::item {
<number>0</number>
</property>
<widget class="QWidget" name="pageGeneral1">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="CheckBox_ShowSysTrayIcon">
@ -153,36 +146,6 @@ QListView::item {
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="_17" >
<item>
<spacer>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>25</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="CheckBox_CloseToTray" >
<property name="enabled" >
<bool>false</bool>
</property>
<property name="text" >
<string>Minimize to tray when clicking the main window's close button</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="_18">
<item>
@ -357,14 +320,6 @@ QListView::item {
</layout>
</widget>
<widget class="QWidget" name="pageGeneral2">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="CheckBox_Backup">
@ -407,7 +362,7 @@ QListView::item {
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -459,14 +414,6 @@ QListView::item {
</layout>
</widget>
<widget class="QWidget" name="pageAppearance">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox1">
@ -508,7 +455,7 @@ QListView::item {
<item row="1" column="2">
<widget class="QPushButton" name="ButtonTextColor">
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -533,7 +480,7 @@ QListView::item {
<item row="0" column="4">
<widget class="QLabel" name="textLabel3">
<property name="sizePolicy">
<sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -546,7 +493,7 @@ QListView::item {
<item row="0" column="1">
<widget class="QLabel" name="pixmColor1">
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -571,7 +518,7 @@ QListView::item {
<item row="1" column="1">
<widget class="QLabel" name="pixmTextColor">
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -596,7 +543,7 @@ QListView::item {
<item row="0" column="6">
<widget class="QPushButton" name="ButtonColor2">
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -621,7 +568,7 @@ QListView::item {
<item row="0" column="5">
<widget class="QLabel" name="pixmColor2">
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -646,7 +593,7 @@ QListView::item {
<item row="0" column="2">
<widget class="QPushButton" name="ButtonColor1">
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -671,7 +618,7 @@ QListView::item {
<item row="0" column="0">
<widget class="QLabel" name="textLabel1_2">
<property name="sizePolicy">
<sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -804,14 +751,6 @@ QListView::item {
</layout>
</widget>
<widget class="QWidget" name="pageLanguage">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
@ -898,19 +837,11 @@ QListView::item {
</layout>
</widget>
<widget class="QWidget" name="pageSecurity">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="sizePolicy">
<sizepolicy vsizetype="Minimum" hsizetype="Preferred" >
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -947,7 +878,7 @@ QListView::item {
<item>
<widget class="QLabel" name="textLabel1">
<property name="sizePolicy">
<sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -960,7 +891,7 @@ QListView::item {
<item>
<widget class="QSpinBox" name="SpinBox_ClipboardTime">
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -1010,7 +941,7 @@ QListView::item {
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -1051,14 +982,6 @@ QListView::item {
</layout>
</widget>
<widget class="QWidget" name="pageAdvanced">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QGroupBox" name="Box_BrowserCmd">
@ -1245,14 +1168,6 @@ QListView::item {
</layout>
</widget>
<widget class="QWidget" name="pageFeatures">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QLabel" name="label_6">
@ -1287,19 +1202,11 @@ QListView::item {
</layout>
</widget>
<widget class="QWidget" name="pageDesktop">
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>331</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy vsizetype="Minimum" hsizetype="Preferred" >
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -1412,7 +1319,6 @@ QListView::item {
<tabstop>listWidget</tabstop>
<tabstop>CheckBox_ShowSysTrayIcon</tabstop>
<tabstop>CheckBox_MinimizeTray</tabstop>
<tabstop>CheckBox_CloseToTray</tabstop>
<tabstop>CheckBox_OpenLast</tabstop>
<tabstop>CheckBox_RememberLastKey</tabstop>
<tabstop>CheckBox_StartMinimized</tabstop>

@ -26,7 +26,7 @@
#define APP_CODE_NAME "keepassx"
#define APP_SHORT_FUNC "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
@ -35,7 +35,6 @@
#ifdef __cplusplus
#include <cstdlib>
#include <cmath>
#include <QApplication>

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

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

@ -45,9 +45,16 @@ AutoTypeX11::AutoTypeX11(KeepassMainWindow* mainWin) {
altgr_mask = 0;
altgr_keysym = NoSymbol;
updateKeymap();
reReadKeymap = false;
}
void AutoTypeX11::updateKeymap() {
ReadKeymap();
if (!altgr_mask)
AddModifier(XK_Mode_switch);
if (!meta_mask)
meta_mask = Mod4Mask;
}
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)
mainWin->hide();
@ -138,8 +153,6 @@ void AutoTypeX11::perform(IEntryHandle* entry, bool hideWindow, int nr, bool was
else{
if (hideWindow && !(config->showSysTrayIcon() && config->minimizeTray()) )
mainWin->showMinimized();
if (wasLocked)
mainWin->OnUnLockWorkspace();
}
}

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

@ -202,7 +202,13 @@ void KeepassEntryView::updateEntry(EntryViewItem* item){
}
}
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)){
item->setText(j++,entry->expire().dateToString(Qt::SystemLocaleDate));}
if (Columns.at(6)){
@ -361,8 +367,8 @@ void KeepassEntryView::OnClipboardTimeOut(){
Clipboard->clear(QClipboard::Selection);
}
#ifdef Q_WS_X11
QProcess::execute("dcop klipper klipper clearClipboardHistory");
QProcess::execute("dbus-send --type=method_call --dest=org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory");
QProcess::startDetached("dcop klipper klipper clearClipboardHistory");
QProcess::startDetached("dbus-send --type=method_call --dest=org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory");
#endif
}
@ -446,7 +452,13 @@ void KeepassEntryView::createItems(QList<IEntryHandle*>& entries){
}
}
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)){
item->setText(j++,entries[i]->expire().dateToString(Qt::SystemLocaleDate));}
if (Columns.at(6)){

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

@ -37,6 +37,7 @@ class KeepassGroupView:public QTreeWidget{
void createItems();
void showSearchResults();
void setCurrentGroup(IGroupHandle* group);
void selectFirstGroup();
public slots:
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");
#if defined(Q_WS_X11) && defined(GLOBAL_AUTOTYPE)
#if defined(Q_WS_X11) && defined(AUTOTYPE)
QApplication* app = new KeepassApplication(argc,argv);
#else
QApplication* app = new QApplication(argc,argv);

@ -17,6 +17,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include <QPointer>
#include <QToolBar>
#include <QStatusBar>
#include "mainwindow.h"
@ -40,6 +41,7 @@
//#include "dialogs/TrashCanDlg.h" //TODO TrashCan
#include "dialogs/AddBookmarkDlg.h"
#include "dialogs/ManageBookmarksDlg.h"
#include "dialogs/HelpDlg.h"
Import_KeePassX_Xml import_KeePassX_Xml;
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){
ShutingDown=false;
IsLocked=false;
EventOccurred=true;
inactivityCounter=0;
@ -91,6 +92,7 @@ KeepassMainWindow::KeepassMainWindow(const QString& ArgFile,bool ArgMin,bool Arg
LockedCentralWidget->setVisible(false);
setupConnections();
connect(qApp, SIGNAL(commitDataRequest(QSessionManager&)), SLOT(OnShutdown(QSessionManager&)));
inactivityTimer = new QTimer(this);
inactivityTimer->setInterval(500);
@ -186,7 +188,7 @@ void KeepassMainWindow::setupConnections(){
connect(ExtrasShowExpiredEntriesAction,SIGNAL(triggered(bool)),this,SLOT(OnExtrasShowExpiredEntries()));
//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(EntryView,SIGNAL(itemActivated(QTreeWidgetItem*,int)),EntryView,SLOT(OnEntryActivated(QTreeWidgetItem*,int)));
@ -267,8 +269,8 @@ void KeepassMainWindow::setupIcons(){
#else
EditAutoTypeAction->setVisible(false);
#endif
//HelpHandbookAction->setIcon(getIcon("manual")); //TODO Handbook
HelpAboutAction->setIcon(getIcon("help"));
HelpHandbookAction->setIcon(getIcon("manual"));
HelpAboutAction->setIcon(getIcon("help_about"));
menuBookmarks->menuAction()->setIcon(getIcon("bookmark_folder"));
AddThisAsBookmarkAction->setIcon(getIcon("bookmark_this"));
AddBookmarkAction->setIcon(getIcon("bookmark_add"));
@ -491,6 +493,8 @@ bool KeepassMainWindow::openDatabase(QString filename,bool IsAuto){
setStatusBarMsg(StatusBarReady);
inactivityCounter = 0;
GroupView->selectFirstGroup();
return true;
}
@ -530,7 +534,7 @@ bool KeepassMainWindow::closeDatabase(bool lock){
db->close();
delete db;
db=NULL;
if (QFile::exists(currentFile+".lock")){
if (!dbReadOnly && QFile::exists(currentFile+".lock")){
if (!QFile::remove(currentFile+".lock"))
QMessageBox::critical(this, tr("Error"), tr("Couldn't remove database lock file."));
}
@ -939,7 +943,6 @@ void KeepassMainWindow::OnFileChangeKey(){
}
void KeepassMainWindow::OnFileExit(){
ShutingDown=true;
close();
}
@ -1035,17 +1038,10 @@ void KeepassMainWindow::OnFileModified(){
}
void KeepassMainWindow::closeEvent(QCloseEvent* e){
if(!ShutingDown && config->showSysTrayIcon() && config->minimizeToTray()){
e->ignore();
if (config->lockOnMinimize() && !IsLocked && FileOpen)
OnUnLockWorkspace();
hide();
return;
}
if(FileOpen && !closeDatabase()){
ShutingDown=false;
e->ignore();
if (!isVisible())
show();
return;
}
@ -1064,6 +1060,7 @@ void KeepassMainWindow::closeEvent(QCloseEvent* e){
config->setShowStatusbar(statusBar()->isVisible());
delete SysTray;
QMainWindow::closeEvent(e);
QApplication::quit();
}
@ -1136,12 +1133,11 @@ void KeepassMainWindow::OnHelpAbout(){
dlg.exec();
}
//TODO Handbook
/*void KeepassMainWindow::OnHelpHandbook(){
HelpBrowser->openAssistant();
}*/
void KeepassMainWindow::OnHelpHandbook(){
QPointer<HelpDlg> dlg = new HelpDlg(this);
dlg->exec();
delete dlg;
}
void KeepassMainWindow::OnViewShowToolbar(bool show){
config->setShowToolbar(show);
@ -1301,8 +1297,10 @@ void KeepassMainWindow::OnUnLockWorkspace(){
item = parent;
}
if (closeDatabase(true))
if (closeDatabase(true)) {
setStateFileModified(false);
setLock();
}
else
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){
if(action==AddBookmarkAction){
AddBookmarkDlg dlg(this);

@ -21,6 +21,7 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QSessionManager>
#include <QSystemTrayIcon>
#include "lib/EntryView.h"
#include "lib/GroupView.h"
@ -72,7 +73,7 @@ class KeepassMainWindow : public QMainWindow, private Ui_MainWindow{
void OnExtrasShowExpiredEntries();
//void OnExtrasTrashCan(); //TODO TrashCan
void OnHelpAbout();
//void OnHelpHandbook(); //TODO Handbook
void OnHelpHandbook();
//void OnItemExpanded(QTreeWidgetItem*);
//void OnItemCollaped(QTreeWidgetItem*);
void OnShowSearchResults();
@ -84,6 +85,7 @@ class KeepassMainWindow : public QMainWindow, private Ui_MainWindow{
void OnDetailViewUrlClicked(const QUrl& url);
void OnLockClose();
void OnInactivityTimer();
void OnShutdown(QSessionManager& manager);
private:
void closeEvent(QCloseEvent* event);
@ -130,7 +132,6 @@ class KeepassMainWindow : public QMainWindow, private Ui_MainWindow{
QWidget* NormalCentralWidget;
QWidget* LockedCentralWidget;
Ui_WorkspaceLockedWidget WorkspaceLockedWidget;
bool ShutingDown;
bool InUnLock;
QList<int> lockGroup;
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">
<qresource>
<file>default-detailview.html</file>
<file>docs/faq.html</file>
<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/EditGroupDlg.ui \
forms/ExpiredEntriesDlg.ui \
forms/HelpDlg.ui \
forms/MainWindow.ui \
forms/ManageBookmarksDlg.ui \
forms/PasswordDlg.ui \
@ -207,6 +208,7 @@ HEADERS += main.h \
dialogs/EditEntryDlg.h \
dialogs/EditGroupDlg.h \
dialogs/ExpiredEntriesDlg.h \
dialogs/HelpDlg.h \
dialogs/ManageBookmarksDlg.h \
dialogs/PasswordDlg.h \
dialogs/PasswordGenDlg.h \
@ -265,6 +267,7 @@ SOURCES += main.cpp \
dialogs/EditEntryDlg.cpp \
dialogs/EditGroupDlg.cpp \
dialogs/ExpiredEntriesDlg.cpp \
dialogs/HelpDlg.cpp \
dialogs/ManageBookmarksDlg.cpp \
dialogs/PasswordDlg.cpp \
dialogs/PasswordGenDlg.cpp \

File diff suppressed because it is too large Load Diff

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