We now have a current svn snapshot of libqxt in our contrib dir, and
[quassel.git] / src / contrib / libqxt-2007-10-24 / src / gui / qxtdesktopwidget_win.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) Qxt Foundation. Some rights reserved.
4 **
5 ** This file is part of the QxtGui module of the Qt eXTension library
6 **
7 ** This library is free software; you can redistribute it and/or modify it
8 ** under the terms of th Common Public License, version 1.0, as published by
9 ** IBM.
10 **
11 ** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
12 ** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
13 ** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
14 ** FITNESS FOR A PARTICULAR PURPOSE.
15 **
16 ** You should have received a copy of the CPL along with this file.
17 ** See the LICENSE file and the cpl1.0.txt file included with the source
18 ** distribution for more information. If you did not receive a copy of the
19 ** license, contact the Qxt Foundation.
20 **
21 ** <http://libqxt.sourceforge.net>  <foundation@libqxt.org>
22 **
23 ****************************************************************************/
24 #include "qxtdesktopwidget.h"
25 #include <qt_windows.h>
26
27 static WindowList qxt_Windows;
28
29 BOOL CALLBACK qxt_EnumWindowsProc(HWND hwnd, LPARAM lParam)
30 {
31     Q_UNUSED(lParam);
32     if (::IsWindowVisible(hwnd))
33         qxt_Windows += hwnd;
34     return TRUE;
35 }
36
37 WindowList QxtDesktopWidget::windows()
38 {
39     qxt_Windows.clear();
40     HDESK hdesk = ::OpenInputDesktop(0, FALSE, DESKTOP_READOBJECTS);
41     ::EnumDesktopWindows(hdesk, qxt_EnumWindowsProc, 0);
42     ::CloseDesktop(hdesk);
43     return qxt_Windows;
44 }
45
46 WId QxtDesktopWidget::activeWindow()
47 {
48     return ::GetForegroundWindow();
49 }
50
51 WId QxtDesktopWidget::findWindow(const QString& title)
52 {
53     std::wstring str = title.toStdWString();
54     return ::FindWindow(NULL, str.c_str());
55 }
56
57 WId QxtDesktopWidget::windowAt(const QPoint& pos)
58 {
59     POINT pt;
60     pt.x = pos.x();
61     pt.y = pos.y();
62     return ::WindowFromPoint(pt);
63 }
64
65 QString QxtDesktopWidget::windowTitle(WId window)
66 {
67     QString title;
68     int len = ::GetWindowTextLength(window);
69     if (len >= 0)
70     {
71         wchar_t* buf = new wchar_t[len+1];
72         len = ::GetWindowText(window, buf, len+1);
73         title = QString::fromStdWString(std::wstring(buf, len));
74         delete[] buf;
75     }
76     return title;
77 }
78
79 QRect QxtDesktopWidget::windowGeometry(WId window)
80 {
81     RECT rc;
82     QRect rect;
83     if (::GetWindowRect(window, &rc))
84     {
85         rect.setTop(rc.top);
86         rect.setBottom(rc.bottom);
87         rect.setLeft(rc.left);
88         rect.setRight(rc.right);
89     }
90     return rect;
91 }