diff --git a/src/extio.c b/src/extio.c index fffbe7409..ad563516d 100644 --- a/src/extio.c +++ b/src/extio.c @@ -269,20 +269,46 @@ uzbl_extio_send_message (GOutputStream *stream, g_output_stream_write (stream, buf, size, NULL, NULL); } -GVariant * -uzbl_extio_new_message (ExtIOMessageType type, - ...) +void +uzbl_extio_send_new_messagev (GOutputStream *stream, + ExtIOMessageType type, + va_list *vargs) +{ + GVariant *message = uzbl_extio_new_messagev (type, vargs); + uzbl_extio_send_message (stream, type, message); + g_variant_unref (message); +} + +void +uzbl_extio_send_new_message (GOutputStream *stream, + ExtIOMessageType type, + ...) { va_list vargs; va_start (vargs, type); + uzbl_extio_send_new_messagev (stream, type, &vargs); + va_end (vargs); +} +GVariant * +uzbl_extio_new_messagev (ExtIOMessageType type, va_list *vargs) +{ const gchar *end; const GVariantType *vt = uzbl_extio_get_variant_type (type); const gchar *frmt = g_variant_type_peek_string (vt); - GVariant *var = g_variant_new_va (frmt, &end, &vargs); + GVariant *var = g_variant_new_va (frmt, &end, vargs); g_variant_ref_sink (var); - va_end (vargs); + return var; +} +GVariant * +uzbl_extio_new_message (ExtIOMessageType type, + ...) +{ + va_list vargs; + va_start (vargs, type); + GVariant *var = uzbl_extio_new_messagev (type, &vargs); + va_end (vargs); return var; } diff --git a/src/extio.h b/src/extio.h index c9bc96095..1a6d24426 100644 --- a/src/extio.h +++ b/src/extio.h @@ -1,3 +1,6 @@ +#ifndef UZBL_EXTIO_H +#define UZBL_EXTIO_H + #include #include @@ -28,9 +31,24 @@ uzbl_extio_send_message (GOutputStream *stream, ExtIOMessageType type, GVariant *message); +void +uzbl_extio_send_new_messagev (GOutputStream *stream, + ExtIOMessageType type, + va_list *vargs); +void +uzbl_extio_send_new_message (GOutputStream *stream, + ExtIOMessageType type, + ...); + +GVariant * +uzbl_extio_new_messagev (ExtIOMessageType type, + va_list *vargs); + GVariant * uzbl_extio_new_message (ExtIOMessageType type, ...); void uzbl_extio_get_message_data (ExtIOMessageType type, GVariant *var, ...); + +#endif diff --git a/src/io.c b/src/io.c index 21d853847..597e30ec1 100644 --- a/src/io.c +++ b/src/io.c @@ -229,6 +229,16 @@ uzbl_io_schedule_command (const UzblCommand *cmd, GArray *argv, UzblIOCallback c g_async_queue_push (uzbl.io->cmd_q, cmd_data); } +void +uzbl_io_send_ext_message (ExtIOMessageType type, ...) +{ + va_list vargs; + va_start (vargs, type); + GOutputStream *os = g_io_stream_get_output_stream (uzbl.io->extstream); + uzbl_extio_send_new_messagev (os, type, &vargs); + va_end (vargs); +} + typedef enum { UZBL_COMM_FIFO, UZBL_COMM_SOCKET diff --git a/src/io.h b/src/io.h index 080bf745e..1166cca34 100644 --- a/src/io.h +++ b/src/io.h @@ -2,6 +2,7 @@ #define UZBL_IO_H #include "commands.h" +#include "extio.h" #include @@ -12,6 +13,8 @@ typedef void (*UzblIOCallback)(GString *result, gpointer data); void uzbl_io_schedule_command (const UzblCommand *cmd, GArray *argv, UzblIOCallback callback, gpointer data); +void +uzbl_io_send_ext_message (ExtIOMessageType type, ...); gboolean uzbl_io_init_fifo (const gchar *dir); diff --git a/src/uzbl-ext.c b/src/uzbl-ext.c index 775bf55f1..da1152efd 100644 --- a/src/uzbl-ext.c +++ b/src/uzbl-ext.c @@ -98,10 +98,8 @@ webkit_web_extension_initialize_with_user_data (WebKitWebExtension *extension, g_variant_get (user_data, "(ixx)", &proto, &in, &out); uzbl_ext_init_io (ext, in, out); - GVariant *message = g_variant_new ("i", EXTIO_PROTOCOL); - uzbl_extio_send_message (g_io_stream_get_output_stream (ext->stream), - EXT_HELO, message); - g_variant_unref (message); + uzbl_extio_send_new_message (g_io_stream_get_output_stream (ext->stream), + EXT_HELO, EXTIO_PROTOCOL); if (proto != EXTIO_PROTOCOL) { g_warning ("Extension loaded into incompatible version of uzbl (expected %d, was %d)", EXTIO_PROTOCOL, proto); @@ -151,10 +149,8 @@ dom_focus_callback (WebKitDOMEventTarget *target, WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); gchar *name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); - GVariant *message = uzbl_extio_new_message (EXT_FOCUS, name); - uzbl_extio_send_message (g_io_stream_get_output_stream (ext->stream), - EXT_FOCUS, message); - g_variant_unref (message); + uzbl_extio_send_new_message (g_io_stream_get_output_stream (ext->stream), + EXT_FOCUS, name); } void @@ -168,8 +164,6 @@ dom_blur_callback (WebKitDOMEventTarget *target, WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); gchar *name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); - GVariant *message = uzbl_extio_new_message (EXT_FOCUS, name); - uzbl_extio_send_message (g_io_stream_get_output_stream (ext->stream), - EXT_BLUR, message); - g_variant_unref (message); + uzbl_extio_send_new_message (g_io_stream_get_output_stream (ext->stream), + EXT_BLUR, name); }