diff options
Diffstat (limited to 'fpicker/source/unx/gnome/SalGtkFilePicker.cxx')
-rw-r--r-- | fpicker/source/unx/gnome/SalGtkFilePicker.cxx | 194 |
1 files changed, 87 insertions, 107 deletions
diff --git a/fpicker/source/unx/gnome/SalGtkFilePicker.cxx b/fpicker/source/unx/gnome/SalGtkFilePicker.cxx index 6a8579898a..3eccc609e6 100644 --- a/fpicker/source/unx/gnome/SalGtkFilePicker.cxx +++ b/fpicker/source/unx/gnome/SalGtkFilePicker.cxx @@ -38,13 +38,10 @@ //------------------------------------------------------------------------ // includes //------------------------------------------------------------------------ -#include <com/sun/star/lang/DisposedException.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> -#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp> #include <com/sun/star/ui/dialogs/CommonFilePickerElementIds.hpp> #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp> -#include <cppuhelper/interfacecontainer.h> #include <osl/diagnose.h> #include <osl/process.h> #include <com/sun/star/ui/dialogs/TemplateDescription.hpp> @@ -52,16 +49,15 @@ #include <com/sun/star/uno/Any.hxx> #include <FPServiceInfo.hxx> #include <osl/mutex.hxx> -#include <vcl/svapp.hxx> #include <SalGtkFilePicker.hxx> +#include <tools/string.hxx> #include <tools/urlobj.hxx> -#include <iostream> #include <algorithm> #include <set> +#include <string.h> #include "resourceprovider.hxx" -#include <tools/rc.hxx> //------------------------------------------------------------------------ // namespace directives @@ -89,9 +85,9 @@ namespace uno::Sequence<rtl::OUString> SAL_CALL FilePicker_getSupportedServiceNames() { uno::Sequence<rtl::OUString> aRet(3); - aRet[0] = rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.FilePicker" ); - aRet[1] = rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.SystemFilePicker" ); - aRet[2] = rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.GtkFilePicker" ); + aRet[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" )); + aRet[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.SystemFilePicker" )); + aRet[2] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.GtkFilePicker" )); return aRet; } } @@ -110,7 +106,7 @@ static void expandexpanders(GtkContainer *pWidget) if GTK_IS_CONTAINER(GTK_WIDGET(p->data)) expandexpanders(GTK_CONTAINER(GTK_WIDGET(p->data))); if GTK_IS_EXPANDER(GTK_WIDGET(p->data)) - gtk_expander_set_expanded(GTK_EXPANDER(GTK_WIDGET(p->data)), TRUE); + gtk_expander_set_expanded(GTK_EXPANDER(GTK_WIDGET(p->data)), sal_True); } g_list_free(pChildren); } @@ -196,17 +192,17 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact gtk_dialog_set_default_response( GTK_DIALOG (m_pDialog), GTK_RESPONSE_ACCEPT ); - gtk_file_chooser_set_local_only( GTK_FILE_CHOOSER( m_pDialog ), FALSE ); - gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER( m_pDialog ), FALSE ); + gtk_file_chooser_set_local_only( GTK_FILE_CHOOSER( m_pDialog ), sal_False ); + gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER( m_pDialog ), sal_False ); - m_pVBox = gtk_vbox_new( FALSE, 0 ); + m_pVBox = gtk_vbox_new( sal_False, 0 ); // We don't want clickable items to have a huge hit-area - GtkWidget *pHBox = gtk_hbox_new( FALSE, 0 ); - GtkWidget *pThinVBox = gtk_vbox_new( FALSE, 0 ); + GtkWidget *pHBox = gtk_hbox_new( sal_False, 0 ); + GtkWidget *pThinVBox = gtk_vbox_new( sal_False, 0 ); - gtk_box_pack_end (GTK_BOX( m_pVBox ), pHBox, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX( pHBox ), pThinVBox, FALSE, FALSE, 0); + gtk_box_pack_end (GTK_BOX( m_pVBox ), pHBox, sal_False, sal_False, 0); + gtk_box_pack_start (GTK_BOX( pHBox ), pThinVBox, sal_False, sal_False, 0); gtk_widget_show( pHBox ); gtk_widget_show( pThinVBox ); @@ -236,12 +232,12 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact break; } - gtk_box_pack_end( GTK_BOX( pThinVBox ), m_pToggles[i], FALSE, FALSE, 0 ); + gtk_box_pack_end( GTK_BOX( pThinVBox ), m_pToggles[i], sal_False, sal_False, 0 ); } for( i = 0; i < LIST_LAST; i++ ) { - m_pHBoxs[i] = gtk_hbox_new( FALSE, 0 ); + m_pHBoxs[i] = gtk_hbox_new( sal_False, 0 ); m_pAligns[i] = gtk_alignment_new(0, 0, 0, 1); @@ -266,18 +262,18 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact } gtk_container_add( GTK_CONTAINER( m_pAligns[i]), m_pLists[i] ); - gtk_box_pack_end( GTK_BOX( m_pHBoxs[i] ), m_pAligns[i], FALSE, FALSE, 0 ); + gtk_box_pack_end( GTK_BOX( m_pHBoxs[i] ), m_pAligns[i], sal_False, sal_False, 0 ); - gtk_box_pack_end( GTK_BOX( m_pHBoxs[i] ), m_pListLabels[i], FALSE, FALSE, 0 ); + gtk_box_pack_end( GTK_BOX( m_pHBoxs[i] ), m_pListLabels[i], sal_False, sal_False, 0 ); - gtk_box_pack_end( GTK_BOX( m_pVBox ), m_pHBoxs[i], FALSE, FALSE, 0 ); + gtk_box_pack_end( GTK_BOX( m_pVBox ), m_pHBoxs[i], sal_False, sal_False, 0 ); } aLabel = aResProvider.getResString( FILE_PICKER_FILE_TYPE ); m_pFilterExpander = gtk_expander_new_with_mnemonic( OUStringToOString( aLabel, RTL_TEXTENCODING_UTF8 ).getStr()); - gtk_box_pack_end( GTK_BOX( m_pVBox ), m_pFilterExpander, FALSE, TRUE, 0 ); + gtk_box_pack_end( GTK_BOX( m_pVBox ), m_pFilterExpander, sal_False, sal_True, 0 ); GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), @@ -295,11 +291,11 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact case 0: break; case 1: - gtk_expander_set_expanded(GTK_EXPANDER(m_pFilterExpander), TRUE); + gtk_expander_set_expanded(GTK_EXPANDER(m_pFilterExpander), sal_True); break; case 2: expandexpanders(GTK_CONTAINER(m_pDialog)); - gtk_expander_set_expanded(GTK_EXPANDER(m_pFilterExpander), TRUE); + gtk_expander_set_expanded(GTK_EXPANDER(m_pFilterExpander), sal_True); break; } @@ -316,8 +312,8 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact { column = gtk_tree_view_column_new (); cell = gtk_cell_renderer_text_new (); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_column_pack_start (column, cell, FALSE); + gtk_tree_view_column_set_expand (column, sal_True); + gtk_tree_view_column_pack_start (column, cell, sal_False); gtk_tree_view_column_set_attributes (column, cell, "text", i, (char *)NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(m_pFilterView), column); } @@ -406,52 +402,6 @@ void SAL_CALL SalGtkFilePicker::controlStateChanged( FilePickerEvent aEvent ) if (m_xListener.is()) m_xListener->controlStateChanged( aEvent ); } -//----------------------------------------------------------------------------------------- -// If there are more then one listener the return value of the last one wins -//----------------------------------------------------------------------------------------- - -rtl::OUString SAL_CALL SalGtkFilePicker::helpRequested( FilePickerEvent aEvent ) const -{ - rtl::OUString aHelpText; - - ::cppu::OInterfaceContainerHelper* pICHelper = - rBHelper.getContainer( getCppuType( ( uno::Reference<XFilePickerListener> * )0 ) ); - - if( pICHelper ) - { - ::cppu::OInterfaceIteratorHelper iter( *pICHelper ); - - while( iter.hasMoreElements() ) - { - try - { - /* - if there are multiple listeners responding - to this notification the next response - overwrittes the one before if it is not empty - */ - - rtl::OUString aTempString; - - uno::Reference<XFilePickerListener> xFPListener( iter.next(), uno::UNO_QUERY ); - if( xFPListener.is() ) - { - aTempString = xFPListener->helpRequested( aEvent ); - if( aTempString.getLength() ) - aHelpText = aTempString; - } - - } - catch( uno::RuntimeException& ) - { - OSL_ENSURE( false, "RuntimeException during event dispatching" ); - } - } - } - - return aHelpText; -} - //===================================================================== struct FilterEntry @@ -539,7 +489,7 @@ shrinkFilterName( const rtl::OUString &rFilterName, bool bAllowNoStar = false ) int i; int nBracketLen = -1; int nBracketEnd = -1; - const sal_Unicode *pStr = rFilterName; + const sal_Unicode *pStr = rFilterName.getStr(); OUString aRealName = rFilterName; for( i = aRealName.getLength() - 1; i > 0; i-- ) @@ -907,7 +857,7 @@ uno::Sequence<rtl::OUString> SAL_CALL SalGtkFilePicker::getSelectedFiles() throw if( sExtension.getLength() >= 3 ) // 3 = typical/minimum extension length { - static const OUString aStarDot = OUString::createFromAscii( "*." ); + static const OUString aStarDot(RTL_CONSTASCII_USTRINGPARAM( "*." )); ::rtl::OUString aNewFilter; ::rtl::OUString aOldFilter = getCurrentFilter(); @@ -974,10 +924,10 @@ uno::Sequence<rtl::OUString> SAL_CALL SalGtkFilePicker::getSelectedFiles() throw } while( nTokenIndex >= 0 ); - if( !bExtensionTypedIn && ( !sToken.equalsAscii( "*" ) ) ) + if( !bExtensionTypedIn && ( !sToken.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("*")) ) ) { //if the filename does not already have the auto extension, stick it on - OUString sExtension = OUString::createFromAscii( "." ) + sToken; + OUString sExtension = OUString(RTL_CONSTASCII_USTRINGPARAM( "." )) + sToken; OUString &rBase = aSelectedFiles[nIndex]; sal_Int32 nExtensionIdx = rBase.getLength() - sExtension.getLength(); OSL_TRACE( "idx are %d %d\n", rBase.lastIndexOf( sExtension ), nExtensionIdx ); @@ -1028,9 +978,12 @@ sal_Int16 SAL_CALL SalGtkFilePicker::execute() throw( uno::RuntimeException ) int btn = GTK_RESPONSE_NO; uno::Reference< awt::XExtendedToolkit > xToolkit( - m_xServiceMgr->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.awt.Toolkit") ), uno::UNO_QUERY); + m_xServiceMgr->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.Toolkit")) ), uno::UNO_QUERY); + + uno::Reference< frame::XDesktop > xDesktop( + m_xServiceMgr->createInstance( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")) ), uno::UNO_QUERY); - RunDialog* pRunDialog = new RunDialog(m_pDialog, xToolkit); + RunDialog* pRunDialog = new RunDialog(m_pDialog, xToolkit, xDesktop); uno::Reference < awt::XTopWindowListener > xLifeCycle(pRunDialog); while( GTK_RESPONSE_NO == btn ) { @@ -1050,20 +1003,47 @@ sal_Int16 SAL_CALL SalGtkFilePicker::execute() throw( uno::RuntimeException ) { CResourceProvider aResProvider; GtkWidget *dlg; - - dlg = gtk_message_dialog_new( NULL, + + + INetURLObject aFileObj( sFileName ); + + OString baseName( + OUStringToOString( + aFileObj.getName( + INetURLObject::LAST_SEGMENT, + true, + INetURLObject::DECODE_WITH_CHARSET + ), + RTL_TEXTENCODING_UTF8 + ) + ); + OString aMsg( + OUStringToOString( + aResProvider.getResString( FILE_PICKER_OVERWRITE ), + RTL_TEXTENCODING_UTF8 + ) + ); + OString toReplace( RTL_CONSTASCII_STRINGPARAM( "$filename$" )); + + aMsg = aMsg.replaceAt( + aMsg.indexOf( toReplace ), + toReplace.getLength(), + baseName + ); + + dlg = gtk_message_dialog_new( NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - OUStringToOString( - aResProvider.getResString( FILE_PICKER_OVERWRITE ), - RTL_TEXTENCODING_UTF8 ).getStr() ); + "%s", + aMsg.getStr() + ); gtk_window_set_title( GTK_WINDOW( dlg ), OUStringToOString(aResProvider.getResString(FILE_PICKER_TITLE_SAVE ), RTL_TEXTENCODING_UTF8 ).getStr() ); - RunDialog* pAnotherDialog = new RunDialog(dlg, xToolkit); + RunDialog* pAnotherDialog = new RunDialog(dlg, xToolkit, xDesktop); uno::Reference < awt::XTopWindowListener > xAnotherLifeCycle(pAnotherDialog); btn = pAnotherDialog->run(); @@ -1380,12 +1360,12 @@ throw( uno::RuntimeException ) if( bEnable ) { OSL_TRACE( "enable\n" ); - gtk_widget_set_sensitive( pWidget, TRUE ); + gtk_widget_set_sensitive( pWidget, sal_True ); } else { OSL_TRACE( "disable\n" ); - gtk_widget_set_sensitive( pWidget, FALSE ); + gtk_widget_set_sensitive( pWidget, sal_False ); } } else @@ -1424,7 +1404,7 @@ void SAL_CALL SalGtkFilePicker::setLabel( sal_Int16 nControlId, const ::rtl::OUS } else if( tType == GTK_TYPE_TOGGLE_BUTTON || tType == GTK_TYPE_BUTTON || tType == GTK_TYPE_LABEL ) g_object_set( pWidget, "label", aTxt.getStr(), - "use_underline", TRUE, (char *)NULL ); + "use_underline", sal_True, (char *)NULL ); else OSL_TRACE("Can't set label on list\n"); } @@ -1459,7 +1439,7 @@ uno::Sequence<sal_Int16> SAL_CALL SalGtkFilePicker::getSupportedImageFormats() t OSL_ASSERT( m_pDialog != NULL ); // TODO return m_pImpl->getSupportedImageFormats(); - return 0; + return uno::Sequence<sal_Int16>(); } sal_Int32 SAL_CALL SalGtkFilePicker::getTargetColorDepth() throw( uno::RuntimeException ) @@ -1505,7 +1485,7 @@ void SalGtkFilePicker::implChangeType( GtkTreeSelection *selection ) { gchar *title; gtk_tree_model_get (model, &iter, 2, &title, -1); - aLabel += rtl::OUString::createFromAscii( ": " ); + aLabel += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( ": " )); aLabel += rtl::OUString( title, strlen(title), RTL_TEXTENCODING_UTF8 ); g_free (title); } @@ -1562,7 +1542,7 @@ void SalGtkFilePicker::update_preview_cb( GtkFileChooser *file_chooser, SalGtkFi GtkWidget *preview; char *filename; GdkPixbuf *pixbuf; - gboolean have_preview = FALSE; + gboolean have_preview = sal_False; preview = pobjFP->m_pPreview; filename = gtk_file_chooser_get_preview_filename( file_chooser ); @@ -1640,7 +1620,7 @@ void SAL_CALL SalGtkFilePicker::initialize( const uno::Sequence<uno::Any>& aArgu uno::Any aAny; if( 0 == aArguments.getLength() ) throw lang::IllegalArgumentException( - rtl::OUString::createFromAscii( "no arguments" ), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "no arguments" )), static_cast<XFilePicker2*>( this ), 1 ); aAny = aArguments[0]; @@ -1648,7 +1628,7 @@ void SAL_CALL SalGtkFilePicker::initialize( const uno::Sequence<uno::Any>& aArgu if( ( aAny.getValueType() != ::getCppuType( ( sal_Int16* )0 ) ) && (aAny.getValueType() != ::getCppuType( ( sal_Int8* )0 ) ) ) throw lang::IllegalArgumentException( - rtl::OUString::createFromAscii( "invalid argument type" ), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "invalid argument type" )), static_cast<XFilePicker2*>( this ), 1 ); sal_Int16 templateId = -1; @@ -1736,7 +1716,7 @@ void SAL_CALL SalGtkFilePicker::initialize( const uno::Sequence<uno::Any>& aArgu break; default: throw lang::IllegalArgumentException( - rtl::OUString::createFromAscii( "Unknown template" ), + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "Unknown template" )), static_cast< XFilePicker2* >( this ), 1 ); } @@ -1815,7 +1795,7 @@ void SAL_CALL SalGtkFilePicker::cancel() throw( uno::RuntimeException ) rtl::OUString SAL_CALL SalGtkFilePicker::getImplementationName() throw( uno::RuntimeException ) { - return rtl::OUString::createFromAscii( FILE_PICKER_IMPL_NAME ); + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( FILE_PICKER_IMPL_NAME )); } // ------------------------------------------------- @@ -1879,24 +1859,24 @@ extern "C" static gboolean case_insensitive_filter (const GtkFileFilterInfo *filter_info, gpointer data) { - gboolean bRetval = FALSE; + gboolean bRetval = sal_False; const char *pFilter = (const char *) data; - g_return_val_if_fail( data != NULL, FALSE ); - g_return_val_if_fail( filter_info != NULL, FALSE ); + g_return_val_if_fail( data != NULL, sal_False ); + g_return_val_if_fail( filter_info != NULL, sal_False ); if( !filter_info->uri ) - return FALSE; + return sal_False; const char *pExtn = strrchr( filter_info->uri, '.' ); if( !pExtn ) - return FALSE; + return sal_False; pExtn++; if( !g_ascii_strcasecmp( pFilter, pExtn ) ) - bRetval = TRUE; + bRetval = sal_True; -#ifdef DEBUG +#if OSL_DEBUG_LEVEL > 1 fprintf( stderr, "'%s' match extn '%s' vs '%s' yeilds %d\n", filter_info->uri, pExtn, pFilter, bRetval ); #endif @@ -1913,9 +1893,9 @@ GtkFileFilter* SalGtkFilePicker::implAddFilter( const OUString& rFilter, const O OUString aShrunkName = shrinkFilterName( rFilter ); OString aFilterName = rtl::OUStringToOString( aShrunkName, RTL_TEXTENCODING_UTF8 ); - gtk_file_filter_set_name( filter, aFilterName ); + gtk_file_filter_set_name( filter, aFilterName.getStr() ); - static const OUString aStarDot = OUString::createFromAscii( "*." ); + static const OUString aStarDot(RTL_CONSTASCII_USTRINGPARAM( "*." )); OUString aTokens; bool bAllGlob = !rType.compareToAscii( "*.*" ) || !rType.compareToAscii( "*" ); @@ -1933,16 +1913,16 @@ GtkFileFilter* SalGtkFilePicker::implAddFilter( const OUString& rFilter, const O if (aToken.getLength()) { if (aTokens.getLength()) - aTokens += OUString::createFromAscii(","); + aTokens += OUString(RTL_CONSTASCII_USTRINGPARAM(",")); aTokens = aTokens += aToken; gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_URI, case_insensitive_filter, - g_strdup( rtl::OUStringToOString( aToken, RTL_TEXTENCODING_UTF8 ) ), + g_strdup( rtl::OUStringToOString(aToken, RTL_TEXTENCODING_UTF8).getStr() ), (GDestroyNotify) g_free ); OSL_TRACE( "fustering with %s\n", rtl::OUStringToOString( aToken, RTL_TEXTENCODING_UTF8 ).getStr()); } -#ifdef DEBUG +#if OSL_DEBUG_LEVEL > 0 else { g_warning( "Duff filter token '%s'\n", |