2010-10-12 15:53:47 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-07-04 15:25:45 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
#include <tchar.h>
|
2001-06-28 10:17:00 +00:00
|
|
|
#include <osl/diagnose.h>
|
2002-06-11 17:30:32 +00:00
|
|
|
#include "../misc/WinImplHelper.hxx"
|
2001-06-28 10:17:00 +00:00
|
|
|
#include "FileOpenDlg.hxx"
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
// constants
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2001-07-09 11:58:25 +00:00
|
|
|
namespace /* private */
|
|
|
|
{
|
|
|
|
// we choose such large buffers because the size of
|
|
|
|
// an single line edit field can be up to 32k; if
|
|
|
|
// a user has a multi selection FilePicker and selects
|
|
|
|
// a lot of files in a large directory we may reach this
|
|
|
|
// limit and don't want to get out of memory;
|
|
|
|
// another much more elegant way would be to subclass the
|
|
|
|
// FileOpen dialog and overload the BM_CLICK event of the
|
|
|
|
// OK button so that we determine the size of the text
|
|
|
|
// currently in the edit field and resize our buffer
|
|
|
|
// appropriately - in the future we will do this
|
|
|
|
const size_t MAX_FILENAME_BUFF_SIZE = 32000;
|
|
|
|
const size_t MAX_FILETITLE_BUFF_SIZE = 32000;
|
|
|
|
const size_t MAX_FILTER_BUFF_SIZE = 4096;
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2012-04-16 16:36:49 +02:00
|
|
|
const LPCTSTR CURRENT_INSTANCE = TEXT("CurrInst");
|
2003-03-25 17:05:07 +00:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
// find an appropriate parent window
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
|
|
|
|
inline bool is_current_process_window(HWND hwnd)
|
|
|
|
{
|
|
|
|
DWORD pid;
|
|
|
|
GetWindowThreadProcessId(hwnd, &pid);
|
|
|
|
return (pid == GetCurrentProcessId());
|
|
|
|
}
|
|
|
|
|
|
|
|
HWND choose_parent_window()
|
|
|
|
{
|
|
|
|
HWND hwnd_parent = GetForegroundWindow();
|
|
|
|
if (!is_current_process_window(hwnd_parent))
|
|
|
|
hwnd_parent = GetDesktopWindow();
|
|
|
|
|
|
|
|
return hwnd_parent;
|
|
|
|
}
|
2001-07-09 11:58:25 +00:00
|
|
|
};
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
CFileOpenDialog::CFileOpenDialog(
|
2002-03-28 07:57:33 +00:00
|
|
|
bool bFileOpenDialog,
|
2001-06-28 10:17:00 +00:00
|
|
|
sal_uInt32 dwFlags,
|
|
|
|
sal_uInt32 dwTemplateId,
|
2002-03-28 07:57:33 +00:00
|
|
|
HINSTANCE hInstance) :
|
|
|
|
m_hwndFileOpenDlg(0),
|
|
|
|
m_hwndFileOpenDlgChild(0),
|
|
|
|
m_bFileOpenDialog(bFileOpenDialog),
|
|
|
|
m_filterBuffer(MAX_FILTER_BUFF_SIZE),
|
|
|
|
m_fileTitleBuffer(MAX_FILETITLE_BUFF_SIZE),
|
|
|
|
m_helperBuffer(MAX_FILENAME_BUFF_SIZE),
|
|
|
|
m_fileNameBuffer(MAX_FILENAME_BUFF_SIZE),
|
|
|
|
m_pfnBaseDlgProc(0)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
// initialize the OPENFILENAME struct
|
2011-07-20 21:51:04 +03:00
|
|
|
ZeroMemory(&m_ofn, sizeof(m_ofn));
|
|
|
|
m_ofn.lStructSize = sizeof(m_ofn);
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-07-03 10:42:37 +00:00
|
|
|
// 0x02000000 for #97681, sfx will make the entry into
|
|
|
|
// the recent document list
|
2001-06-28 10:17:00 +00:00
|
|
|
m_ofn.Flags |= dwFlags |
|
|
|
|
OFN_EXPLORER |
|
|
|
|
OFN_ENABLEHOOK |
|
|
|
|
OFN_HIDEREADONLY |
|
|
|
|
OFN_PATHMUSTEXIST |
|
2001-07-09 11:58:25 +00:00
|
|
|
OFN_FILEMUSTEXIST |
|
2002-03-21 06:37:44 +00:00
|
|
|
OFN_OVERWRITEPROMPT |
|
2002-07-03 10:42:37 +00:00
|
|
|
OFN_ENABLESIZING |
|
2007-01-02 15:10:57 +00:00
|
|
|
OFN_DONTADDTORECENT; // 0x02000000 -> OFN_DONTADDTORECENT only available with new platform sdk
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
// it is a little hack but how else could
|
|
|
|
// we get a parent window (using a vcl window?)
|
2003-03-25 17:05:07 +00:00
|
|
|
m_ofn.hwndOwner = choose_parent_window();
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2007-03-26 12:18:25 +00:00
|
|
|
m_ofn.lpstrFile = reinterpret_cast<LPTSTR>(const_cast<sal_Unicode*>(m_fileNameBuffer.getStr()));
|
2002-03-28 07:57:33 +00:00
|
|
|
m_ofn.nMaxFile = m_fileNameBuffer.getCapacity();
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2007-03-26 12:18:25 +00:00
|
|
|
m_ofn.lpstrFileTitle = reinterpret_cast<LPTSTR>(const_cast<sal_Unicode*>(m_fileTitleBuffer.getStr()));
|
2002-03-28 07:57:33 +00:00
|
|
|
m_ofn.nMaxFileTitle = m_fileTitleBuffer.getCapacity();
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
m_ofn.lpfnHook = CFileOpenDialog::ofnHookProc;
|
|
|
|
|
|
|
|
// set a custom template
|
2007-01-02 15:10:57 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (dwTemplateId)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(hInstance);
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
m_ofn.Flags |= OFN_ENABLETEMPLATE;
|
|
|
|
m_ofn.lpTemplateName = MAKEINTRESOURCE(dwTemplateId);
|
|
|
|
m_ofn.hInstance = hInstance;
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// set a pointer to myself as ofn parameter
|
2013-06-06 15:50:51 +02:00
|
|
|
m_ofn.lCustData = reinterpret_cast<sal_IntPtr>(this);
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
CFileOpenDialog::~CFileOpenDialog()
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
void SAL_CALL CFileOpenDialog::setTitle(const OUString& aTitle)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
m_dialogTitle = aTitle;
|
2007-03-26 12:18:25 +00:00
|
|
|
m_ofn.lpstrTitle = reinterpret_cast<LPCTSTR>(m_dialogTitle.getStr());
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
void CFileOpenDialog::setFilter(const OUString& aFilter)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2007-01-02 15:10:57 +00:00
|
|
|
// Format is like
|
|
|
|
// "*.TXT" or multiple separate by ';' like "*.TXT;*.DOC;*.SXW"
|
|
|
|
// Do not include spaces in the pattern string
|
2002-03-28 07:57:33 +00:00
|
|
|
m_filterBuffer.ensureCapacity(aFilter.getLength());
|
|
|
|
m_filterBuffer.setLength(0);
|
|
|
|
m_filterBuffer.append(aFilter);
|
2007-03-26 12:18:25 +00:00
|
|
|
m_ofn.lpstrFilter = reinterpret_cast<LPCTSTR>(m_filterBuffer.getStr());
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
bool CFileOpenDialog::setFilterIndex(sal_uInt32 aIndex)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(aIndex > 0);
|
2001-06-28 10:17:00 +00:00
|
|
|
m_ofn.nFilterIndex = aIndex;
|
|
|
|
return sal_True;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
sal_uInt32 CFileOpenDialog::getSelectedFilterIndex() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
return m_ofn.nFilterIndex;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
void SAL_CALL CFileOpenDialog::setDefaultName(const OUString& aName)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
m_fileNameBuffer.setLength(0);
|
|
|
|
m_fileNameBuffer.append(aName);
|
2007-03-26 12:18:25 +00:00
|
|
|
m_ofn.lpstrFile = reinterpret_cast<LPTSTR>(const_cast<sal_Unicode*>(m_fileNameBuffer.getStr()));
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
void SAL_CALL CFileOpenDialog::setDisplayDirectory(const OUString& aDirectory)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
m_displayDirectory = aDirectory;
|
2007-03-26 12:18:25 +00:00
|
|
|
m_ofn.lpstrInitialDir = reinterpret_cast<LPCTSTR>(m_displayDirectory.getStr());
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString SAL_CALL CFileOpenDialog::getLastDisplayDirectory() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
return m_displayDirectory;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString SAL_CALL CFileOpenDialog::getFullFileName() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString(m_fileNameBuffer.getStr(),
|
2002-03-28 07:57:33 +00:00
|
|
|
_wcslenex(m_fileNameBuffer.getStr()));
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString SAL_CALL CFileOpenDialog::getFileName() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString(m_fileTitleBuffer.getStr());
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString CFileOpenDialog::getFileExtension()
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
if (m_ofn.nFileExtension)
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString(m_fileNameBuffer.getStr() + m_ofn.nFileExtension,
|
2007-03-26 12:18:25 +00:00
|
|
|
rtl_ustr_getLength(m_fileNameBuffer.getStr() + m_ofn.nFileExtension));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString();
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
void CFileOpenDialog::setDefaultFileExtension(const OUString& aExtension)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
m_defaultExtension = aExtension;
|
2007-03-26 12:18:25 +00:00
|
|
|
m_ofn.lpstrDefExt = reinterpret_cast<LPCTSTR>(m_defaultExtension.getStr());
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
void SAL_CALL CFileOpenDialog::setMultiSelectionMode(bool bMode)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
if (bMode)
|
2001-06-28 10:17:00 +00:00
|
|
|
m_ofn.Flags |= OFN_ALLOWMULTISELECT;
|
2002-03-28 07:57:33 +00:00
|
|
|
else
|
|
|
|
m_ofn.Flags &= ~OFN_ALLOWMULTISELECT;
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
bool SAL_CALL CFileOpenDialog::getMultiSelectionMode() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
return ((m_ofn.Flags & OFN_ALLOWMULTISELECT) > 0);
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
sal_Int16 SAL_CALL CFileOpenDialog::doModal()
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
sal_Int16 nRC = -1;
|
|
|
|
|
|
|
|
// pre-processing
|
2002-03-28 07:57:33 +00:00
|
|
|
if (preModal())
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
bool bRet;
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (m_bFileOpenDialog)
|
|
|
|
bRet = m_GetFileNameWrapper.getOpenFileName(
|
2003-03-25 17:05:07 +00:00
|
|
|
reinterpret_cast<LPOPENFILENAME>(&m_ofn));
|
2002-03-28 07:57:33 +00:00
|
|
|
else
|
|
|
|
bRet = m_GetFileNameWrapper.getSaveFileName(
|
2003-03-25 17:05:07 +00:00
|
|
|
reinterpret_cast<LPOPENFILENAME>(&m_ofn));
|
2001-10-04 10:10:45 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
nRC = 1;
|
|
|
|
|
|
|
|
if (!bRet)
|
|
|
|
nRC = (0 == m_GetFileNameWrapper.commDlgExtendedError()) ? 0 : -1;
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
// post-processing
|
2002-03-28 07:57:33 +00:00
|
|
|
postModal(nRC);
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return nRC;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
sal_uInt32 SAL_CALL CFileOpenDialog::getLastDialogError() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
return CommDlgExtendedError();
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
bool SAL_CALL CFileOpenDialog::preModal()
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
return sal_True;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
void SAL_CALL CFileOpenDialog::postModal(sal_Int16 nDialogResult)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT((-1 <= nDialogResult) && (nDialogResult <= 1));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (1 == nDialogResult)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
// Attention: assuming that nFileOffset is always greater 0 because under
|
|
|
|
// Windows there is always a drive letter or a server in a complete path
|
|
|
|
// the OPENFILENAME docu never says that nFileOffset can be 0
|
2013-04-07 12:06:47 +02:00
|
|
|
m_displayDirectory = OUString(reinterpret_cast<const sal_Unicode*>(m_ofn.lpstrFile),m_ofn.nFileOffset);
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString SAL_CALL CFileOpenDialog::getCurrentFilePath() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(IsWindow(m_hwndFileOpenDlg));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
LPARAM nLen = SendMessage(
|
2001-06-28 10:17:00 +00:00
|
|
|
m_hwndFileOpenDlg,
|
|
|
|
CDM_GETFILEPATH,
|
2002-03-28 07:57:33 +00:00
|
|
|
m_helperBuffer.getCapacity(),
|
|
|
|
reinterpret_cast<LPARAM>(m_helperBuffer.getStr()));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (nLen > 0)
|
|
|
|
{
|
2003-03-25 17:05:07 +00:00
|
|
|
m_helperBuffer.setLength((nLen * sizeof(sal_Unicode)) - 1);
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString(m_helperBuffer.getStr());
|
2002-03-28 07:57:33 +00:00
|
|
|
}
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString();
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString SAL_CALL CFileOpenDialog::getCurrentFolderPath() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(IsWindow(m_hwndFileOpenDlg));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
LPARAM nLen = SendMessage(
|
2001-06-28 10:17:00 +00:00
|
|
|
m_hwndFileOpenDlg,
|
|
|
|
CDM_GETFOLDERPATH,
|
2002-03-28 07:57:33 +00:00
|
|
|
m_helperBuffer.getCapacity(),
|
|
|
|
reinterpret_cast<LPARAM>(m_helperBuffer.getStr()));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (nLen > 0)
|
|
|
|
{
|
2003-03-25 17:05:07 +00:00
|
|
|
m_helperBuffer.setLength((nLen * sizeof(sal_Unicode)) - 1);
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString(m_helperBuffer.getStr());
|
2002-03-28 07:57:33 +00:00
|
|
|
}
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString();
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString SAL_CALL CFileOpenDialog::getCurrentFileName() const
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(IsWindow(m_hwndFileOpenDlg));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
LPARAM nLen = SendMessage(
|
2001-06-28 10:17:00 +00:00
|
|
|
m_hwndFileOpenDlg,
|
2003-03-25 17:05:07 +00:00
|
|
|
CDM_GETSPEC,
|
2002-03-28 07:57:33 +00:00
|
|
|
m_helperBuffer.getCapacity(),
|
|
|
|
reinterpret_cast<LPARAM>(m_helperBuffer.getStr()));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (nLen > 0)
|
|
|
|
{
|
2003-03-25 17:05:07 +00:00
|
|
|
m_helperBuffer.setLength((nLen * sizeof(sal_Unicode)) - 1);
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString(m_helperBuffer.getStr());
|
2002-03-28 07:57:33 +00:00
|
|
|
}
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString();
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
sal_uInt32 SAL_CALL CFileOpenDialog::onShareViolation(const OUString&)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
sal_uInt32 SAL_CALL CFileOpenDialog::onFileOk()
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2006-10-12 09:47:57 +00:00
|
|
|
void SAL_CALL CFileOpenDialog::onSelChanged(HWND)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
void SAL_CALL CFileOpenDialog::onHelp()
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
void SAL_CALL CFileOpenDialog::onInitDone()
|
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
centerPositionToParent();
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
void SAL_CALL CFileOpenDialog::onFolderChanged()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2006-10-12 09:47:57 +00:00
|
|
|
void SAL_CALL CFileOpenDialog::onTypeChanged(sal_uInt32)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2006-10-12 09:47:57 +00:00
|
|
|
sal_uInt32 SAL_CALL CFileOpenDialog::onCtrlCommand(HWND, sal_uInt16, sal_uInt16)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2006-10-12 09:47:57 +00:00
|
|
|
sal_uInt32 SAL_CALL CFileOpenDialog::onWMNotify( HWND, LPOFNOTIFY lpOfNotify )
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
switch(lpOfNotify->hdr.code)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
case CDN_SHAREVIOLATION:
|
2007-03-26 12:18:25 +00:00
|
|
|
return onShareViolation(reinterpret_cast<const sal_Unicode*>(lpOfNotify->pszFile));
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
case CDN_FILEOK:
|
2002-03-28 07:57:33 +00:00
|
|
|
return onFileOk();
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
case CDN_SELCHANGE:
|
2002-03-28 07:57:33 +00:00
|
|
|
onSelChanged(lpOfNotify->hdr.hwndFrom);
|
2001-06-28 10:17:00 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case CDN_HELP:
|
2002-03-28 07:57:33 +00:00
|
|
|
onHelp();
|
2001-06-28 10:17:00 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case CDN_INITDONE:
|
2002-03-28 07:57:33 +00:00
|
|
|
onInitDone();
|
2001-06-28 10:17:00 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case CDN_FOLDERCHANGE:
|
2002-03-28 07:57:33 +00:00
|
|
|
onFolderChanged();
|
2001-06-28 10:17:00 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case CDN_TYPECHANGE:
|
2001-07-09 11:58:25 +00:00
|
|
|
m_ofn.nFilterIndex = lpOfNotify->lpOFN->nFilterIndex;
|
2002-03-28 07:57:33 +00:00
|
|
|
onTypeChanged(lpOfNotify->lpOFN->nFilterIndex);
|
2001-06-28 10:17:00 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
void SAL_CALL CFileOpenDialog::handleInitDialog(HWND hwndDlg, HWND hwndChild)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
|
|
|
m_hwndFileOpenDlg = hwndDlg;
|
|
|
|
m_hwndFileOpenDlgChild = hwndChild;
|
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(GetParent(hwndChild) == hwndDlg);
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
// calling virtual function which the
|
|
|
|
// client can overload
|
2006-10-12 09:47:57 +00:00
|
|
|
onInitDialog(hwndDlg);
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-06-28 10:17:00 +00:00
|
|
|
|
2011-01-25 03:18:11 +02:00
|
|
|
UINT_PTR CALLBACK CFileOpenDialog::ofnHookProc(
|
|
|
|
HWND hChildDlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
|
2001-06-28 10:17:00 +00:00
|
|
|
{
|
2003-03-25 17:05:07 +00:00
|
|
|
HWND hwndDlg = GetParent(hChildDlg);
|
2001-07-09 11:58:25 +00:00
|
|
|
CFileOpenDialog* pImpl = NULL;
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
switch( uiMsg )
|
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
2001-07-09 11:58:25 +00:00
|
|
|
{
|
2003-03-25 17:05:07 +00:00
|
|
|
_LPOPENFILENAME lpofn = reinterpret_cast<_LPOPENFILENAME>(lParam);
|
2002-03-28 07:57:33 +00:00
|
|
|
pImpl = reinterpret_cast<CFileOpenDialog*>(lpofn->lCustData);
|
|
|
|
OSL_ASSERT(pImpl);
|
2001-07-09 11:58:25 +00:00
|
|
|
|
|
|
|
// subclass the base dialog for WM_NCDESTROY processing
|
|
|
|
pImpl->m_pfnBaseDlgProc =
|
2003-03-25 17:05:07 +00:00
|
|
|
reinterpret_cast<WNDPROC>(
|
2011-01-25 03:18:11 +02:00
|
|
|
SetWindowLongPtr(
|
2003-03-25 17:05:07 +00:00
|
|
|
hwndDlg,
|
2011-01-25 03:18:11 +02:00
|
|
|
GWLP_WNDPROC,
|
|
|
|
reinterpret_cast<LONG_PTR>(CFileOpenDialog::BaseDlgProc)));
|
2001-07-09 11:58:25 +00:00
|
|
|
// connect the instance handle to the window
|
2003-03-25 17:05:07 +00:00
|
|
|
SetProp(hwndDlg, CURRENT_INSTANCE, pImpl);
|
2002-03-28 07:57:33 +00:00
|
|
|
pImpl->handleInitDialog(hwndDlg, hChildDlg);
|
2001-07-09 11:58:25 +00:00
|
|
|
}
|
2001-06-28 10:17:00 +00:00
|
|
|
return 0;
|
|
|
|
|
|
|
|
case WM_NOTIFY:
|
2001-07-09 11:58:25 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
pImpl = getCurrentInstance(hwndDlg);
|
2001-07-09 11:58:25 +00:00
|
|
|
return pImpl->onWMNotify(
|
2003-03-25 17:05:07 +00:00
|
|
|
hChildDlg, reinterpret_cast<LPOFNOTIFY>(lParam));
|
2001-07-09 11:58:25 +00:00
|
|
|
}
|
2001-06-28 10:17:00 +00:00
|
|
|
|
|
|
|
case WM_COMMAND:
|
2001-07-09 11:58:25 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
pImpl = getCurrentInstance(hwndDlg);
|
|
|
|
OSL_ASSERT(pImpl);
|
2001-07-09 11:58:25 +00:00
|
|
|
|
|
|
|
return pImpl->onCtrlCommand(
|
2002-03-28 07:57:33 +00:00
|
|
|
hChildDlg, LOWORD(wParam), HIWORD(lParam));
|
2001-07-09 11:58:25 +00:00
|
|
|
}
|
2001-06-28 10:17:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
LRESULT CALLBACK CFileOpenDialog::BaseDlgProc(
|
|
|
|
HWND hWnd, UINT wMessage, WPARAM wParam, LPARAM lParam)
|
2001-07-09 11:58:25 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
CFileOpenDialog* pImpl = 0;
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (WM_NCDESTROY == wMessage)
|
2001-07-09 11:58:25 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
pImpl = reinterpret_cast<CFileOpenDialog*>(
|
2003-03-25 17:05:07 +00:00
|
|
|
RemoveProp(hWnd,CURRENT_INSTANCE));
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2011-01-25 03:18:11 +02:00
|
|
|
SetWindowLongPtr(hWnd, GWLP_WNDPROC,
|
|
|
|
reinterpret_cast<LONG_PTR>(pImpl->m_pfnBaseDlgProc));
|
2002-03-28 07:57:33 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pImpl = getCurrentInstance(hWnd);
|
|
|
|
}
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(pImpl);
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2003-03-25 17:05:07 +00:00
|
|
|
return CallWindowProc(
|
2002-03-28 07:57:33 +00:00
|
|
|
reinterpret_cast<WNDPROC>(pImpl->m_pfnBaseDlgProc),
|
|
|
|
hWnd,wMessage,wParam,lParam);
|
2001-07-09 11:58:25 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-07-09 11:58:25 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
CFileOpenDialog* SAL_CALL CFileOpenDialog::getCurrentInstance(HWND hwnd)
|
2001-07-09 11:58:25 +00:00
|
|
|
{
|
2003-03-25 17:05:07 +00:00
|
|
|
OSL_ASSERT(IsWindow( hwnd));
|
2002-03-28 07:57:33 +00:00
|
|
|
return reinterpret_cast<CFileOpenDialog*>(
|
2003-03-25 17:05:07 +00:00
|
|
|
GetProp(hwnd, CURRENT_INSTANCE));
|
2001-08-16 05:04:23 +00:00
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-02-25 18:51:57 +01:00
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
void SAL_CALL CFileOpenDialog::centerPositionToParent() const
|
2001-08-16 05:04:23 +00:00
|
|
|
{
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_PRECOND(IsWindow(m_hwndFileOpenDlg), "no dialog window, call method only after or in onInitDone");
|
2001-08-16 05:04:23 +00:00
|
|
|
|
|
|
|
HWND hwndParent = m_ofn.hwndOwner;
|
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (!IsWindow(hwndParent))
|
|
|
|
hwndParent = GetDesktopWindow();
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
OSL_ASSERT(IsWindow(hwndParent));
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
RECT rcPar;
|
|
|
|
GetWindowRect(hwndParent, &rcPar);
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
RECT rcDlg;
|
|
|
|
GetWindowRect(m_hwndFileOpenDlg, &rcDlg);
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
int lDlgW = rcDlg.right - rcDlg.left;
|
|
|
|
int lDlgH = rcDlg.bottom - rcDlg.top;
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
int x = (rcPar.left + rcPar.right - lDlgW) / 2;
|
|
|
|
int y = (rcPar.top + rcPar.bottom - lDlgH) / 2;
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
HDC hdc = GetDC(m_hwndFileOpenDlg);
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
int hResol = GetDeviceCaps(hdc, HORZRES);
|
|
|
|
int vResol = GetDeviceCaps(hdc, VERTRES);
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
ReleaseDC(m_hwndFileOpenDlg, hdc);
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (x < 0)
|
2001-08-16 05:04:23 +00:00
|
|
|
x = 0;
|
2002-03-28 07:57:33 +00:00
|
|
|
else if ((x + lDlgW) > hResol)
|
|
|
|
x = hResol - lDlgW;
|
2001-08-16 05:04:23 +00:00
|
|
|
|
2002-03-28 07:57:33 +00:00
|
|
|
if (y < 0)
|
2001-08-16 05:04:23 +00:00
|
|
|
y = 0;
|
2002-03-28 07:57:33 +00:00
|
|
|
else if ((y + lDlgH) > vResol)
|
|
|
|
y = vResol - lDlgH;
|
2001-08-16 05:04:23 +00:00
|
|
|
|
|
|
|
SetWindowPos(
|
|
|
|
m_hwndFileOpenDlg,
|
2002-03-28 07:57:33 +00:00
|
|
|
NULL, x, y, 0, 0,
|
2001-08-16 05:04:23 +00:00
|
|
|
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE );
|
2002-06-11 17:30:32 +00:00
|
|
|
}
|
2010-10-12 15:53:47 +02:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|