author | treke <treke> | 2003-12-08 06:52:35 (UTC) |
---|---|---|
committer | treke <treke> | 2003-12-08 06:52:35 (UTC) |
commit | 7b4e723545a645056156246d27b2c26c78d599f3 (patch) (side-by-side diff) | |
tree | 8b349615fc1441a60bc418e10c53b1799db895e4 | |
parent | 3bbeef6702ef80b7506b5393cc51d1fd5b04559d (diff) | |
download | opie-7b4e723545a645056156246d27b2c26c78d599f3.zip opie-7b4e723545a645056156246d27b2c26c78d599f3.tar.gz opie-7b4e723545a645056156246d27b2c26c78d599f3.tar.bz2 |
Automatic rotation. This might break binary compatibility, so beware including
in BRANCH_1_0
-rw-r--r-- | core/applets/rotateapplet/rotate.cpp | 41 | ||||
-rw-r--r-- | core/applets/rotateapplet/rotate.h | 1 | ||||
-rw-r--r-- | libopie/odevice.cpp | 124 | ||||
-rw-r--r-- | libopie/odevice.h | 4 | ||||
-rw-r--r-- | qt/qt-2.3.7.patch/qte237-all.patch | 11 |
5 files changed, 162 insertions, 19 deletions
diff --git a/core/applets/rotateapplet/rotate.cpp b/core/applets/rotateapplet/rotate.cpp index ac6b259..0da2f0c 100644 --- a/core/applets/rotateapplet/rotate.cpp +++ b/core/applets/rotateapplet/rotate.cpp @@ -68,2 +68,4 @@ void RotateApplet::channelReceived( const QCString &msg, const QByteArray & data activated ( ); + } else if ( msg == "rotateDefault()") { + rotateDefault(); } @@ -113,2 +115,41 @@ QPopupMenu *RotateApplet::popup ( QWidget * ) const +void RotateApplet::rotateDefault ( ) +{ + + int rot = ODevice::inst()->rotation(); + + switch (rot) { + case Rot0: + rot=0; + break; + case Rot90: + rot=90; + break; + case Rot180: + rot=180; + break; + case Rot270: + rot=270; + break; + default: + rot=0; + break; + } + Config cfg( "qpe" ); + cfg.setGroup( "Appearance" ); + + bool rotateDisabled = cfg.readBoolEntry( "rotateEnabled",false ); + + if (rotateDisabled == true) + return; + + // hide inputs methods before rotation + QCopEnvelope en( "QPE/TaskBar", "hideInputMethod()" ); + + QCopEnvelope env( "QPE/System", "setCurrentRotation(int)" ); + env << rot; + + m_flipped = false; + +} void RotateApplet::activated ( ) diff --git a/core/applets/rotateapplet/rotate.h b/core/applets/rotateapplet/rotate.h index de2a707..572b82a 100644 --- a/core/applets/rotateapplet/rotate.h +++ b/core/applets/rotateapplet/rotate.h @@ -60,2 +60,3 @@ public: virtual void activated ( ); + virtual void rotateDefault ( ); diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp index 9373ef9..5038cc9 100644 --- a/libopie/odevice.cpp +++ b/libopie/odevice.cpp @@ -144,2 +144,7 @@ public: + // Does this break BC? + virtual bool suspend ( ); + virtual Transformation rotation ( ) const; + virtual ODirection direction ( ) const; + protected: @@ -291,6 +296,6 @@ struct z_button z_buttons_c700 [] = { "QPE/TaskBar", "toggleStartMenu()" }, - { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Display Rotate"), + { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"), "", - "QPE/Rotation", "flip()", - "QPE/Rotation", "flip()" }, + "QPE/Rotation", "rotateDefault()", + "QPE/Rotation", "rotateDefault()" }, }; @@ -1634,16 +1639,4 @@ void Zaurus::init ( ) case Model_Zaurus_SLC7x0: - // Note: need to 1) set flipstate based on physical screen orientation - // and 2) check to see if the user overrode the rotation direction - // using appearance, and if so, remove that item from the Config to - // ensure the rotate applet flips us back to the previous state. - // treke said he has patches for detecting the phys. so where are they, treke? -mickeyl. - if ( flipstate ) { - // 480x640 - d-> m_rotation = Rot0; - d-> m_direction = CW; - } else { - // 640x480 - d-> m_rotation = Rot270; - d-> m_direction = CCW; - } + d-> m_rotation = rotation(); + d-> m_direction = direction(); break; @@ -1748,2 +1741,4 @@ void Zaurus::initButtons ( ) +#define SHARP_IOCTL_GET_ROTATION 0x413c + typedef struct sharp_led_status { @@ -1981,2 +1976,97 @@ bool Zaurus::setDisplayBrightness ( int bright ) +bool Zaurus::suspend ( ) +{ + qDebug("ODevice::suspend"); + if ( !isQWS( ) ) // only qwsserver is allowed to suspend + return false; + + if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices + return false; + + bool res = false; + + struct timeval tvs, tvn; + ::gettimeofday ( &tvs, 0 ); + + ::sync ( ); // flush fs caches + res = ( ::system ( "apm --suspend" ) == 0 ); + + // This is needed because the iPAQ apm implementation is asynchronous and we + // can not be sure when exactly the device is really suspended + // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. + + if ( res ) { + do { // Yes, wait 15 seconds. This APM bug sucks big time. + ::usleep ( 200 * 1000 ); + ::gettimeofday ( &tvn, 0 ); + } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 ); + } + + QCopEnvelope ( "QPE/Rotation", "rotateDefault()" ); + return res; +} + + +Transformation Zaurus::rotation ( ) const +{ + Transformation rot; + int handle = 0; + int retval = 0; + + switch ( d-> m_model ) { + case Model_Zaurus_SLC7x0: + handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); + if (handle == -1) { + return Rot270; + } else { + retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); + ::close (handle); + + if (retval == 2 ) + rot = Rot0; + else + rot = Rot270; + } + break; + case Model_Zaurus_SLA300: + case Model_Zaurus_SLB600: + case Model_Zaurus_SL5500: + case Model_Zaurus_SL5000: + default: + rot = d-> m_rotation; + break; + } + + return rot; +} +ODirection Zaurus::direction ( ) const +{ + ODirection dir; + int handle = 0; + int retval = 0; + switch ( d-> m_model ) { + case Model_Zaurus_SLC7x0: + handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); + if (handle == -1) { + dir = Rot270; + } else { + retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); + ::close (handle); + if (retval == 2 ) + dir = CCW; + else + dir = CW; + } + break; + case Model_Zaurus_SLA300: + case Model_Zaurus_SLB600: + case Model_Zaurus_SL5500: + case Model_Zaurus_SL5000: + default: + dir = d-> m_direction; + break; + } + return dir; + +} diff --git a/libopie/odevice.h b/libopie/odevice.h index 25910b5..8273761 100644 --- a/libopie/odevice.h +++ b/libopie/odevice.h @@ -189,4 +189,4 @@ public: - Transformation rotation ( ) const; - ODirection direction ( ) const; + virtual Transformation rotation ( ) const; + virtual ODirection direction ( ) const; diff --git a/qt/qt-2.3.7.patch/qte237-all.patch b/qt/qt-2.3.7.patch/qte237-all.patch index 233996a..e6cf0a4 100644 --- a/qt/qt-2.3.7.patch/qte237-all.patch +++ b/qt/qt-2.3.7.patch/qte237-all.patch @@ -410 +410,12 @@ diff -ru qt-2.3.5_fresh/src/widgets/qtoolbutton.cpp qt-2.3.5/src/widgets/qtoolbu h = pm.height(); +--- qt-2.3.7/src/kernel/qkeyboard_qws.cpp~c7xxrotate 2003-07-16 18:20:25.000000000 -0700 ++++ qt-2.3.7/src/kernel/qkeyboard_qws.cpp 2003-12-07 15:54:10.000000000 -0800 +@@ -238,7 +238,7 @@ + { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 63 + { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 64 + { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 65 +- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 66 ++ { Qt::Key_F14, 0xffff , 0xffff , 0xffff }, // 66 + { Qt::Key_Meta, 0xffff , 0xffff , 0xffff }, // 67 + { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 68 + { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 69 |