author | zecke <zecke> | 2005-02-22 22:46:25 (UTC) |
---|---|---|
committer | zecke <zecke> | 2005-02-22 22:46:25 (UTC) |
commit | 9e755f078a806d6c81e1dbdbc54d12888041bbff (patch) (unidiff) | |
tree | 0b49051c792eee3bb09674568e492cdac145de18 | |
parent | e33e10f5643a2fb5c640667939e4139bf7b580e2 (diff) | |
download | opie-9e755f078a806d6c81e1dbdbc54d12888041bbff.zip opie-9e755f078a806d6c81e1dbdbc54d12888041bbff.tar.gz opie-9e755f078a806d6c81e1dbdbc54d12888041bbff.tar.bz2 |
Do not scale the buttons in the decoration over and over again.
The logic was if the requested size is not the size of the pixmap
load and scale it to the right size. The problem was the scaleButton method
was changed to not scale the pixmap (to avoid bluring al will kill me for that)
if the delta of the sizes was <= 4.
We now do not try to scale if the delta is <= 4
-rw-r--r-- | library/qpedecoration_qws.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/library/qpedecoration_qws.cpp b/library/qpedecoration_qws.cpp index fa38180..fb47c14 100644 --- a/library/qpedecoration_qws.cpp +++ b/library/qpedecoration_qws.cpp | |||
@@ -1,968 +1,968 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | #ifdef QWS | 20 | #ifdef QWS |
21 | #define QTOPIA_INTERNAL_LANGLIST | 21 | #define QTOPIA_INTERNAL_LANGLIST |
22 | #include <qapplication.h> | 22 | #include <qapplication.h> |
23 | #include <qstyle.h> | 23 | #include <qstyle.h> |
24 | #include <qwidget.h> | 24 | #include <qwidget.h> |
25 | #include <qpainter.h> | 25 | #include <qpainter.h> |
26 | #include <qtimer.h> | 26 | #include <qtimer.h> |
27 | #include <qwhatsthis.h> | 27 | #include <qwhatsthis.h> |
28 | #include <qpopupmenu.h> | 28 | #include <qpopupmenu.h> |
29 | #include "qcopenvelope_qws.h" | 29 | #include "qcopenvelope_qws.h" |
30 | #include "qpedecoration_qws.h" | 30 | #include "qpedecoration_qws.h" |
31 | #include <qdialog.h> | 31 | #include <qdialog.h> |
32 | #include <qdrawutil.h> | 32 | #include <qdrawutil.h> |
33 | #include <qgfx_qws.h> | 33 | #include <qgfx_qws.h> |
34 | #include "qpeapplication.h" | 34 | #include "qpeapplication.h" |
35 | #include "resource.h" | 35 | #include "resource.h" |
36 | #include "global.h" | 36 | #include "global.h" |
37 | #include "qlibrary.h" | 37 | #include "qlibrary.h" |
38 | #include "windowdecorationinterface.h" | 38 | #include "windowdecorationinterface.h" |
39 | #include <qpe/qlibrary.h> | 39 | #include <qpe/qlibrary.h> |
40 | #include <qfile.h> | 40 | #include <qfile.h> |
41 | #include <qsignal.h> | 41 | #include <qsignal.h> |
42 | 42 | ||
43 | #include <stdlib.h> | 43 | #include <stdlib.h> |
44 | 44 | ||
45 | extern Q_EXPORT QRect qt_maxWindowRect; | 45 | extern Q_EXPORT QRect qt_maxWindowRect; |
46 | 46 | ||
47 | #define WHATSTHIS_MODE | 47 | #define WHATSTHIS_MODE |
48 | 48 | ||
49 | #ifndef QT_NO_QWS_QPE_WM_STYLE | 49 | #ifndef QT_NO_QWS_QPE_WM_STYLE |
50 | 50 | ||
51 | #ifndef QT_NO_IMAGEIO_XPM | 51 | #ifndef QT_NO_IMAGEIO_XPM |
52 | 52 | ||
53 | /* XPM */ | 53 | /* XPM */ |
54 | static const char * const qpe_close_xpm[] = { | 54 | static const char * const qpe_close_xpm[] = { |
55 | "16 16 3 1", | 55 | "16 16 3 1", |
56 | " c None", | 56 | " c None", |
57 | ". c #FFFFFF", | 57 | ". c #FFFFFF", |
58 | "+ c #000000", | 58 | "+ c #000000", |
59 | " ", | 59 | " ", |
60 | " ", | 60 | " ", |
61 | " ..... ", | 61 | " ..... ", |
62 | " ..+++++.. ", | 62 | " ..+++++.. ", |
63 | " .+++++++++. ", | 63 | " .+++++++++. ", |
64 | " .+..+++..+. ", | 64 | " .+..+++..+. ", |
65 | " .++...+...++. ", | 65 | " .++...+...++. ", |
66 | " .+++.....+++. ", | 66 | " .+++.....+++. ", |
67 | " .++++...++++. ", | 67 | " .++++...++++. ", |
68 | " .+++.....+++. ", | 68 | " .+++.....+++. ", |
69 | " .++...+...++. ", | 69 | " .++...+...++. ", |
70 | " .+..+++..+. ", | 70 | " .+..+++..+. ", |
71 | " .+++++++++. ", | 71 | " .+++++++++. ", |
72 | " ..+++++.. ", | 72 | " ..+++++.. ", |
73 | " ..... ", | 73 | " ..... ", |
74 | " "}; | 74 | " "}; |
75 | 75 | ||
76 | /* XPM */ | 76 | /* XPM */ |
77 | static const char * const qpe_accept_xpm[] = { | 77 | static const char * const qpe_accept_xpm[] = { |
78 | "16 16 3 1", | 78 | "16 16 3 1", |
79 | " c None", | 79 | " c None", |
80 | ". c #FFFFFF", | 80 | ". c #FFFFFF", |
81 | "+ c #000000", | 81 | "+ c #000000", |
82 | " ", | 82 | " ", |
83 | " ", | 83 | " ", |
84 | " ..... ", | 84 | " ..... ", |
85 | " ..+++++.. ", | 85 | " ..+++++.. ", |
86 | " .+++++++++. ", | 86 | " .+++++++++. ", |
87 | " .+++++++++. ", | 87 | " .+++++++++. ", |
88 | " .+++++++..++. ", | 88 | " .+++++++..++. ", |
89 | " .++.+++...++. ", | 89 | " .++.+++...++. ", |
90 | " .+...+...+++. ", | 90 | " .+...+...+++. ", |
91 | " .+......++++. ", | 91 | " .+......++++. ", |
92 | " .++....+++++. ", | 92 | " .++....+++++. ", |
93 | " .++..+++++. ", | 93 | " .++..+++++. ", |
94 | " .+++++++++. ", | 94 | " .+++++++++. ", |
95 | " ..+++++.. ", | 95 | " ..+++++.. ", |
96 | " ..... ", | 96 | " ..... ", |
97 | " "}; | 97 | " "}; |
98 | 98 | ||
99 | #endif // QT_NO_IMAGEIO_XPM | 99 | #endif // QT_NO_IMAGEIO_XPM |
100 | 100 | ||
101 | class DecorHackWidget : public QWidget | 101 | class DecorHackWidget : public QWidget |
102 | { | 102 | { |
103 | public: | 103 | public: |
104 | bool needsOk() { | 104 | bool needsOk() { |
105 | return (getWState() & WState_Reserved1 ) || | 105 | return (getWState() & WState_Reserved1 ) || |
106 | (inherits("QDialog") && !inherits("QMessageBox") | 106 | (inherits("QDialog") && !inherits("QMessageBox") |
107 | && !inherits("QWizard") ); | 107 | && !inherits("QWizard") ); |
108 | } | 108 | } |
109 | }; | 109 | }; |
110 | 110 | ||
111 | static QImage scaleButton( const QImage &img, int height ) | 111 | static QImage scaleButton( const QImage &img, int height ) |
112 | { | 112 | { |
113 | //ML: We don't want to scale if the difference is less than 4 pixels to prevent blurring | 113 | //ML: We don't want to scale if the difference is less than 4 pixels to prevent blurring |
114 | if ( img.height() != 0 && ::abs( img.height()-height ) > 4 ) { | 114 | if ( img.height() != 0 && ::abs( img.height()-height ) > 4 ) { |
115 | return img.smoothScale( img.width()*height/img.height(), height ); | 115 | return img.smoothScale( img.width()*height/img.height(), height ); |
116 | } else { | 116 | } else { |
117 | return img; | 117 | return img; |
118 | } | 118 | } |
119 | } | 119 | } |
120 | 120 | ||
121 | class TLWidget : public QWidget | 121 | class TLWidget : public QWidget |
122 | { | 122 | { |
123 | public: | 123 | public: |
124 | QWSManager *manager() | 124 | QWSManager *manager() |
125 | { | 125 | { |
126 | return topData()->qwsManager; | 126 | return topData()->qwsManager; |
127 | } | 127 | } |
128 | 128 | ||
129 | QTLWExtra *topExtra() | 129 | QTLWExtra *topExtra() |
130 | { | 130 | { |
131 | return topData(); | 131 | return topData(); |
132 | } | 132 | } |
133 | 133 | ||
134 | void setWState( uint s ) { QWidget::setWState( s ); } | 134 | void setWState( uint s ) { QWidget::setWState( s ); } |
135 | void clearWState( uint s ) { QWidget::clearWState( s ); } | 135 | void clearWState( uint s ) { QWidget::clearWState( s ); } |
136 | }; | 136 | }; |
137 | 137 | ||
138 | 138 | ||
139 | QPEManager::QPEManager( QPEDecoration *d, QObject *parent ) | 139 | QPEManager::QPEManager( QPEDecoration *d, QObject *parent ) |
140 | : QObject( parent ), decoration( d ), helpState(0), inWhatsThis(FALSE) | 140 | : QObject( parent ), decoration( d ), helpState(0), inWhatsThis(FALSE) |
141 | { | 141 | { |
142 | wtTimer = new QTimer( this ); | 142 | wtTimer = new QTimer( this ); |
143 | connect( wtTimer, SIGNAL(timeout()), this, SLOT(whatsThisTimeout()) ); | 143 | connect( wtTimer, SIGNAL(timeout()), this, SLOT(whatsThisTimeout()) ); |
144 | } | 144 | } |
145 | 145 | ||
146 | 146 | ||
147 | void QPEManager::updateActive() | 147 | void QPEManager::updateActive() |
148 | { | 148 | { |
149 | QWidget *newActive = qApp->activeWindow(); | 149 | QWidget *newActive = qApp->activeWindow(); |
150 | if ( newActive && (QWidget*)active == newActive ) | 150 | if ( newActive && (QWidget*)active == newActive ) |
151 | return; | 151 | return; |
152 | 152 | ||
153 | if ( active && (!newActive || ((TLWidget *)newActive)->manager()) ) { | 153 | if ( active && (!newActive || ((TLWidget *)newActive)->manager()) ) { |
154 | ((TLWidget *)(QWidget*)active)->manager()->removeEventFilter( this ); | 154 | ((TLWidget *)(QWidget*)active)->manager()->removeEventFilter( this ); |
155 | } | 155 | } |
156 | 156 | ||
157 | if ( newActive && ((TLWidget *)newActive)->manager() ) { | 157 | if ( newActive && ((TLWidget *)newActive)->manager() ) { |
158 | active = newActive; | 158 | active = newActive; |
159 | ((TLWidget *)(QWidget*)active)->manager()->installEventFilter( this ); | 159 | ((TLWidget *)(QWidget*)active)->manager()->installEventFilter( this ); |
160 | } else if ( !newActive ) { | 160 | } else if ( !newActive ) { |
161 | active = 0; | 161 | active = 0; |
162 | } | 162 | } |
163 | } | 163 | } |
164 | 164 | ||
165 | int QPEManager::pointInQpeRegion( QWidget *w, const QPoint &p ) | 165 | int QPEManager::pointInQpeRegion( QWidget *w, const QPoint &p ) |
166 | { | 166 | { |
167 | QRect rect(w->geometry()); | 167 | QRect rect(w->geometry()); |
168 | 168 | ||
169 | if ( decoration->region( w, rect, | 169 | if ( decoration->region( w, rect, |
170 | (QWSDecoration::Region)QPEDecoration::Help ).contains(p) ) | 170 | (QWSDecoration::Region)QPEDecoration::Help ).contains(p) ) |
171 | return QPEDecoration::Help; | 171 | return QPEDecoration::Help; |
172 | 172 | ||
173 | for (int i = QWSDecoration::LastRegion; i >= QWSDecoration::Title; i--) { | 173 | for (int i = QWSDecoration::LastRegion; i >= QWSDecoration::Title; i--) { |
174 | if (decoration->region(w, rect, (QWSDecoration::Region)i).contains(p)) | 174 | if (decoration->region(w, rect, (QWSDecoration::Region)i).contains(p)) |
175 | return (QWSDecoration::Region)i; | 175 | return (QWSDecoration::Region)i; |
176 | } | 176 | } |
177 | 177 | ||
178 | return QWSDecoration::None; | 178 | return QWSDecoration::None; |
179 | } | 179 | } |
180 | 180 | ||
181 | bool QPEManager::eventFilter( QObject *o, QEvent *e ) | 181 | bool QPEManager::eventFilter( QObject *o, QEvent *e ) |
182 | { | 182 | { |
183 | QWSManager *mgr = (QWSManager *)o; | 183 | QWSManager *mgr = (QWSManager *)o; |
184 | QWidget *w = mgr->widget(); | 184 | QWidget *w = mgr->widget(); |
185 | switch ( e->type() ) { | 185 | switch ( e->type() ) { |
186 | case QEvent::MouseButtonPress: | 186 | case QEvent::MouseButtonPress: |
187 | { | 187 | { |
188 | pressTime = QTime::currentTime(); | 188 | pressTime = QTime::currentTime(); |
189 | QPoint p = ((QMouseEvent*)e)->globalPos(); | 189 | QPoint p = ((QMouseEvent*)e)->globalPos(); |
190 | int inRegion = pointInQpeRegion( w, p ); | 190 | int inRegion = pointInQpeRegion( w, p ); |
191 | #ifdef WHATSTHIS_MODE | 191 | #ifdef WHATSTHIS_MODE |
192 | if ( !w->geometry().contains(p) && QWhatsThis::inWhatsThisMode() ) { | 192 | if ( !w->geometry().contains(p) && QWhatsThis::inWhatsThisMode() ) { |
193 | QString text; | 193 | QString text; |
194 | switch ( inRegion ) { | 194 | switch ( inRegion ) { |
195 | case QWSDecoration::Close: | 195 | case QWSDecoration::Close: |
196 | if ( ((DecorHackWidget*)w)->needsOk() ) | 196 | if ( ((DecorHackWidget*)w)->needsOk() ) |
197 | text = tr("Click to close this window, discarding changes."); | 197 | text = tr("Click to close this window, discarding changes."); |
198 | else | 198 | else |
199 | text = tr("Click to close this window."); | 199 | text = tr("Click to close this window."); |
200 | break; | 200 | break; |
201 | case QWSDecoration::Minimize: | 201 | case QWSDecoration::Minimize: |
202 | text = tr("Click to close this window and apply changes."); | 202 | text = tr("Click to close this window and apply changes."); |
203 | break; | 203 | break; |
204 | case QWSDecoration::Maximize: | 204 | case QWSDecoration::Maximize: |
205 | if ( w->isMaximized() ) | 205 | if ( w->isMaximized() ) |
206 | text = tr("Click to make this window movable."); | 206 | text = tr("Click to make this window movable."); |
207 | else | 207 | else |
208 | text = tr("Click to make this window use all available screen area."); | 208 | text = tr("Click to make this window use all available screen area."); |
209 | break; | 209 | break; |
210 | default: | 210 | default: |
211 | break; | 211 | break; |
212 | } | 212 | } |
213 | QWhatsThis::leaveWhatsThisMode( text ); | 213 | QWhatsThis::leaveWhatsThisMode( text ); |
214 | whatsThisTimeout(); | 214 | whatsThisTimeout(); |
215 | helpState = 0; | 215 | helpState = 0; |
216 | return true; | 216 | return true; |
217 | } | 217 | } |
218 | #endif | 218 | #endif |
219 | if ( inRegion == QPEDecoration::Help ) { | 219 | if ( inRegion == QPEDecoration::Help ) { |
220 | #ifdef WHATSTHIS_MODE | 220 | #ifdef WHATSTHIS_MODE |
221 | wtTimer->start( 400, TRUE ); | 221 | wtTimer->start( 400, TRUE ); |
222 | #endif | 222 | #endif |
223 | helpState = QWSButton::Clicked|QWSButton::MouseOver; | 223 | helpState = QWSButton::Clicked|QWSButton::MouseOver; |
224 | drawButton( w, QPEDecoration::Help, helpState ); | 224 | drawButton( w, QPEDecoration::Help, helpState ); |
225 | return true; | 225 | return true; |
226 | } | 226 | } |
227 | } | 227 | } |
228 | break; | 228 | break; |
229 | case QEvent::MouseButtonRelease: | 229 | case QEvent::MouseButtonRelease: |
230 | if ( helpState & QWSButton::Clicked ) { | 230 | if ( helpState & QWSButton::Clicked ) { |
231 | wtTimer->stop(); | 231 | wtTimer->stop(); |
232 | helpState = 0; | 232 | helpState = 0; |
233 | drawButton( w, QPEDecoration::Help, helpState ); | 233 | drawButton( w, QPEDecoration::Help, helpState ); |
234 | QPoint p = ((QMouseEvent*)e)->globalPos(); | 234 | QPoint p = ((QMouseEvent*)e)->globalPos(); |
235 | if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) { | 235 | if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) { |
236 | decoration->help( w ); | 236 | decoration->help( w ); |
237 | } | 237 | } |
238 | return true; | 238 | return true; |
239 | } | 239 | } |
240 | break; | 240 | break; |
241 | case QEvent::MouseMove: | 241 | case QEvent::MouseMove: |
242 | if ( helpState & QWSButton::Clicked ) { | 242 | if ( helpState & QWSButton::Clicked ) { |
243 | int oldState = helpState; | 243 | int oldState = helpState; |
244 | QPoint p = ((QMouseEvent*)e)->globalPos(); | 244 | QPoint p = ((QMouseEvent*)e)->globalPos(); |
245 | if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) { | 245 | if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) { |
246 | helpState = QWSButton::Clicked|QWSButton::MouseOver; | 246 | helpState = QWSButton::Clicked|QWSButton::MouseOver; |
247 | } else { | 247 | } else { |
248 | helpState = 0; | 248 | helpState = 0; |
249 | } | 249 | } |
250 | if ( helpState != oldState ) | 250 | if ( helpState != oldState ) |
251 | drawButton( w, QPEDecoration::Help, helpState ); | 251 | drawButton( w, QPEDecoration::Help, helpState ); |
252 | } | 252 | } |
253 | break; | 253 | break; |
254 | default: | 254 | default: |
255 | break; | 255 | break; |
256 | } | 256 | } |
257 | return QObject::eventFilter( o, e ); | 257 | return QObject::eventFilter( o, e ); |
258 | } | 258 | } |
259 | 259 | ||
260 | void QPEManager::drawButton( QWidget *w, QPEDecoration::QPERegion r, int state ) | 260 | void QPEManager::drawButton( QWidget *w, QPEDecoration::QPERegion r, int state ) |
261 | { | 261 | { |
262 | QPainter painter(w); | 262 | QPainter painter(w); |
263 | QRegion rgn = ((TLWidget *)w)->topExtra()->decor_allocated_region; | 263 | QRegion rgn = ((TLWidget *)w)->topExtra()->decor_allocated_region; |
264 | painter.internalGfx()->setWidgetDeviceRegion( rgn ); | 264 | painter.internalGfx()->setWidgetDeviceRegion( rgn ); |
265 | painter.setClipRegion(decoration->region(w, w->rect(),QWSDecoration::All)); | 265 | painter.setClipRegion(decoration->region(w, w->rect(),QWSDecoration::All)); |
266 | decoration->paintButton( &painter, w, (QWSDecoration::Region)r, state ); | 266 | decoration->paintButton( &painter, w, (QWSDecoration::Region)r, state ); |
267 | } | 267 | } |
268 | 268 | ||
269 | void QPEManager::drawTitle( QWidget *w ) | 269 | void QPEManager::drawTitle( QWidget *w ) |
270 | { | 270 | { |
271 | QPainter painter(w); | 271 | QPainter painter(w); |
272 | QRegion rgn = ((TLWidget *)w)->topExtra()->decor_allocated_region; | 272 | QRegion rgn = ((TLWidget *)w)->topExtra()->decor_allocated_region; |
273 | painter.internalGfx()->setWidgetDeviceRegion( rgn ); | 273 | painter.internalGfx()->setWidgetDeviceRegion( rgn ); |
274 | painter.setClipRegion(decoration->region(w, w->rect(),QWSDecoration::All)); | 274 | painter.setClipRegion(decoration->region(w, w->rect(),QWSDecoration::All)); |
275 | decoration->paint( &painter, w ); | 275 | decoration->paint( &painter, w ); |
276 | decoration->paintButton(&painter, w, QWSDecoration::Menu, 0); | 276 | decoration->paintButton(&painter, w, QWSDecoration::Menu, 0); |
277 | decoration->paintButton(&painter, w, QWSDecoration::Close, 0); | 277 | decoration->paintButton(&painter, w, QWSDecoration::Close, 0); |
278 | decoration->paintButton(&painter, w, QWSDecoration::Minimize, 0); | 278 | decoration->paintButton(&painter, w, QWSDecoration::Minimize, 0); |
279 | decoration->paintButton(&painter, w, QWSDecoration::Maximize, 0); | 279 | decoration->paintButton(&painter, w, QWSDecoration::Maximize, 0); |
280 | } | 280 | } |
281 | 281 | ||
282 | void QPEManager::whatsThisTimeout() | 282 | void QPEManager::whatsThisTimeout() |
283 | { | 283 | { |
284 | if ( !QWhatsThis::inWhatsThisMode() ) { | 284 | if ( !QWhatsThis::inWhatsThisMode() ) { |
285 | if ( inWhatsThis ) { | 285 | if ( inWhatsThis ) { |
286 | if ( whatsThis ) { | 286 | if ( whatsThis ) { |
287 | QWidget *w = whatsThis; | 287 | QWidget *w = whatsThis; |
288 | whatsThis = 0; | 288 | whatsThis = 0; |
289 | drawTitle( w ); | 289 | drawTitle( w ); |
290 | } | 290 | } |
291 | wtTimer->stop(); | 291 | wtTimer->stop(); |
292 | } else { | 292 | } else { |
293 | QWhatsThis::enterWhatsThisMode(); | 293 | QWhatsThis::enterWhatsThisMode(); |
294 | helpState = 0; | 294 | helpState = 0; |
295 | updateActive(); | 295 | updateActive(); |
296 | if ( active ) { | 296 | if ( active ) { |
297 | whatsThis = active; | 297 | whatsThis = active; |
298 | drawTitle( active ); | 298 | drawTitle( active ); |
299 | // check periodically to see if we've left whats this mode | 299 | // check periodically to see if we've left whats this mode |
300 | wtTimer->start( 250 ); | 300 | wtTimer->start( 250 ); |
301 | } | 301 | } |
302 | } | 302 | } |
303 | inWhatsThis = !inWhatsThis; | 303 | inWhatsThis = !inWhatsThis; |
304 | } | 304 | } |
305 | } | 305 | } |
306 | 306 | ||
307 | //=========================================================================== | 307 | //=========================================================================== |
308 | 308 | ||
309 | static QImage *okImage( int th ) | 309 | static QImage *okImage( int th ) |
310 | { | 310 | { |
311 | static QImage *i = 0; | 311 | static QImage *i = 0; |
312 | if ( !i || i->height() != th ) { | 312 | if ( !i || ::abs( i->height()-th ) > 4 ) { |
313 | delete i; | 313 | delete i; |
314 | i = new QImage(scaleButton(Resource::loadImage("OKButton"),th)); | 314 | i = new QImage(scaleButton(Resource::loadImage("OKButton"),th)); |
315 | } | 315 | } |
316 | return i; | 316 | return i; |
317 | } | 317 | } |
318 | 318 | ||
319 | static QImage *closeImage( int th ) | 319 | static QImage *closeImage( int th ) |
320 | { | 320 | { |
321 | static QImage *i = 0; | 321 | static QImage *i = 0; |
322 | if ( !i || i->height() != th ) { | 322 | if ( !i || ::abs( i->height()-th ) > 4 ) { |
323 | delete i; | 323 | delete i; |
324 | i = new QImage(scaleButton(Resource::loadImage("CloseButton"),th)); | 324 | i = new QImage(scaleButton(Resource::loadImage("CloseButton"),th)); |
325 | } | 325 | } |
326 | return i; | 326 | return i; |
327 | } | 327 | } |
328 | 328 | ||
329 | static QImage *helpImage( int th ) | 329 | static QImage *helpImage( int th ) |
330 | { | 330 | { |
331 | static QImage *i = 0; | 331 | static QImage *i = 0; |
332 | if ( !i || i->height() != th ) { | 332 | if ( !i || ::abs( i->height()-th ) > 4 ) { |
333 | delete i; | 333 | delete i; |
334 | i = new QImage(scaleButton(Resource::loadImage("HelpButton"),th)); | 334 | i = new QImage(scaleButton(Resource::loadImage("HelpButton"),th)); |
335 | } | 335 | } |
336 | return i; | 336 | return i; |
337 | } | 337 | } |
338 | 338 | ||
339 | static QImage *maximizeImage( int th ) | 339 | static QImage *maximizeImage( int th ) |
340 | { | 340 | { |
341 | static QImage *i = 0; | 341 | static QImage *i = 0; |
342 | if ( !i || i->height() != th ) { | 342 | if ( !i || ::abs( i->height()-th ) > 4 ) { |
343 | delete i; | 343 | delete i; |
344 | i = new QImage(scaleButton(Resource::loadImage("MaximizeButton"),th)); | 344 | i = new QImage(scaleButton(Resource::loadImage("MaximizeButton"),th)); |
345 | } | 345 | } |
346 | return i; | 346 | return i; |
347 | } | 347 | } |
348 | 348 | ||
349 | int WindowDecorationInterface::metric( Metric m, const WindowData *wd ) const | 349 | int WindowDecorationInterface::metric( Metric m, const WindowData *wd ) const |
350 | { | 350 | { |
351 | switch ( m ) { | 351 | switch ( m ) { |
352 | case TitleHeight: | 352 | case TitleHeight: |
353 | if ( QApplication::desktop()->height() > 320 ) | 353 | if ( QApplication::desktop()->height() > 320 ) |
354 | return 19; | 354 | return 19; |
355 | else | 355 | else |
356 | return 15; | 356 | return 15; |
357 | case LeftBorder: | 357 | case LeftBorder: |
358 | case RightBorder: | 358 | case RightBorder: |
359 | case TopBorder: | 359 | case TopBorder: |
360 | case BottomBorder: | 360 | case BottomBorder: |
361 | return 4; | 361 | return 4; |
362 | case OKWidth: | 362 | case OKWidth: |
363 | return okImage(metric(TitleHeight,wd))->width(); | 363 | return okImage(metric(TitleHeight,wd))->width(); |
364 | case CloseWidth: | 364 | case CloseWidth: |
365 | return closeImage(metric(TitleHeight,wd))->width(); | 365 | return closeImage(metric(TitleHeight,wd))->width(); |
366 | case HelpWidth: | 366 | case HelpWidth: |
367 | return helpImage(metric(TitleHeight,wd))->width(); | 367 | return helpImage(metric(TitleHeight,wd))->width(); |
368 | case MaximizeWidth: | 368 | case MaximizeWidth: |
369 | return maximizeImage(metric(TitleHeight,wd))->width(); | 369 | return maximizeImage(metric(TitleHeight,wd))->width(); |
370 | case CornerGrabSize: | 370 | case CornerGrabSize: |
371 | return 16; | 371 | return 16; |
372 | } | 372 | } |
373 | 373 | ||
374 | return 0; | 374 | return 0; |
375 | } | 375 | } |
376 | 376 | ||
377 | void WindowDecorationInterface::drawArea( Area a, QPainter *p, const WindowData *wd ) const | 377 | void WindowDecorationInterface::drawArea( Area a, QPainter *p, const WindowData *wd ) const |
378 | { | 378 | { |
379 | int th = metric( TitleHeight, wd ); | 379 | int th = metric( TitleHeight, wd ); |
380 | QRect r = wd->rect; | 380 | QRect r = wd->rect; |
381 | 381 | ||
382 | switch ( a ) { | 382 | switch ( a ) { |
383 | case Border: | 383 | case Border: |
384 | { | 384 | { |
385 | const QColorGroup &cg = wd->palette.active(); | 385 | const QColorGroup &cg = wd->palette.active(); |
386 | qDrawWinPanel(p, r.x()-metric(LeftBorder,wd), | 386 | qDrawWinPanel(p, r.x()-metric(LeftBorder,wd), |
387 | r.y()-th-metric(TopBorder,wd), | 387 | r.y()-th-metric(TopBorder,wd), |
388 | r.width()+metric(LeftBorder,wd)+metric(RightBorder,wd), | 388 | r.width()+metric(LeftBorder,wd)+metric(RightBorder,wd), |
389 | r.height()+th+metric(TopBorder,wd)+metric(BottomBorder,wd), | 389 | r.height()+th+metric(TopBorder,wd)+metric(BottomBorder,wd), |
390 | cg, FALSE, &cg.brush(QColorGroup::Background)); | 390 | cg, FALSE, &cg.brush(QColorGroup::Background)); |
391 | } | 391 | } |
392 | break; | 392 | break; |
393 | case Title: | 393 | case Title: |
394 | { | 394 | { |
395 | const QColorGroup &cg = wd->palette.active(); | 395 | const QColorGroup &cg = wd->palette.active(); |
396 | QBrush titleBrush; | 396 | QBrush titleBrush; |
397 | QPen titleLines; | 397 | QPen titleLines; |
398 | 398 | ||
399 | if ( wd->flags & WindowData::Active ) { | 399 | if ( wd->flags & WindowData::Active ) { |
400 | titleBrush = cg.brush(QColorGroup::Highlight); | 400 | titleBrush = cg.brush(QColorGroup::Highlight); |
401 | titleLines = titleBrush.color().dark(); | 401 | titleLines = titleBrush.color().dark(); |
402 | } else { | 402 | } else { |
403 | titleBrush = cg.brush(QColorGroup::Background); | 403 | titleBrush = cg.brush(QColorGroup::Background); |
404 | titleLines = titleBrush.color(); | 404 | titleLines = titleBrush.color(); |
405 | } | 405 | } |
406 | 406 | ||
407 | p->fillRect( r.x(), r.y()-th, r.width(), th, titleBrush); | 407 | p->fillRect( r.x(), r.y()-th, r.width(), th, titleBrush); |
408 | 408 | ||
409 | p->setPen( titleLines ); | 409 | p->setPen( titleLines ); |
410 | for ( int i = r.y()-th; i < r.y(); i += 2 ) | 410 | for ( int i = r.y()-th; i < r.y(); i += 2 ) |
411 | p->drawLine( r.left(), i, r.right(), i ); | 411 | p->drawLine( r.left(), i, r.right(), i ); |
412 | } | 412 | } |
413 | break; | 413 | break; |
414 | case TitleText: | 414 | case TitleText: |
415 | p->drawText( r.x()+3+metric(HelpWidth,wd), r.top()-th, | 415 | p->drawText( r.x()+3+metric(HelpWidth,wd), r.top()-th, |
416 | r.width()-metric(OKWidth,wd)-metric(CloseWidth,wd), | 416 | r.width()-metric(OKWidth,wd)-metric(CloseWidth,wd), |
417 | th, QPainter::AlignVCenter, wd->caption); | 417 | th, QPainter::AlignVCenter, wd->caption); |
418 | break; | 418 | break; |
419 | } | 419 | } |
420 | } | 420 | } |
421 | 421 | ||
422 | void WindowDecorationInterface::drawButton( Button b, QPainter *p, const WindowData *wd, int x, int y, int, int, QWSButton::State state ) const | 422 | void WindowDecorationInterface::drawButton( Button b, QPainter *p, const WindowData *wd, int x, int y, int, int, QWSButton::State state ) const |
423 | { | 423 | { |
424 | QImage *img = 0; | 424 | QImage *img = 0; |
425 | switch ( b ) { | 425 | switch ( b ) { |
426 | case OK: | 426 | case OK: |
427 | img = okImage(metric(TitleHeight,wd)); | 427 | img = okImage(metric(TitleHeight,wd)); |
428 | break; | 428 | break; |
429 | case Close: | 429 | case Close: |
430 | img = closeImage(metric(TitleHeight,wd)); | 430 | img = closeImage(metric(TitleHeight,wd)); |
431 | break; | 431 | break; |
432 | case Help: | 432 | case Help: |
433 | img = helpImage(metric(TitleHeight,wd)); | 433 | img = helpImage(metric(TitleHeight,wd)); |
434 | break; | 434 | break; |
435 | case Maximize: | 435 | case Maximize: |
436 | img = maximizeImage(metric(TitleHeight,wd)); | 436 | img = maximizeImage(metric(TitleHeight,wd)); |
437 | break; | 437 | break; |
438 | } | 438 | } |
439 | 439 | ||
440 | if ( img ) { | 440 | if ( img ) { |
441 | if ((state & QWSButton::MouseOver) && (state & QWSButton::Clicked)) | 441 | if ((state & QWSButton::MouseOver) && (state & QWSButton::Clicked)) |
442 | p->drawImage(x+2, y+2, *img); | 442 | p->drawImage(x+2, y+2, *img); |
443 | else | 443 | else |
444 | p->drawImage(x+1, y+1, *img); | 444 | p->drawImage(x+1, y+1, *img); |
445 | } | 445 | } |
446 | } | 446 | } |
447 | 447 | ||
448 | QRegion WindowDecorationInterface::mask( const WindowData *wd ) const | 448 | QRegion WindowDecorationInterface::mask( const WindowData *wd ) const |
449 | { | 449 | { |
450 | int th = metric(TitleHeight,wd); | 450 | int th = metric(TitleHeight,wd); |
451 | QRect rect( wd->rect ); | 451 | QRect rect( wd->rect ); |
452 | QRect r(rect.left() - metric(LeftBorder,wd), | 452 | QRect r(rect.left() - metric(LeftBorder,wd), |
453 | rect.top() - th - metric(TopBorder,wd), | 453 | rect.top() - th - metric(TopBorder,wd), |
454 | rect.width() + metric(LeftBorder,wd) + metric(RightBorder,wd), | 454 | rect.width() + metric(LeftBorder,wd) + metric(RightBorder,wd), |
455 | rect.height() + th + metric(TopBorder,wd) + metric(BottomBorder,wd)); | 455 | rect.height() + th + metric(TopBorder,wd) + metric(BottomBorder,wd)); |
456 | return QRegion(r) - rect; | 456 | return QRegion(r) - rect; |
457 | } | 457 | } |
458 | 458 | ||
459 | class DefaultWindowDecoration : public WindowDecorationInterface | 459 | class DefaultWindowDecoration : public WindowDecorationInterface |
460 | { | 460 | { |
461 | public: | 461 | public: |
462 | DefaultWindowDecoration(){} | 462 | DefaultWindowDecoration(){} |
463 | QString name() const { | 463 | QString name() const { |
464 | return qApp->translate("WindowDecoration", "Default", | 464 | return qApp->translate("WindowDecoration", "Default", |
465 | "List box text for default window decoration"); | 465 | "List box text for default window decoration"); |
466 | } | 466 | } |
467 | QPixmap icon() const { | 467 | QPixmap icon() const { |
468 | return QPixmap(); | 468 | return QPixmap(); |
469 | } | 469 | } |
470 | QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { | 470 | QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { |
471 | *iface = 0; | 471 | *iface = 0; |
472 | if ( uuid == IID_QUnknown ) | 472 | if ( uuid == IID_QUnknown ) |
473 | *iface = this; | 473 | *iface = this; |
474 | else if ( uuid == IID_WindowDecoration ) | 474 | else if ( uuid == IID_WindowDecoration ) |
475 | *iface = this; | 475 | *iface = this; |
476 | else | 476 | else |
477 | return QS_FALSE; | 477 | return QS_FALSE; |
478 | 478 | ||
479 | if ( *iface ) | 479 | if ( *iface ) |
480 | (*iface)->addRef(); | 480 | (*iface)->addRef(); |
481 | return QS_OK; | 481 | return QS_OK; |
482 | } | 482 | } |
483 | Q_REFCOUNT | 483 | Q_REFCOUNT |
484 | 484 | ||
485 | }; | 485 | }; |
486 | 486 | ||
487 | static WindowDecorationInterface *wdiface = 0; | 487 | static WindowDecorationInterface *wdiface = 0; |
488 | static QLibrary* wdlib = 0; | 488 | static QLibrary* wdlib = 0; |
489 | static QString libname; | 489 | static QString libname; |
490 | 490 | ||
491 | //=========================================================================== | 491 | //=========================================================================== |
492 | bool QPEDecoration::helpExists() const | 492 | bool QPEDecoration::helpExists() const |
493 | { | 493 | { |
494 | if ( helpFile.isNull() ) { | 494 | if ( helpFile.isNull() ) { |
495 | QStringList helpPath = Global::helpPath(); | 495 | QStringList helpPath = Global::helpPath(); |
496 | QString hf = QString(qApp->argv()[0]) + ".html"; | 496 | QString hf = QString(qApp->argv()[0]) + ".html"; |
497 | bool he = FALSE; | 497 | bool he = FALSE; |
498 | for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !he; ++it) | 498 | for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !he; ++it) |
499 | he = QFile::exists( *it + "/" + hf ); | 499 | he = QFile::exists( *it + "/" + hf ); |
500 | ((QPEDecoration*)this)->helpFile = hf; | 500 | ((QPEDecoration*)this)->helpFile = hf; |
501 | ((QPEDecoration*)this)->helpexists = he; | 501 | ((QPEDecoration*)this)->helpexists = he; |
502 | return he; | 502 | return he; |
503 | } | 503 | } |
504 | return helpexists; | 504 | return helpexists; |
505 | } | 505 | } |
506 | 506 | ||
507 | QPEDecoration::QPEDecoration() | 507 | QPEDecoration::QPEDecoration() |
508 | : QWSDefaultDecoration() | 508 | : QWSDefaultDecoration() |
509 | { | 509 | { |
510 | if ( wdlib ) { | 510 | if ( wdlib ) { |
511 | delete wdlib; | 511 | delete wdlib; |
512 | wdlib = 0; | 512 | wdlib = 0; |
513 | } else { | 513 | } else { |
514 | delete wdiface; | 514 | delete wdiface; |
515 | } | 515 | } |
516 | wdiface = new DefaultWindowDecoration; | 516 | wdiface = new DefaultWindowDecoration; |
517 | 517 | ||
518 | helpexists = FALSE; // We don't know (flagged by helpFile being null) | 518 | helpexists = FALSE; // We don't know (flagged by helpFile being null) |
519 | qpeManager = new QPEManager( this ); | 519 | qpeManager = new QPEManager( this ); |
520 | imageOk = Resource::loadImage( "OKButton" ); | 520 | imageOk = Resource::loadImage( "OKButton" ); |
521 | imageClose = Resource::loadImage( "CloseButton" ); | 521 | imageClose = Resource::loadImage( "CloseButton" ); |
522 | imageHelp = Resource::loadImage( "HelpButton" ); | 522 | imageHelp = Resource::loadImage( "HelpButton" ); |
523 | } | 523 | } |
524 | 524 | ||
525 | QPEDecoration::QPEDecoration( const QString &plugin ) | 525 | QPEDecoration::QPEDecoration( const QString &plugin ) |
526 | : QWSDefaultDecoration() | 526 | : QWSDefaultDecoration() |
527 | { | 527 | { |
528 | libname = plugin; | 528 | libname = plugin; |
529 | 529 | ||
530 | if ( wdlib ) { | 530 | if ( wdlib ) { |
531 | wdiface->release(); | 531 | wdiface->release(); |
532 | wdlib->unload(); | 532 | wdlib->unload(); |
533 | delete wdlib; | 533 | delete wdlib; |
534 | wdlib = 0; | 534 | wdlib = 0; |
535 | } else { | 535 | } else { |
536 | delete wdiface; | 536 | delete wdiface; |
537 | } | 537 | } |
538 | 538 | ||
539 | WindowDecorationInterface *iface = 0; | 539 | WindowDecorationInterface *iface = 0; |
540 | QString path = QPEApplication::qpeDir() + "plugins/decorations/"; | 540 | QString path = QPEApplication::qpeDir() + "plugins/decorations/"; |
541 | 541 | ||
542 | #ifdef Q_OS_MACX | 542 | #ifdef Q_OS_MACX |
543 | if ( plugin.find( ".dylib" ) > 0 ) { | 543 | if ( plugin.find( ".dylib" ) > 0 ) { |
544 | #else | 544 | #else |
545 | if ( plugin.find( ".so" ) > 0 ) { | 545 | if ( plugin.find( ".so" ) > 0 ) { |
546 | #endif | 546 | #endif |
547 | // full library name supplied | 547 | // full library name supplied |
548 | path += plugin; | 548 | path += plugin; |
549 | } else { | 549 | } else { |
550 | #ifdef Q_OS_MACX | 550 | #ifdef Q_OS_MACX |
551 | path += "lib" + plugin.lower() + ".dylib"; // compatibility | 551 | path += "lib" + plugin.lower() + ".dylib"; // compatibility |
552 | #else | 552 | #else |
553 | path += "lib" + plugin.lower() + ".so"; // compatibility | 553 | path += "lib" + plugin.lower() + ".so"; // compatibility |
554 | #endif | 554 | #endif |
555 | } | 555 | } |
556 | 556 | ||
557 | QLibrary *lib = new QLibrary( path ); | 557 | QLibrary *lib = new QLibrary( path ); |
558 | if ( lib->queryInterface( IID_WindowDecoration, (QUnknownInterface**)&iface ) == QS_OK && iface ) { | 558 | if ( lib->queryInterface( IID_WindowDecoration, (QUnknownInterface**)&iface ) == QS_OK && iface ) { |
559 | wdiface = iface; | 559 | wdiface = iface; |
560 | wdlib = lib; | 560 | wdlib = lib; |
561 | } else { | 561 | } else { |
562 | delete lib; | 562 | delete lib; |
563 | wdiface = new DefaultWindowDecoration; | 563 | wdiface = new DefaultWindowDecoration; |
564 | } | 564 | } |
565 | 565 | ||
566 | 566 | ||
567 | 567 | ||
568 | helpexists = FALSE; // We don't know (flagged by helpFile being null) | 568 | helpexists = FALSE; // We don't know (flagged by helpFile being null) |
569 | qpeManager = new QPEManager( this ); | 569 | qpeManager = new QPEManager( this ); |
570 | } | 570 | } |
571 | 571 | ||
572 | QPEDecoration::~QPEDecoration() | 572 | QPEDecoration::~QPEDecoration() |
573 | { | 573 | { |
574 | delete qpeManager; | 574 | delete qpeManager; |
575 | } | 575 | } |
576 | 576 | ||
577 | const char **QPEDecoration::menuPixmap() | 577 | const char **QPEDecoration::menuPixmap() |
578 | { | 578 | { |
579 | return (const char **)0; | 579 | return (const char **)0; |
580 | } | 580 | } |
581 | 581 | ||
582 | const char **QPEDecoration::closePixmap() | 582 | const char **QPEDecoration::closePixmap() |
583 | { | 583 | { |
584 | return (const char **)qpe_close_xpm; | 584 | return (const char **)qpe_close_xpm; |
585 | } | 585 | } |
586 | 586 | ||
587 | const char **QPEDecoration::minimizePixmap() | 587 | const char **QPEDecoration::minimizePixmap() |
588 | { | 588 | { |
589 | return (const char **)qpe_accept_xpm; | 589 | return (const char **)qpe_accept_xpm; |
590 | } | 590 | } |
591 | 591 | ||
592 | const char **QPEDecoration::maximizePixmap() | 592 | const char **QPEDecoration::maximizePixmap() |
593 | { | 593 | { |
594 | return (const char **)0; | 594 | return (const char **)0; |
595 | } | 595 | } |
596 | 596 | ||
597 | const char **QPEDecoration::normalizePixmap() | 597 | const char **QPEDecoration::normalizePixmap() |
598 | { | 598 | { |
599 | return (const char **)0; | 599 | return (const char **)0; |
600 | } | 600 | } |
601 | 601 | ||
602 | int QPEDecoration::getTitleHeight( const QWidget *w ) | 602 | int QPEDecoration::getTitleHeight( const QWidget *w ) |
603 | { | 603 | { |
604 | WindowDecorationInterface::WindowData wd; | 604 | WindowDecorationInterface::WindowData wd; |
605 | windowData( w, wd ); | 605 | windowData( w, wd ); |
606 | return wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); | 606 | return wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); |
607 | } | 607 | } |
608 | 608 | ||
609 | /* | 609 | /* |
610 | If rect is empty, no frame is added. (a hack, really) | 610 | If rect is empty, no frame is added. (a hack, really) |
611 | */ | 611 | */ |
612 | QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecoration::Region type) | 612 | QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecoration::Region type) |
613 | { | 613 | { |
614 | qpeManager->updateActive(); | 614 | qpeManager->updateActive(); |
615 | 615 | ||
616 | WindowDecorationInterface::WindowData wd; | 616 | WindowDecorationInterface::WindowData wd; |
617 | windowData( widget, wd ); | 617 | windowData( widget, wd ); |
618 | wd.rect = rect; | 618 | wd.rect = rect; |
619 | 619 | ||
620 | int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); | 620 | int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); |
621 | int okWidth = wdiface->metric(WindowDecorationInterface::OKWidth,&wd); | 621 | int okWidth = wdiface->metric(WindowDecorationInterface::OKWidth,&wd); |
622 | int closeWidth = wdiface->metric(WindowDecorationInterface::CloseWidth,&wd); | 622 | int closeWidth = wdiface->metric(WindowDecorationInterface::CloseWidth,&wd); |
623 | int helpWidth = wdiface->metric(WindowDecorationInterface::HelpWidth,&wd); | 623 | int helpWidth = wdiface->metric(WindowDecorationInterface::HelpWidth,&wd); |
624 | int grab = wdiface->metric(WindowDecorationInterface::CornerGrabSize,&wd); | 624 | int grab = wdiface->metric(WindowDecorationInterface::CornerGrabSize,&wd); |
625 | 625 | ||
626 | QRegion region; | 626 | QRegion region; |
627 | 627 | ||
628 | switch ((int)type) { | 628 | switch ((int)type) { |
629 | case Menu: | 629 | case Menu: |
630 | break; | 630 | break; |
631 | case Maximize: | 631 | case Maximize: |
632 | if ( !widget->inherits( "QDialog" ) && qApp->desktop()->width() > 350 ) { | 632 | if ( !widget->inherits( "QDialog" ) && qApp->desktop()->width() > 350 ) { |
633 | int maximizeWidth = wdiface->metric(WindowDecorationInterface::MaximizeWidth,&wd); | 633 | int maximizeWidth = wdiface->metric(WindowDecorationInterface::MaximizeWidth,&wd); |
634 | int left = rect.right() - maximizeWidth - closeWidth; | 634 | int left = rect.right() - maximizeWidth - closeWidth; |
635 | if ( ((DecorHackWidget *)widget)->needsOk() ) | 635 | if ( ((DecorHackWidget *)widget)->needsOk() ) |
636 | left -= okWidth; | 636 | left -= okWidth; |
637 | QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); | 637 | QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); |
638 | region = r; | 638 | region = r; |
639 | } | 639 | } |
640 | break; | 640 | break; |
641 | case Minimize: | 641 | case Minimize: |
642 | if ( ((DecorHackWidget *)widget)->needsOk() ) { | 642 | if ( ((DecorHackWidget *)widget)->needsOk() ) { |
643 | QRect r(rect.right() - okWidth, | 643 | QRect r(rect.right() - okWidth, |
644 | rect.top() - titleHeight, okWidth, titleHeight); | 644 | rect.top() - titleHeight, okWidth, titleHeight); |
645 | if (r.left() > rect.left() + titleHeight) | 645 | if (r.left() > rect.left() + titleHeight) |
646 | region = r; | 646 | region = r; |
647 | } | 647 | } |
648 | break; | 648 | break; |
649 | case Close: | 649 | case Close: |
650 | { | 650 | { |
651 | int left = rect.right() - closeWidth; | 651 | int left = rect.right() - closeWidth; |
652 | if ( ((DecorHackWidget *)widget)->needsOk() ) | 652 | if ( ((DecorHackWidget *)widget)->needsOk() ) |
653 | left -= okWidth; | 653 | left -= okWidth; |
654 | QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); | 654 | QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); |
655 | region = r; | 655 | region = r; |
656 | } | 656 | } |
657 | break; | 657 | break; |
658 | case Title: | 658 | case Title: |
659 | if ( !widget->isMaximized() ) { | 659 | if ( !widget->isMaximized() ) { |
660 | int width = rect.width() - helpWidth - closeWidth; | 660 | int width = rect.width() - helpWidth - closeWidth; |
661 | if ( ((DecorHackWidget *)widget)->needsOk() ) | 661 | if ( ((DecorHackWidget *)widget)->needsOk() ) |
662 | width -= okWidth; | 662 | width -= okWidth; |
663 | QRect r(rect.left()+helpWidth, rect.top() - titleHeight, | 663 | QRect r(rect.left()+helpWidth, rect.top() - titleHeight, |
664 | width, titleHeight); | 664 | width, titleHeight); |
665 | if (r.width() > 0) | 665 | if (r.width() > 0) |
666 | region = r; | 666 | region = r; |
667 | } | 667 | } |
668 | break; | 668 | break; |
669 | case Help: | 669 | case Help: |
670 | if ( helpExists() || widget->testWFlags(Qt::WStyle_ContextHelp) ) { | 670 | if ( helpExists() || widget->testWFlags(Qt::WStyle_ContextHelp) ) { |
671 | QRect r(rect.left(), rect.top() - titleHeight, | 671 | QRect r(rect.left(), rect.top() - titleHeight, |
672 | helpWidth, titleHeight); | 672 | helpWidth, titleHeight); |
673 | region = r; | 673 | region = r; |
674 | } | 674 | } |
675 | break; | 675 | break; |
676 | case Top: | 676 | case Top: |
677 | if ( !widget->isMaximized() ) { | 677 | if ( !widget->isMaximized() ) { |
678 | QRegion m = wdiface->mask(&wd); | 678 | QRegion m = wdiface->mask(&wd); |
679 | QRect br = m.boundingRect(); | 679 | QRect br = m.boundingRect(); |
680 | int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); | 680 | int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); |
681 | region = m & QRect( br.left()+grab, br.top(), | 681 | region = m & QRect( br.left()+grab, br.top(), |
682 | br.width()-2*grab, b ); | 682 | br.width()-2*grab, b ); |
683 | } | 683 | } |
684 | break; | 684 | break; |
685 | case Left: | 685 | case Left: |
686 | if ( !widget->isMaximized() ) { | 686 | if ( !widget->isMaximized() ) { |
687 | QRegion m = wdiface->mask(&wd); | 687 | QRegion m = wdiface->mask(&wd); |
688 | QRect br = m.boundingRect(); | 688 | QRect br = m.boundingRect(); |
689 | int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); | 689 | int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); |
690 | region = m & QRect( br.left(), br.top()+grab, | 690 | region = m & QRect( br.left(), br.top()+grab, |
691 | b, br.height()-2*grab ); | 691 | b, br.height()-2*grab ); |
692 | } | 692 | } |
693 | break; | 693 | break; |
694 | case Right: | 694 | case Right: |
695 | if ( !widget->isMaximized() ) { | 695 | if ( !widget->isMaximized() ) { |
696 | QRegion m = wdiface->mask(&wd); | 696 | QRegion m = wdiface->mask(&wd); |
697 | QRect br = m.boundingRect(); | 697 | QRect br = m.boundingRect(); |
698 | int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); | 698 | int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); |
699 | region = m & QRect( rect.right(), br.top()+grab, | 699 | region = m & QRect( rect.right(), br.top()+grab, |
700 | b, br.height()-2*grab ); | 700 | b, br.height()-2*grab ); |
701 | } | 701 | } |
702 | break; | 702 | break; |
703 | case Bottom: | 703 | case Bottom: |
704 | if ( !widget->isMaximized() ) { | 704 | if ( !widget->isMaximized() ) { |
705 | QRegion m = wdiface->mask(&wd); | 705 | QRegion m = wdiface->mask(&wd); |
706 | QRect br = m.boundingRect(); | 706 | QRect br = m.boundingRect(); |
707 | int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd); | 707 | int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd); |
708 | region = m & QRect( br.left()+grab, rect.bottom(), | 708 | region = m & QRect( br.left()+grab, rect.bottom(), |
709 | br.width()-2*grab, b ); | 709 | br.width()-2*grab, b ); |
710 | } | 710 | } |
711 | break; | 711 | break; |
712 | case TopLeft: | 712 | case TopLeft: |
713 | if ( !widget->isMaximized() ) { | 713 | if ( !widget->isMaximized() ) { |
714 | QRegion m = wdiface->mask(&wd); | 714 | QRegion m = wdiface->mask(&wd); |
715 | QRect br = m.boundingRect(); | 715 | QRect br = m.boundingRect(); |
716 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); | 716 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); |
717 | int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); | 717 | int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); |
718 | QRegion crgn( br.left(), br.top(), grab, tb ); | 718 | QRegion crgn( br.left(), br.top(), grab, tb ); |
719 | crgn |= QRect( br.left(), br.top(), lb, grab ); | 719 | crgn |= QRect( br.left(), br.top(), lb, grab ); |
720 | region = m & crgn; | 720 | region = m & crgn; |
721 | } | 721 | } |
722 | break; | 722 | break; |
723 | case TopRight: | 723 | case TopRight: |
724 | if ( !widget->isMaximized() ) { | 724 | if ( !widget->isMaximized() ) { |
725 | QRegion m = wdiface->mask(&wd); | 725 | QRegion m = wdiface->mask(&wd); |
726 | QRect br = m.boundingRect(); | 726 | QRect br = m.boundingRect(); |
727 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); | 727 | int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); |
728 | int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); | 728 | int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); |
729 | QRegion crgn( br.right()-grab, br.top(), grab, tb ); | 729 | QRegion crgn( br.right()-grab, br.top(), grab, tb ); |
730 | crgn |= QRect( br.right()-rb, br.top(), rb, grab ); | 730 | crgn |= QRect( br.right()-rb, br.top(), rb, grab ); |
731 | region = m & crgn; | 731 | region = m & crgn; |
732 | } | 732 | } |
733 | break; | 733 | break; |
734 | case BottomLeft: | 734 | case BottomLeft: |
735 | if ( !widget->isMaximized() ) { | 735 | if ( !widget->isMaximized() ) { |
736 | QRegion m = wdiface->mask(&wd); | 736 | QRegion m = wdiface->mask(&wd); |
737 | QRect br = m.boundingRect(); | 737 | QRect br = m.boundingRect(); |
738 | region = m & QRect( br.left(), br.bottom()-grab, grab, grab ); | 738 | region = m & QRect( br.left(), br.bottom()-grab, grab, grab ); |
739 | } | 739 | } |
740 | break; | 740 | break; |
741 | case BottomRight: | 741 | case BottomRight: |
742 | if ( !widget->isMaximized() ) { | 742 | if ( !widget->isMaximized() ) { |
743 | QRegion m = wdiface->mask(&wd); | 743 | QRegion m = wdiface->mask(&wd); |
744 | QRect br = m.boundingRect(); | 744 | QRect br = m.boundingRect(); |
745 | region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab ); | 745 | region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab ); |
746 | } | 746 | } |
747 | break; | 747 | break; |
748 | case All: | 748 | case All: |
749 | if ( widget->isMaximized() ) | 749 | if ( widget->isMaximized() ) |
750 | region = QWSDefaultDecoration::region(widget, rect, type); | 750 | region = QWSDefaultDecoration::region(widget, rect, type); |
751 | else | 751 | else |
752 | region = wdiface->mask(&wd) - rect; | 752 | region = wdiface->mask(&wd) - rect; |
753 | break; | 753 | break; |
754 | default: | 754 | default: |
755 | region = QWSDefaultDecoration::region(widget, rect, type); | 755 | region = QWSDefaultDecoration::region(widget, rect, type); |
756 | break; | 756 | break; |
757 | } | 757 | } |
758 | 758 | ||
759 | return region; | 759 | return region; |
760 | } | 760 | } |
761 | 761 | ||
762 | void QPEDecoration::paint(QPainter *painter, const QWidget *widget) | 762 | void QPEDecoration::paint(QPainter *painter, const QWidget *widget) |
763 | { | 763 | { |
764 | WindowDecorationInterface::WindowData wd; | 764 | WindowDecorationInterface::WindowData wd; |
765 | windowData( widget, wd ); | 765 | windowData( widget, wd ); |
766 | 766 | ||
767 | int titleWidth = getTitleWidth(widget); | 767 | int titleWidth = getTitleWidth(widget); |
768 | int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); | 768 | int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); |
769 | 769 | ||
770 | QRect rect(widget->rect()); | 770 | QRect rect(widget->rect()); |
771 | 771 | ||
772 | // title bar rect | 772 | // title bar rect |
773 | QRect tbr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); | 773 | QRect tbr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); |
774 | 774 | ||
775 | #ifndef QT_NO_PALETTE | 775 | #ifndef QT_NO_PALETTE |
776 | QRegion oldClip = painter->clipRegion(); | 776 | QRegion oldClip = painter->clipRegion(); |
777 | painter->setClipRegion( oldClip - QRegion( tbr ) );// reduce flicker | 777 | painter->setClipRegion( oldClip - QRegion( tbr ) );// reduce flicker |
778 | wdiface->drawArea( WindowDecorationInterface::Border, painter, &wd ); | 778 | wdiface->drawArea( WindowDecorationInterface::Border, painter, &wd ); |
779 | painter->setClipRegion( oldClip ); | 779 | painter->setClipRegion( oldClip ); |
780 | 780 | ||
781 | if (titleWidth > 0) { | 781 | if (titleWidth > 0) { |
782 | const QColorGroup &cg = widget->palette().active(); | 782 | const QColorGroup &cg = widget->palette().active(); |
783 | QBrush titleBrush; | 783 | QBrush titleBrush; |
784 | QPen titlePen; | 784 | QPen titlePen; |
785 | 785 | ||
786 | if ( wd.flags & WindowDecorationInterface::WindowData::Active ) { | 786 | if ( wd.flags & WindowDecorationInterface::WindowData::Active ) { |
787 | titleBrush = cg.brush(QColorGroup::Highlight); | 787 | titleBrush = cg.brush(QColorGroup::Highlight); |
788 | titlePen = cg.color(QColorGroup::HighlightedText); | 788 | titlePen = cg.color(QColorGroup::HighlightedText); |
789 | } else { | 789 | } else { |
790 | titleBrush = cg.brush(QColorGroup::Background); | 790 | titleBrush = cg.brush(QColorGroup::Background); |
791 | titlePen = cg.color(QColorGroup::Text); | 791 | titlePen = cg.color(QColorGroup::Text); |
792 | } | 792 | } |
793 | 793 | ||
794 | wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); | 794 | wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); |
795 | 795 | ||
796 | // Draw caption | 796 | // Draw caption |
797 | painter->setPen(titlePen); | 797 | painter->setPen(titlePen); |
798 | QFont f( QApplication::font() ); | 798 | QFont f( QApplication::font() ); |
799 | f.setWeight( QFont::Bold ); | 799 | f.setWeight( QFont::Bold ); |
800 | painter->setFont(f); | 800 | painter->setFont(f); |
801 | wdiface->drawArea( WindowDecorationInterface::TitleText, painter, &wd ); | 801 | wdiface->drawArea( WindowDecorationInterface::TitleText, painter, &wd ); |
802 | } | 802 | } |
803 | #endif //QT_NO_PALETTE | 803 | #endif //QT_NO_PALETTE |
804 | 804 | ||
805 | paintButton( painter, widget, (QWSDecoration::Region)Help, 0 ); | 805 | paintButton( painter, widget, (QWSDecoration::Region)Help, 0 ); |
806 | } | 806 | } |
807 | 807 | ||
808 | void QPEDecoration::paintButton(QPainter *painter, const QWidget *w, | 808 | void QPEDecoration::paintButton(QPainter *painter, const QWidget *w, |
809 | QWSDecoration::Region type, int state) | 809 | QWSDecoration::Region type, int state) |
810 | { | 810 | { |
811 | WindowDecorationInterface::Button b; | 811 | WindowDecorationInterface::Button b; |
812 | switch ((int)type) { | 812 | switch ((int)type) { |
813 | case Close: | 813 | case Close: |
814 | b = WindowDecorationInterface::Close; | 814 | b = WindowDecorationInterface::Close; |
815 | break; | 815 | break; |
816 | case Minimize: | 816 | case Minimize: |
817 | if ( ((DecorHackWidget *)w)->needsOk() ) | 817 | if ( ((DecorHackWidget *)w)->needsOk() ) |
818 | b = WindowDecorationInterface::OK; | 818 | b = WindowDecorationInterface::OK; |
819 | else if ( helpExists() ) | 819 | else if ( helpExists() ) |
820 | b = WindowDecorationInterface::Help; | 820 | b = WindowDecorationInterface::Help; |
821 | else | 821 | else |
822 | return; | 822 | return; |
823 | break; | 823 | break; |
824 | case Help: | 824 | case Help: |
825 | b = WindowDecorationInterface::Help; | 825 | b = WindowDecorationInterface::Help; |
826 | break; | 826 | break; |
827 | case Maximize: | 827 | case Maximize: |
828 | b = WindowDecorationInterface::Maximize; | 828 | b = WindowDecorationInterface::Maximize; |
829 | break; | 829 | break; |
830 | default: | 830 | default: |
831 | return; | 831 | return; |
832 | } | 832 | } |
833 | 833 | ||
834 | WindowDecorationInterface::WindowData wd; | 834 | WindowDecorationInterface::WindowData wd; |
835 | windowData( w, wd ); | 835 | windowData( w, wd ); |
836 | 836 | ||
837 | int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); | 837 | int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); |
838 | QRect rect(w->rect()); | 838 | QRect rect(w->rect()); |
839 | QRect tbr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); | 839 | QRect tbr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); |
840 | QRect brect(region(w, w->rect(), type).boundingRect()); | 840 | QRect brect(region(w, w->rect(), type).boundingRect()); |
841 | 841 | ||
842 | const QColorGroup &cg = w->palette().active(); | 842 | const QColorGroup &cg = w->palette().active(); |
843 | if ( wd.flags & WindowDecorationInterface::WindowData::Active ) | 843 | if ( wd.flags & WindowDecorationInterface::WindowData::Active ) |
844 | painter->setPen( cg.color(QColorGroup::HighlightedText) ); | 844 | painter->setPen( cg.color(QColorGroup::HighlightedText) ); |
845 | else | 845 | else |
846 | painter->setPen( cg.color(QColorGroup::Text) ); | 846 | painter->setPen( cg.color(QColorGroup::Text) ); |
847 | 847 | ||
848 | QRegion oldClip = painter->clipRegion(); | 848 | QRegion oldClip = painter->clipRegion(); |
849 | painter->setClipRegion( QRect(brect.x(), tbr.y(), brect.width(), tbr.height()) ); // reduce flicker | 849 | painter->setClipRegion( QRect(brect.x(), tbr.y(), brect.width(), tbr.height()) ); // reduce flicker |
850 | wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); | 850 | wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); |
851 | wdiface->drawButton( b, painter, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)state ); | 851 | wdiface->drawButton( b, painter, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)state ); |
852 | painter->setClipRegion( oldClip ); | 852 | painter->setClipRegion( oldClip ); |
853 | } | 853 | } |
854 | 854 | ||
855 | //#define QPE_DONT_SHOW_TITLEBAR | 855 | //#define QPE_DONT_SHOW_TITLEBAR |
856 | 856 | ||
857 | void QPEDecoration::maximize( QWidget *widget ) | 857 | void QPEDecoration::maximize( QWidget *widget ) |
858 | { | 858 | { |
859 | #ifdef QPE_DONT_SHOW_TITLEBAR | 859 | #ifdef QPE_DONT_SHOW_TITLEBAR |
860 | if ( !widget->inherits( "QDialog" ) ) { | 860 | if ( !widget->inherits( "QDialog" ) ) { |
861 | widget->setGeometry( qt_maxWindowRect ); | 861 | widget->setGeometry( qt_maxWindowRect ); |
862 | } else | 862 | } else |
863 | #endif | 863 | #endif |
864 | { | 864 | { |
865 | QWSDecoration::maximize( widget ); | 865 | QWSDecoration::maximize( widget ); |
866 | } | 866 | } |
867 | } | 867 | } |
868 | 868 | ||
869 | QPopupMenu *QPEDecoration::menu( const QWidget *, const QPoint & ) | 869 | QPopupMenu *QPEDecoration::menu( const QWidget *, const QPoint & ) |
870 | { | 870 | { |
871 | QPopupMenu *m = new QPopupMenu(); | 871 | QPopupMenu *m = new QPopupMenu(); |
872 | 872 | ||
873 | m->insertItem(QPEManager::tr("Restore"), (int)Normalize); | 873 | m->insertItem(QPEManager::tr("Restore"), (int)Normalize); |
874 | m->insertItem(QPEManager::tr("Move"), (int)Title); | 874 | m->insertItem(QPEManager::tr("Move"), (int)Title); |
875 | m->insertItem(QPEManager::tr("Size"), (int)BottomRight); | 875 | m->insertItem(QPEManager::tr("Size"), (int)BottomRight); |
876 | m->insertItem(QPEManager::tr("Maximize"), (int)Maximize); | 876 | m->insertItem(QPEManager::tr("Maximize"), (int)Maximize); |
877 | m->insertSeparator(); | 877 | m->insertSeparator(); |
878 | m->insertItem(QPEManager::tr("Close"), (int)Close); | 878 | m->insertItem(QPEManager::tr("Close"), (int)Close); |
879 | 879 | ||
880 | return m; | 880 | return m; |
881 | } | 881 | } |
882 | 882 | ||
883 | #ifndef QT_NO_DIALOG | 883 | #ifndef QT_NO_DIALOG |
884 | class HackDialog : public QDialog | 884 | class HackDialog : public QDialog |
885 | { | 885 | { |
886 | public: | 886 | public: |
887 | void acceptIt() { | 887 | void acceptIt() { |
888 | if ( isA( "QMessageBox" ) ) | 888 | if ( isA( "QMessageBox" ) ) |
889 | qApp->postEvent( this, new QKeyEvent( QEvent::KeyPress, Key_Enter, '\n', 0, "\n" ) ); | 889 | qApp->postEvent( this, new QKeyEvent( QEvent::KeyPress, Key_Enter, '\n', 0, "\n" ) ); |
890 | else | 890 | else |
891 | accept(); | 891 | accept(); |
892 | } | 892 | } |
893 | }; | 893 | }; |
894 | #endif | 894 | #endif |
895 | 895 | ||
896 | 896 | ||
897 | void QPEDecoration::minimize( QWidget *widget ) | 897 | void QPEDecoration::minimize( QWidget *widget ) |
898 | { | 898 | { |
899 | #ifndef QT_NO_DIALOG | 899 | #ifndef QT_NO_DIALOG |
900 | // We use the minimize button as an "accept" button. | 900 | // We use the minimize button as an "accept" button. |
901 | if ( widget->inherits( "QDialog" ) ) { | 901 | if ( widget->inherits( "QDialog" ) ) { |
902 | HackDialog *d = (HackDialog *)widget; | 902 | HackDialog *d = (HackDialog *)widget; |
903 | d->acceptIt(); | 903 | d->acceptIt(); |
904 | } | 904 | } |
905 | #endif | 905 | #endif |
906 | else if ( ((DecorHackWidget *)widget)->needsOk() ) { | 906 | else if ( ((DecorHackWidget *)widget)->needsOk() ) { |
907 | QSignal s; | 907 | QSignal s; |
908 | s.connect( widget, SLOT( accept() ) ); | 908 | s.connect( widget, SLOT( accept() ) ); |
909 | s.activate(); | 909 | s.activate(); |
910 | } else { | 910 | } else { |
911 | help( widget ); | 911 | help( widget ); |
912 | } | 912 | } |
913 | } | 913 | } |
914 | 914 | ||
915 | void QPEDecoration::help( QWidget *w ) | 915 | void QPEDecoration::help( QWidget *w ) |
916 | { | 916 | { |
917 | if ( helpExists() ) { | 917 | if ( helpExists() ) { |
918 | QString hf = helpFile; | 918 | QString hf = helpFile; |
919 | QString localHelpFile = QString(qApp->argv()[0]) + "-" + w->name() + ".html"; | 919 | QString localHelpFile = QString(qApp->argv()[0]) + "-" + w->name() + ".html"; |
920 | QStringList helpPath = Global::helpPath(); | 920 | QStringList helpPath = Global::helpPath(); |
921 | for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end(); ++it) { | 921 | for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end(); ++it) { |
922 | if ( QFile::exists( *it + "/" + localHelpFile ) ) { | 922 | if ( QFile::exists( *it + "/" + localHelpFile ) ) { |
923 | hf = localHelpFile; | 923 | hf = localHelpFile; |
924 | break; | 924 | break; |
925 | } | 925 | } |
926 | } | 926 | } |
927 | Global::execute( "helpbrowser", hf ); | 927 | Global::execute( "helpbrowser", hf ); |
928 | } else if ( w && w->testWFlags(Qt::WStyle_ContextHelp) ) { | 928 | } else if ( w && w->testWFlags(Qt::WStyle_ContextHelp) ) { |
929 | QWhatsThis::enterWhatsThisMode(); | 929 | QWhatsThis::enterWhatsThisMode(); |
930 | QWhatsThis::leaveWhatsThisMode( QObject::tr( | 930 | QWhatsThis::leaveWhatsThisMode( QObject::tr( |
931 | "<Qt>Comprehensive help is not available for this application, " | 931 | "<Qt>Comprehensive help is not available for this application, " |
932 | "however there is context-sensitive help.<p>To use context-sensitive help:<p>" | 932 | "however there is context-sensitive help.<p>To use context-sensitive help:<p>" |
933 | "<ol><li>click and hold the help button." | 933 | "<ol><li>click and hold the help button." |
934 | "<li>when the title bar shows <b>What's this...</b>, " | 934 | "<li>when the title bar shows <b>What's this...</b>, " |
935 | "click on any control.</ol></Qt>" ) ); | 935 | "click on any control.</ol></Qt>" ) ); |
936 | } | 936 | } |
937 | } | 937 | } |
938 | 938 | ||
939 | void QPEDecoration::windowData( const QWidget *w, WindowDecorationInterface::WindowData &wd ) const | 939 | void QPEDecoration::windowData( const QWidget *w, WindowDecorationInterface::WindowData &wd ) const |
940 | { | 940 | { |
941 | wd.rect = w->rect(); | 941 | wd.rect = w->rect(); |
942 | if ( qpeManager->whatsThisWidget() == w ) | 942 | if ( qpeManager->whatsThisWidget() == w ) |
943 | wd.caption = QObject::tr( "What's this..." ); | 943 | wd.caption = QObject::tr( "What's this..." ); |
944 | else | 944 | else |
945 | wd.caption = w->caption(); | 945 | wd.caption = w->caption(); |
946 | wd.palette = qApp->palette(); | 946 | wd.palette = qApp->palette(); |
947 | wd.flags = 0; | 947 | wd.flags = 0; |
948 | wd.flags |= w->isMaximized() ? WindowDecorationInterface::WindowData::Maximized : 0; | 948 | wd.flags |= w->isMaximized() ? WindowDecorationInterface::WindowData::Maximized : 0; |
949 | wd.flags |= w->testWFlags(Qt::WStyle_Dialog) ? WindowDecorationInterface::WindowData::Dialog : 0; | 949 | wd.flags |= w->testWFlags(Qt::WStyle_Dialog) ? WindowDecorationInterface::WindowData::Dialog : 0; |
950 | const QWidget *active = qpeManager->activeWidget(); | 950 | const QWidget *active = qpeManager->activeWidget(); |
951 | wd.flags |= w == active ? WindowDecorationInterface::WindowData::Active : 0; | 951 | wd.flags |= w == active ? WindowDecorationInterface::WindowData::Active : 0; |
952 | wd.reserved = 1; | 952 | wd.reserved = 1; |
953 | } | 953 | } |
954 | 954 | ||
955 | /* | 955 | /* |
956 | #ifndef QT_NO_POPUPMENU | 956 | #ifndef QT_NO_POPUPMENU |
957 | QPopupMenu *QPEDecoration::menu(QWSManager*, const QWidget*, const QPoint&) | 957 | QPopupMenu *QPEDecoration::menu(QWSManager*, const QWidget*, const QPoint&) |
958 | { | 958 | { |
959 | return 0; | 959 | return 0; |
960 | } | 960 | } |
961 | #endif | 961 | #endif |
962 | */ | 962 | */ |
963 | 963 | ||
964 | 964 | ||
965 | 965 | ||
966 | 966 | ||
967 | #endif // QT_NO_QWS_QPE_WM_STYLE | 967 | #endif // QT_NO_QWS_QPE_WM_STYLE |
968 | #endif | 968 | #endif |