From kde-core-devel Mon Mar 12 17:59:36 2007 From: =?iso-8859-15?q?Micha=EBl_Larouche?= Date: Mon, 12 Mar 2007 17:59:36 +0000 To: kde-core-devel Subject: Re: [RFC] KInformationLabel Message-Id: <200703121359.38777.larouche () kde ! org> X-MARC-Message: https://marc.info/?l=kde-core-devel&m=117390941313695 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--nextPart1218333.YI0B1oaAW0" --nextPart1218333.YI0B1oaAW0 Content-Type: multipart/mixed; boundary="Boundary-01=_IUZ9F4OvW615tm+" Content-Transfer-Encoding: 7bit Content-Disposition: inline --Boundary-01=_IUZ9F4OvW615tm+ Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Le March 12, 2007 04:15, Simon Hausmann a =E9crit=A0: > On Monday 12 March 2007 03:17:41 Micha=EBl Larouche wrote: > > Le March 3, 2007 12:56, Micha=EBl Larouche a =E9crit=A0: > > > I have been working (slowy) on a new widget for kdelibs. > > > > > > It is a small label to display message in a dialog. The label is first > > > hidden when instancied and only show up when a message is affected to > > > the label. This is similiar to the ErrorNotifier control in Windows > > > Forms. This widget will be useful to replace message box in dialog li= ke > > > Ask Password dialog and other non-modal dialogs. > > > > > > This is a work in progress of course and not all planned features are > > > not implemented. I would like to add a autohide timeout to the widget. > > > I tried to add FadeIn animation. > > > > > > I would like comments and suggestion about for this widget. > > > > Here a updated patch ready to be comitted on tomorrow (kdelibs breakage) > > Looks okay to me. Here's some more feedback on the API: > > * I suggest to replace setIconName(const QString &name) with just a second > setIcon overload that takes a QIcon. It's nice if a property called "icon" > also takes the native icon type :) > > * I also wouldn't make setIcon a slot. I've never seen a signal that emits > an icon :) > > * I suggest to rename the timeout property (what's a timeout a label?) to > autoHideTimeout (aha!). > > And of course the obligatory question for kdelibs inclusion at the end: > Which applications are using this widget (either at the moment or in the > near future)? > > > Simon New patch based on your suggestion Simon. I'll try to make use of this widget where it is needed to replace modal=20 message box used in wrong contextes. I needed that for a dialog in Kopete a= t=20 least and kdesu will make good use of it :) Just think every dialog that ask a password, it will be able to display the= =20 error meessage right in the dialog in a nice way. =2D-=20 Micha=EBl Larouche KDE developer working on Kopete, Gamefu(KDE), Solid...on dial-up :P =2D------------------------------------- Website: http://www.tehbisnatch.org/ MSN: michael.larouche@kdemail.net IRC: irc.freenode.org/DarkShock Jabber/email: larouche@kde.org --Boundary-01=_IUZ9F4OvW615tm+ Content-Type: text/x-diff; charset="iso-8859-15"; name="kinformationlabel_diff_v3.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="kinformationlabel_diff_v3.patch" Index: kdewidgets/kde.widgets =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- kdewidgets/kde.widgets (r=C3=A9vision 641529) +++ kdewidgets/kde.widgets (copie de travail) @@ -264,3 +264,8 @@ ToolTip=3DGroup of radio buttons with index selection. IsContainer=3Dtrue Group=3DContainer (KDE) + +[KInformationLabel] +IncludeFile=3Dkinformationlabel.h +ToolTip=3DA specialized label to display informative message +Group=3DDisplay (KDE) Index: kdeui/tests/kinformationlabeltest.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- kdeui/tests/kinformationlabeltest.cpp (r=C3=A9vision 0) +++ kdeui/tests/kinformationlabeltest.cpp (r=C3=A9vision 0) @@ -0,0 +1,100 @@ +/* This file is part of the KDE libraries + Copyright (C) 2007 Micha=C3=ABl Larouche + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; version 2 + of the License. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public Lice= nse + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#include "kinformationlabeltest.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +KInformationLabel_Test::KInformationLabel_Test(QWidget *parent) + : QWidget(parent) +{ + QVBoxLayout *mainLayout =3D new QVBoxLayout(this); + + iconComboBox =3D new QComboBox(this); + iconComboBox->addItem( "Information" ); + iconComboBox->addItem( "Error" ); + iconComboBox->addItem( "Warning" ); + iconComboBox->addItem( "Custom" ); + mainLayout->addWidget( iconComboBox ); + + QHBoxLayout *iconNameLayout =3D new QHBoxLayout(this); + + QLabel *labelIconName =3D new QLabel("Icon name:", this); + iconNameLayout->addWidget(labelIconName); + + lineIconName =3D new QLineEdit(this); + iconNameLayout->addWidget(lineIconName); + + mainLayout->addLayout(iconNameLayout); + + QHBoxLayout *timeoutLayout =3D new QHBoxLayout(this); + + QLabel *labelTimeout =3D new QLabel("Autohide timeout:", this); + timeoutLayout->addWidget(labelTimeout); + + timeoutSpinBox =3D new QSpinBox(this); + timeoutSpinBox->setRange(0, 10000); + timeoutLayout->addWidget(timeoutSpinBox); + + mainLayout->addLayout(timeoutLayout); + + // Create main layout + QPushButton *buttonTest =3D new QPushButton("Show message", this); + connect(buttonTest, SIGNAL(clicked()), this, SLOT(buttonTestClicked())= ); + mainLayout->addWidget(buttonTest); + + testLabel =3D new KInformationLabel(this); + mainLayout->addWidget(testLabel); + mainLayout->addStretch(); +} + +void KInformationLabel_Test::buttonTestClicked() +{ + testLabel->setIconType( static_cast( iconComb= oBox->currentIndex() ) ); + testLabel->setIcon( KIcon(lineIconName->text()) ); + testLabel->setAutoHideTimeout( timeoutSpinBox->value() ); + testLabel->setText( "This is a test message" ); +} + +int main(int argc, char **argv) +{ + KCmdLineArgs::init(argc, argv, "kinformationlabeltest", "KInformationL= abel_Test", "description", "version"); + + KApplication app; + + KInformationLabel_Test *mainWidget =3D new KInformationLabel_Test; + mainWidget->setAttribute( static_cast(Qt::WA_Dele= teOnClose | Qt::WA_QuitOnClose) ); + mainWidget->show(); + + return app.exec(); +} + +#include "kinformationlabeltest.moc" + +// kate: space-indent on; indent-width 4; encoding utf-8; replace-tabs on; Index: kdeui/tests/kinformationlabeltest.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- kdeui/tests/kinformationlabeltest.h (r=C3=A9vision 0) +++ kdeui/tests/kinformationlabeltest.h (r=C3=A9vision 0) @@ -0,0 +1,46 @@ +/* This file is part of the KDE libraries + Copyright (C) 2007 Micha=C3=ABl Larouche + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; version 2 + of the License. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public Lice= nse + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef KINFORMATIONLABELTEST_H +#define KINFORMATIONLABELTEST_H + +#include + +class KInformationLabel; +class QSpinBox; +class QComboBox; +class QLineEdit; + +class KInformationLabel_Test : public QWidget +{ + Q_OBJECT +public: + KInformationLabel_Test(QWidget *parent =3D 0); + +private Q_SLOTS: + void buttonTestClicked(); + +private: + KInformationLabel *testLabel; + QSpinBox *timeoutSpinBox; + QComboBox *iconComboBox; + QLineEdit *lineIconName; +}; + +#endif +// kate: space-indent on; indent-width 4; encoding utf-8; replace-tabs on; Index: kdeui/tests/CMakeLists.txt =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- kdeui/tests/CMakeLists.txt (r=C3=A9vision 641529) +++ kdeui/tests/CMakeLists.txt (copie de travail) @@ -216,6 +216,18 @@ =20 ########### next target ############### =20 +set(kinformationlabeltest_SRCS +kinformationlabeltest.cpp +) + +kde4_automoc(${kinformationlabeltest_SRCS}) + +kde4_add_executable(kinformationlabeltest NOGUI RUN_UNINSTALLED ${kinforma= tionlabeltest_SRCS}) + +target_link_libraries(kinformationlabeltest ${KDE4_KDEUI_LIBS}) + +########### next target ############### + set(kledtest_SRCS kledtest.cpp ) Index: kdeui/widgets/kinformationlabel.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- kdeui/widgets/kinformationlabel.cpp (r=C3=A9vision 0) +++ kdeui/widgets/kinformationlabel.cpp (r=C3=A9vision 0) @@ -0,0 +1,218 @@ +/* This file is part of the KDE libraries + Copyright (C) 2007 Micha=C3=ABl Larouche + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; version 2 + of the License. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public Lice= nse + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#include "kinformationlabel.h" + +// Qt includes +#include +#include +#include +#include +#include + +// KDE includes +#include +#include + +class KInformationLabel::Private +{ +public: + Private(KInformationLabel *parent) + : q(parent), iconLabel(0), messageLabel(0), currentIconType(KInformat= ionLabel::Information), + autoHideTimeout(0) + {} + + KInformationLabel *q; + QLabel *iconLabel; + QLabel *messageLabel; + + KInformationLabel::Icon currentIconType; + QIcon icon; + int autoHideTimeout; + + /** + * @brief Get the icon name from the icon type + * @param type icon type from the enum + * @return named icon as QString + */ + QString iconTypeToIconName(KInformationLabel::Icon type); + /** + * @brief Update the icon for the label + * @param icon a stock icon loaded using KIcon + */ + void updateIcon(const KIcon &icon); + + void showWidget(); + void _k_timeoutFinished(); +}; + +KInformationLabel::KInformationLabel(QWidget *parent) + : QFrame(parent), d(new Private(this)) +{ + // Set QFrame parameters + setAutoFillBackground(true); + setFrameShape(QFrame::StyledPanel); + setFrameShadow(QFrame::Plain); + setBackgroundRole(QPalette::Base); + + // Create icon label + d->iconLabel =3D new QLabel(this); + d->iconLabel->installEventFilter(this); + d->iconLabel->setFixedSize(24, 24); + + // Create message label + d->messageLabel =3D new QLabel(this); + d->messageLabel->installEventFilter(this); + d->messageLabel->setAlignment(Qt::AlignLeft); + d->messageLabel->setStyleSheet( QLatin1String("QLabel { font-weight: b= old }") ); + + QHBoxLayout *mainLayout =3D new QHBoxLayout; + mainLayout->setMargin(3); + mainLayout->addWidget(d->iconLabel,0,Qt::AlignVCenter); + mainLayout->addWidget(d->messageLabel,0,Qt::AlignVCenter); + mainLayout->addStretch(1); + + setLayout(mainLayout); + + // By default, the label is hidden for view and will only be + // visible when a message + setVisible(false); + + installEventFilter(this); + + // Set default icon (for designer) + setIconType( KInformationLabel::Information ); +} + +KInformationLabel::~KInformationLabel() +{ + delete d; +} + +bool KInformationLabel::eventFilter(QObject *object, QEvent *event) +{ + // Hide message label on click + if( event->type() =3D=3D QEvent::MouseButtonPress ) + { + QMouseEvent *mouseEvent =3D static_cast(event); + if( mouseEvent && mouseEvent->button() =3D=3D Qt::LeftButton ) + { + setVisible(false); + return true; + } + } + + return QFrame::eventFilter(object, event); +} + +QString KInformationLabel::text() const +{ + return d->messageLabel->text(); +} + +KInformationLabel::Icon KInformationLabel::iconType() const +{ + return d->currentIconType; +} + +QIcon KInformationLabel::icon() const +{ + return d->icon; +} + +int KInformationLabel::autoHideTimeout() const +{ + return d->autoHideTimeout; +} + +void KInformationLabel::setText(const QString &text) +{ + if( !text.isEmpty() ) + { + d->messageLabel->setText( text ); + d->showWidget(); + } + else + { + setVisible(false); + } +} + +void KInformationLabel::setIconType(KInformationLabel::Icon iconType) +{ + d->currentIconType =3D iconType; + d->updateIcon( KIcon(d->iconTypeToIconName(iconType)) ); +} + +void KInformationLabel::setIcon(const QIcon &icon) +{ + d->icon =3D icon; + if( d->currentIconType =3D=3D KInformationLabel::Custom ) + { + d->updateIcon( KIcon(icon) ); + } +} + +void KInformationLabel::setAutoHideTimeout(int msecs) +{ + d->autoHideTimeout =3D msecs; +} + +void KInformationLabel::Private::updateIcon(const KIcon &icon) +{ + iconLabel->setPixmap( icon.pixmap(24, 24) ); +} + +QString KInformationLabel::Private::iconTypeToIconName(KInformationLabel::= Icon iconType) +{ + QString icon; + + switch(iconType) + { + case KInformationLabel::Information: + icon =3D QLatin1String("dialog-information"); + break; + case KInformationLabel::Error: + icon =3D QLatin1String("dialog-error"); + break; + case KInformationLabel::Warning: + icon =3D QLatin1String("dialog-warning"); + break; + case KInformationLabel::Custom: + break; + } + + return icon; +} + +void KInformationLabel::Private::_k_timeoutFinished() +{ + q->setVisible(false); +} + +void KInformationLabel::Private::showWidget() +{ + q->setVisible(true); + if( autoHideTimeout > 0 ) + { + QTimer::singleShot(autoHideTimeout, q, SLOT(_k_timeoutFinished())); + } +} + +#include "kinformationlabel.moc" +// kate: space-indent on; indent-width 4; encoding utf-8; replace-tabs on; Index: kdeui/widgets/kinformationlabel.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- kdeui/widgets/kinformationlabel.h (r=C3=A9vision 0) +++ kdeui/widgets/kinformationlabel.h (r=C3=A9vision 0) @@ -0,0 +1,185 @@ +/* This file is part of the KDE libraries + Copyright (C) 2007 Micha=C3=ABl Larouche + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; version 2 + of the License. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public Lice= nse + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef KDEUI_KINFORMATIONLABEL_H +#define KDEUI_KINFORMATIONLABEL_H + +#include +#include +#include + +class QMouseEvent; +/** + * @brief A specialized label to display informative message + * + * KInformationLabel is used to display informative message only when need= ed. + * This is useful to display a warning or error message in a dialog to not= ify + * the user of a problem without using a modal dialog like a message box. + * + * @section Behavior + * KInformationLabel has a special behavior. When first instancied, + * It is not visible to the user untill a message is affected to it. + * + * After the message being shown, the user can click on the label to hide + * it. Also, you can set a autohide timeout using the timeout property. + * By default, no timeout is specified so the label is shown untill the + * user click on it. + * + * To hide the widget using code, just set an empty text. + * + * @section Usage + * KInformationLabel is available as a widget in Qt Designer. Usage is very + * simple, you just need to set a text to the label. 4 types of messages c= an + * be set to the label, an informative message, an error message, a warning + * message and a custom message with a custom icon. See the example below: + * @code +KInformationLabel *label =3D new KInformationLabel(parent); +label->setIconType(KInformation::Error); +label->setText("Sample Error Message"); + * @endcode + * + * To set a custom message and icon, you need to set the icon property + * using setIcon() and iconType property to Custom using setIconType + * @code +KInformationLabel *label =3D new KInformationLabel(parent); +label->setIconType(KInformation::Custom); +label->setIcon( KIcon("go-home") ); +label->setText("Custom message using go-home icon"); + * @endcode + * + * @author Micha=C3=ABl Larouche + */ +class KDEUI_EXPORT KInformationLabel : public QFrame +{ + Q_OBJECT + /** + * @brief Text used in the label + */ + Q_PROPERTY(QString text READ text WRITE setText) + /** + * @brief Icon type for the message + */ + Q_PROPERTY(Icon iconType READ iconType WRITE setIconType) + /** + * @brief Icon for the Custom icon type + */ + Q_PROPERTY(QIcon icon READ icon WRITE setIcon) + /** + * @brief Autohide timeout for the label. Set to 0 to disable autohide + */ + Q_PROPERTY(int autoHideTimeout READ autoHideTimeout WRITE setAutoHideT= imeout) + Q_ENUMS(Icon) + +public: + /** + * Type of icons which can be displayed by the label + */ + enum Icon + { + Information, ///< Icon for an informative message + Error, ///< Icon for an error message + Warning, ///< Icon for a warning message + Custom ///< Set a custom icon using setIconName() + }; + + /** + * Constructor + * @param parent Parent widget + */ + explicit KInformationLabel(QWidget *parent =3D 0); + /** + * Destructor + */ + ~KInformationLabel(); + + /** + * @brief Get the current text set in the label + * @return current text as QString + */ + QString text() const; + + /** + * @brief Get the current icon type + * @return current icon type + */ + KInformationLabel::Icon iconType() const; + + /** + * @brief Get the current icon name. + * @return current icon name + */ + QIcon icon() const; + + /** + * @brief Get the current timeout value in miliseconds + * @return timeout value in msecs. + */ + int autoHideTimeout() const; + + /** + * @brief Set an icon type to the label + * + * When icon type is set to Custom, it use the current + * icon name to update the pixmap in the label. + * @param iconType current icon type. See Icon enum + */ + void setIconType(KInformationLabel::Icon iconType); + + /** + * @brief Set an icon for Custom icon type + * + * When the label is in Custom mode, it also + * update the current pixmap. + * @param icon a QIcon or a KIcon + */ + void setIcon(const QIcon &icon); + +public Q_SLOTS: + /** + * @brief Set a message to the label + * + * When calling this method, the widget get visible. + * + * If the text is empty, the widget hide itself. + * + * @param text text to show. use an empty string to hide the widget + */ + void setText(const QString &text); + + /** + * @brief Set the autohide timeout of the label + * + * Set value to 0 to disable autohide. + * @param msecs timeout value in milliseconds + */ + void setAutoHideTimeout(int msecs); + +protected: + bool eventFilter(QObject *object, QEvent *event); + +private: + Q_DISABLE_COPY(KInformationLabel) + Q_PRIVATE_SLOT(d, void _k_timeoutFinished()) + + class Private; + Private * const d; +}; + +#endif + +// kate: space-indent on; indent-width 4; encoding utf-8; replace-tabs on; Index: kdeui/CMakeLists.txt =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- kdeui/CMakeLists.txt (r=C3=A9vision 641529) +++ kdeui/CMakeLists.txt (copie de travail) @@ -148,6 +148,7 @@ widgets/khbox.cpp widgets/khelpmenu.cpp widgets/kkeybutton.cpp + widgets/kinformationlabel.cpp widgets/kled.cpp widgets/klineedit.cpp widgets/kmenu.cpp @@ -339,6 +340,7 @@ widgets/khbox.h widgets/khelpmenu.h widgets/kkeybutton.h + widgets/kinformationlabel.h widgets/kled.h widgets/klineedit.h widgets/kmenu.h --Boundary-01=_IUZ9F4OvW615tm+-- --nextPart1218333.YI0B1oaAW0 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) iQCVAwUARfWVCgeX50KFcoE3AQJLXgQAlaFN3wjgFitD18RiN+cgqBfkXs3L9FsR i9kazj9DoVV+62IFjLwkIP2jPJ+AmOtuO9h9Yl+yByMk1jvnxjQhAK5EKLZr9gKj KbAYDLgB2If6ECLcvwGWfrexgZUBmYDTDvoxWcMmzLVEd4IIAFeEECH8NB5zkoIe a97I+Uptn6k= =yrBK -----END PGP SIGNATURE----- --nextPart1218333.YI0B1oaAW0--