summaryrefslogtreecommitdiff
path: root/framework/source/inc/pattern/window.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/source/inc/pattern/window.hxx')
-rw-r--r--framework/source/inc/pattern/window.hxx155
1 files changed, 155 insertions, 0 deletions
diff --git a/framework/source/inc/pattern/window.hxx b/framework/source/inc/pattern/window.hxx
new file mode 100644
index 000000000000..faecdaea9105
--- /dev/null
+++ b/framework/source/inc/pattern/window.hxx
@@ -0,0 +1,155 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __FRAMEWORK_PATTERN_WINDOW_HXX_
+#define __FRAMEWORK_PATTERN_WINDOW_HXX_
+
+//_______________________________________________
+// own includes
+
+#include <general.h>
+
+//_______________________________________________
+// interface includes
+#include <com/sun/star/awt/XWindow.hpp>
+#include <com/sun/star/awt/XTopWindow.hpp>
+
+//_______________________________________________
+// other includes
+
+#include <toolkit/unohlp.hxx>
+#include <vcl/window.hxx>
+#include <vcl/syswin.hxx>
+#include <vcl/wrkwin.hxx>
+#include <vcl/svapp.hxx>
+#include <osl/mutex.hxx>
+#include <rtl/ustring.hxx>
+
+//_______________________________________________
+// namespaces
+
+#ifndef css
+namespace css = ::com::sun::star;
+#endif
+
+namespace framework{
+
+//_______________________________________________
+// definitions
+
+class WindowHelper
+{
+ public:
+
+//-----------------------------------------------
+static ::rtl::OUString getWindowState(const css::uno::Reference< css::awt::XWindow >& xWindow)
+{
+ if (!xWindow.is())
+ return ::rtl::OUString();
+
+ ByteString sWindowState;
+ // SOLAR SAFE -> ----------------------------
+ {
+ SolarMutexGuard aSolarGuard;
+
+ Window* pWindow = VCLUnoHelper::GetWindow(xWindow);
+ // check for system window is neccessary to guarantee correct pointer cast!
+ if (pWindow!=NULL && pWindow->IsSystemWindow())
+ {
+ sal_uLong nMask = WINDOWSTATE_MASK_ALL;
+ nMask &= ~(WINDOWSTATE_MASK_MINIMIZED);
+ sWindowState = ((SystemWindow*)pWindow)->GetWindowState(nMask);
+ }
+ }
+ // <- SOLAR SAFE ----------------------------
+
+ return B2U_ENC(sWindowState,RTL_TEXTENCODING_UTF8);
+}
+
+//-----------------------------------------------
+static void setWindowState(const css::uno::Reference< css::awt::XWindow >& xWindow ,
+ const ::rtl::OUString& sWindowState)
+{
+ if (
+ (!xWindow.is() ) ||
+ (!sWindowState.getLength())
+ )
+ return;
+
+ // SOLAR SAFE -> ----------------------------
+ SolarMutexGuard aSolarGuard;
+
+ Window* pWindow = VCLUnoHelper::GetWindow(xWindow);
+ // check for system window is neccessary to guarantee correct pointer cast!
+ if (
+ (pWindow ) &&
+ (pWindow->IsSystemWindow()) &&
+ (
+ // dont overwrite a might existing minimized mode!
+ (pWindow->GetType() != WINDOW_WORKWINDOW) ||
+ (!((WorkWindow*)pWindow)->IsMinimized() )
+ )
+ )
+ {
+ ((SystemWindow*)pWindow)->SetWindowState(U2B_ENC(sWindowState,RTL_TEXTENCODING_UTF8));
+ }
+
+ // <- SOLAR SAFE ----------------------------
+}
+
+//-----------------------------------------------
+static ::sal_Bool isTopWindow(const css::uno::Reference< css::awt::XWindow >& xWindow)
+{
+ // even child frame containing top level windows (e.g. query designer of database) will be closed
+ css::uno::Reference< css::awt::XTopWindow > xTopWindowCheck(xWindow, css::uno::UNO_QUERY);
+ if (xTopWindowCheck.is())
+ {
+ // Note: Toolkit interface XTopWindow sometimes is used by real VCL-child-windows also .-)
+ // Be sure that these window is realy a "top system window".
+ // Attention ! Checking Window->GetParent() isnt the right approach here.
+ // Because sometimes VCL create "implicit border windows" as parents even we created
+ // a simple XWindow using the toolkit only .-(
+ SolarMutexGuard aSolarGuard;
+ Window* pWindow = VCLUnoHelper::GetWindow( xWindow );
+ if (
+ (pWindow ) &&
+ (pWindow->IsSystemWindow())
+ )
+ return sal_True;
+ }
+
+ return sal_False;
+}
+
+};
+
+} // namespace framework
+
+#endif // __FRAMEWORK_PATTERN_WINDOW_HXX_
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */