src/gui/kernel/qguifunctions_wince.cpp
changeset 33 3e2da88830cd
parent 19 fcece45ef507
--- a/src/gui/kernel/qguifunctions_wince.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/gui/kernel/qguifunctions_wince.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -76,6 +76,10 @@
 #define SHIDIF_SIZEDLGFULLSCREEN 0x0004
 #endif
 
+#ifndef SHDB_HIDE
+#define SHDB_HIDE 0x0002
+#endif
+
 #ifndef SHFS_SHOWTASKBAR
 #define SHFS_SHOWTASKBAR 0x0001
 #endif
@@ -112,10 +116,12 @@
 typedef BOOL (*AygInitDialog)(AygSHINITDLGINFO*);
 typedef BOOL (*AygFullScreen)(HWND, DWORD);
 typedef BOOL (*AygSHSipInfo)(UINT, UINT, PVOID, UINT);
+typedef BOOL (*AygSHDoneButton)(HWND, DWORD);
 
 static AygInitDialog ptrAygInitDialog = 0;
 static AygFullScreen ptrAygFullScreen = 0;
 static AygSHSipInfo  ptrAygSHSipInfo  = 0;
+static AygSHDoneButton ptrAygSHDoneButton = 0;
 static bool aygResolved = false;
 
 static void resolveAygLibs()
@@ -128,18 +134,10 @@
         ptrAygInitDialog = (AygInitDialog) ayglib.resolve("SHInitDialog");
         ptrAygFullScreen = (AygFullScreen) ayglib.resolve("SHFullScreen");
         ptrAygSHSipInfo  = (AygSHSipInfo)  ayglib.resolve("SHSipInfo");
+        ptrAygSHDoneButton = (AygSHDoneButton) ayglib.resolve("SHDoneButton");
     }
 }
 
-struct DIBINFO : public BITMAPINFO
-{
-    RGBQUAD arColors[255];
-
-    operator LPBITMAPINFO() { return (LPBITMAPINFO) this; }
-    operator LPBITMAPINFOHEADER() { return &bmiHeader; }
-    RGBQUAD* ColorTable() { return bmiColors; }
-};
-
 int qt_wince_GetDIBits(HDC /*hdc*/ , HBITMAP hSourceBitmap, uint, uint, LPVOID lpvBits, LPBITMAPINFO, uint)
 {
     if (!lpvBits) {
@@ -323,6 +321,8 @@
             shidi.dwFlags |= SHIDIF_CANCELBUTTON;
         if (widget->windowFlags() & Qt::WindowOkButtonHint)
             shidi.dwFlags |= SHIDIF_DONEBUTTON;
+        if (!(widget->windowFlags() & (Qt::WindowCancelButtonHint | Qt::WindowOkButtonHint)))
+            shidi.dwFlags |= SHIDIF_CANCELBUTTON;
         resolveAygLibs();
         if (ptrAygInitDialog)
             ptrAygInitDialog(&shidi);
@@ -334,6 +334,16 @@
     }
 }
 
+void qt_wince_unmaximize(QWidget *widget)
+{
+    if (ptrAygSHDoneButton && qt_wince_is_mobile()
+        && !(widget->windowFlags() & (Qt::WindowCancelButtonHint | Qt::WindowOkButtonHint)))
+    {
+        // Hide the [X] button, we've added in qt_wince_maximize.
+        ptrAygSHDoneButton(widget->winId(), SHDB_HIDE);
+    }
+}
+
 void qt_wince_minimize(HWND hwnd)
 {
 #ifdef Q_OS_WINCE_WM