00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "okeyfilter.h"
00030 #include "device/odevice.h"
00031 #include "odebug.h"
00032
00033 namespace Opie {
00034 namespace Core {
00035
00036 class OKeyFilterPrivate:public OKeyFilter, QWSServer::KeyboardFilter
00037 {
00038 static QValueList<QWSServer::KeyboardFilter*> filterList;
00039 static QValueList<QWSServer::KeyboardFilter*> preFilterList;
00040 protected:
00041 OKeyFilterPrivate(const OKeyFilterPrivate&):OKeyFilter(),QWSServer::KeyboardFilter(){};
00042 virtual void addPreHandler(QWSServer::KeyboardFilter* aFilter);
00043 virtual void remPreHandler(QWSServer::KeyboardFilter* aFilter);
00044
00045 public:
00046 OKeyFilterPrivate();
00047 virtual ~OKeyFilterPrivate();
00048 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
00049 virtual void addHandler(QWSServer::KeyboardFilter* aFilter);
00050 virtual void remHandler(QWSServer::KeyboardFilter* aFilter);
00051 };
00052
00053 QValueList<QWSServer::KeyboardFilter*> OKeyFilterPrivate::filterList;
00054 QValueList<QWSServer::KeyboardFilter*> OKeyFilterPrivate::preFilterList;
00055
00056 OKeyFilter::OKeyFilter()
00057 {
00058 }
00059
00060 OKeyFilter::~OKeyFilter()
00061 {
00062 }
00063
00064 OKeyFilter* OKeyFilter::inst()
00065 {
00066 static OKeyFilter*ofilter = 0;
00067 if (!ofilter) {
00068 ofilter = new OKeyFilterPrivate;
00069 }
00070 return ofilter;
00071 }
00072
00073 bool OKeyFilterPrivate::filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat )
00074 {
00075 QValueList<QWSServer::KeyboardFilter*>::Iterator iter;
00076 for (iter=preFilterList.begin();iter!=preFilterList.end();++iter) {
00077 if ((*iter)->filter(unicode,keycode,modifiers,isPress,autoRepeat)) {
00078 return true;
00079 }
00080 }
00081 for (iter=filterList.begin();iter!=filterList.end();++iter) {
00082 if ((*iter)->filter(unicode,keycode,modifiers,isPress,autoRepeat)) {
00083 return true;
00084 }
00085 }
00086 return false;
00087 }
00088
00089 void OKeyFilterPrivate::addHandler(QWSServer::KeyboardFilter*aF)
00090 {
00091 if (!aF) return;
00092 if (filterList.find(aF)!=filterList.end()) {
00093 return;
00094 }
00095 odebug << "adding a keyboard filter handler"<<oendl;
00096 filterList.append(aF);
00097 }
00098
00099 void OKeyFilterPrivate::remHandler(QWSServer::KeyboardFilter*aF)
00100 {
00101 if (!aF) return;
00102 QValueList<QWSServer::KeyboardFilter*>::Iterator iter;
00103 if ( (iter=filterList.find(aF))==filterList.end() ) {
00104 return;
00105 }
00106 odebug << "removing a keyboard filter handler"<<oendl;
00107 filterList.remove(iter);
00108 }
00109
00110 void OKeyFilterPrivate::addPreHandler(QWSServer::KeyboardFilter*aF)
00111 {
00112 if (!aF) return;
00113 if (preFilterList.find(aF)!=preFilterList.end()) {
00114 return;
00115 }
00116 odebug << "adding a preferred keyboard filter handler"<<oendl;
00117 preFilterList.append(aF);
00118 }
00119
00120 void OKeyFilterPrivate::remPreHandler(QWSServer::KeyboardFilter*aF)
00121 {
00122 if (!aF) return;
00123 QValueList<QWSServer::KeyboardFilter*>::Iterator iter;
00124 if ( (iter=preFilterList.find(aF))==preFilterList.end() ) {
00125 return;
00126 }
00127 odebug << "removing a preferred keyboard filter handler"<<oendl;
00128 preFilterList.remove(iter);
00129 }
00130
00131 OKeyFilterPrivate::OKeyFilterPrivate()
00132 :OKeyFilter(),QWSServer::KeyboardFilter()
00133 {
00134 filterList.clear();
00135 preFilterList.clear();
00136 if ( isQWS( ) ) {
00137 QWSServer::setKeyboardFilter ( this );
00138 }
00139 }
00140
00141 OKeyFilterPrivate::~OKeyFilterPrivate()
00142 {
00143 }
00144
00145
00146 }
00147
00148 }