X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtdesktopwidget_win.cpp;fp=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxtdesktopwidget_win.cpp;h=458952281db05cff27f93e81c3977e49e35ac9b3;hp=0000000000000000000000000000000000000000;hb=a634acadbcf6017474f68a3eaf7cb632660e9e49;hpb=cd122ca8e0d2c0ffc5397e0a813c75d791a7e6e3 diff --git a/src/contrib/libqxt-2007-10-24/src/gui/qxtdesktopwidget_win.cpp b/src/contrib/libqxt-2007-10-24/src/gui/qxtdesktopwidget_win.cpp new file mode 100644 index 00000000..45895228 --- /dev/null +++ b/src/contrib/libqxt-2007-10-24/src/gui/qxtdesktopwidget_win.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) Qxt Foundation. Some rights reserved. +** +** This file is part of the QxtGui module of the Qt eXTension library +** +** This library is free software; you can redistribute it and/or modify it +** under the terms of th Common Public License, version 1.0, as published by +** IBM. +** +** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY +** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY +** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR +** FITNESS FOR A PARTICULAR PURPOSE. +** +** You should have received a copy of the CPL along with this file. +** See the LICENSE file and the cpl1.0.txt file included with the source +** distribution for more information. If you did not receive a copy of the +** license, contact the Qxt Foundation. +** +** +** +****************************************************************************/ +#include "qxtdesktopwidget.h" +#include + +static WindowList qxt_Windows; + +BOOL CALLBACK qxt_EnumWindowsProc(HWND hwnd, LPARAM lParam) +{ + Q_UNUSED(lParam); + if (::IsWindowVisible(hwnd)) + qxt_Windows += hwnd; + return TRUE; +} + +WindowList QxtDesktopWidget::windows() +{ + qxt_Windows.clear(); + HDESK hdesk = ::OpenInputDesktop(0, FALSE, DESKTOP_READOBJECTS); + ::EnumDesktopWindows(hdesk, qxt_EnumWindowsProc, 0); + ::CloseDesktop(hdesk); + return qxt_Windows; +} + +WId QxtDesktopWidget::activeWindow() +{ + return ::GetForegroundWindow(); +} + +WId QxtDesktopWidget::findWindow(const QString& title) +{ + std::wstring str = title.toStdWString(); + return ::FindWindow(NULL, str.c_str()); +} + +WId QxtDesktopWidget::windowAt(const QPoint& pos) +{ + POINT pt; + pt.x = pos.x(); + pt.y = pos.y(); + return ::WindowFromPoint(pt); +} + +QString QxtDesktopWidget::windowTitle(WId window) +{ + QString title; + int len = ::GetWindowTextLength(window); + if (len >= 0) + { + wchar_t* buf = new wchar_t[len+1]; + len = ::GetWindowText(window, buf, len+1); + title = QString::fromStdWString(std::wstring(buf, len)); + delete[] buf; + } + return title; +} + +QRect QxtDesktopWidget::windowGeometry(WId window) +{ + RECT rc; + QRect rect; + if (::GetWindowRect(window, &rc)) + { + rect.setTop(rc.top); + rect.setBottom(rc.bottom); + rect.setLeft(rc.left); + rect.setRight(rc.right); + } + return rect; +}