summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2009-06-03 15:45:09 +0000
committerKurt Zenker <kz@openoffice.org>2009-06-03 15:45:09 +0000
commita6aafcb54ea1cfd70d17a0c2bf1d92e46735d989 (patch)
tree7dd02fc0eba6c31bdeff1e569f526eabc4569320 /sfx2
parent9bd99c08e8662becdd5ac8b47ef6f953c14e65fc (diff)
CWS-TOOLING: integrate CWS vcl101
2009-04-30 16:05:34 +0200 pl r271420 : #i95591# need a poll timer so XtTimers work properly 2009-04-30 11:25:52 +0200 hdu r271406 : #i100929# avoid unneeded colormap reallocation 2009-04-30 11:21:16 +0200 hdu r271405 : #i100929# use improved SetDrawable() also for salframe updates 2009-04-30 11:12:41 +0200 hdu r271404 : i100929# invalidate cached renderpic also for changed vdev 2009-04-29 14:31:40 +0200 hdu r271375 : i100929# use cached renderpic also for alpha-rect/bitmap drawing 2009-04-29 14:16:51 +0200 hdu r271370 : i100929# notify only GtkSalFrame's valid X11SalFrames 2009-04-29 13:58:10 +0200 hdu r271369 : i100929# notify GtkSalFrame's X11SalGraphics that their drawables will become obsolete 2009-04-29 13:53:48 +0200 hdu r271367 : #i100929# release cached renderpic whenever the corresponding drawable changes 2009-04-28 11:56:07 +0200 pl r271317 : fix a snafu 2009-04-27 16:52:29 +0200 hdu r271293 : #i100000# WAE fix for debug=true compilation 2009-04-27 12:38:11 +0200 hdu r271260 : #i101367# disable vdev mapmode when measuring pixel size 2009-04-27 12:28:37 +0200 hdu r271259 : #i101367# speedup svclcanvas::CanvasBitmapHelper::getSize() 2009-04-23 15:11:25 +0200 hdu r271175 : #i91685# ignore trailing space in last cell 2009-04-23 12:55:14 +0200 pl r271156 : #i101032# check for empty bitmap 2009-04-23 11:04:50 +0200 pl r271144 : #101184# add a paranoia check 2009-04-21 19:12:25 +0200 pl r271055 : #i101184# add: recognize added/removed monitors in xinerama configuration for gtk plugin (thanks cmc) 2009-04-21 17:04:44 +0200 pl r271046 : #i101089# remove unused method (thanks cmc) 2009-04-21 16:41:38 +0200 hdu r271042 : #i99842# set text decoration color 2009-04-20 22:57:37 +0200 pl r271015 : #i101063# fix warnings 2009-04-20 22:55:39 +0200 pl r271014 : #i101063# fix warnings 2009-04-20 11:35:24 +0200 hdu r270968 : #i1001102# remove dependency to psprint module 2009-04-20 11:31:08 +0200 hdu r270967 : #i100929# keep cached render Picture in X11SalGraphics removes 2009-04-20 11:24:57 +0200 hdu r270966 : #i100929# cache render Picture in X11SalGraphics 2009-04-18 14:53:22 +0200 hdu r270959 : CWS-TOOLING: rebase CWS vcl101 to trunk@270723 (milestone: DEV300:m46) 2009-04-17 12:00:50 +0200 hdu r270934 : #i100951# b2d-polygon clipping handles bezier-segments nowadays => performance opt possible 2009-04-17 11:50:49 +0200 hdu r270933 : #i100922# count b2d-polypoly-points to avoid priority-queue reallocations 2009-04-17 11:07:03 +0200 hdu r270930 : #i101145# match dpi-sanity check with gnome-UI (thanks Caolan!) 2009-04-17 10:44:41 +0200 hdu r270929 : #i100603# dingbats-encoded PDF-builtin fonts are symbol fonts too 2009-04-17 10:36:10 +0200 hdu r270928 : #i101145# check sanity of resolution reported by Xft-dpi (thanks CMC!) 2009-04-08 13:53:35 +0200 hdu r270644 : #i100951# avoid expensive calls to basegfx::tools::clipPolygonOnRange() if possible 2009-04-08 13:19:26 +0200 hdu r270637 : #i100922# prevent needless stl::priority_queue reallacations by reserving 2009-04-08 11:14:30 +0200 hdu r270627 : #i100929# use X11SalGraphics::GetXRenderPicture() also for text drawing 2009-04-08 10:00:42 +0200 hdu r270620 : #i100929# add and use X11SalGraphics::GetXRenderPicture() for polygon drawing 2009-04-06 15:52:47 +0200 hdu r270563 : #i100885# add and use AquaSalGraphics::copyResolution() to speed up virdev creation 2009-04-02 14:39:06 +0200 pl r270408 : #i95873# do not set LD_LIBRARY_PATH for external apps 2009-03-31 18:43:19 +0200 pl r270292 : #i99783# transparency of closer image changed to mask in the meantime 2009-03-27 15:42:37 +0100 hdu r270158 : #i100591# fix binary search in dingbats encoding converter 2009-03-27 13:06:34 +0100 hdu r270151 : #i100603# only PDF builtin text fonts use WinAnsiEncoding 2009-03-27 12:05:35 +0100 hdu r270147 : #i100603# use correct encoding for all PDF builtin fonts 2009-03-27 09:04:07 +0100 hdu r270133 : #i100603# use proper encoding for PDF builtin symbol fonts 2009-03-26 17:19:38 +0100 hdu r270090 : #i100591# support RTL_TEXTENCODING_ADOBE_DINGBATS encoding 2009-03-25 09:02:18 +0100 hdu r269995 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading SAGE and extra USER32 symbols 2009-03-25 08:55:49 +0100 hdu r269994 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading LUNA symbols 2009-03-24 16:15:54 +0100 hdu r269965 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading vclplugin symbols 2009-03-24 16:10:29 +0100 hdu r269963 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading USP symbols 2009-03-24 15:54:30 +0100 hdu r269962 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading xrender symbols 2009-03-24 10:46:55 +0100 hdu r269920 : #i100506# fix WAE build breakers on unxsols4 for debug=true 2009-03-23 16:36:43 +0100 hdu r269884 : #159477# fix crash for PDFs with big zlib-chunks 2009-03-20 17:36:56 +0100 pl r269821 : #i96568# add recent files to mac quickstarter 2009-03-20 14:39:41 +0100 pl r269809 : #i35482# no HC mode detection, automatically done in independent part 2009-03-19 20:01:37 +0100 pl r269768 : #i95591# do not reuse UnxPloginComm because of connection loss problems 2009-03-19 18:08:23 +0100 pl r269765 : #i95588# change default visibility that was ignored everywhere but unix anyway
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/appl/app.hrc1
-rw-r--r--sfx2/source/appl/app.src5
-rw-r--r--sfx2/source/appl/shutdowniconaqua.mm212
3 files changed, 217 insertions, 1 deletions
diff --git a/sfx2/source/appl/app.hrc b/sfx2/source/appl/app.hrc
index 707b52e0b4d2..5969833e449a 100644
--- a/sfx2/source/appl/app.hrc
+++ b/sfx2/source/appl/app.hrc
@@ -217,6 +217,7 @@
#define STR_QUICKSTART_PRELAUNCH_UNX (RID_SFX_APP_START+146)
#define STR_QUICKSTART_FILE (RID_SFX_APP_START+147)
#define STR_QUICKSTART_STARTCENTER (RID_SFX_APP_START+148)
+#define STR_QUICKSTART_RECENTDOC (RID_SFX_APP_START+149)
#define RID_HELP_ONSTARTUP_BOX (RID_SFX_APP_START+144)
#define RID_HELP_ONSTARTUP_TEXT (RID_SFX_APP_START+145)
diff --git a/sfx2/source/appl/app.src b/sfx2/source/appl/app.src
index 26e3985d1eb7..1337c74e7947 100644
--- a/sfx2/source/appl/app.src
+++ b/sfx2/source/appl/app.src
@@ -1034,6 +1034,11 @@ String STR_QUICKSTART_STARTCENTER
Text [ en-US ] = "Startcenter";
};
+String STR_QUICKSTART_RECENTDOC
+{
+ Text [ en-US ] = "Recent Documents";
+};
+
String STR_QUERY_UPDATE_LINKS
{
Text [ en-US ] = "Update all links?" ;
diff --git a/sfx2/source/appl/shutdowniconaqua.mm b/sfx2/source/appl/shutdowniconaqua.mm
index 92f0408ead82..e9326b4a22c2 100644
--- a/sfx2/source/appl/shutdowniconaqua.mm
+++ b/sfx2/source/appl/shutdowniconaqua.mm
@@ -33,14 +33,22 @@
#include "svtools/moduleoptions.hxx"
#include "svtools/dynamicmenuoptions.hxx"
-#include <comphelper/sequenceashashmap.hxx>
+#include "svtools/historyoptions.hxx"
+#include "tools/urlobj.hxx"
+#include "osl/file.h"
+#include "comphelper/sequenceashashmap.hxx"
#include "vos/mutex.hxx"
#include "sfx2/app.hxx"
#include "app.hrc"
#define USE_APP_SHORTCUTS
#include "shutdownicon.hxx"
+#include "com/sun/star/util/XStringWidth.hpp"
+
+#include "cppuhelper/implbase1.hxx"
+
#include <set>
+#include <vector>
#include "premac.h"
#include <Cocoa/Cocoa.h>
@@ -52,6 +60,7 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::task;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::util;
#define MI_OPEN 1
#define MI_WRITER 2
@@ -130,6 +139,173 @@ static NSString* getAutoreleasedString( const rtl::OUString& rStr )
return [[[NSString alloc] initWithCharacters: rStr.getStr() length: rStr.getLength()] autorelease];
}
+struct RecentMenuEntry
+{
+ rtl::OUString aURL;
+ rtl::OUString aFilter;
+ rtl::OUString aTitle;
+ rtl::OUString aPassword;
+};
+
+class RecentFilesStringLength : public ::cppu::WeakImplHelper1< ::com::sun::star::util::XStringWidth >
+{
+ public:
+ RecentFilesStringLength() {}
+ virtual ~RecentFilesStringLength() {}
+
+ // XStringWidth
+ sal_Int32 SAL_CALL queryStringWidth( const ::rtl::OUString& aString )
+ throw (::com::sun::star::uno::RuntimeException)
+ {
+ return aString.getLength();
+ }
+};
+
+@interface RecentMenuDelegate : NSObject
+{
+ std::vector< RecentMenuEntry >* m_pRecentFilesItems;
+}
+-(id)init;
+-(void)dealloc;
+-(void)menuNeedsUpdate:(NSMenu *)menu;
+-(void)executeRecentEntry: (NSMenuItem*)item;
+@end
+
+@implementation RecentMenuDelegate
+-(id)init
+{
+ if( (self = [super init]) )
+ {
+ m_pRecentFilesItems = new std::vector< RecentMenuEntry >();
+ }
+ return self;
+}
+
+-(void)dealloc
+{
+ delete m_pRecentFilesItems;
+ [super dealloc];
+}
+
+-(void)menuNeedsUpdate:(NSMenu *)menu
+{
+ // clear menu
+ int nItems = [menu numberOfItems];
+ while( nItems -- )
+ [menu removeItemAtIndex: 0];
+
+ // update recent item list
+ Sequence< Sequence< PropertyValue > > aHistoryList( SvtHistoryOptions().GetList( ePICKLIST ) );
+
+ int nPickListMenuItems = ( aHistoryList.getLength() > 99 ) ? 99 : aHistoryList.getLength();
+
+ m_pRecentFilesItems->clear();
+ if( ( nPickListMenuItems > 0 ) )
+ {
+ for ( int i = 0; i < nPickListMenuItems; i++ )
+ {
+ Sequence< PropertyValue >& rPickListEntry = aHistoryList[i];
+ RecentMenuEntry aRecentFile;
+
+ for ( int j = 0; j < rPickListEntry.getLength(); j++ )
+ {
+ Any a = rPickListEntry[j].Value;
+
+ if ( rPickListEntry[j].Name == HISTORY_PROPERTYNAME_URL )
+ a >>= aRecentFile.aURL;
+ else if ( rPickListEntry[j].Name == HISTORY_PROPERTYNAME_FILTER )
+ a >>= aRecentFile.aFilter;
+ else if ( rPickListEntry[j].Name == HISTORY_PROPERTYNAME_TITLE )
+ a >>= aRecentFile.aTitle;
+ else if ( rPickListEntry[j].Name == HISTORY_PROPERTYNAME_PASSWORD )
+ a >>= aRecentFile.aPassword;
+ }
+
+ m_pRecentFilesItems->push_back( aRecentFile );
+ }
+ }
+
+ // insert new recent items
+ for ( sal_uInt32 i = 0; i < m_pRecentFilesItems->size(); i++ )
+ {
+ rtl::OUString aMenuTitle;
+ INetURLObject aURL( (*m_pRecentFilesItems)[i].aURL );
+
+ if ( aURL.GetProtocol() == INET_PROT_FILE )
+ {
+ // Do handle file URL differently => convert it to a system
+ // path and abbreviate it with a special function:
+ String aFileSystemPath( aURL.getFSysPath( INetURLObject::FSYS_DETECT ) );
+
+ ::rtl::OUString aSystemPath( aFileSystemPath );
+ ::rtl::OUString aCompactedSystemPath;
+
+ oslFileError nError = osl_abbreviateSystemPath( aSystemPath.pData, &aCompactedSystemPath.pData, 46, NULL );
+ if ( !nError )
+ aMenuTitle = String( aCompactedSystemPath );
+ else
+ aMenuTitle = aSystemPath;
+ }
+ else
+ {
+ // Use INetURLObject to abbreviate all other URLs
+ Reference< XStringWidth > xStringLength( new RecentFilesStringLength() );
+ aMenuTitle = aURL.getAbbreviated( xStringLength, 46, INetURLObject::DECODE_UNAMBIGUOUS );
+ }
+
+ NSMenuItem* pNewItem = [[NSMenuItem alloc] initWithTitle: getAutoreleasedString( aMenuTitle )
+ action: @selector(executeRecentEntry:)
+ keyEquivalent: @""];
+ [pNewItem setTag: i];
+ [pNewItem setTarget: self];
+ [pNewItem setEnabled: YES];
+ [menu addItem: pNewItem];
+ [pNewItem autorelease];
+ }
+}
+
+-(void)executeRecentEntry: (NSMenuItem*)item
+{
+ sal_Int32 nIndex = [item tag];
+ if( ( nIndex >= 0 ) && ( nIndex < static_cast<sal_Int32>( m_pRecentFilesItems->size() ) ) )
+ {
+ const RecentMenuEntry& rRecentFile = (*m_pRecentFilesItems)[ nIndex ];
+ int NUM_OF_PICKLIST_ARGS = 3;
+ Sequence< PropertyValue > aArgsList( NUM_OF_PICKLIST_ARGS );
+
+ aArgsList[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Referer" ));
+ aArgsList[0].Value = makeAny( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:user" ) ) );
+
+ // documents in the picklist will never be opened as templates
+ aArgsList[1].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AsTemplate" ));
+ aArgsList[1].Value = makeAny( (sal_Bool) sal_False );
+
+ ::rtl::OUString aFilter( rRecentFile.aFilter );
+ sal_Int32 nPos = aFilter.indexOf( '|' );
+ if ( nPos >= 0 )
+ {
+ rtl::OUString aFilterOptions;
+
+ if ( nPos < ( aFilter.getLength() - 1 ) )
+ aFilterOptions = aFilter.copy( nPos+1 );
+
+ aArgsList[2].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterOptions" ));
+ aArgsList[2].Value = makeAny( aFilterOptions );
+
+ aFilter = aFilter.copy( 0, nPos-1 );
+ aArgsList.realloc( ++NUM_OF_PICKLIST_ARGS );
+ }
+
+ aArgsList[NUM_OF_PICKLIST_ARGS-1].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FilterName" ));
+ aArgsList[NUM_OF_PICKLIST_ARGS-1].Value = makeAny( aFilter );
+
+ ShutdownIcon::OpenURL( rRecentFile.aURL, OUString( RTL_CONSTASCII_USTRINGPARAM( "_default" ) ), aArgsList );
+ }
+}
+@end
+
+static RecentMenuDelegate* pRecentDelegate = nil;
+
static rtl::OUString getShortCut( const rtl::OUString i_rTitle )
{
// create shortcut
@@ -176,6 +352,36 @@ static void appendMenuItem( NSMenu* i_pMenu, NSMenu* i_pDockMenu, const rtl::OUS
}
}
+static void appendRecentMenu( NSMenu* i_pMenu, NSMenu* i_pDockMenu, const String& i_rTitle )
+{
+ if( ! pRecentDelegate )
+ pRecentDelegate = [[RecentMenuDelegate alloc] init];
+
+ NSMenuItem* pItem = [i_pMenu addItemWithTitle: getAutoreleasedString( i_rTitle )
+ action: @selector(executeMenuItem:)
+ keyEquivalent: @""
+ ];
+ [pItem setEnabled: YES];
+ NSMenu* pRecentMenu = [[NSMenu alloc] initWithTitle: getAutoreleasedString( i_rTitle ) ];
+ [pRecentMenu setDelegate: pRecentDelegate];
+ [pRecentMenu setAutoenablesItems: NO];
+ [pItem setSubmenu: pRecentMenu];
+
+ if( i_pDockMenu )
+ {
+ // create a similar entry in the dock menu
+ pItem = [i_pDockMenu addItemWithTitle: getAutoreleasedString( i_rTitle )
+ action: @selector(executeMenuItem:)
+ keyEquivalent: @""
+ ];
+ [pItem setEnabled: YES];
+ pRecentMenu = [[NSMenu alloc] initWithTitle: getAutoreleasedString( i_rTitle ) ];
+ [pRecentMenu setDelegate: pRecentDelegate];
+ [pRecentMenu setAutoenablesItems: NO];
+ [pItem setSubmenu: pRecentMenu];
+ }
+}
+
extern "C"
{
@@ -270,6 +476,10 @@ void aqua_init_systray()
}
// insert the remaining menu entries
+
+ // add recent menu
+ appendRecentMenu( pMenu, pDockMenu, pShutdownIcon->GetResString( STR_QUICKSTART_RECENTDOC ) );
+
rtl::OUString aTitle( pShutdownIcon->GetResString( STR_QUICKSTART_FROMTEMPLATE ) );
rtl::OUString aKeyEquiv( getShortCut( aTitle ) );
appendMenuItem( pMenu, pDockMenu, aTitle, MI_TEMPLATE, aKeyEquiv );