From 3f4f9abb369233a6dbc255ad0a25d8aa4e6ea680 Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Sun, 27 May 2012 19:43:34 +0200 Subject: [PATCH] Support RTL layout in LineEdit. --- COPYING | 3 + .../actions/edit-clear-locationbar-ltr.png | Bin 0 -> 793 bytes .../actions/edit-clear-locationbar-rtl.png | Bin 0 -> 579 bytes .../actions/edit-clear-locationbar-rtl.png | Bin 750 -> 0 bytes src/gui/LineEdit.cpp | 55 +++++++++++++----- src/gui/LineEdit.h | 26 ++++++--- 6 files changed, 62 insertions(+), 22 deletions(-) create mode 100644 share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png create mode 100644 share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png delete mode 100644 share/icons/application/22x22/actions/edit-clear-locationbar-rtl.png diff --git a/COPYING b/COPYING index c19ee7353..e6c759d82 100644 --- a/COPYING +++ b/COPYING @@ -20,6 +20,7 @@ Source: http://www.keepassx.org/ Copyright: 2010-2012, Felix Geyer 2011-2012, Florian Geyer + 2007, Trolltech ASA License: GPL-2 or GPL-3 Files: share/icons/database/*.png @@ -59,6 +60,8 @@ Files: share/icons/application/*/actions/application-exit.png, share/icons/application/*/actions/document-open.png, share/icons/application/*/actions/document-save.png, share/icons/application/*/actions/document-save-as.png, + share/icons/application/*/actions/edit-clear-locationbar-ltr.png, + share/icons/application/*/actions/edit-clear-locationbar-rtl.png, share/icons/application/*/actions/system-search.png, share/icons/application/*/status/dialog-error.png, share/icons/application/*/status/dialog-information.png, diff --git a/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png b/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..97c8e38a760e11419c1d26730ebcf8709399aef1 GIT binary patch literal 793 zcmV+!1LpjRP)ikHXH*4l(-&@X)GQYOzB&XtLSdie2)0P?`7Y@unoJ7k78Vy^cJ|Hf&QAZN)n*yBS}l=#b?%7U?TR>@_R&Ch*TnGfGgCbN z1-#x49xjLgBv&N>?d@&ga=XU;ejoaLJ~H%V2m^rthC%}v3c>EE;2nmO-@fw$@21YlFkS7^EE?FO^r}q zUj8ddVNoIEY4V~blL@!Cw+T}F`}-J+#qjX(P(W&Pb5rnoy~J*}V|GsV6dUBX?_c3u z5lx^}DqraJdUQA(WNT{+nX|JqWHvT7g!=k=tgWpTJRT1*RvS^FP`m?xE5Jx365x4$ zA}cG4{UDJ@1eru4fy~Ir2x_%j!Duw1!C(-~W^2!*!tBpMEgrjfHY%y~dtC=(0F>qF!m9MC%_+#at XXske$^=?^v00000NkvXXu0mjfk}rSh literal 0 HcmV?d00001 diff --git a/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png b/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..85e31eb30a0ea0da288a4dbb08c22d3a57158c70 GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47)=9wLR|m<{|^+gaVq#KJRRNL`65=c@EWEtDKye@! z$OdX*V`F1yXXoJH;Njr`N(l%Eh=>S_h=@o^N&*d6R8mw@Qc_n}(>KsFG&D3aHZ(Uk zx3aPVT48T*?+64=_Aai@uCA``?(SYd;O*hKCSzGM5rg9ncsJ#y^WvGW(sU%7JS-o1MdA3l8k{Q1k5FJHZS_4e)C z4<9~!{`~pNmoLA5{rdg;_n$w1O1-|X0)~Y|NswPKgS@<+p1plYNNVbiQ>U&xefspn zhaW%w{^eS^W)@J*QcoAhkcwM#`(4EjIWRbP@2)P~{)msYYq#~$+vooFA2<-xaQyz? zoJk4)4~44=ay@a1t+tcwU)Egr<#iJC&Lpw7lAG0><)_c$T5J6KmcfI#kB-x$FD=)Bk`pWlA$Um4e<`(hLC z&A%IFd^T1+&)u5kmdC_beAOX0I~6Ou#GU>gUTYpxBqPDp^ydfA!3>_RelF{r5}E+% CeBE*Y literal 0 HcmV?d00001 diff --git a/share/icons/application/22x22/actions/edit-clear-locationbar-rtl.png b/share/icons/application/22x22/actions/edit-clear-locationbar-rtl.png deleted file mode 100644 index 80ff24af5698684b79ba8855d207067337d4347c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 750 zcmV5s$|ai^UL)Mln1*jERW}OioTB z91b%Y%nvdJ#kIADpviPE9SVi8v9W=ZlM~F&&LR*9!0-2CbaWJZdwV!MJY<7;y&3Q?uz*0iBo51-G6<>h6h(`m->@iFG+<}fxkhEytrY&MHrF2@G&cs!`QU6Eg0 zR#v7^-B2xR?`YB9-p)Gn8EfGu z(AwI{a5|l6X=y<)7{u=GE;5-6k09j-nwpw|$z(!XTN~*A%VLT|RaF%n4hJ}n1MLPh zHa5a)wZdYtU}k1U5MEqdfR98X0V*(zMkCZ}HN;|ZUU9O#yc~SSTCEm3oel-`d)O*XM;)DuqNM$zMDQCGnButfNRI!otD=TVH~0yGSI0uC7k3uC5C0$z&3D zb$3xxQgY>X6B8e(m?$k(({kvsw6uiv^>0kt#MxkXaOmv|v6)czlyL{@>+iE<3LX%O zKAB9Gt~1ub(QGGCFWk?bqQmP!SN98azwE@&yFr8p!g%6xqM7>8Obdwxc{8osck3f7 z%j)%;00tuih{i_nK2FDaWC(A=z3{*4rti-|v&`lf=a=hgtv@N1N)#YR$9nO%uT2Um gA-e*}zkSjF0Lui@@$wg%kN^Mx07*qoM6N<$f=@zU-~a#s diff --git a/src/gui/LineEdit.cpp b/src/gui/LineEdit.cpp index e344899c6..89b420471 100644 --- a/src/gui/LineEdit.cpp +++ b/src/gui/LineEdit.cpp @@ -1,16 +1,26 @@ -/**************************************************************************** -** -** Copyright (c) 2007 Trolltech ASA -** -** Use, modification and distribution is allowed without limitation, -** warranty, liability or support of any kind. -** -****************************************************************************/ +/* + * Copyright (C) 2007 Trolltech ASA + * Copyright (C) 2012 Felix Geyer + * Copyright (C) 2012 Florian Geyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "LineEdit.h" -#include #include +#include #include "core/DataPath.h" @@ -19,7 +29,18 @@ LineEdit::LineEdit(QWidget* parent) { m_clearButton = new QToolButton(this); m_clearButton->setObjectName("clearButton"); - QIcon icon = dataPath()->icon("actions", "edit-clear-locationbar-rtl"); + + QIcon icon; + QString iconNameDirected = QString("edit-clear-locationbar-").append( + (layoutDirection() == Qt::LeftToRight) ? "rtl" : "ltr"); + icon = QIcon::fromTheme(iconNameDirected); + if (icon.isNull()) { + icon = QIcon::fromTheme("edit-clear"); + if (icon.isNull()) { + icon = dataPath()->icon("actions", iconNameDirected, false); + } + } + m_clearButton->setIcon(icon); m_clearButton->setCursor(Qt::ArrowCursor); m_clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); @@ -36,12 +57,18 @@ LineEdit::LineEdit(QWidget* parent) void LineEdit::resizeEvent(QResizeEvent* event) { - Q_UNUSED(event); - QSize sz = m_clearButton->sizeHint(); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); - m_clearButton->move(rect().right() - frameWidth - sz.width(), - (rect().bottom() + 1 - sz.height())/2); + int y = (rect().bottom() + 1 - sz.height()) / 2; + + if (layoutDirection() == Qt::LeftToRight) { + m_clearButton->move(rect().right() - frameWidth - sz.width(), y); + } + else { + m_clearButton->move(rect().left() + frameWidth, y); + } + + QLineEdit::resizeEvent(event); } void LineEdit::updateCloseButton(const QString& text) diff --git a/src/gui/LineEdit.h b/src/gui/LineEdit.h index 85ddb7c76..802180f12 100644 --- a/src/gui/LineEdit.h +++ b/src/gui/LineEdit.h @@ -1,11 +1,21 @@ -/**************************************************************************** -** -** Copyright (c) 2007 Trolltech ASA -** -** Use, modification and distribution is allowed without limitation, -** warranty, liability or support of any kind. -** -****************************************************************************/ +/* + * Copyright (C) 2007 Trolltech ASA + * Copyright (C) 2012 Felix Geyer + * Copyright (C) 2012 Florian Geyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #ifndef KEEPASSX_LINEEDIT_H #define KEEPASSX_LINEEDIT_H