author | zecke <zecke> | 2002-09-10 13:54:23 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-09-10 13:54:23 (UTC) |
commit | 4aad041a733e2478ff29330e1544e5fefcfb5cde (patch) (unidiff) | |
tree | d45f21fa4570037b516ebfc1dd95aac56b3e6660 | |
parent | 9ae3234e770008c4fac9dc69ffc9bb0cb0f1b2ae (diff) | |
download | opie-4aad041a733e2478ff29330e1544e5fefcfb5cde.zip opie-4aad041a733e2478ff29330e1544e5fefcfb5cde.tar.gz opie-4aad041a733e2478ff29330e1544e5fefcfb5cde.tar.bz2 |
Fix floating point exception divide by 0 in qpedecoration
-rw-r--r-- | library/qpedecoration_qws.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/library/qpedecoration_qws.cpp b/library/qpedecoration_qws.cpp index 222d906..c2eb751 100644 --- a/library/qpedecoration_qws.cpp +++ b/library/qpedecoration_qws.cpp | |||
@@ -27,33 +27,33 @@ | |||
27 | #include <qwhatsthis.h> | 27 | #include <qwhatsthis.h> |
28 | #include "qcopenvelope_qws.h" | 28 | #include "qcopenvelope_qws.h" |
29 | #include "qpedecoration_qws.h" | 29 | #include "qpedecoration_qws.h" |
30 | #include <qdialog.h> | 30 | #include <qdialog.h> |
31 | #include <qdrawutil.h> | 31 | #include <qdrawutil.h> |
32 | #include <qgfx_qws.h> | 32 | #include <qgfx_qws.h> |
33 | #include "qpeapplication.h" | 33 | #include "qpeapplication.h" |
34 | #include "resource.h" | 34 | #include "resource.h" |
35 | #include "global.h" | 35 | #include "global.h" |
36 | #include "qlibrary.h" | 36 | #include "qlibrary.h" |
37 | #include "windowdecorationinterface.h" | 37 | #include "windowdecorationinterface.h" |
38 | #include <qfile.h> | 38 | #include <qfile.h> |
39 | #include <qsignal.h> | 39 | #include <qsignal.h> |
40 | 40 | ||
41 | #include <stdlib.h> | 41 | #include <stdlib.h> |
42 | 42 | ||
43 | extern QRect qt_maxWindowRect; | 43 | extern QRect qt_maxWindowRect; |
44 | 44 | ||
45 | #define WHATSTHIS_MODE | 45 | #define WHATSTHIS_MODE |
46 | 46 | ||
47 | #ifndef QT_NO_QWS_QPE_WM_STYLE | 47 | #ifndef QT_NO_QWS_QPE_WM_STYLE |
48 | 48 | ||
49 | #ifndef QT_NO_IMAGEIO_XPM | 49 | #ifndef QT_NO_IMAGEIO_XPM |
50 | 50 | ||
51 | /* XPM */ | 51 | /* XPM */ |
52 | static const char * const qpe_close_xpm[] = { | 52 | static const char * const qpe_close_xpm[] = { |
53 | "16 16 3 1", | 53 | "16 16 3 1", |
54 | " c None", | 54 | " c None", |
55 | ". c #FFFFFF", | 55 | ". c #FFFFFF", |
56 | "+ c #000000", | 56 | "+ c #000000", |
57 | " ", | 57 | " ", |
58 | " ", | 58 | " ", |
59 | " ..... ", | 59 | " ..... ", |
@@ -94,33 +94,34 @@ static const char * const qpe_accept_xpm[] = { | |||
94 | " ..... ", | 94 | " ..... ", |
95 | " "}; | 95 | " "}; |
96 | 96 | ||
97 | #endif // QT_NO_IMAGEIO_XPM | 97 | #endif // QT_NO_IMAGEIO_XPM |
98 | 98 | ||
99 | class HackWidget : public QWidget | 99 | class HackWidget : public QWidget |
100 | { | 100 | { |
101 | public: | 101 | public: |
102 | bool needsOk() { | 102 | bool needsOk() { |
103 | return (getWState() & WState_Reserved1 ) || | 103 | return (getWState() & WState_Reserved1 ) || |
104 | (inherits( "QDialog" ) && !inherits( "QMessageBox" ) ); | 104 | (inherits( "QDialog" ) && !inherits( "QMessageBox" ) ); |
105 | } | 105 | } |
106 | }; | 106 | }; |
107 | 107 | ||
108 | static QImage scaleButton( const QImage &img, int height ) | 108 | static QImage scaleButton( const QImage &img, int height ) |
109 | { | 109 | { |
110 | if ( img.height() != height ) { | 110 | qWarning("Height %d %d", height, img.height() ); |
111 | if ( img.height()!=0 && img.height() != height ) { | ||
111 | return img.smoothScale( img.width()*height/img.height(), height ); | 112 | return img.smoothScale( img.width()*height/img.height(), height ); |
112 | } else { | 113 | } else { |
113 | return img; | 114 | return img; |
114 | } | 115 | } |
115 | } | 116 | } |
116 | 117 | ||
117 | class TLWidget : public QWidget | 118 | class TLWidget : public QWidget |
118 | { | 119 | { |
119 | public: | 120 | public: |
120 | QWSManager *manager() | 121 | QWSManager *manager() |
121 | { | 122 | { |
122 | return topData()->qwsManager; | 123 | return topData()->qwsManager; |
123 | } | 124 | } |
124 | 125 | ||
125 | QTLWExtra *topExtra() | 126 | QTLWExtra *topExtra() |
126 | { | 127 | { |
@@ -634,89 +635,89 @@ QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecor | |||
634 | break; | 635 | break; |
635 | case Help: | 636 | case Help: |
636 | if ( helpExists || widget->testWFlags(Qt::WStyle_ContextHelp) ) { | 637 | if ( helpExists || widget->testWFlags(Qt::WStyle_ContextHelp) ) { |
637 | QRect r(rect.left(), rect.top() - titleHeight, | 638 | QRect r(rect.left(), rect.top() - titleHeight, |
638 | helpWidth, titleHeight); | 639 | helpWidth, titleHeight); |
639 | region = r; | 640 | region = r; |
640 | } | 641 | } |
641 | break; | 642 | break; |
642 | case Top: | 643 | case Top: |
643 | if ( !widget->isMaximized() ) { | 644 | if ( !widget->isMaximized() ) { |
644 | QRegion m = wdiface->mask(&wd); | 645 | QRegion m = wdiface->mask(&wd); |
645 | QRect br = m.boundingRect(); | 646 | QRect br = m.boundingRect(); |
646 | int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); | 647 | int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); |
647 | region = m & QRect( br.left()+grab, br.top(), | 648 | region = m & QRect( br.left()+grab, br.top(), |
648 | br.width()-2*grab, b ); | 649 | br.width()-2*grab, b ); |
649 | } | 650 | } |
650 | break; | 651 | break; |
651 | case Left: | 652 | case Left: |
652 | if ( !widget->isMaximized() ) { | 653 | if ( !widget->isMaximized() ) { |
653 | QRegion m = wdiface->mask(&wd); | 654 | QRegion m = wdiface->mask(&wd); |
654 | QRect br = m.boundingRect(); | 655 | QRect br = m.boundingRect(); |
655 | int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); | 656 | int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); |
656 | region = m & QRect( br.left(), br.top()+grab, | 657 | region = m & QRect( br.left(), br.top()+grab, |
657 | b, br.height()-2*grab ); | 658 | b, br.height()-2*grab ); |
658 | } | 659 | } |
659 | break; | 660 | break; |
660 | case Right: | 661 | case Right: |
661 | if ( !widget->isMaximized() ) { | 662 | if ( !widget->isMaximized() ) { |
662 | QRegion m = wdiface->mask(&wd); | 663 | QRegion m = wdiface->mask(&wd); |
663 | QRect br = m.boundingRect(); | 664 | QRect br = m.boundingRect(); |
664 | int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); | 665 | int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); |
665 | region = m & QRect( rect.right(), br.top()+grab, | 666 | region = m & QRect( rect.right(), br.top()+grab, |
666 | b, br.height()-2*grab ); | 667 | b, br.height()-2*grab ); |
667 | } | 668 | } |
668 | break; | 669 | break; |
669 | case Bottom: | 670 | case Bottom: |
670 | if ( !widget->isMaximized() ) { | 671 | if ( !widget->isMaximized() ) { |
671 | QRegion m = wdiface->mask(&wd); | 672 | QRegion m = wdiface->mask(&wd); |
672 | QRect br = m.boundingRect(); | 673 | QRect br = m.boundingRect(); |
673 | int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd); | 674 | int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd); |
674 | region = m & QRect( br.left()+grab, rect.bottom(), | 675 | region = m & QRect( br.left()+grab, rect.bottom(), |
675 | br.width()-2*grab, b ); | 676 | br.width()-2*grab, b ); |
676 | } | 677 | } |
677 | break; | 678 | break; |
678 | case TopLeft: | 679 | case TopLeft: |
679 | if ( !widget->isMaximized() ) { | 680 | if ( !widget->isMaximized() ) { |
680 | QRegion m = wdiface->mask(&wd); | 681 | QRegion m = wdiface->mask(&wd); |
681 | QRect br = m.boundingRect(); | 682 | QRect br = m.boundingRect(); |
682 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); | 683 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); |
683 | int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); | 684 | int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); |
684 | QRegion crgn( br.left(), br.top(), grab, tb ); | 685 | QRegion crgn( br.left(), br.top(), grab, tb ); |
685 | crgn |= QRect( br.left(), br.top(), lb, grab ); | 686 | crgn |= QRect( br.left(), br.top(), lb, grab ); |
686 | region = m & crgn; | 687 | region = m & crgn; |
687 | } | 688 | } |
688 | break; | 689 | break; |
689 | case TopRight: | 690 | case TopRight: |
690 | if ( !widget->isMaximized() ) { | 691 | if ( !widget->isMaximized() ) { |
691 | QRegion m = wdiface->mask(&wd); | 692 | QRegion m = wdiface->mask(&wd); |
692 | QRect br = m.boundingRect(); | 693 | QRect br = m.boundingRect(); |
693 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); | 694 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); |
694 | int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); | 695 | int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); |
695 | QRegion crgn( br.right()-grab, br.top(), grab, tb ); | 696 | QRegion crgn( br.right()-grab, br.top(), grab, tb ); |
696 | crgn |= QRect( br.right()-rb, br.top(), rb, grab ); | 697 | crgn |= QRect( br.right()-rb, br.top(), rb, grab ); |
697 | region = m & crgn; | 698 | region = m & crgn; |
698 | } | 699 | } |
699 | break; | 700 | break; |
700 | case BottomLeft: | 701 | case BottomLeft: |
701 | if ( !widget->isMaximized() ) { | 702 | if ( !widget->isMaximized() ) { |
702 | QRegion m = wdiface->mask(&wd); | 703 | QRegion m = wdiface->mask(&wd); |
703 | QRect br = m.boundingRect(); | 704 | QRect br = m.boundingRect(); |
704 | region = m & QRect( br.left(), br.bottom()-grab, grab, grab ); | 705 | region = m & QRect( br.left(), br.bottom()-grab, grab, grab ); |
705 | } | 706 | } |
706 | break; | 707 | break; |
707 | case BottomRight: | 708 | case BottomRight: |
708 | if ( !widget->isMaximized() ) { | 709 | if ( !widget->isMaximized() ) { |
709 | QRegion m = wdiface->mask(&wd); | 710 | QRegion m = wdiface->mask(&wd); |
710 | QRect br = m.boundingRect(); | 711 | QRect br = m.boundingRect(); |
711 | region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab ); | 712 | region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab ); |
712 | } | 713 | } |
713 | break; | 714 | break; |
714 | case All: | 715 | case All: |
715 | if ( widget->isMaximized() ) | 716 | if ( widget->isMaximized() ) |
716 | region = QWSDefaultDecoration::region(widget, rect, type); | 717 | region = QWSDefaultDecoration::region(widget, rect, type); |
717 | else | 718 | else |
718 | region = wdiface->mask(&wd) - rect; | 719 | region = wdiface->mask(&wd) - rect; |
719 | break; | 720 | break; |
720 | default: | 721 | default: |
721 | region = QWSDefaultDecoration::region(widget, rect, type); | 722 | region = QWSDefaultDecoration::region(widget, rect, type); |
722 | break; | 723 | break; |
@@ -809,64 +810,64 @@ void QPEDecoration::paintButton(QPainter *painter, const QWidget *w, | |||
809 | if ( wd.flags & WindowDecorationInterface::WindowData::Active ) | 810 | if ( wd.flags & WindowDecorationInterface::WindowData::Active ) |
810 | painter->setPen( cg.color(QColorGroup::HighlightedText) ); | 811 | painter->setPen( cg.color(QColorGroup::HighlightedText) ); |
811 | else | 812 | else |
812 | painter->setPen( cg.color(QColorGroup::Text) ); | 813 | painter->setPen( cg.color(QColorGroup::Text) ); |
813 | 814 | ||
814 | QRegion oldClip = painter->clipRegion(); | 815 | QRegion oldClip = painter->clipRegion(); |
815 | painter->setClipRegion( QRect(brect.x(), tr.y(), brect.width(), tr.height()) ); // reduce flicker | 816 | painter->setClipRegion( QRect(brect.x(), tr.y(), brect.width(), tr.height()) ); // reduce flicker |
816 | wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); | 817 | wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); |
817 | wdiface->drawButton( b, painter, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)state ); | 818 | wdiface->drawButton( b, painter, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)state ); |
818 | painter->setClipRegion( oldClip ); | 819 | painter->setClipRegion( oldClip ); |
819 | } | 820 | } |
820 | 821 | ||
821 | //#define QPE_DONT_SHOW_TITLEBAR | 822 | //#define QPE_DONT_SHOW_TITLEBAR |
822 | 823 | ||
823 | void QPEDecoration::maximize( QWidget *widget ) | 824 | void QPEDecoration::maximize( QWidget *widget ) |
824 | { | 825 | { |
825 | #ifdef QPE_DONT_SHOW_TITLEBAR | 826 | #ifdef QPE_DONT_SHOW_TITLEBAR |
826 | if ( !widget->inherits( "QDialog" ) ) { | 827 | if ( !widget->inherits( "QDialog" ) ) { |
827 | widget->setGeometry( qt_maxWindowRect ); | 828 | widget->setGeometry( qt_maxWindowRect ); |
828 | } else | 829 | } else |
829 | #endif | 830 | #endif |
830 | { | 831 | { |
831 | QWSDecoration::maximize( widget ); | 832 | QWSDecoration::maximize( widget ); |
832 | } | 833 | } |
833 | } | 834 | } |
834 | 835 | ||
835 | #ifndef QT_NO_DIALOG | 836 | #ifndef QT_NO_DIALOG |
836 | class HackDialog : public QDialog | 837 | class HackDialog : public QDialog |
837 | { | 838 | { |
838 | public: | 839 | public: |
839 | void acceptIt() { | 840 | void acceptIt() { |
840 | if ( isA( "QMessageBox" ) ) | 841 | if ( isA( "QMessageBox" ) ) |
841 | qApp->postEvent( this, new QKeyEvent( QEvent::KeyPress, Key_Enter, '\n', 0, "\n" ) ); | 842 | qApp->postEvent( this, new QKeyEvent( QEvent::KeyPress, Key_Enter, '\n', 0, "\n" ) ); |
842 | else | 843 | else |
843 | accept(); | 844 | accept(); |
844 | } | 845 | } |
845 | }; | 846 | }; |
846 | #endif | 847 | #endif |
847 | 848 | ||
848 | 849 | ||
849 | void QPEDecoration::minimize( QWidget *widget ) | 850 | void QPEDecoration::minimize( QWidget *widget ) |
850 | { | 851 | { |
851 | #ifndef QT_NO_DIALOG | 852 | #ifndef QT_NO_DIALOG |
852 | // We use the minimize button as an "accept" button. | 853 | // We use the minimize button as an "accept" button. |
853 | if ( widget->inherits( "QDialog" ) ) { | 854 | if ( widget->inherits( "QDialog" ) ) { |
854 | HackDialog *d = (HackDialog *)widget; | 855 | HackDialog *d = (HackDialog *)widget; |
855 | d->acceptIt(); | 856 | d->acceptIt(); |
856 | } | 857 | } |
857 | #endif | 858 | #endif |
858 | else if ( ((HackWidget *)widget)->needsOk() ) { | 859 | else if ( ((HackWidget *)widget)->needsOk() ) { |
859 | QSignal s; | 860 | QSignal s; |
860 | s.connect( widget, SLOT( accept() ) ); | 861 | s.connect( widget, SLOT( accept() ) ); |
861 | s.activate(); | 862 | s.activate(); |
862 | } else { | 863 | } else { |
863 | help( widget ); | 864 | help( widget ); |
864 | } | 865 | } |
865 | } | 866 | } |
866 | 867 | ||
867 | void QPEDecoration::help( QWidget *w ) | 868 | void QPEDecoration::help( QWidget *w ) |
868 | { | 869 | { |
869 | if ( helpExists ) { | 870 | if ( helpExists ) { |
870 | Global::execute( "helpbrowser", helpFile ); | 871 | Global::execute( "helpbrowser", helpFile ); |
871 | } else if ( w && w->testWFlags(Qt::WStyle_ContextHelp) ) { | 872 | } else if ( w && w->testWFlags(Qt::WStyle_ContextHelp) ) { |
872 | QWhatsThis::enterWhatsThisMode(); | 873 | QWhatsThis::enterWhatsThisMode(); |