diff options
author | Lubos Lunak <l.lunak@ suse.cz> | 2006-03-14 13:07:55 +0000 |
---|---|---|
committer | Lubos Lunak <l.lunak@ suse.cz> | 2006-03-14 13:07:55 +0000 |
commit | 445eb35fb0c90d68d5eba67ef52528caac3a76be (patch) | |
tree | c7861fdecfdd14144b27ebeba2d1968bfb936088 | |
parent | 26ddae222bc650cb34fef2efe29db84886822f2d (diff) |
Add windowinfo argument to calls that need proper window relationship
(for working properly with advanced features such as focus stealing prevention).
-rw-r--r-- | doc/API.txt | 43 | ||||
-rw-r--r-- | generic/main.c | 26 | ||||
-rw-r--r-- | kde/daemon/handler.cpp | 48 | ||||
-rw-r--r-- | kde/daemon/handler.h | 1 | ||||
-rw-r--r-- | kde/gen/callbacks_generated.c | 88 | ||||
-rw-r--r-- | kde/gen/callbacks_generated.h | 28 | ||||
-rw-r--r-- | kde/gen/calls_generated.c | 83 | ||||
-rw-r--r-- | kde/gen/calls_generated.h | 23 | ||||
-rw-r--r-- | kde/gen/comm_generated.c | 97 | ||||
-rw-r--r-- | kde/gen/comm_generated.h | 37 | ||||
-rw-r--r-- | kde/gen/gen.cpp | 180 | ||||
-rw-r--r-- | kde/gen/gen.txt | 18 | ||||
-rw-r--r-- | lib/comm.c | 27 | ||||
-rw-r--r-- | lib/comm.h | 9 | ||||
-rw-r--r-- | tests/test_comm.c | 5 | ||||
-rw-r--r-- | tests/test_mailto.c | 5 | ||||
-rw-r--r-- | tests/test_remotefile.c | 10 | ||||
-rw-r--r-- | tests/test_runasuser.c | 2 |
18 files changed, 628 insertions, 102 deletions
diff --git a/doc/API.txt b/doc/API.txt index 41be885..536180d 100644 --- a/doc/API.txt +++ b/doc/API.txt @@ -6,6 +6,19 @@ otherwise. All filenames and paths must be absolute. +Window relations: +----------------- + +Many calls take 'windowinfo' argument that specifies a window related to the call. +This argument is necessary for maintaining proper window relations so that e.g. +a dialog opened from the call is properly associated with a window from the application +to which it logically belongs. Missing or incorrect data may result in focus problems. + +Applications should specify the toplevel window related to the request. If the application +has only one main window then this is the window, if it has more then the relevant +one should be used (e.g. for the OpenUrl call the window should be the toplevel window +in which the user clicked on the link). See bindings documentation for further details. + API calls list: =============== @@ -27,21 +40,23 @@ bindings documentation for details on command id's. capabilities: a list of capabilities -OpenUrl( string url ) -> ( bool ok ) ------------------------------------- +OpenUrl( string url, windowinfo winfo ) -> ( bool ok ) +------------------------------------------------------ Opens the given URL or filename in the default web browser. url: URL or filename to open +winfo: window related to this request (see conventions) ok: if false, the url wasn't opened -ExecuteUrl( string url ) -> ( bool ok ) ---------------------------------------- +ExecuteUrl( string url, windowinfo winfo ) -> ( bool ok ) +--------------------------------------------------------- Opens the given URL or filename in the default application for the file (image viewer for image, etc.) url: URL or filename to open +winfo: window related to this request (see conventions) ok: if false, the URL/file wasn't opened @@ -55,13 +70,14 @@ order: 0 - error 2 - Cancel/Ok -RunAsUser( string user, string command ) -> ( bool ok ) -------------------------------------------------------- +RunAsUser( string user, string command, windowinfo winfo ) -> ( bool ok ) +------------------------------------------------------------------------- Executes the given command as a different user. user: username or empty for superuser command: command to execute +winfo: window related to this request (see conventions) ok: if false, the command wasn't executed @@ -74,8 +90,8 @@ suspend: whether to suspend screensaving ok: if false, suspending failed -MailTo( string subject, string body, string to, string cc, string bcc, string[] attachments ) -> ( bool ok ) ------------------------------------------------------------------------------------------------------------- +MailTo( string subject, string body, string to, string cc, string bcc, string[] attachments, windowinfo winfo ) -> ( bool ok ) +------------------------------------------------------------------------------------------------------------------------------ Opens a window for composing mail in the default mail client. @@ -85,10 +101,11 @@ to: mail's To:, multiple entries are separated using commas, may be empty to: mail's CC:, multiple entries are separated using commas, may be empty to: mail's BCC:, multiple entries are separated using commas, may be empty attachments: a list of filenames to be attached to the mail +winfo: window related to this request (see conventions) -LocalFile( string url, string local, bool allow_download ) -> ( string result ) -------------------------------------------------------------------------------- +LocalFile( string url, string local, bool allow_download, windowinfo winfo ) -> ( string result ) +------------------------------------------------------------------------------------------------- Converts an URL to a local file location, downloading the remote file if necessary and allowed. The URL may be already a local file in which @@ -102,11 +119,12 @@ local: filename of a local file that should be used as a temporary file to be eventually removed using RemoveTemporaryLocalFile; note that if the source file already is a local file, then its path will be returned and this field will be ignored +winfo: window related to this request (see conventions) result: filename of the resulting local file, may be equal to the source file -UploadFile( string local, string file, bool remove_local ) -> ( bool ok ) -------------------------------------------------------------------------- +UploadFile( string local, string file, bool remove_local, windowinfo winfo ) -> ( bool ok ) +------------------------------------------------------------------------------------------- Uploads local file to its URL location. This function is a complement for LocalFile to save a temporary file to its real location after it's been changed. In case @@ -116,6 +134,7 @@ local: filename of a temporary file obtained from LocalFile file: URL or path of the location where to save the file to remove_local: if true, equivalent to calling RemoveTemporaryLocalFile with the local file after this call +winfo: window related to this request (see conventions) ok: if false, the upload failed RemoveTemporaryLocalFile( string local ) -> ( bool ok ) diff --git a/generic/main.c b/generic/main.c index 365a6d0..54113fe 100644 --- a/generic/main.c +++ b/generic/main.c @@ -76,15 +76,18 @@ static void processCommandOpenUrl( DapiConnection* conn, int seq ) { int ok; char* url; - if( !dapi_readCommandOpenUrl( conn, &url )) + DapiWindowInfo winfo; + if( !dapi_readCommandOpenUrl( conn, &url, &winfo )) { closeConnection( conn ); return; } debug( "Open url %d: %s", dapi_socket( conn ), url ); + /* winfo ? */ ok = openUrl( url ); dapi_writeReplyOpenUrl( conn, seq, ok ? 1 : 0 ); free( url ); + dapi_freeWindowInfo( winfo ); } static void processCommandButtonOrder( DapiConnection* conn, int seq ) @@ -101,7 +104,8 @@ static void processCommandButtonOrder( DapiConnection* conn, int seq ) static void processCommandExecuteUrl( DapiConnection* conn, int seq ) { char* url; - if( !dapi_readCommandExecuteUrl( conn, &url )) + DapiWindowInfo winfo; + if( !dapi_readCommandExecuteUrl( conn, &url, &winfo )) { closeConnection( conn ); return; @@ -109,13 +113,15 @@ static void processCommandExecuteUrl( DapiConnection* conn, int seq ) debug( "Execute url %d: %s", dapi_socket( conn ), url ); dapi_writeReplyExecuteUrl( conn, seq, 0 ); /* TODO failure ??? */ free( url ); + dapi_freeWindowInfo( winfo ); } static void processCommandRunAsUser( DapiConnection* conn, int seq ) { char* user; char* command; - if( !dapi_readCommandRunAsUser( conn, &user, &command )) + DapiWindowInfo winfo; + if( !dapi_readCommandRunAsUser( conn, &user, &command, &winfo )) { closeConnection( conn ); return; @@ -124,6 +130,7 @@ static void processCommandRunAsUser( DapiConnection* conn, int seq ) dapi_writeReplyRunAsUser( conn, seq, 0 ); /* TODO failure ??? */ free( user ); free( command ); + dapi_freeWindowInfo( winfo ); } static void processCommandSuspendScreensaving( DapiConnection* conn, int seq ) @@ -157,12 +164,14 @@ static void processCommandMailTo( DapiConnection* conn, int seq ) char* cc; char* bcc; stringarr attachments; - if( !dapi_readCommandMailTo( conn, &subject, &body, &to, &cc, &bcc, &attachments )) + DapiWindowInfo winfo; + if( !dapi_readCommandMailTo( conn, &subject, &body, &to, &cc, &bcc, &attachments, &winfo )) { closeConnection( conn ); return; } debug( "Mail to %d: %s", dapi_socket( conn ), subject ); + /* winfo ? */ ok = mailTo( subject, body, to, cc, bcc, ( const char** ) attachments.data, attachments.count ); dapi_writeReplyMailTo( conn, seq, ok ? 1 : 0 ); free( subject ); @@ -171,6 +180,7 @@ static void processCommandMailTo( DapiConnection* conn, int seq ) free( cc ); free( bcc ); dapi_freestringarr( attachments ); + dapi_freeWindowInfo( winfo ); } static void processCommandLocalFile( DapiConnection* conn, int seq ) @@ -179,7 +189,8 @@ static void processCommandLocalFile( DapiConnection* conn, int seq ) char* local; int allow_download; const char* result = NULL; - if( !dapi_readCommandLocalFile( conn, &file, &local, &allow_download )) + DapiWindowInfo winfo; + if( !dapi_readCommandLocalFile( conn, &file, &local, &allow_download, &winfo )) { closeConnection( conn ); return; @@ -194,6 +205,7 @@ static void processCommandLocalFile( DapiConnection* conn, int seq ) /* local is unused, no real downloading */ dapi_writeReplyLocalFile( conn, seq, result ); free( file ); + dapi_freeWindowInfo( winfo ); } static void processCommandUploadFile( DapiConnection* conn, int seq ) @@ -202,7 +214,8 @@ static void processCommandUploadFile( DapiConnection* conn, int seq ) char* file; int remove_local; int ok; - if( !dapi_readCommandUploadFile( conn, &local, &file, &remove_local )) + DapiWindowInfo winfo; + if( !dapi_readCommandUploadFile( conn, &local, &file, &remove_local, &winfo )) { closeConnection( conn ); return; @@ -219,6 +232,7 @@ static void processCommandUploadFile( DapiConnection* conn, int seq ) dapi_writeReplyUploadFile( conn, seq, ok ); free( local ); free( file ); + dapi_freeWindowInfo( winfo ); } static void processCommandRemoveTemporaryLocalFile( DapiConnection* conn, int seq ) diff --git a/kde/daemon/handler.cpp b/kde/daemon/handler.cpp index d056813..20460e4 100644 --- a/kde/daemon/handler.cpp +++ b/kde/daemon/handler.cpp @@ -167,27 +167,31 @@ void KDapiHandler::processCommandCapabilities( ConnectionData& conn, int seq ) void KDapiHandler::processCommandOpenUrl( ConnectionData& conn, int seq ) { char* url; - if( !dapi_readCommandOpenUrl( conn.conn, &url )) + DapiWindowInfo winfo; + if( !dapi_readCommandOpenUrl( conn.conn, &url, &winfo )) { closeSocket( conn ); return; } - kapp->invokeBrowser( url ); + kapp->invokeBrowser( url, makeStartupInfo( winfo )); dapi_writeReplyOpenUrl( conn.conn, seq, 1 ); free( url ); + dapi_freeWindowInfo( winfo ); } void KDapiHandler::processCommandExecuteUrl( ConnectionData& conn, int seq ) { char* url; - if( !dapi_readCommandExecuteUrl( conn.conn, &url )) + DapiWindowInfo winfo; + if( !dapi_readCommandExecuteUrl( conn.conn, &url, &winfo )) { closeSocket( conn ); return; } - new KRun( url ); + new KRun( url ); // TODO startup info dapi_writeReplyExecuteUrl( conn.conn, seq, 1 ); free( url ); + dapi_freeWindowInfo( winfo ); } void KDapiHandler::processCommandButtonOrder( ConnectionData& conn, int seq ) @@ -206,12 +210,13 @@ void KDapiHandler::processCommandRunAsUser( ConnectionData& conn, int seq ) { char* user; char* command; - if( !dapi_readCommandRunAsUser( conn.conn, &user, &command )) + DapiWindowInfo winfo; + if( !dapi_readCommandRunAsUser( conn.conn, &user, &command, &winfo )) { closeSocket( conn ); return; } - KProcess proc; + KProcess proc; // TODO startup info proc.setUseShell( true ); // TODO quoting proc << "kdesu"; if( user[ 0 ] != '\0' ) @@ -221,6 +226,7 @@ void KDapiHandler::processCommandRunAsUser( ConnectionData& conn, int seq ) dapi_writeReplyRunAsUser( conn.conn, seq, ret ? 1 : 0 ); free( user ); free( command ); + dapi_freeWindowInfo( winfo ); } void KDapiHandler::processCommandSuspendScreensaving( ConnectionData& conn, int seq ) @@ -267,7 +273,8 @@ void KDapiHandler::processCommandMailTo( ConnectionData& conn, int seq ) char* cc; char* bcc; stringarr attachments; - if( !dapi_readCommandMailTo( conn.conn, &subject, &body, &to, &cc, &bcc, &attachments )) + DapiWindowInfo winfo; + if( !dapi_readCommandMailTo( conn.conn, &subject, &body, &to, &cc, &bcc, &attachments, &winfo )) { closeSocket( conn ); return; @@ -278,7 +285,7 @@ void KDapiHandler::processCommandMailTo( ConnectionData& conn, int seq ) ++i ) attachurls.append( QString::fromUtf8( attachments.data[ i ] )); kapp->invokeMailer( QString::fromUtf8( to ), QString::fromUtf8( cc ), QString::fromUtf8( bcc ), - QString::fromUtf8( subject ), QString::fromUtf8( body ), QString(), attachurls ); + QString::fromUtf8( subject ), QString::fromUtf8( body ), QString(), attachurls, makeStartupInfo( winfo )); dapi_writeReplyMailTo( conn.conn, seq, 1 ); free( subject ); free( body ); @@ -286,6 +293,7 @@ void KDapiHandler::processCommandMailTo( ConnectionData& conn, int seq ) free( cc ); free( bcc ); dapi_freestringarr( attachments ); + dapi_freeWindowInfo( winfo ); } void KDapiHandler::processCommandLocalFile( ConnectionData& conn, int seq ) @@ -293,7 +301,8 @@ void KDapiHandler::processCommandLocalFile( ConnectionData& conn, int seq ) char* file; char* local; int allow_download; - if( !dapi_readCommandLocalFile( conn.conn, &file, &local, &allow_download )) + DapiWindowInfo winfo; + if( !dapi_readCommandLocalFile( conn.conn, &file, &local, &allow_download, &winfo )) { closeSocket( conn ); return; @@ -313,6 +322,7 @@ void KDapiHandler::processCommandLocalFile( ConnectionData& conn, int seq ) result = target; } dapi_writeReplyLocalFile( conn.conn, seq, result.utf8()); + dapi_freeWindowInfo( winfo ); } void KDapiHandler::processCommandUploadFile( ConnectionData& conn, int seq ) @@ -320,7 +330,8 @@ void KDapiHandler::processCommandUploadFile( ConnectionData& conn, int seq ) char* local; char* file; int remove_local; - if( !dapi_readCommandUploadFile( conn.conn, &local, &file, &remove_local )) + DapiWindowInfo winfo; + if( !dapi_readCommandUploadFile( conn.conn, &local, &file, &remove_local, &winfo )) { closeSocket( conn ); return; @@ -346,6 +357,7 @@ void KDapiHandler::processCommandUploadFile( ConnectionData& conn, int seq ) } } dapi_writeReplyUploadFile( conn.conn, seq, ok ); + dapi_freeWindowInfo( winfo ); } void KDapiHandler::processCommandRemoveTemporaryLocalFile( ConnectionData& conn, int seq ) @@ -360,3 +372,19 @@ void KDapiHandler::processCommandRemoveTemporaryLocalFile( ConnectionData& conn, dapi_writeReplyRemoveTemporaryLocalFile( conn.conn, seq, 1 ); free( file ); } + +QCString KDapiHandler::makeStartupInfo( const DapiWindowInfo& winfo ) + { + WId window = winfo.window; + if( window != 0 ) + { + // TODO for the window !=0 case KStartupInfo API needs to be extended to accept + // external timestamp for creating new startup info + kapp->updateUserTimestamp(); + } + else + { + kapp->updateUserTimestamp(); + } + return KStartupInfo::createNewStartupId(); + } diff --git a/kde/daemon/handler.h b/kde/daemon/handler.h index ec320c0..8d86cb3 100644 --- a/kde/daemon/handler.h +++ b/kde/daemon/handler.h @@ -40,6 +40,7 @@ class KDapiHandler void processCommandUploadFile( ConnectionData& conn, int seq ); void processCommandRemoveTemporaryLocalFile( ConnectionData& conn, int seq ); void updateScreensaving(); + static QCString makeStartupInfo( const DapiWindowInfo& winfo ); int mainsocket; typedef QValueList< ConnectionData > ConnectionList; ConnectionList connections; diff --git a/kde/gen/callbacks_generated.c b/kde/gen/callbacks_generated.c index c72455d..c8d12b8 100644 --- a/kde/gen/callbacks_generated.c +++ b/kde/gen/callbacks_generated.c @@ -34,11 +34,12 @@ int dapi_callbackCapabilities( DapiConnection* conn, dapi_Capabilities_callback return seq; } -int dapi_callbackOpenUrl( DapiConnection* conn, const char* url, dapi_OpenUrl_callback callback ) +int dapi_callbackOpenUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo, + dapi_OpenUrl_callback callback ) { int seq; DapiCallbackData* call; - seq = dapi_writeCommandOpenUrl( conn, url ); + seq = dapi_writeCommandOpenUrl( conn, url, winfo ); if( seq == 0 ) return 0; call = malloc( sizeof( *call )); @@ -52,11 +53,12 @@ int dapi_callbackOpenUrl( DapiConnection* conn, const char* url, dapi_OpenUrl_ca return seq; } -int dapi_callbackExecuteUrl( DapiConnection* conn, const char* url, dapi_ExecuteUrl_callback callback ) +int dapi_callbackExecuteUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo, + dapi_ExecuteUrl_callback callback ) { int seq; DapiCallbackData* call; - seq = dapi_writeCommandExecuteUrl( conn, url ); + seq = dapi_writeCommandExecuteUrl( conn, url, winfo ); if( seq == 0 ) return 0; call = malloc( sizeof( *call )); @@ -89,11 +91,11 @@ int dapi_callbackButtonOrder( DapiConnection* conn, dapi_ButtonOrder_callback ca } int dapi_callbackRunAsUser( DapiConnection* conn, const char* user, const char* command, - dapi_RunAsUser_callback callback ) + DapiWindowInfo winfo, dapi_RunAsUser_callback callback ) { int seq; DapiCallbackData* call; - seq = dapi_writeCommandRunAsUser( conn, user, command ); + seq = dapi_writeCommandRunAsUser( conn, user, command, winfo ); if( seq == 0 ) return 0; call = malloc( sizeof( *call )); @@ -126,11 +128,12 @@ int dapi_callbackSuspendScreensaving( DapiConnection* conn, int suspend, dapi_Su } int dapi_callbackMailTo( DapiConnection* conn, const char* subject, const char* body, - const char* to, const char* cc, const char* bcc, stringarr attachments, dapi_MailTo_callback callback ) + const char* to, const char* cc, const char* bcc, stringarr attachments, DapiWindowInfo winfo, + dapi_MailTo_callback callback ) { int seq; DapiCallbackData* call; - seq = dapi_writeCommandMailTo( conn, subject, body, to, cc, bcc, attachments ); + seq = dapi_writeCommandMailTo( conn, subject, body, to, cc, bcc, attachments, winfo ); if( seq == 0 ) return 0; call = malloc( sizeof( *call )); @@ -145,11 +148,11 @@ int dapi_callbackMailTo( DapiConnection* conn, const char* subject, const char* } int dapi_callbackLocalFile( DapiConnection* conn, const char* remote, const char* local, - int allow_download, dapi_LocalFile_callback callback ) + int allow_download, DapiWindowInfo winfo, dapi_LocalFile_callback callback ) { int seq; DapiCallbackData* call; - seq = dapi_writeCommandLocalFile( conn, remote, local, allow_download ); + seq = dapi_writeCommandLocalFile( conn, remote, local, allow_download, winfo ); if( seq == 0 ) return 0; call = malloc( sizeof( *call )); @@ -164,11 +167,11 @@ int dapi_callbackLocalFile( DapiConnection* conn, const char* remote, const char } int dapi_callbackUploadFile( DapiConnection* conn, const char* local, const char* file, - int remove_local, dapi_UploadFile_callback callback ) + int remove_local, DapiWindowInfo winfo, dapi_UploadFile_callback callback ) { int seq; DapiCallbackData* call; - seq = dapi_writeCommandUploadFile( conn, local, file, remove_local ); + seq = dapi_writeCommandUploadFile( conn, local, file, remove_local, winfo ); if( seq == 0 ) return 0; call = malloc( sizeof( *call )); @@ -285,3 +288,64 @@ static void genericCallbackDispatch( DapiConnection* conn, DapiCallbackData* dat } } } +int dapi_callbackOpenUrl_Window( DapiConnection* conn, const char* url, long winfo, + dapi_OpenUrl_callback callback ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_callbackOpenUrl( conn, url, winfo_, callback ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_callbackExecuteUrl_Window( DapiConnection* conn, const char* url, long winfo, + dapi_ExecuteUrl_callback callback ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_callbackExecuteUrl( conn, url, winfo_, callback ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_callbackRunAsUser_Window( DapiConnection* conn, const char* user, const char* command, + long winfo, dapi_RunAsUser_callback callback ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_callbackRunAsUser( conn, user, command, winfo_, callback ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_callbackMailTo_Window( DapiConnection* conn, const char* subject, const char* body, + const char* to, const char* cc, const char* bcc, stringarr attachments, long winfo, + dapi_MailTo_callback callback ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_callbackMailTo( conn, subject, body, to, cc, bcc, attachments, winfo_, callback ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_callbackLocalFile_Window( DapiConnection* conn, const char* remote, const char* local, + int allow_download, long winfo, dapi_LocalFile_callback callback ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_callbackLocalFile( conn, remote, local, allow_download, winfo_, callback ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_callbackUploadFile_Window( DapiConnection* conn, const char* local, const char* file, + int remove_local, long winfo, dapi_UploadFile_callback callback ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_callbackUploadFile( conn, local, file, remove_local, winfo_, callback ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + diff --git a/kde/gen/callbacks_generated.h b/kde/gen/callbacks_generated.h index 06c37ce..48212e0 100644 --- a/kde/gen/callbacks_generated.h +++ b/kde/gen/callbacks_generated.h @@ -4,26 +4,42 @@ typedef void( * dapi_Capabilities_callback )( DapiConnection* conn, int seq, int int ok ); int dapi_callbackCapabilities( DapiConnection* conn, dapi_Capabilities_callback callback ); typedef void( * dapi_OpenUrl_callback )( DapiConnection* conn, int seq, int ok ); -int dapi_callbackOpenUrl( DapiConnection* conn, const char* url, dapi_OpenUrl_callback callback ); +int dapi_callbackOpenUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo, + dapi_OpenUrl_callback callback ); +int dapi_callbackOpenUrl_Window( DapiConnection* conn, const char* url, long winfo, + dapi_OpenUrl_callback callback ); typedef void( * dapi_ExecuteUrl_callback )( DapiConnection* conn, int seq, int ok ); -int dapi_callbackExecuteUrl( DapiConnection* conn, const char* url, dapi_ExecuteUrl_callback callback ); +int dapi_callbackExecuteUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo, + dapi_ExecuteUrl_callback callback ); +int dapi_callbackExecuteUrl_Window( DapiConnection* conn, const char* url, long winfo, + dapi_ExecuteUrl_callback callback ); typedef void( * dapi_ButtonOrder_callback )( DapiConnection* conn, int seq, int order ); int dapi_callbackButtonOrder( DapiConnection* conn, dapi_ButtonOrder_callback callback ); typedef void( * dapi_RunAsUser_callback )( DapiConnection* conn, int seq, int ok ); int dapi_callbackRunAsUser( DapiConnection* conn, const char* user, const char* command, - dapi_RunAsUser_callback callback ); + DapiWindowInfo winfo, dapi_RunAsUser_callback callback ); +int dapi_callbackRunAsUser_Window( DapiConnection* conn, const char* user, const char* command, + long winfo, dapi_RunAsUser_callback callback ); typedef void( * dapi_SuspendScreensaving_callback )( DapiConnection* conn, int seq, int ok ); int dapi_callbackSuspendScreensaving( DapiConnection* conn, int suspend, dapi_SuspendScreensaving_callback callback ); typedef void( * dapi_MailTo_callback )( DapiConnection* conn, int seq, int ok ); int dapi_callbackMailTo( DapiConnection* conn, const char* subject, const char* body, - const char* to, const char* cc, const char* bcc, stringarr attachments, dapi_MailTo_callback callback ); + const char* to, const char* cc, const char* bcc, stringarr attachments, DapiWindowInfo winfo, + dapi_MailTo_callback callback ); +int dapi_callbackMailTo_Window( DapiConnection* conn, const char* subject, const char* body, + const char* to, const char* cc, const char* bcc, stringarr attachments, long winfo, + dapi_MailTo_callback callback ); typedef void( * dapi_LocalFile_callback )( DapiConnection* conn, int seq, const char* result ); int dapi_callbackLocalFile( DapiConnection* conn, const char* remote, const char* local, - int allow_download, dapi_LocalFile_callback callback ); + int allow_download, DapiWindowInfo winfo, dapi_LocalFile_callback callback ); +int dapi_callbackLocalFile_Window( DapiConnection* conn, const char* remote, const char* local, + int allow_download, long winfo, dapi_LocalFile_callback callback ); typedef void( * dapi_UploadFile_callback )( DapiConnection* conn, int seq, int ok ); int dapi_callbackUploadFile( DapiConnection* conn, const char* local, const char* file, - int remove_local, dapi_UploadFile_callback callback ); + int remove_local, DapiWindowInfo winfo, dapi_UploadFile_callback callback ); +int dapi_callbackUploadFile_Window( DapiConnection* conn, const char* local, const char* file, + int remove_local, long winfo, dapi_UploadFile_callback callback ); typedef void( * dapi_RemoveTemporaryLocalFile_callback )( DapiConnection* conn, int seq, int ok ); int dapi_callbackRemoveTemporaryLocalFile( DapiConnection* conn, const char* local, diff --git a/kde/gen/calls_generated.c b/kde/gen/calls_generated.c index 4146768..cf93c1b 100644 --- a/kde/gen/calls_generated.c +++ b/kde/gen/calls_generated.c @@ -40,11 +40,11 @@ int dapi_Capabilities( DapiConnection* conn, intarr* capabitilies ) return ret; } -int dapi_OpenUrl( DapiConnection* conn, const char* url ) +int dapi_OpenUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ) { int seq; int ret; - seq = dapi_writeCommandOpenUrl( conn, url ); + seq = dapi_writeCommandOpenUrl( conn, url, winfo ); if( seq == 0 ) return 0; for(;;) @@ -61,11 +61,11 @@ int dapi_OpenUrl( DapiConnection* conn, const char* url ) return ret; } -int dapi_ExecuteUrl( DapiConnection* conn, const char* url ) +int dapi_ExecuteUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ) { int seq; int ret; - seq = dapi_writeCommandExecuteUrl( conn, url ); + seq = dapi_writeCommandExecuteUrl( conn, url, winfo ); if( seq == 0 ) return 0; for(;;) @@ -103,11 +103,11 @@ int dapi_ButtonOrder( DapiConnection* conn ) return ret; } -int dapi_RunAsUser( DapiConnection* conn, const char* user, const char* command ) +int dapi_RunAsUser( DapiConnection* conn, const char* user, const char* command, DapiWindowInfo winfo ) { int seq; int ret; - seq = dapi_writeCommandRunAsUser( conn, user, command ); + seq = dapi_writeCommandRunAsUser( conn, user, command, winfo ); if( seq == 0 ) return 0; for(;;) @@ -146,11 +146,11 @@ int dapi_SuspendScreensaving( DapiConnection* conn, int suspend ) } int dapi_MailTo( DapiConnection* conn, const char* subject, const char* body, const char* to, - const char* cc, const char* bcc, stringarr attachments ) + const char* cc, const char* bcc, stringarr attachments, DapiWindowInfo winfo ) { int seq; int ret; - seq = dapi_writeCommandMailTo( conn, subject, body, to, cc, bcc, attachments ); + seq = dapi_writeCommandMailTo( conn, subject, body, to, cc, bcc, attachments, winfo ); if( seq == 0 ) return 0; for(;;) @@ -168,11 +168,11 @@ int dapi_MailTo( DapiConnection* conn, const char* subject, const char* body, co } char* dapi_LocalFile( DapiConnection* conn, const char* remote, const char* local, - int allow_download ) + int allow_download, DapiWindowInfo winfo ) { int seq; char* ret; - seq = dapi_writeCommandLocalFile( conn, remote, local, allow_download ); + seq = dapi_writeCommandLocalFile( conn, remote, local, allow_download, winfo ); if( seq == 0 ) return 0; for(;;) @@ -194,11 +194,12 @@ char* dapi_LocalFile( DapiConnection* conn, const char* remote, const char* loca return ret; } -int dapi_UploadFile( DapiConnection* conn, const char* local, const char* file, int remove_local ) +int dapi_UploadFile( DapiConnection* conn, const char* local, const char* file, int remove_local, + DapiWindowInfo winfo ) { int seq; int ret; - seq = dapi_writeCommandUploadFile( conn, local, file, remove_local ); + seq = dapi_writeCommandUploadFile( conn, local, file, remove_local, winfo ); if( seq == 0 ) return 0; for(;;) @@ -236,3 +237,61 @@ int dapi_RemoveTemporaryLocalFile( DapiConnection* conn, const char* local ) return ret; } +int dapi_OpenUrl_Window( DapiConnection* conn, const char* url, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int ret = dapi_OpenUrl( conn, url, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return ret; + } + +int dapi_ExecuteUrl_Window( DapiConnection* conn, const char* url, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int ret = dapi_ExecuteUrl( conn, url, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return ret; + } + +int dapi_RunAsUser_Window( DapiConnection* conn, const char* user, const char* command, + long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int ret = dapi_RunAsUser( conn, user, command, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return ret; + } + +int dapi_MailTo_Window( DapiConnection* conn, const char* subject, const char* body, + const char* to, const char* cc, const char* bcc, stringarr attachments, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int ret = dapi_MailTo( conn, subject, body, to, cc, bcc, attachments, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return ret; + } + +char* dapi_LocalFile_Window( DapiConnection* conn, const char* remote, const char* local, + int allow_download, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + char* ret = dapi_LocalFile( conn, remote, local, allow_download, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return ret; + } + +int dapi_UploadFile_Window( DapiConnection* conn, const char* local, const char* file, + int remove_local, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int ret = dapi_UploadFile( conn, local, file, remove_local, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return ret; + } + diff --git a/kde/gen/calls_generated.h b/kde/gen/calls_generated.h index d3c1c57..451e275 100644 --- a/kde/gen/calls_generated.h +++ b/kde/gen/calls_generated.h @@ -1,13 +1,24 @@ int dapi_Init( DapiConnection* conn ); int dapi_Capabilities( DapiConnection* conn, intarr* capabitilies ); -int dapi_OpenUrl( DapiConnection* conn, const char* url ); -int dapi_ExecuteUrl( DapiConnection* conn, const char* url ); +int dapi_OpenUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ); +int dapi_OpenUrl_Window( DapiConnection* conn, const char* url, long winfo ); +int dapi_ExecuteUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ); +int dapi_ExecuteUrl_Window( DapiConnection* conn, const char* url, long winfo ); int dapi_ButtonOrder( DapiConnection* conn ); -int dapi_RunAsUser( DapiConnection* conn, const char* user, const char* command ); +int dapi_RunAsUser( DapiConnection* conn, const char* user, const char* command, DapiWindowInfo winfo ); +int dapi_RunAsUser_Window( DapiConnection* conn, const char* user, const char* command, + long winfo ); int dapi_SuspendScreensaving( DapiConnection* conn, int suspend ); int dapi_MailTo( DapiConnection* conn, const char* subject, const char* body, const char* to, - const char* cc, const char* bcc, stringarr attachments ); + const char* cc, const char* bcc, stringarr attachments, DapiWindowInfo winfo ); +int dapi_MailTo_Window( DapiConnection* conn, const char* subject, const char* body, + const char* to, const char* cc, const char* bcc, stringarr attachments, long winfo ); char* dapi_LocalFile( DapiConnection* conn, const char* remote, const char* local, - int allow_download ); -int dapi_UploadFile( DapiConnection* conn, const char* local, const char* file, int remove_local ); + int allow_download, DapiWindowInfo winfo ); +char* dapi_LocalFile_Window( DapiConnection* conn, const char* remote, const char* local, + int allow_download, long winfo ); +int dapi_UploadFile( DapiConnection* conn, const char* local, const char* file, int remove_local, + DapiWindowInfo winfo ); +int dapi_UploadFile_Window( DapiConnection* conn, const char* local, const char* file, + int remove_local, long winfo ); int dapi_RemoveTemporaryLocalFile( DapiConnection* conn, const char* local ); diff --git a/kde/gen/comm_generated.c b/kde/gen/comm_generated.c index 95467ee..c192668 100644 --- a/kde/gen/comm_generated.c +++ b/kde/gen/comm_generated.c @@ -8,15 +8,17 @@ int dapi_readCommandCapabilities( DapiConnection* conn ) return 1; } -int dapi_readCommandOpenUrl( DapiConnection* conn, char** url ) +int dapi_readCommandOpenUrl( DapiConnection* conn, char** url, DapiWindowInfo* winfo ) { *url = readString( conn ); + *winfo = readWindowInfo( conn ); return 1; } -int dapi_readCommandExecuteUrl( DapiConnection* conn, char** url ) +int dapi_readCommandExecuteUrl( DapiConnection* conn, char** url, DapiWindowInfo* winfo ) { *url = readString( conn ); + *winfo = readWindowInfo( conn ); return 1; } @@ -25,10 +27,12 @@ int dapi_readCommandButtonOrder( DapiConnection* conn ) return 1; } -int dapi_readCommandRunAsUser( DapiConnection* conn, char** user, char** command ) +int dapi_readCommandRunAsUser( DapiConnection* conn, char** user, char** command, + DapiWindowInfo* winfo ) { *user = readString( conn ); *command = readString( conn ); + *winfo = readWindowInfo( conn ); return 1; } @@ -39,7 +43,7 @@ int dapi_readCommandSuspendScreensaving( DapiConnection* conn, int* suspend ) } int dapi_readCommandMailTo( DapiConnection* conn, char** subject, char** body, char** to, - char** cc, char** bcc, stringarr* attachments ) + char** cc, char** bcc, stringarr* attachments, DapiWindowInfo* winfo ) { *subject = readString( conn ); *body = readString( conn ); @@ -47,23 +51,27 @@ int dapi_readCommandMailTo( DapiConnection* conn, char** subject, char** body, c *cc = readString( conn ); *bcc = readString( conn ); *attachments = readstringarr( conn ); + *winfo = readWindowInfo( conn ); return 1; } int dapi_readCommandLocalFile( DapiConnection* conn, char** remote, char** local, - int* allow_download ) + int* allow_download, DapiWindowInfo* winfo ) { *remote = readString( conn ); *local = readString( conn ); readSocket( conn, allow_download, sizeof( *allow_download )); + *winfo = readWindowInfo( conn ); return 1; } -int dapi_readCommandUploadFile( DapiConnection* conn, char** local, char** file, int* remove_local ) +int dapi_readCommandUploadFile( DapiConnection* conn, char** local, char** file, int* remove_local, + DapiWindowInfo* winfo ) { *local = readString( conn ); *file = readString( conn ); readSocket( conn, remove_local, sizeof( *remove_local )); + *winfo = readWindowInfo( conn ); return 1; } @@ -154,19 +162,21 @@ int dapi_writeCommandCapabilities( DapiConnection* conn ) return seq; } -int dapi_writeCommandOpenUrl( DapiConnection* conn, const char* url ) +int dapi_writeCommandOpenUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ) { int seq = getNextSeq( conn ); writeCommand( conn, DAPI_COMMAND_OPENURL, seq ); writeString( conn, url ); + writeWindowInfo( conn, winfo ); return seq; } -int dapi_writeCommandExecuteUrl( DapiConnection* conn, const char* url ) +int dapi_writeCommandExecuteUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ) { int seq = getNextSeq( conn ); writeCommand( conn, DAPI_COMMAND_EXECUTEURL, seq ); writeString( conn, url ); + writeWindowInfo( conn, winfo ); return seq; } @@ -177,12 +187,14 @@ int dapi_writeCommandButtonOrder( DapiConnection* conn ) return seq; } -int dapi_writeCommandRunAsUser( DapiConnection* conn, const char* user, const char* command ) +int dapi_writeCommandRunAsUser( DapiConnection* conn, const char* user, const char* command, + DapiWindowInfo winfo ) { int seq = getNextSeq( conn ); writeCommand( conn, DAPI_COMMAND_RUNASUSER, seq ); writeString( conn, user ); writeString( conn, command ); + writeWindowInfo( conn, winfo ); return seq; } @@ -195,7 +207,7 @@ int dapi_writeCommandSuspendScreensaving( DapiConnection* conn, int suspend ) } int dapi_writeCommandMailTo( DapiConnection* conn, const char* subject, const char* body, - const char* to, const char* cc, const char* bcc, stringarr attachments ) + const char* to, const char* cc, const char* bcc, stringarr attachments, DapiWindowInfo winfo ) { int seq = getNextSeq( conn ); writeCommand( conn, DAPI_COMMAND_MAILTO, seq ); @@ -205,28 +217,31 @@ int dapi_writeCommandMailTo( DapiConnection* conn, const char* subject, const ch writeString( conn, cc ); writeString( conn, bcc ); writestringarr( conn, attachments ); + writeWindowInfo( conn, winfo ); return seq; } int dapi_writeCommandLocalFile( DapiConnection* conn, const char* remote, const char* local, - int allow_download ) + int allow_download, DapiWindowInfo winfo ) { int seq = getNextSeq( conn ); writeCommand( conn, DAPI_COMMAND_LOCALFILE, seq ); writeString( conn, remote ); writeString( conn, local ); writeSocket( conn, &allow_download, sizeof( allow_download )); + writeWindowInfo( conn, winfo ); return seq; } int dapi_writeCommandUploadFile( DapiConnection* conn, const char* local, const char* file, - int remove_local ) + int remove_local, DapiWindowInfo winfo ) { int seq = getNextSeq( conn ); writeCommand( conn, DAPI_COMMAND_UPLOADFILE, seq ); writeString( conn, local ); writeString( conn, file ); writeSocket( conn, &remove_local, sizeof( remove_local )); + writeWindowInfo( conn, winfo ); return seq; } @@ -306,3 +321,61 @@ void dapi_writeReplyRemoveTemporaryLocalFile( DapiConnection* conn, int seq, int writeSocket( conn, &ok, sizeof( ok )); } +int dapi_writeCommandOpenUrl_Window( DapiConnection* conn, const char* url, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_writeCommandOpenUrl( conn, url, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_writeCommandExecuteUrl_Window( DapiConnection* conn, const char* url, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_writeCommandExecuteUrl( conn, url, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_writeCommandRunAsUser_Window( DapiConnection* conn, const char* user, const char* command, + long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_writeCommandRunAsUser( conn, user, command, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_writeCommandMailTo_Window( DapiConnection* conn, const char* subject, const char* body, + const char* to, const char* cc, const char* bcc, stringarr attachments, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_writeCommandMailTo( conn, subject, body, to, cc, bcc, attachments, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_writeCommandLocalFile_Window( DapiConnection* conn, const char* remote, const char* local, + int allow_download, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_writeCommandLocalFile( conn, remote, local, allow_download, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + +int dapi_writeCommandUploadFile_Window( DapiConnection* conn, const char* local, const char* file, + int remove_local, long winfo ) + { + DapiWindowInfo winfo_; + dapi_windowInfoInitWindow( &winfo_, winfo ); + int seq = dapi_writeCommandUploadFile( conn, local, file, remove_local, winfo_ ); + dapi_freeWindowInfo( winfo_ ); + return seq; + } + diff --git a/kde/gen/comm_generated.h b/kde/gen/comm_generated.h index c69b1f5..aa28087 100644 --- a/kde/gen/comm_generated.h +++ b/kde/gen/comm_generated.h @@ -8,20 +8,26 @@ int dapi_writeCommandCapabilities( DapiConnection* conn ); int dapi_readReplyCapabilities( DapiConnection* conn, intarr* capabitilies, int* ok ); void dapi_writeReplyCapabilities( DapiConnection* conn, int seq, intarr capabitilies, int ok ); -int dapi_readCommandOpenUrl( DapiConnection* conn, char** url ); -int dapi_writeCommandOpenUrl( DapiConnection* conn, const char* url ); +int dapi_readCommandOpenUrl( DapiConnection* conn, char** url, DapiWindowInfo* winfo ); +int dapi_writeCommandOpenUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ); +int dapi_writeCommandOpenUrl_Window( DapiConnection* conn, const char* url, long winfo ); int dapi_readReplyOpenUrl( DapiConnection* conn, int* ok ); void dapi_writeReplyOpenUrl( DapiConnection* conn, int seq, int ok ); -int dapi_readCommandExecuteUrl( DapiConnection* conn, char** url ); -int dapi_writeCommandExecuteUrl( DapiConnection* conn, const char* url ); +int dapi_readCommandExecuteUrl( DapiConnection* conn, char** url, DapiWindowInfo* winfo ); +int dapi_writeCommandExecuteUrl( DapiConnection* conn, const char* url, DapiWindowInfo winfo ); +int dapi_writeCommandExecuteUrl_Window( DapiConnection* conn, const char* url, long winfo ); int dapi_readReplyExecuteUrl( DapiConnection* conn, int* ok ); void dapi_writeReplyExecuteUrl( DapiConnection* conn, int seq, int ok ); int dapi_readCommandButtonOrder( DapiConnection* conn ); int dapi_writeCommandButtonOrder( DapiConnection* conn ); int dapi_readReplyButtonOrder( DapiConnection* conn, int* order ); void dapi_writeReplyButtonOrder( DapiConnection* conn, int seq, int order ); -int dapi_readCommandRunAsUser( DapiConnection* conn, char** user, char** command ); -int dapi_writeCommandRunAsUser( DapiConnection* conn, const char* user, const char* command ); +int dapi_readCommandRunAsUser( DapiConnection* conn, char** user, char** command, + DapiWindowInfo* winfo ); +int dapi_writeCommandRunAsUser( DapiConnection* conn, const char* user, const char* command, + DapiWindowInfo winfo ); +int dapi_writeCommandRunAsUser_Window( DapiConnection* conn, const char* user, const char* command, + long winfo ); int dapi_readReplyRunAsUser( DapiConnection* conn, int* ok ); void dapi_writeReplyRunAsUser( DapiConnection* conn, int seq, int ok ); int dapi_readCommandSuspendScreensaving( DapiConnection* conn, int* suspend ); @@ -29,20 +35,27 @@ int dapi_writeCommandSuspendScreensaving( DapiConnection* conn, int suspend ); int dapi_readReplySuspendScreensaving( DapiConnection* conn, int* ok ); void dapi_writeReplySuspendScreensaving( DapiConnection* conn, int seq, int ok ); int dapi_readCommandMailTo( DapiConnection* conn, char** subject, char** body, char** to, - char** cc, char** bcc, stringarr* attachments ); + char** cc, char** bcc, stringarr* attachments, DapiWindowInfo* winfo ); int dapi_writeCommandMailTo( DapiConnection* conn, const char* subject, const char* body, - const char* to, const char* cc, const char* bcc, stringarr attachments ); + const char* to, const char* cc, const char* bcc, stringarr attachments, DapiWindowInfo winfo ); +int dapi_writeCommandMailTo_Window( DapiConnection* conn, const char* subject, const char* body, + const char* to, const char* cc, const char* bcc, stringarr attachments, long winfo ); int dapi_readReplyMailTo( DapiConnection* conn, int* ok ); void dapi_writeReplyMailTo( DapiConnection* conn, int seq, int ok ); int dapi_readCommandLocalFile( DapiConnection* conn, char** remote, char** local, - int* allow_download ); + int* allow_download, DapiWindowInfo* winfo ); int dapi_writeCommandLocalFile( DapiConnection* conn, const char* remote, const char* local, - int allow_download ); + int allow_download, DapiWindowInfo winfo ); +int dapi_writeCommandLocalFile_Window( DapiConnection* conn, const char* remote, const char* local, + int allow_download, long winfo ); int dapi_readReplyLocalFile( DapiConnection* conn, char** result ); void dapi_writeReplyLocalFile( DapiConnection* conn, int seq, const char* result ); -int dapi_readCommandUploadFile( DapiConnection* conn, char** local, char** file, int* remove_local ); +int dapi_readCommandUploadFile( DapiConnection* conn, char** local, char** file, int* remove_local, + DapiWindowInfo* winfo ); int dapi_writeCommandUploadFile( DapiConnection* conn, const char* local, const char* file, - int remove_local ); + int remove_local, DapiWindowInfo winfo ); +int dapi_writeCommandUploadFile_Window( DapiConnection* conn, const char* local, const char* file, + int remove_local, long winfo ); int dapi_readReplyUploadFile( DapiConnection* conn, int* ok ); void dapi_writeReplyUploadFile( DapiConnection* conn, int seq, int ok ); int dapi_readCommandRemoveTemporaryLocalFile( DapiConnection* conn, char** local ); diff --git a/kde/gen/gen.cpp b/kde/gen/gen.cpp index b1044a7..2352b49 100644 --- a/kde/gen/gen.cpp +++ b/kde/gen/gen.cpp @@ -47,6 +47,8 @@ struct Function QString name; ArgList args; void generateC( QTextStream& stream, int indent, FunctionType type ) const; + bool hasWindowInfo() const; + Function convertWindowInfo( Arg& warg ) const; }; QValueList< Function > functions; @@ -85,6 +87,8 @@ QString Arg::cType( const QString& type, bool out ) return "int"; else if( type == "string" ) return out ? "char*" : "const char*"; + else if( type == "windowinfo" ) + return "DapiWindowInfo"; else return type; } @@ -126,6 +130,7 @@ ArgList Arg::stripSimpleArguments( const ArgList& args ) { const Arg& arg = (*it); if( arg.type == "string" + || arg.type == "windowinfo" || arg.type.contains( "[]" )) new_args.append( arg ); } @@ -159,8 +164,8 @@ void Arg::readCommand( QTextStream& stream ) const stream << " *" << name << " = read" << cType( false ) << "( conn );\n"; else if( type == "string" ) stream << " *" << name << " = readString( conn );\n"; - else if( type == "stringlist" ) - stream << " *" << name << " = readStringList( conn );\n"; + else if( type == "windowinfo" ) + stream << " *" << name << " = readWindowInfo( conn );\n"; else stream << " readSocket( conn, " << name << ", sizeof( *" << name << " ));\n"; } @@ -171,8 +176,8 @@ void Arg::writeCommand( QTextStream& stream ) const stream << " write" << cType( false ) << "( conn, " << name << " );\n"; else if( type == "string" ) stream << " writeString( conn, " << name << " );\n"; - else if( type == "stringlist" ) - stream << " writeStringList( conn, " << name << " );\n"; + else if( type == "windowinfo" ) + stream << " writeWindowInfo( conn, " << name << " );\n"; else stream << " writeSocket( conn, &" << name << ", sizeof( " << name << " ));\n"; } @@ -252,7 +257,7 @@ void Function::generateC( QTextStream& stream, int indent, FunctionType type ) c } else line += ", "; - line += "dapi_" + name + "_callback callback"; + line += "dapi_" + QString( name ).remove( "_Window" ) + "_callback callback"; } line += " )"; stream << line; @@ -271,6 +276,39 @@ QString Function::returnType() const return "void"; } +bool Function::hasWindowInfo() const + { + for( ArgList::ConstIterator it = args.begin(); + it != args.end(); + ++it ) + { + const Arg& arg = (*it); + if( arg.type == "windowinfo" && !arg.out ) + return true; + } + return false; + } + +Function Function::convertWindowInfo( Arg& warg ) const + { + if( !hasWindowInfo()) + error(); + Function ret = *this; + ret.name += "_Window"; + for( ArgList::Iterator it = ret.args.begin(); + it != ret.args.end(); + ++it ) + { + Arg& arg = (*it); + if( arg.type == "windowinfo" && !arg.out ) + { + warg = arg; + arg.type = "long"; + } + } + return ret; + } + void openInputFile( const QString& filename ) { check( input_file == NULL ); @@ -396,6 +434,13 @@ void generateSharedCommH() stream << ";\n"; function.generateC( stream, 0, WriteCommand ); stream << ";\n"; + if( function.hasWindowInfo()) + { + Arg dummy; + Function f2 = function.convertWindowInfo( dummy ); + f2.generateC( stream, 0, WriteCommand ); + stream << ";\n"; + } function.generateC( stream, 0, ReadReply ); stream << ";\n"; function.generateC( stream, 0, WriteReply ); @@ -502,6 +547,42 @@ void generateSharedCommCWriteFunctions( QTextStream& stream, FunctionType type ) } } +static void generateSharedCommCWindow( QTextStream& stream ) + { + for( QValueList< Function >::ConstIterator it = functions.begin(); + it != functions.end(); + ++it ) + { + const Function& function = *it; + if( !function.hasWindowInfo()) + continue; + Arg warg; + Function f2 = function.convertWindowInfo( warg ); + f2.generateC( stream, 0, WriteCommand ); + stream << "\n {\n" + << " DapiWindowInfo winfo_;\n" + << " dapi_windowInfoInitWindow( &winfo_, " << warg.name << " );\n" + << " int seq = dapi_writeCommand" << function.name << "( conn"; + ArgList args = Arg::stripOutArguments( function.args ); + for( ArgList::ConstIterator it = args.begin(); + it != args.end(); + ++it ) + { + const Arg& argument = *it; + if( argument.type == "windowinfo" ) + { + stream << ", winfo_"; + continue; + } + stream << ", " << argument.name; + } + stream << " );\n" + << " dapi_freeWindowInfo( winfo_ );\n" + << " return seq;\n" + << " }\n\n"; + } + } + void generateSharedCommC() { QFile file( "comm_generated.c" ); @@ -512,6 +593,7 @@ void generateSharedCommC() generateSharedCommCReadFunctions( stream, ReadReply ); generateSharedCommCWriteFunctions( stream, WriteCommand ); generateSharedCommCWriteFunctions( stream, WriteReply ); + generateSharedCommCWindow( stream ); } void generateSharedCallsH() @@ -527,6 +609,49 @@ void generateSharedCallsH() const Function& function = *it; function.generateC( stream, 0, HighLevel ); stream << ";\n"; + if( function.hasWindowInfo()) + { + Arg dummy; + Function f2 = function.convertWindowInfo( dummy ); + f2.generateC( stream, 0, HighLevel ); + stream << ";\n"; + } + } + } + +static void generateSharedCallsCWindow( QTextStream& stream ) + { + for( QValueList< Function >::ConstIterator it = functions.begin(); + it != functions.end(); + ++it ) + { + const Function& function = *it; + if( !function.hasWindowInfo()) + continue; + Arg warg; + Function f2 = function.convertWindowInfo( warg ); + f2.generateC( stream, 0, HighLevel ); + stream << "\n {\n" + << " DapiWindowInfo winfo_;\n" + << " dapi_windowInfoInitWindow( &winfo_, " << warg.name << " );\n" + << " " << Arg::cType( function.returnType(), true ) << " ret = dapi_" << function.name << "( conn"; + ArgList args = Arg::stripReturnArgument( function.args ); + for( ArgList::ConstIterator it = args.begin(); + it != args.end(); + ++it ) + { + const Arg& argument = *it; + if( argument.type == "windowinfo" ) + { + stream << ", winfo_"; + continue; + } + stream << ", " << argument.name; + } + stream << " );\n" + << " dapi_freeWindowInfo( winfo_ );\n" + << " return ret;\n" + << " }\n\n"; } } @@ -594,6 +719,7 @@ void generateSharedCallsC() stream << " return ret;\n" << " }\n\n"; } + generateSharedCallsCWindow( stream ); } void generateSharedCallbacksH() @@ -611,6 +737,49 @@ void generateSharedCallbacksH() stream << ";\n"; function.generateC( stream, 0, HighLevelCallback ); stream << ";\n"; + if( function.hasWindowInfo()) + { + Arg dummy; + Function f2 = function.convertWindowInfo( dummy ); + f2.generateC( stream, 0, HighLevelCallback ); + stream << ";\n"; + } + } + } + +static void generateSharedCallbacksCWindow( QTextStream& stream ) + { + for( QValueList< Function >::ConstIterator it = functions.begin(); + it != functions.end(); + ++it ) + { + const Function& function = *it; + if( !function.hasWindowInfo()) + continue; + Arg warg; + Function f2 = function.convertWindowInfo( warg ); + f2.generateC( stream, 0, HighLevelCallback ); + stream << "\n {\n" + << " DapiWindowInfo winfo_;\n" + << " dapi_windowInfoInitWindow( &winfo_, " << warg.name << " );\n" + << " int seq = dapi_callback" << function.name << "( conn"; + ArgList args = Arg::stripOutArguments( function.args ); + for( ArgList::ConstIterator it = args.begin(); + it != args.end(); + ++it ) + { + const Arg& argument = *it; + if( argument.type == "windowinfo" ) + { + stream << ", winfo_"; + continue; + } + stream << ", " << argument.name; + } + stream << ", callback );\n" + << " dapi_freeWindowInfo( winfo_ );\n" + << " return seq;\n" + << " }\n\n"; } } @@ -698,6 +867,7 @@ void generateSharedCallbacksC() } stream << " }\n" << " }\n"; + generateSharedCallbacksCWindow( stream ); } void generateShared() diff --git a/kde/gen/gen.txt b/kde/gen/gen.txt index 9ec713c..a507dcf 100644 --- a/kde/gen/gen.txt +++ b/kde/gen/gen.txt @@ -20,6 +20,9 @@ FUNCTION OpenUrl ARG url TYPE string ENDARG + ARG winfo + TYPE windowinfo + ENDARG ARG ok TYPE bool RETURN @@ -30,6 +33,9 @@ FUNCTION ExecuteUrl ARG url TYPE string ENDARG + ARG winfo + TYPE windowinfo + ENDARG ARG ok TYPE bool RETURN @@ -50,6 +56,9 @@ FUNCTION RunAsUser ARG command TYPE string ENDARG + ARG winfo + TYPE windowinfo + ENDARG ARG ok TYPE bool RETURN @@ -85,6 +94,9 @@ FUNCTION MailTo ARG attachments TYPE string[] ENDARG + ARG winfo + TYPE windowinfo + ENDARG ARG ok TYPE bool RETURN @@ -101,6 +113,9 @@ FUNCTION LocalFile ARG allow_download TYPE bool ENDARG + ARG winfo + TYPE windowinfo + ENDARG ARG result TYPE string RETURN @@ -117,6 +132,9 @@ FUNCTION UploadFile ARG remove_local TYPE bool ENDARG + ARG winfo + TYPE windowinfo + ENDARG ARG ok TYPE bool RETURN @@ -300,6 +300,16 @@ static stringarr readstringarr( DapiConnection* conn ) return ret; } +static DapiWindowInfo readWindowInfo( DapiConnection* conn ) + { + DapiWindowInfo ret; + readSocket( conn, &ret.flags, sizeof( ret.flags )); + if( ret.flags == 0 ) + return ret; + readSocket( conn, &ret.window, sizeof( ret.window )); + return ret; + } + static void writeintarr( DapiConnection* conn, intarr arr ) { int i; @@ -320,6 +330,12 @@ static void writestringarr( DapiConnection* conn, stringarr arr ) writeString( conn, arr.data[ i ] ); } +static void writeWindowInfo( DapiConnection* conn, DapiWindowInfo winfo ) + { + writeSocket( conn, &winfo.flags, sizeof( winfo.flags )); + writeSocket( conn, &winfo.window, sizeof( winfo.window )); + } + void dapi_freeintarr( intarr arr ) { free( arr.data ); @@ -335,4 +351,15 @@ void dapi_freestringarr( stringarr arr ) free( arr.data ); } +void dapi_freeWindowInfo( DapiWindowInfo winfo ) + { + ( void ) winfo; /* nothing for now */ + } + +void dapi_windowInfoInitWindow( DapiWindowInfo* winfo, long window ) + { + winfo->flags = 1; + winfo->window = window; + } + #include "../kde/gen/comm_generated.c" @@ -16,6 +16,12 @@ int dapi_bindSocket( void ); int dapi_namedBindSocket( const char* name ); DapiConnection* dapi_acceptSocket( int sock ); +typedef struct DapiWindowInfo + { + int flags; + long window; + } DapiWindowInfo; + /* TODO generovat? */ typedef struct { @@ -29,6 +35,9 @@ typedef struct char** data; } stringarr; +void dapi_windowInfoInitWindow( DapiWindowInfo* winfo, long window ); + +void dapi_freeWindowInfo( DapiWindowInfo winfo ); void dapi_freestringarr( stringarr arr ); void dapi_freeintarr( intarr arr ); diff --git a/tests/test_comm.c b/tests/test_comm.c index 2e534be..ad70bec 100644 --- a/tests/test_comm.c +++ b/tests/test_comm.c @@ -6,6 +6,7 @@ int main( int argc, char* argv[] ) { int command, seq, seq2; int ok; + DapiWindowInfo winfo; DapiConnection* conn = dapi_connect(); if( conn == NULL ) { @@ -28,12 +29,14 @@ int main( int argc, char* argv[] ) fprintf( stderr, "Initialization failed!\n" ); return 2; } - seq = dapi_writeCommandOpenUrl( conn, "http://kde.org" ); + dapi_windowInfoInitWindow( &winfo, 0 ); /* no mainwindow */ + seq = dapi_writeCommandOpenUrl( conn, "http://kde.org", winfo ); if( !dapi_readCommand( conn, &command, &seq2 ) || seq != seq2 ) { fprintf( stderr, "Incorrect open url reply!\n" ); return 2; } + dapi_freeWindowInfo( winfo ); if( !dapi_readReplyOpenUrl( conn, &ok )) { fprintf( stderr, "Incorrect open url reply data!\n" ); diff --git a/tests/test_mailto.c b/tests/test_mailto.c index c0cb244..70cc4c4 100644 --- a/tests/test_mailto.c +++ b/tests/test_mailto.c @@ -23,8 +23,9 @@ int main() system( "touch /tmp/mailtotest.txt" ); attachments.count = 1; attachments.data = attachments_data; - ok = dapi_MailTo( conn, "Test mail", "Hi,\n\nthis is a test mail.\n", - "l.lunak@suse.cz, l.lunak@kde.org", NULL, "portland@lists.freedesktop.org", attachments ); + ok = dapi_MailTo_Window( conn, "Test mail", "Hi,\n\nthis is a test mail.\n", + "l.lunak@suse.cz, l.lunak@kde.org", NULL, "portland@lists.freedesktop.org", attachments, + 0 ); /* no mainwindow */ printf( "Result: %s\n", ok == 1 ? "Ok" : "Failed" ); dapi_close( conn ); return 0; diff --git a/tests/test_remotefile.c b/tests/test_remotefile.c index 56818f5..123a84c 100644 --- a/tests/test_remotefile.c +++ b/tests/test_remotefile.c @@ -20,15 +20,15 @@ int main() fprintf( stderr, "Initialization failed!\n" ); return 2; } - local = dapi_LocalFile( conn, "http://kde.org", "", 0 ); /* no download, should fail */ + local = dapi_LocalFile_Window( conn, "http://kde.org", "", 0, 0 ); /* no download, should fail */ printf( "Local file1: %s - %s\n", local ? local : "?", local ? "Failed" : "Ok" ); if( local ) free( local ); - local = dapi_LocalFile( conn, "http://kde.org", "", 1 ); + local = dapi_LocalFile_Window( conn, "http://kde.org", "", 1, 0 ); printf( "Local file2: %s\n", local != NULL ? local : "Failed" ); if( local != NULL ) { - ok = dapi_UploadFile( conn, local, "http://kde.org", 0 ); /* will fail */ + ok = dapi_UploadFile_Window( conn, local, "http://kde.org", 0, 0 ); /* will fail */ printf( "Upload2: %s\n", ok ? "Ok - ???" : "Failed - ok" ); ok = dapi_RemoveTemporaryLocalFile( conn, local ); printf( "Temporary2: %s\n", ok ? "Ok" : "Failed" ); @@ -36,12 +36,12 @@ int main() } system( "touch /tmp/remotefiletest.txt" ); /* local temporary will be ignored */ - local = dapi_LocalFile( conn, "file:///tmp/remotefiletest.txt", "/tmp/remotefiletest2.txt", 1 ); + local = dapi_LocalFile_Window( conn, "file:///tmp/remotefiletest.txt", "/tmp/remotefiletest2.txt", 1, 0 ); printf( "Local file3: %s\n", local != NULL ? local : "Failed" ); if( local != NULL ) { /* should be a no-op, as it's the same file */ - ok = dapi_UploadFile( conn, local, "file:///tmp/remotefiletest.txt", 1 ); + ok = dapi_UploadFile_Window( conn, local, "file:///tmp/remotefiletest.txt", 1, 0 ); printf( "Upload3: %s\n", ok ? "Ok" : "Failed" ); free( local ); } diff --git a/tests/test_runasuser.c b/tests/test_runasuser.c index 2d37687..e99b340 100644 --- a/tests/test_runasuser.c +++ b/tests/test_runasuser.c @@ -17,7 +17,7 @@ int main() fprintf( stderr, "Initialization failed!\n" ); return 2; } - ok = dapi_RunAsUser( conn, "", "xterm -title test" ); + ok = dapi_RunAsUser_Window( conn, "", "xterm -title test", 0 ); /* no mainwindow */ printf( "Result: %s\n", ok == 1 ? "Ok" : "Failed" ); dapi_close( conn ); return 0; |