summaryrefslogtreecommitdiff
path: root/core
Side-by-side diff
Diffstat (limited to 'core') (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/multikeyapplet/multikey.cpp22
-rw-r--r--core/applets/multikeyapplet/multikey.h2
2 files changed, 21 insertions, 3 deletions
diff --git a/core/applets/multikeyapplet/multikey.cpp b/core/applets/multikeyapplet/multikey.cpp
index 0a056b0..f1227ef 100644
--- a/core/applets/multikeyapplet/multikey.cpp
+++ b/core/applets/multikeyapplet/multikey.cpp
@@ -21,29 +21,43 @@
#include <qlabel.h>
#include <qdir.h>
#include <qfileinfo.h>
#include <qcopchannel_qws.h>
-Multikey::Multikey( QWidget *parent ) : QLabel( parent ), current("EN")
+Multikey::Multikey(QWidget *parent) : QLabel(parent), popupMenu(this), current("EN")
{
QCopChannel* swChannel = new QCopChannel("MultiKey/Switcher", this);
connect( swChannel, SIGNAL(received(const QCString &, const QByteArray &)),
this, SLOT(message(const QCString &, const QByteArray &)));
setFont( QFont( "Helvetica", 10, QFont::Normal ) );
lang = 0;
QCopEnvelope e("MultiKey/Keyboard", "getmultikey()");
setText("EN");
+ popupMenu.insertItem("EN", -1);
show();
}
-void Multikey::mousePressEvent( QMouseEvent * )
+void Multikey::mousePressEvent(QMouseEvent *ev)
{
+ if (ev->button() == RightButton) {
+
+ QPoint p = mapToGlobal(QPoint(0, 0));
+ QSize s = popupMenu.sizeHint();
+ int opt = popupMenu.exec(QPoint(p.x() + (width() / 2) - (s.width() / 2),
+ p.y() - s.height()), 0);
+
+ if (opt == -1)
+ return;
+ lang = opt;
+ } else {
+ lang = lang < sw_maps.count()-1 ? lang+1 : 0;
+ }
+
QCopEnvelope e("MultiKey/Keyboard", "setmultikey(QString)");
- lang = lang < sw_maps.count()-1 ? lang+1 : 0;
//qDebug("Lang=%d, count=%d, lab=%s", lang, sw_maps.count(), labels[lang].ascii());
e << sw_maps[lang];
setText(labels[lang]);
}
void Multikey::message(const QCString &message, const QByteArray &data)
@@ -57,12 +71,13 @@ void Multikey::message(const QCString &message, const QByteArray &data)
sw.append(current_map);
QDir map_dir(QPEApplication::qpeDir() + "/share/multikey/", "*.keymap");
lang = 0;
labels.clear();
sw_maps.clear();
+ popupMenu.clear();
for (uint i = 0; i < sw.count(); ++i) {
QString keymap_map;
if (sw[i][0] != '/') {
keymap_map = map_dir.absPath() + "/" + sw[i];
@@ -87,12 +102,13 @@ void Multikey::message(const QCString &message, const QByteArray &data)
if (i != sw.count()-1) {
if (keymap_map == current_map) {
lang = i;
}
sw_maps.append(keymap_map);
labels.append(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace());
+ popupMenu.insertItem(labels[labels.count()-1], labels.count()-1);
} else {
current = line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace();
}
break;
}
map.readLine(line, 1024);
diff --git a/core/applets/multikeyapplet/multikey.h b/core/applets/multikeyapplet/multikey.h
index 2cb7b29..b525074 100644
--- a/core/applets/multikeyapplet/multikey.h
+++ b/core/applets/multikeyapplet/multikey.h
@@ -13,12 +13,13 @@
**********************************************************************/
#ifndef __MULTIKEY_H__
#define __MULTIKEY_H__
#include <qlabel.h>
#include <qstringlist.h>
+#include <qpopupmenu.h>
#include <qcopchannel_qws.h>
class Multikey : public QLabel
{
Q_OBJECT
public:
@@ -28,11 +29,12 @@ public slots:
void message(const QCString &message, const QByteArray &data);
protected:
void mousePressEvent( QMouseEvent * );
QStringList sw_maps;
QStringList labels;
+ QPopupMenu popupMenu;
QString current;
uint lang;
};
#endif /* __MULTIKEY_H__ */