summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/odevice.cpp82
-rw-r--r--libopie/odevice.h24
2 files changed, 92 insertions, 14 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index c5a916b..c5342e1 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -76,4 +76,5 @@ public:
uint m_holdtime;
QStrList *m_cpu_frequencies;
+
};
@@ -141,6 +142,6 @@ public:
virtual bool setLedState ( OLed led, OLedState st );
- virtual bool hasHingeSensor() const;
- virtual OHingeStatus readHingeSensor();
+ bool hasHingeSensor() const;
+ OHingeStatus readHingeSensor();
static bool isZaurus();
@@ -148,6 +149,6 @@ public:
// Does this break BC?
virtual bool suspend ( );
- virtual Transformation rotation ( ) const;
- virtual ODirection direction ( ) const;
+ Transformation rotation ( ) const;
+ ODirection direction ( ) const;
protected:
@@ -156,4 +157,5 @@ protected:
OLedState m_leds [1];
bool m_embedix;
+ void virtual_hook( int id, void *data );
};
@@ -729,5 +731,8 @@ QString ODevice::systemVersionString ( ) const
Transformation ODevice::rotation ( ) const
{
- return d-> m_rotation;
+ VirtRotation rot;
+ ODevice* that =(ODevice* )this;
+ that->virtual_hook( VIRTUAL_ROTATION, &rot );
+ return rot.trans;
}
@@ -737,5 +742,8 @@ Transformation ODevice::rotation ( ) const
ODirection ODevice::direction ( ) const
{
- return d-> m_direction;
+ VirtDirection dir;
+ ODevice* that =(ODevice* )this;
+ that->virtual_hook( VIRTUAL_DIRECTION, &dir );
+ return dir.direct;
}
@@ -847,5 +855,8 @@ int ODevice::lightSensorResolution ( ) const
bool ODevice::hasHingeSensor ( ) const
{
- return false;
+ VirtHasHinge hing;
+ ODevice* that =(ODevice* )this;
+ that->virtual_hook( VIRTUAL_HAS_HINGE, &hing );
+ return hing.hasHinge;
}
@@ -855,5 +866,7 @@ bool ODevice::hasHingeSensor ( ) const
OHingeStatus ODevice::readHingeSensor ( )
{
- return CASE_UNKNOWN;
+ VirtHingeStatus hing;
+ virtual_hook( VIRTUAL_HINGE, &hing );
+ return hing.hingeStat;
}
@@ -1004,6 +1017,27 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
}
-void ODevice::virtual_hook(int, void* ){
-
+void ODevice::virtual_hook(int id, void* data){
+ switch( id ) {
+ case VIRTUAL_ROTATION:{
+ VirtRotation* rot = reinterpret_cast<VirtRotation*>( data );
+ rot->trans = d->m_rotation;
+ break;
+ }
+ case VIRTUAL_DIRECTION:{
+ VirtDirection *dir = reinterpret_cast<VirtDirection*>( data );
+ dir->direct = d->m_direction;
+ break;
+ }
+ case VIRTUAL_HAS_HINGE:{
+ VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data );
+ hin->hasHinge = false;
+ break;
+ }
+ case VIRTUAL_HINGE:{
+ VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data );
+ hin->hingeStat = CASE_UNKNOWN;
+ break;
+ }
+ }
}
@@ -2154,4 +2188,32 @@ OHingeStatus Zaurus::readHingeSensor()
+void Zaurus::virtual_hook( int id, void *data ) {
+ switch( id ) {
+ case VIRTUAL_ROTATION:{
+ VirtRotation* rot = reinterpret_cast<VirtRotation*>( data );
+ rot->trans = rotation();
+ break;
+ }
+ case VIRTUAL_DIRECTION:{
+ VirtDirection *dir = reinterpret_cast<VirtDirection*>( data );
+ dir->direct = direction();
+ break;
+ }
+ case VIRTUAL_HAS_HINGE:{
+ VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data );
+ hin->hasHinge = hasHingeSensor();
+ break;
+ }
+ case VIRTUAL_HINGE:{
+ VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data );
+ hin->hingeStat = readHingeSensor();
+ break;
+ }
+ default:
+ ODevice::virtual_hook( id, data );
+ break;
+ }
+}
+
/**************************************************
*
diff --git a/libopie/odevice.h b/libopie/odevice.h
index 791d358..fc41079 100644
--- a/libopie/odevice.h
+++ b/libopie/odevice.h
@@ -195,6 +195,6 @@ public:
QString systemVersionString ( ) const;
- virtual Transformation rotation ( ) const;
- virtual ODirection direction ( ) const;
+ /*virtual*/ Transformation rotation ( ) const;
+ /*virtual*/ ODirection direction ( ) const;
// system
@@ -230,6 +230,6 @@ public:
virtual int lightSensorResolution ( ) const;
- virtual bool hasHingeSensor ( ) const;
- virtual OHingeStatus readHingeSensor ( );
+ /*virtual*/ bool hasHingeSensor ( ) const;
+ /*virtual*/ OHingeStatus readHingeSensor ( );
const QStrList &allowedCpuFrequencies() const;
@@ -279,4 +279,20 @@ protected:
/* ugly virtual hook */
virtual void virtual_hook( int id, void* data );
+
+protected:
+ enum { VIRTUAL_ROTATION = 0x200, VIRTUAL_DIRECTION,
+ VIRTUAL_HAS_HINGE, VIRTUAL_HINGE };
+ struct VirtRotation {
+ Transformation trans;
+ };
+ struct VirtDirection {
+ ODirection direct;
+ };
+ struct VirtHasHinge {
+ bool hasHinge;
+ };
+ struct VirtHingeStatus {
+ OHingeStatus hingeStat;
+ };
};