Thanks for the recommendation and insight.

Raymond

-----Original Message-----
From: Ariel Constenla-Haile [mailto:arie...@apache.org] 
Sent: Tuesday, May 07, 2013 10:16 AM
To: api@openoffice.apache.org
Subject: Re: EXTERNAL: Re: soffice process still running

Hi Raymond,

On Tue, May 07, 2013 at 04:25:57PM +0000, Steele, Raymond wrote:
> Ariel,
> 
> Thank you for the quick response.   I have narrowed the continued
> process down to a component.  However, the behavior is strange because 
> I am not really opening the component in my code. My code opens a 
> document using XComponentLoader::loadComponentFromURL(). I set the
> "Hidden" property to true so the user cannot see it.   The document
> that is open contains Dynamic Data Exchange (DDE) links to another 
> closed document. The code then uses XRefreshable interface to refresh 
> all the DDE links found in XIndexAccess.  Lastly, I export the 
> document using the "ODF Spreadsheet" / "calc8" filter name using 
> XStore::storeToURL(). For some reason, this whole process opens
> (hidden) the other document to which the document I am refreshing 
> contains DDE links to, even though I do not explicitly open it.
> Strange. 

It sounds logical that if you are refreshing the links, the application opens 
documents that are linked; what sounds like a bug is that the linked document 
isn't closed after the document containing the link is closed. This might be 
worth a bug report.

> In my original query, I did not want to close documents that were not 
> opened by my application. (i.e. the user opens it by clicking on the
> OpenOffice desktop icon).   My solution to this point for this issue
> is: if XEnumeration does have more elements, I create an enumeration 
> from XEnumerationAccess, loop through it,  get the XComponent 
> interface and XModel for each element, and XClose::close() the 
> component if the XModel::getURL() matches a specific URL to the 
> implicitly opened document. Lastly, if the enumeration does not have 
> any more elements, I terminate the desktop. All of this prevents my 
> application from inadvertently closing any documents that were not 
> opened by my application.
> 
> Do you have any insight to this behavior or recommendations?

May be you can asume that hidden documents were not opened by the user, and 
close them:

if the enumeration has elements
    if all remaining documents are hidden
        close the all

You can know if a document was loaded with Hidden set to true in the media 
descriptor by looping through css.frame.XModel.getArgs()

REM  *****  BASIC  *****
Option Explicit

Sub Main
    Dim aArgs(0) as new com.sun.star.beans.PropertyValue
    aArgs(0).Name = "Hidden"
    aArgs(0).Value = TRUE

    Dim oDoc as Object
    oDoc = StarDesktop.loadComponentFromURL(_
        "private:factory/swriter",_
        "_default",_
        com.sun.star.frame.FrameSearchFlag.ALL,_
        aArgs)
    
    Dim aLoadArgs()
    aLoadArgs = oDoc.getArgs()
    Dim aPropVal
    Dim bHidden as Boolean
    bHidden = FALSE
    For Each aPropVal In aLoadArgs
        If aPropVal.Name = "Hidden" Then
            bHidden = aPropVal.Value
            Exit For
        End If
    Next
    If bHidden Then
        oDoc.close(TRUE)
    End If
End Sub


Regards
--
Ariel Constenla-Haile
La Plata, Argentina

---------------------------------------------------------------------
To unsubscribe, e-mail: api-unsubscr...@openoffice.apache.org
For additional commands, e-mail: api-h...@openoffice.apache.org

Reply via email to