summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubos Lunak <l.lunak@ suse.cz>2006-03-14 13:07:55 +0000
committerLubos Lunak <l.lunak@ suse.cz>2006-03-14 13:07:55 +0000
commit445eb35fb0c90d68d5eba67ef52528caac3a76be (patch)
treec7861fdecfdd14144b27ebeba2d1968bfb936088
parent26ddae222bc650cb34fef2efe29db84886822f2d (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.txt43
-rw-r--r--generic/main.c26
-rw-r--r--kde/daemon/handler.cpp48
-rw-r--r--kde/daemon/handler.h1
-rw-r--r--kde/gen/callbacks_generated.c88
-rw-r--r--kde/gen/callbacks_generated.h28
-rw-r--r--kde/gen/calls_generated.c83
-rw-r--r--kde/gen/calls_generated.h23
-rw-r--r--kde/gen/comm_generated.c97
-rw-r--r--kde/gen/comm_generated.h37
-rw-r--r--kde/gen/gen.cpp180
-rw-r--r--kde/gen/gen.txt18
-rw-r--r--lib/comm.c27
-rw-r--r--lib/comm.h9
-rw-r--r--tests/test_comm.c5
-rw-r--r--tests/test_mailto.c5
-rw-r--r--tests/test_remotefile.c10
-rw-r--r--tests/test_runasuser.c2
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
diff --git a/lib/comm.c b/lib/comm.c
index 68400e9..07b6254 100644
--- a/lib/comm.c
+++ b/lib/comm.c
@@ -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"
diff --git a/lib/comm.h b/lib/comm.h
index f4d7759..5737113 100644
--- a/lib/comm.h
+++ b/lib/comm.h
@@ -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;