diff options
Diffstat (limited to 'xparts/src/gtk')
-rw-r--r-- | xparts/src/gtk/Makefile.am | 13 | ||||
-rw-r--r-- | xparts/src/gtk/configure.in.in | 1 | ||||
-rw-r--r-- | xparts/src/gtk/gtkbrowserextension.c | 244 | ||||
-rw-r--r-- | xparts/src/gtk/gtkbrowserextension.h | 54 | ||||
-rw-r--r-- | xparts/src/gtk/gtkpart.c | 299 | ||||
-rw-r--r-- | xparts/src/gtk/gtkpart.h | 61 |
6 files changed, 672 insertions, 0 deletions
diff --git a/xparts/src/gtk/Makefile.am b/xparts/src/gtk/Makefile.am new file mode 100644 index 00000000..2e83df3b --- /dev/null +++ b/xparts/src/gtk/Makefile.am @@ -0,0 +1,13 @@ +INCLUDES = $(GLIB_INCLUDES) -I$(prefix)/include -I$(top_srcdir) $(all_includes) + +AM_CFLAGS = $(GLIB_CFLAGS) $(GTK_CFLAGS) +AM_CXXFLAGS = $(GLIB_CFLAGS) $(GTK_CFLAGS) + +lib_LTLIBRARIES = libgtkxparts.la + +libgtkxparts_la_SOURCES = gtkpart.c gtkbrowserextension.c +libgtkxparts_la_LIBADD = $(GTK_LIBS) $(GLIB_LIBS) $(top_builddir)/dcopc/libdcopc.la +libgtkxparts_la_LDFLAGS = -L$(prefix)/lib $(all_libraries) -no-undefined + +gtkxpartsinclude_HEADERS = gtkpart.h gtkbrowserextension.h +gtkxpartsincludedir = $(includedir)/xkparts diff --git a/xparts/src/gtk/configure.in.in b/xparts/src/gtk/configure.in.in new file mode 100644 index 00000000..32dfac1e --- /dev/null +++ b/xparts/src/gtk/configure.in.in @@ -0,0 +1 @@ +AM_CONDITIONAL(include_GTK_support, [ test "$GTK_CONFIG" != "no" ]) diff --git a/xparts/src/gtk/gtkbrowserextension.c b/xparts/src/gtk/gtkbrowserextension.c new file mode 100644 index 00000000..165320a8 --- /dev/null +++ b/xparts/src/gtk/gtkbrowserextension.c @@ -0,0 +1,244 @@ + +#include "gtkbrowserextension.h" + +#include <gdk/gdkx.h> + +#include <dcopc/util.h> +#include <dcopc/marshal.h> +#include <dcopc/dcopc.h> + +#include <string.h> +#include <stdio.h> +#include <assert.h> +#include <stdlib.h> + +typedef struct _GtkXBrowserExtensionPrivate GtkXBrowserExtensionPrivate; + +struct _GtkXBrowserExtensionPrivate { + gchar *host_app_id; + gchar *host_obj_id; + DcopClient *client; +}; + +#define P ((GtkXBrowserExtensionPrivate *)(part->data)) +#define CLASS(obj) GTK_XBROWSEREXTENSION_CLASS(GTK_OBJECT(obj)->klass) + + +/* class and instance initialization */ + +static void +gtk_xbrowserextension_class_init(GtkXBrowserExtensionClass *klass); + +static void +gtk_xbrowserextension_init(GtkXBrowserExtension *part); + +static void +gtk_xbrowserextension_destroy( GtkObject *obj ); + + +/* dcop handlers */ + +gboolean gtk_xbrowserextension_dcop_process( DcopObject *obj, const char *fun, dcop_data *data, + char **reply_type, dcop_data **reply_data ); + +GList *gtk_xbrowserextension_dcop_functions( DcopObject *obj ); + +GList *gtk_xbrowserextension_dcop_interfaces( DcopObject *obj ); + +static DcopObjectClass *parent_class = 0; + +/* --------------------------- implementations --------------------------------------- */ + +/* type information */ +GtkType +gtk_xbrowserextension_get_type(void) +{ + static GtkType part_type = 0; + if (!part_type) + { + static const GtkTypeInfo part_info = + { + "GtkXBrowserExtension", + sizeof(GtkXBrowserExtension), + sizeof(GtkXBrowserExtensionClass), + (GtkClassInitFunc)gtk_xbrowserextension_class_init, + (GtkObjectInitFunc)gtk_xbrowserextension_init, + 0, + 0, + 0 + }; + part_type = gtk_type_unique(DCOP_TYPE_OBJECT, &part_info); + } + return part_type; +} + +/* class and instance initialization */ +static void +gtk_xbrowserextension_class_init(GtkXBrowserExtensionClass *klass) +{ + GtkObjectClass *object_class = (GtkObjectClass *)klass; + DcopObjectClass *dcop_class = DCOP_OBJECT_CLASS(klass); + g_message( "gtk_xbrowserextension_class_init\n" ); + + parent_class = (DcopObjectClass *)gtk_type_class(dcop_object_get_type()); + + object_class->destroy = gtk_xbrowserextension_destroy; + + dcop_class->process = gtk_xbrowserextension_dcop_process; + dcop_class->functions = gtk_xbrowserextension_dcop_functions; + dcop_class->interfaces = gtk_xbrowserextension_dcop_interfaces; + + klass->save_state = 0; + klass->restore_state = 0; + + g_message( "gtk_xbrowserextension_class_init\n" ); +} + +static void +gtk_xbrowserextension_init(GtkXBrowserExtension *part) +{ + GtkXBrowserExtensionPrivate *d; + d = g_new( GtkXBrowserExtensionPrivate, 1 ); + part->data = d; + + dcop_object_set_id( DCOP_OBJECT(part), "XBrowserExtensionClient" ); + + d->client = 0; + d->host_app_id = 0; + d->host_obj_id = 0; + + g_message( "gtk_xbrowserextension_init\n" ); +} + +GtkXBrowserExtension *gtk_xbrowserextension_new (void) +{ + return (GtkXBrowserExtension *) gtk_type_new(gtk_xbrowserextension_get_type()); +} + + +gboolean gtk_xbrowserextension_dcop_process( DcopObject *obj, const char *fun, dcop_data *data, + char **reply_type, dcop_data **reply_data ) +{ + GtkXBrowserExtension *part = GTK_XBROWSEREXTENSION(obj); + GtkXBrowserExtensionPrivate *d = (GtkXBrowserExtensionPrivate *)part->data; + GtkXBrowserExtensionClass *klass = GTK_XBROWSEREXTENSION_CLASS(GTK_OBJECT(part)->klass); + + if ( strcmp( fun, "saveState()" ) == 0 ) + { + const char *state = 0; + if( klass->save_state) { + state = klass->save_state( part ); + + dcop_marshal_bytearray( *reply_data, state, strlen( state ) ); + } + return True; + } + else if ( strcmp( fun, "restoreState(QByteArray)" ) == 0 ) + { + if( klass->restore_state ) { + size_t len; + char *state; + dcop_demarshal_bytearray( data, &state, &len ); + klass->restore_state( part, state, len ); + } + return True; + } + else if ( strcmp( fun, "setBrowserSignals(DCOPRef)" ) == 0 ) + { + dcop_demarshal_string( data, &d->host_app_id ); + dcop_demarshal_string( data, &d->host_obj_id ); + return True; + } + + return parent_class->process( obj, fun, data, reply_type, reply_data ); +} + +GList *gtk_xbrowserextension_dcop_functions( DcopObject *obj ) +{ + GList *res = parent_class->functions( obj ); + res = g_list_append( res, g_strdup( "saveState()" ) ); + res = g_list_append( res, g_strdup( "restoreState(QByteArray)" ) ); + return res; +} + +GList *gtk_xbrowserextension_dcop_interfaces( DcopObject *obj ) +{ + GList *res = parent_class->interfaces( obj ); + res = g_list_append( res, g_strdup( "XBrowserExtension" ) ); + return res; +} + +void gtk_xbrowserextension_destroy( GtkObject *obj ) +{ + GtkXBrowserExtension *part = GTK_XBROWSEREXTENSION(obj); + GtkXBrowserExtensionPrivate *d = (GtkXBrowserExtensionPrivate *) part->data; + g_free( d->host_app_id ); + g_free( d->host_obj_id ); + g_free( d ); + + GTK_OBJECT_CLASS(parent_class)->destroy(obj); +} + +void gtk_xbrowserextension_set_dcop_client( GtkXBrowserExtension *part, DcopClient *client ) +{ + P->client = client; +} + + +gboolean gtk_xbrowserextension_register( GtkXBrowserExtension *part, const gchar *host_app_id, const gchar *host_obj_id) +{ + dcop_data *reply_data; + char *reply_type; + dcop_data *data = dcop_data_ref( dcop_data_new() ); + GtkXBrowserExtensionPrivate *d = (GtkXBrowserExtensionPrivate *)part->data; + + if(!P->client) + fprintf(stderr, "register a dcop client first!\n"); + + dcop_marshal_string( data, dcop_client_app_id( P->client ) ); + dcop_marshal_string( data, DCOP_ID(DCOP_OBJECT(part)) ); + + if ( !dcop_client_call( P->client, host_app_id, host_obj_id, "registerXBrowserExtension(DCOPRef)", data, + &reply_type, &reply_data ) ) { + fprintf( stderr, "cannot register with shell %s / %s\n", host_app_id, host_obj_id ); + gtk_exit( 1 ); + } + g_message( "back from registration call!" ); + + /*assert( strcmp( reply_type, "DCOPRef" ) == 0 );*/ + +#if 0 + /* this is wrong. but as we have the ref anyway, let's ignore the return value*/ + dcop_demarshal_string( data, &d->host_app_id ); + dcop_demarshal_string( data, &d->host_obj_id ); + + printf("appid=%s, objid=%s\n", d->host_app_id, d->host_obj_id); +#endif + d->host_obj_id = g_strdup( host_obj_id ); + d->host_app_id = g_strdup( host_app_id ); + + dcop_data_reset( reply_data ); + + dcop_data_deref( data ); + g_message( "returning from gtk_xbrowserextension_register" ); + return TRUE; +} + +gboolean gtk_browserextension_open_url_request( GtkXBrowserExtension *part, const char *url ) +{ + dcop_data *reply_data; + char *reply_type; + dcop_data *data = dcop_data_ref( dcop_data_new() ); + + if(!P->client) + fprintf(stderr, "register a dcop client first!\n"); + + dcop_marshal_string( data, url ); + + if ( !dcop_client_call( P->client, P->host_app_id, P->host_obj_id, "openURLRequest(QCString)", data, + &reply_type, &reply_data ) ) { + g_warning(" openURLRequest failed"); + return FALSE; + } + return TRUE; +} diff --git a/xparts/src/gtk/gtkbrowserextension.h b/xparts/src/gtk/gtkbrowserextension.h new file mode 100644 index 00000000..7efbd938 --- /dev/null +++ b/xparts/src/gtk/gtkbrowserextension.h @@ -0,0 +1,54 @@ +#ifndef _gtkxbrowserextension_h__ +#define _gtkxbrowserextension_h__ + +#include <dcopc/dcopobject.h> +#include <dcopc/dcopc.h> +#include <dcopc/marshal.h> +#include <dcopc/util.h> + +#include <gtk/gtk.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define GTK_TYPE_XBROWSEREXTENSION (gtk_xbrowserextension_get_type()) +#define GTK_XBROWSEREXTENSION(obj) GTK_CHECK_CAST((obj), GTK_TYPE_XBROWSEREXTENSION, GtkXBrowserExtension) +#define GTK_XBROWSEREXTENSION_CLASS(klass) GTK_CHECK_CLASS_CAST((klass), GTK_TYPE_XBROWSEREXTENSION, GtkXBrowserExtensionClass) +#define GTK_IS_XBROWSEREXTENSION(obj) GTK_CHECK_TYPE((obj), GTK_TYPE_XBROWSEREXTENSION) +#define GTK_IS_XBROWSEREXTENSION_CLASS(klass) GTK_CHECK_CLASS_TYPE((klass), GTK_TYPE_XBROWSEREXTENSION) + +#define GTK_XBROWSEREXTENSION_WIDGET(part) (gtk_xbrowserextension_get_widget(part)) +#define GTK_XBROWSEREXTENSION_DCOP(part) (gtk_xbrowserextension_get_dcop(part)) + +typedef struct _GtkXBrowserExtension GtkXBrowserExtension; +typedef struct _GtkXBrowserExtensionClass GtkXBrowserExtensionClass; + +struct _GtkXBrowserExtension +{ + DcopObject obj; + void *data; +}; + +struct _GtkXBrowserExtensionClass +{ + DcopObjectClass parent_class; + + const char * ( *save_state)( GtkXBrowserExtension *ext ); + void (* restore_state) ( GtkXBrowserExtension *ext, const char *state, unsigned int size ); +}; + +extern GtkType gtk_xbrowserextension_get_type (void); +extern GtkXBrowserExtension *gtk_xbrowserextension_new (void); + +gboolean gtk_browserextension_open_url_request( GtkXBrowserExtension *ext, const char *url ); + +/* "virtual" functions from DcopObject */ +void gtk_xbrowserextension_set_dcop_client( GtkXBrowserExtension *part, DcopClient *client ); +gboolean gtk_xbrowserextension_register( GtkXBrowserExtension *part, const gchar *host_app_id, const gchar *host_obj_id); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/xparts/src/gtk/gtkpart.c b/xparts/src/gtk/gtkpart.c new file mode 100644 index 00000000..740910fb --- /dev/null +++ b/xparts/src/gtk/gtkpart.c @@ -0,0 +1,299 @@ + +#include "gtkpart.h" + +#include <gdk/gdkx.h> + +#include <dcopc/util.h> +#include <dcopc/marshal.h> +#include <dcopc/dcopc.h> + +#include <string.h> +#include <stdio.h> +#include <assert.h> +#include <stdlib.h> + +typedef struct _GtkXPartPrivate GtkXPartPrivate; + +struct _GtkXPartPrivate { + GtkWidget *widget; + gchar *host_app_id; + gchar *host_obj_id; + DcopClient *client; +}; + +#define P ((GtkXPartPrivate *)(part->data)) +#define CLASS(obj) GTK_XPART_CLASS(GTK_OBJECT(obj)->klass) + + +/* class and instance initialization */ + +static void +gtk_xpart_class_init(GtkXPartClass *klass); + +static void +gtk_xpart_init(GtkXPart *part); + +static void +gtk_xpart_destroy( GtkObject *obj ); + +/* dcop handlers */ + +gboolean gtk_xpart_dcop_process( DcopObject *obj, const char *fun, dcop_data *data, + char **reply_type, dcop_data **reply_data ); + +GList *gtk_xpart_dcop_functions( DcopObject *obj ); + +GList *gtk_xpart_dcop_interfaces( DcopObject *obj ); + +static DcopObjectClass *parent_class = 0; + +/* --------------------------- implementations --------------------------------------- */ + +/* type information */ +GtkType +gtk_xpart_get_type(void) +{ + static GtkType part_type = 0; + if (!part_type) + { + static const GtkTypeInfo part_info = + { + "GtkXPart", + sizeof(GtkXPart), + sizeof(GtkXPartClass), + (GtkClassInitFunc)gtk_xpart_class_init, + (GtkObjectInitFunc)gtk_xpart_init, + 0, + 0, + 0 + }; + part_type = gtk_type_unique(DCOP_TYPE_OBJECT, &part_info); + } + return part_type; +} + +/* class and instance initialization */ +static void +gtk_xpart_class_init(GtkXPartClass *klass) +{ + GtkObjectClass *object_class = (GtkObjectClass *)klass; + DcopObjectClass *dcop_class = DCOP_OBJECT_CLASS(klass); + + parent_class = (DcopObjectClass *)gtk_type_class(dcop_object_get_type()); + + object_class->destroy = gtk_xpart_destroy; + + dcop_class->process = gtk_xpart_dcop_process; + dcop_class->functions = gtk_xpart_dcop_functions; + dcop_class->interfaces = gtk_xpart_dcop_interfaces; + + klass->open_url = 0; + klass->close_url = 0; + klass->query_extension = 0; + + g_message( "gtk_xpart_class_init\n" ); +} + +static void +gtk_xpart_init(GtkXPart *part) +{ + GtkXPartPrivate *d; + d = g_new( GtkXPartPrivate, 1 ); + part->data = d; + + dcop_object_set_id( DCOP_OBJECT(part), "XPartClient" ); + + d->widget = 0; + d->client = 0; + d->host_app_id = 0; + d->host_obj_id = 0; + + g_message( "gtk_xpart_init\n" ); +} + +GtkXPart *gtk_xpart_new (void) +{ + return (GtkXPart *) gtk_type_new(gtk_xpart_get_type()); +} + + +void gtk_xpart_set_widget( GtkXPart *part, GtkWidget *widget ) +{ + GtkXPartPrivate *d = (GtkXPartPrivate *)part->data; + d->widget = widget; + gtk_object_ref( GTK_OBJECT( widget ) ); +} + + + +gboolean gtk_xpart_dcop_process( DcopObject *obj, const char *fun, dcop_data *data, + char **reply_type, dcop_data **reply_data ) +{ + GtkXPart *part = GTK_XPART(obj); + GtkXPartPrivate *d = (GtkXPartPrivate *)part->data; + GtkXPartClass *klass = GTK_XPART_CLASS(GTK_OBJECT(part)->klass); + gboolean b; + + if ( strcmp( fun, "windowId()" ) == 0 ) + { + *reply_type = strdup( "Q_UINT32" ); + *reply_data = dcop_data_ref( dcop_data_new() ); + + fprintf( stderr, "returning window id %ld\n", GDK_WINDOW_XWINDOW( d->widget->window ) ); + dcop_marshal_uint32( *reply_data, GDK_WINDOW_XWINDOW( d->widget->window ) ); + + return True; + } + else if ( strcmp( fun, "show()" ) == 0 ) + { + fprintf( stderr, "show %p!\n", d->widget ); + gtk_widget_show_all( d->widget ); + return True; + } + else if ( strcmp( fun, "openURL(QCString)" ) == 0 ) + { + char *url; + fprintf( stderr, "openURL!\n" ); + dcop_demarshal_string( data, &url ); + b = FALSE; + if ( klass->open_url ) + b = klass->open_url( part, url ); + *reply_type = strdup( "bool" ); + *reply_data = dcop_data_ref( dcop_data_new() ); + dcop_marshal_boolean( *reply_data, b ); + return True; + } + else if ( strcmp( fun, "closeURL()" ) == 0 ) + { + fprintf( stderr, "closeURL!\n" ); + b = FALSE; + if ( klass->close_url ) + b = klass->close_url( part ); + *reply_type = strdup( "bool" ); + *reply_data = dcop_data_ref( dcop_data_new() ); + dcop_marshal_boolean( *reply_data, b ); + return True; + } + else if ( strcmp( fun, "activateAction(QCString,int)" ) == 0 ) + { + char *name; + uint state; + dcop_demarshal_string( data, &name ); + dcop_demarshal_uint32( data, &state ); + fprintf( stderr, "activateAction %s state=%d\n", name, state ); + gtk_signal_emit_by_name( GTK_OBJECT(part), name, state); + return True; + } + else if ( strcmp( fun, "queryExtension(QCString)" ) == 0 ) { + char *name; + char *extension = NULL; + dcop_demarshal_string( data, &name ); + if ( klass->query_extension ) + extension = klass->query_extension( part, name ); + *reply_type = strdup( "DCOPRef" ); + *reply_data = dcop_data_ref( dcop_data_new() ); + dcop_marshal_string( *reply_data, dcop_client_app_id( P->client ) ); + dcop_marshal_string( *reply_data, extension ); + return True; + } + + return parent_class->process( obj, fun, data, reply_type, reply_data ); +} + +GList *gtk_xpart_dcop_functions( DcopObject *obj ) +{ + GList *res = parent_class->functions( obj ); + res = g_list_append( res, g_strdup( "windowId()" ) ); + res = g_list_append( res, g_strdup( "show()" ) ); + res = g_list_append( res, g_strdup( "bool openURL(QString url)" ) ); + res = g_list_append( res, g_strdup( "bool closeURL()" ) ); + res = g_list_append( res, g_strdup( "queryExtension(QCString)" ) ); + return res; +} + +GList *gtk_xpart_dcop_interfaces( DcopObject *obj ) +{ + GList *res = parent_class->interfaces( obj ); + res = g_list_append( res, g_strdup( "XPart" ) ); + return res; +} + +void gtk_xpart_destroy( GtkObject *obj ) +{ + GtkXPart *part = GTK_XPART(obj); + GtkXPartPrivate *d = (GtkXPartPrivate *) part->data; + g_free( d->host_app_id ); + g_free( d->host_obj_id ); + + gtk_object_destroy( GTK_OBJECT( d->widget ) ); + + GTK_OBJECT_CLASS(parent_class)->destroy(obj); +} + +void gtk_xpart_set_dcop_client( GtkXPart *part, DcopClient *client ) +{ + P->client = client; +} + + +gboolean gtk_xpart_register( GtkXPart *part, const gchar *host_app_id, const gchar *host_obj_id) +{ + dcop_data *reply_data; + char *reply_type; + dcop_data *data = dcop_data_ref( dcop_data_new() ); + GtkXPartPrivate *d = (GtkXPartPrivate *)part->data; + + if(!P->client) + fprintf(stderr, "register a dcop client first!\n"); + + dcop_marshal_string( data, dcop_client_app_id( P->client ) ); + dcop_marshal_string( data, DCOP_ID(DCOP_OBJECT(part)) ); + + if ( !dcop_client_call( P->client, host_app_id, host_obj_id, "registerXPart(DCOPRef)", data, + &reply_type, &reply_data ) ) { + fprintf( stderr, "cannot register with shell %s / %s\n", host_app_id, host_obj_id ); + gtk_exit( 1 ); + } + g_message( "back from registration call!" ); + + /*assert( strcmp( reply_type, "DCOPRef" ) == 0 );*/ + +#if 0 + /* this is wrong. but as we have the ref anyway, let's ignore the return value*/ + dcop_demarshal_string( data, &d->host_app_id ); + dcop_demarshal_string( data, &d->host_obj_id ); + + printf("appid=%s, objid=%s\n", d->host_app_id, d->host_obj_id); +#endif + d->host_obj_id = g_strdup( host_obj_id ); + d->host_app_id = g_strdup( host_app_id ); + + dcop_data_reset( reply_data ); + + dcop_data_deref( data ); + g_message( "returning from gtk_xpart_register" ); + return TRUE; +} + + +gboolean gtk_xpart_initialize_actions( GtkXPart *part, const char * actions ) +{ + GtkXPartPrivate *d = (GtkXPartPrivate *) part->data; + dcop_data *data = 0; + + g_message( "gtk_xpart_initialize_actions\n" ); + + if(!P->client) + g_message( "register a dcop client first!\n" ); + + data = dcop_data_ref( dcop_data_new() ); + dcop_marshal_string( data, actions ); + + if( !dcop_client_send( d->client, d->host_app_id, d->host_obj_id, "createActions(QCString)", data ) ) { + fprintf( stderr, "could not create actions\n" ); + dcop_data_deref( data ); + return FALSE; + } + dcop_data_deref( data ); + return TRUE; +} diff --git a/xparts/src/gtk/gtkpart.h b/xparts/src/gtk/gtkpart.h new file mode 100644 index 00000000..e803f03e --- /dev/null +++ b/xparts/src/gtk/gtkpart.h @@ -0,0 +1,61 @@ +#ifndef _gtkxpart_h__ +#define _gtkxpart_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <dcopc/dcopobject.h> +#include <dcopc/dcopc.h> +#include <dcopc/marshal.h> +#include <dcopc/util.h> + +#include <gtk/gtk.h> + +#include "gtkbrowserextension.h" + +#define GTK_TYPE_XPART (gtk_xpart_get_type()) +#define GTK_XPART(obj) GTK_CHECK_CAST((obj), GTK_TYPE_XPART, GtkXPart) +#define GTK_XPART_CLASS(klass) GTK_CHECK_CLASS_CAST((klass), GTK_TYPE_XPART, GtkXPartClass) +#define GTK_IS_XPART(obj) GTK_CHECK_TYPE((obj), GTK_TYPE_XPART) +#define GTK_IS_XPART_CLASS(klass) GTK_CHECK_CLASS_TYPE((klass), GTK_TYPE_XPART) + +#define GTK_XPART_WIDGET(part) (gtk_xpart_get_widget(part)) +#define GTK_XPART_DCOP(part) (gtk_xpart_get_dcop(part)) + +typedef struct _GtkXPart GtkXPart; +typedef struct _GtkXPartClass GtkXPartClass; + +struct _GtkXPart +{ + DcopObject obj; + void *data; +}; + +struct _GtkXPartClass +{ + DcopObjectClass parent_class; + + gboolean (* open_url) ( GtkXPart *part, const char * url ); + gboolean (* close_url) ( GtkXPart *part ); + + /* virtual function, returns the dcop object id of the extension, or NULL if it + doesn't exist */ + char * (*query_extension) ( GtkXPart *part, const char *name ); +}; + +extern GtkType gtk_xpart_get_type (void); +extern GtkXPart *gtk_xpart_new (void); + +/* "virtual" functions from DcopObject */ +void gtk_xpart_set_dcop_client( GtkXPart *part, DcopClient *client ); +gboolean gtk_xpart_register( GtkXPart *part, const gchar *host_app_id, const gchar *host_obj_id); +gboolean gtk_xpart_initialize_actions( GtkXPart *part, const char * actions ); + +void gtk_xpart_set_widget( GtkXPart *part, GtkWidget *widget ); + +#ifdef __cplusplus +} +#endif + +#endif |