Skip to content

Commit

Permalink
Merge pull request #299 from keis/ext-messages-convenience
Browse files Browse the repository at this point in the history
Streamline usage of ext messages
  • Loading branch information
keis committed Aug 12, 2016
2 parents b801f53 + ce7281f commit 6ccddae
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 17 deletions.
36 changes: 31 additions & 5 deletions src/extio.c
Expand Up @@ -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;
}

Expand Down
18 changes: 18 additions & 0 deletions src/extio.h
@@ -1,3 +1,6 @@
#ifndef UZBL_EXTIO_H
#define UZBL_EXTIO_H

#include <glib.h>
#include <gio/gio.h>

Expand Down Expand Up @@ -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
10 changes: 10 additions & 0 deletions src/io.c
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions src/io.h
Expand Up @@ -2,6 +2,7 @@
#define UZBL_IO_H

#include "commands.h"
#include "extio.h"

#include <glib.h>

Expand All @@ -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);
Expand Down
18 changes: 6 additions & 12 deletions src/uzbl-ext.c
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand All @@ -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);
}

0 comments on commit 6ccddae

Please sign in to comment.