• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

dcop

dcopref.cpp

Go to the documentation of this file.
00001 /*****************************************************************
00002 
00003 Copyright (c) 1999 Preston Brown <pbrown@kde.org>
00004 Copyright (c) 1999 Matthias Ettrich <ettrich@kde.org>
00005 
00006 Permission is hereby granted, free of charge, to any person obtaining a copy
00007 of this software and associated documentation files (the "Software"), to deal
00008 in the Software without restriction, including without limitation the rights
00009 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00010 copies of the Software, and to permit persons to whom the Software is
00011 furnished to do so, subject to the following conditions:
00012 
00013 The above copyright notice and this permission notice shall be included in
00014 all copies or substantial portions of the Software.
00015 
00016 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00017 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00018 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
00019 AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
00020 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00021 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00022 
00023 ******************************************************************/
00024 
00025 #include "dcopref.h"
00026 #include "dcopclient.h"
00027 #include "dcopobject.h"
00028 
00029 #include <qdatastream.h>
00030 
00031 #define STR( s ) ( s.data() ? s.data() : "" )
00032 
00033 bool DCOPReply::typeCheck( const char* t )
00034 {
00035     return typeCheck( t, true );
00036 }
00037 
00038 bool DCOPReply::typeCheck( const char* t, bool warn )
00039 {
00040     if ( type == t )
00041     return true;
00042     if( warn
00043     || strcmp( t, "<unknown>" )) // type not listed in dcoptypes.h
00044     qWarning( "WARNING: DCOPReply<%s>: cast to '%s' error",
00045              STR( type ), t );
00046     return false;
00047 }
00048 
00049 // this has to stay BC too even if private, because it's called from inlines
00050 DCOPReply DCOPRef::callInternal( const QCString& fun, const QCString& args, const QByteArray& data )
00051 {
00052     return callInternal( fun, args, data, NoEventLoop, -1 );
00053 }
00054 
00055 DCOPReply DCOPRef::callInternal( const QCString& fun, const QCString& args, const QByteArray& data,
00056                  EventLoopFlag useEventLoop, int timeout )
00057 {
00058     DCOPReply reply;
00059     if ( isNull() ) {
00060     qWarning( "DCOPRef: call '%s' on null reference error",
00061           STR( fun ) );
00062     return reply;
00063     }
00064     QCString sig = fun;
00065     if ( fun.find('(') == -1 ) {
00066     sig += args;
00067     if( args.find( "<unknown" ) != -1 )
00068         qWarning("DCOPRef: unknown type error "
00069              "<\"%s\",\"%s\">::call(\"%s\",%s",
00070              STR(m_app), STR(m_obj), STR(fun), args.data()+1 );
00071     }
00072     DCOPClient* dc = dcopClient();
00073     if ( !dc || !dc->isAttached() ) {
00074     qWarning( "DCOPRef::call():  no DCOP client or client not attached error" );
00075     return reply;
00076     }
00077     dc->call( m_app, m_obj, sig, data, reply.type, reply.data, useEventLoop == UseEventLoop, timeout );
00078     return reply;
00079 }
00080 
00081 bool DCOPRef::sendInternal( const QCString& fun, const QCString& args, const QByteArray& data )
00082 {
00083     if ( isNull() ) {
00084     qWarning( "DCOPRef: send '%s' on null reference error",
00085           STR( fun ) );
00086     return false;
00087     }
00088     Q_UNUSED( data );
00089     QCString sig = fun;
00090     if ( fun.find('(') == -1 ) {
00091     sig += args;
00092     if( args.find( "<unknown" ) != -1 )
00093         qWarning("DCOPRef: unknown type error "
00094              "<\"%s\",\"%s\">::send(\"%s\",%s",
00095              STR(m_app), STR(m_obj), STR(fun), args.data()+1 );
00096     }
00097     DCOPClient* dc = dcopClient();
00098     if ( !dc || !dc->isAttached() ) {
00099     qWarning( "DCOPRef::send(): no DCOP client or client not attached error" );
00100     return false;
00101     }
00102     return dc->send( m_app, m_obj, sig, data );
00103 }
00104 
00105 DCOPRef::DCOPRef()
00106     :d(0)
00107 {
00108 }
00109 
00110 DCOPRef::DCOPRef( const DCOPRef& ref )
00111     :d( ref.d )
00112 {
00113     m_app = ref.app();
00114     m_obj = ref.obj();
00115     m_type = ref.type();
00116 }
00117 
00118 DCOPRef::DCOPRef( DCOPObject *o )
00119     : m_app( DCOPClient::mainClient() ? DCOPClient::mainClient()->appId() : QCString() ),
00120     m_obj( o->objId() ), m_type( o->interfaces().last() ), d(0)
00121 
00122 {
00123 }
00124 
00125 DCOPRef::DCOPRef( const QCString& _app, const QCString& obj )
00126     : m_app( _app ), m_obj( obj ), d(0)
00127 {
00128 }
00129 
00130 DCOPRef::DCOPRef( const QCString& _app, const QCString& _obj, const QCString& _type )
00131     : m_app( _app ), m_obj( _obj ), m_type( _type ), d(0)
00132 {
00133 }
00134 
00135 bool DCOPRef::isNull() const
00136 {
00137     return ( m_app.isNull() || m_obj.isNull() );
00138 }
00139 
00140 QCString DCOPRef::app() const
00141 {
00142     return m_app;
00143 }
00144 
00145 QCString DCOPRef::obj() const
00146 {
00147     return m_obj;
00148 }
00149 
00150 QCString DCOPRef::object() const
00151 {
00152     return m_obj;
00153 }
00154 
00155 
00156 QCString DCOPRef::type() const
00157 {
00158     return m_type;
00159 }
00160 
00161 void DCOPRef::setDCOPClient( DCOPClient* dc )
00162 {
00163     d = (DCOPRefPrivate*) dc;
00164 }
00165 
00166 DCOPClient* DCOPRef::dcopClient() const
00167 {
00168     return d ? (DCOPClient*)d : DCOPClient::mainClient();
00169 }
00170 
00171 DCOPRef& DCOPRef::operator=( const DCOPRef& ref )
00172 {
00173     d = ref.d;
00174     m_app = ref.app();
00175     m_obj = ref.obj();
00176     m_type = ref.type();
00177     return *this;
00178 }
00179 
00180 void DCOPRef::setRef( const QCString& _app, const QCString& _obj )
00181 {
00182     m_app = _app;
00183     m_obj = _obj;
00184     m_type = 0;
00185 }
00186 
00187 void DCOPRef::setRef( const QCString& _app, const QCString& _obj, const QCString& _type )
00188 {
00189     m_app = _app;
00190     m_obj = _obj;
00191     m_type = _type;
00192 }
00193 
00194 void DCOPRef::clear()
00195 {
00196     m_app = 0;
00197     m_obj = 0;
00198     m_type = 0;
00199 }
00200 
00201 QDataStream& operator<<( QDataStream& str, const DCOPRef& ref )
00202 {
00203     str << ref.app();
00204     str << ref.obj();
00205     str << ref.type();
00206 
00207     return str;
00208 }
00209 
00210 QDataStream& operator>>( QDataStream& str, DCOPRef& ref )
00211 {
00212     QCString a, o, t;
00213     str >> a >> o >> t;
00214 
00215     ref.setRef( a, o, t );
00216 
00217     return str;
00218 }

dcop

Skip menu "dcop"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal