aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar keis <keijser@gmail.com>2011-01-14 20:45:56 +0100
committerGravatar keis <keijser@gmail.com>2011-02-15 21:05:49 +0100
commit95fb1bfa2a140611ee68ef42447327f6defd9b8d (patch)
treed76b965704d22cb844aa19d700d8db7164af0f23 /src
parent681cb249c31e4e17e3ae9b8f68b10d7f33fea402 (diff)
format event strings in send_event
send_event now takes a null terminated type, value sequence as arguments vsend_event does the same thing but takes a va_list with arguments.
Diffstat (limited to 'src')
-rw-r--r--src/callbacks.c103
-rw-r--r--src/cookie-jar.c16
-rw-r--r--src/events.c69
-rw-r--r--src/events.h6
-rw-r--r--src/uzbl-core.c43
-rw-r--r--src/uzbl-core.h3
6 files changed, 138 insertions, 102 deletions
diff --git a/src/callbacks.c b/src/callbacks.c
index 9bc5c28..12bbc14 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -116,7 +116,7 @@ cmd_set_status() {
void
cmd_load_uri() {
- load_uri_imp (uzbl.state.uri);
+ load_uri_imp (uzbl.state.uri);
}
void
@@ -413,12 +413,12 @@ link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpoin
if(s->last_selected_url &&
g_strcmp0(s->selected_url, s->last_selected_url))
- send_event(LINK_UNHOVER, s->last_selected_url, NULL);
+ send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL);
- send_event(LINK_HOVER, s->selected_url, NULL);
+ send_event(LINK_HOVER, NULL, TYPE_STR, s->selected_url, NULL);
}
else if(s->last_selected_url) {
- send_event(LINK_UNHOVER, s->last_selected_url, NULL);
+ send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL);
}
update_title();
@@ -433,7 +433,7 @@ title_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
g_free (uzbl.gui.main_title);
uzbl.gui.main_title = title ? g_strdup (title) : g_strdup ("(no title)");
update_title();
- send_event(TITLE_CHANGED, uzbl.gui.main_title, NULL);
+ send_event(TITLE_CHANGED, NULL, TYPE_STR, uzbl.gui.main_title, NULL);
g_setenv("UZBL_TITLE", uzbl.gui.main_title, TRUE);
}
@@ -441,9 +441,7 @@ void
progress_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
(void) param_spec;
int progress = webkit_web_view_get_progress(web_view) * 100;
- gchar *prg_str = g_strdup_printf("%d", progress);
- send_event(LOAD_PROGRESS, prg_str, NULL);
- g_free(prg_str);
+ send_event(LOAD_PROGRESS, NULL, TYPE_INT, progress, NULL);
}
void
@@ -454,7 +452,7 @@ load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
WebKitLoadStatus status = webkit_web_view_get_load_status(web_view);
switch(status) {
case WEBKIT_LOAD_PROVISIONAL:
- send_event(LOAD_START, uzbl.state.uri, NULL);
+ send_event(LOAD_START, NULL, TYPE_STR, uzbl.state.uri, NULL);
break;
case WEBKIT_LOAD_COMMITTED:
g_free (uzbl.state.uri);
@@ -462,10 +460,10 @@ load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec) {
uzbl.state.uri = g_string_free (newuri, FALSE);
g_setenv("UZBL_URI", uzbl.state.uri, TRUE);
- send_event(LOAD_COMMIT, webkit_web_frame_get_uri (frame), NULL);
+ send_event(LOAD_COMMIT, NULL, TYPE_STR, webkit_web_frame_get_uri (frame), NULL);
break;
case WEBKIT_LOAD_FINISHED:
- send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame), NULL);
+ send_event(LOAD_FINISH, NULL, TYPE_STR, webkit_web_frame_get_uri(frame), NULL);
break;
case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT:
break; /* we don't do anything with this (yet) */
@@ -482,7 +480,7 @@ selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) {
webkit_web_view_copy_clipboard(webkitwebview);
tmp = gtk_clipboard_wait_for_text(gtk_clipboard_get (GDK_SELECTION_CLIPBOARD));
- send_event(SELECTION_CHANGED, tmp, NULL);
+ send_event(SELECTION_CHANGED, NULL, TYPE_STR, tmp, NULL);
g_free(tmp);
}
@@ -492,11 +490,12 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer
(void) frame;
(void) ud;
GError *err = web_err;
- gchar *details;
- details = g_strdup_printf("%s %d:%s", uri, err->code, err->message);
- send_event(LOAD_ERROR, details, NULL);
- g_free(details);
+ send_event (LOAD_ERROR, NULL,
+ TYPE_STR, uri,
+ TYPE_INT, err->code,
+ TYPE_STR, err->message,
+ NULL);
}
void
@@ -516,7 +515,7 @@ configure_event_cb(GtkWidget* window, GdkEventConfigure* event) {
retrieve_geometry();
if(strcmp(lastgeo, uzbl.gui.geometry))
- send_event(GEOMETRY_CHANGED, uzbl.gui.geometry, NULL);
+ send_event(GEOMETRY_CHANGED, NULL, TYPE_STR, uzbl.gui.geometry, NULL);
g_free(lastgeo);
return FALSE;
@@ -528,10 +527,7 @@ focus_cb(GtkWidget* window, GdkEventFocus* event, void *ud) {
(void) event;
(void) ud;
- if(event->in)
- send_event(FOCUS_GAINED, "", NULL);
- else
- send_event(FOCUS_LOST, "", NULL);
+ send_event (event->in?FOCUS_GAINED:FOCUS_LOST, NULL, NULL);
return FALSE;
}
@@ -573,9 +569,9 @@ button_press_cb (GtkWidget* window, GdkEventButton* event) {
/* left click */
if(event->button == 1) {
if((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE))
- send_event(FORM_ACTIVE, "button1", NULL);
+ send_event(FORM_ACTIVE, NULL, TYPE_STR, "button1", NULL);
else if((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT))
- send_event(ROOT_ACTIVE, "button1", NULL);
+ send_event(ROOT_ACTIVE, NULL, TYPE_STR, "button1", NULL);
}
else if(event->button == 2 && !(context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE)) {
sendev = TRUE;
@@ -588,8 +584,8 @@ button_press_cb (GtkWidget* window, GdkEventButton* event) {
if(sendev) {
details = g_strdup_printf("Button%d", event->button);
- send_event(KEY_PRESS, details, NULL);
- g_free(details);
+ send_event(KEY_PRESS, NULL, TYPE_STR, details, NULL);
+ g_free (details);
}
}
@@ -617,8 +613,8 @@ button_release_cb (GtkWidget* window, GdkEventButton* event) {
if(sendev) {
details = g_strdup_printf("Button%d", event->button);
- send_event(KEY_RELEASE, details, NULL);
- g_free(details);
+ send_event(KEY_RELEASE, NULL, TYPE_STR, details, NULL);
+ g_free (details);
}
}
@@ -631,9 +627,11 @@ motion_notify_cb(GtkWidget* window, GdkEventMotion* event, gpointer user_data) {
(void) event;
(void) user_data;
- gchar *details = g_strdup_printf("%.0lf %.0lf %u", event->x, event->y, event->state);
- send_event(PTR_MOVE, details, NULL);
- g_free(details);
+ send_event (PTR_MOVE, NULL,
+ TYPE_FLOAT, event->x,
+ TYPE_FLOAT, event->y,
+ TYPE_INT, event->state,
+ NULL);
return FALSE;
}
@@ -690,7 +688,7 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame,
(void) user_data;
if (uzbl.state.verbose)
- printf("New window requested -> %s \n", webkit_network_request_get_uri (request));
+ printf ("New window requested -> %s \n", webkit_network_request_get_uri (request));
/* This event function causes troubles with `target="_blank"` anchors.
* Either we:
@@ -704,9 +702,9 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame,
* We are leaving this uncommented as we would rather links open twice
* than not at all.
*/
- send_event(NEW_WINDOW, webkit_network_request_get_uri (request), NULL);
+ send_event (NEW_WINDOW, NULL, TYPE_STR, webkit_network_request_get_uri (request), NULL);
- webkit_web_policy_decision_ignore(policy_decision);
+ webkit_web_policy_decision_ignore (policy_decision);
return TRUE;
}
@@ -736,7 +734,7 @@ request_starting_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitWebRes
(void) response;
(void) user_data;
- send_event(REQUEST_STARTING, webkit_network_request_get_uri(request), NULL);
+ send_event (REQUEST_STARTING, NULL, TYPE_STR, webkit_network_request_get_uri(request), NULL);
}
void
@@ -751,7 +749,7 @@ create_web_view_js2_cb (WebKitWebView* web_view, GParamSpec param_spec) {
gtk_widget_destroy(GTK_WIDGET(web_view));
}
else
- send_event(NEW_WINDOW, uri, NULL);
+ send_event(NEW_WINDOW, NULL, TYPE_STR, uri, NULL);
}
@@ -792,9 +790,10 @@ download_progress_cb(WebKitDownload *download, GParamSpec *pspec, gpointer user_
const gchar *dest_uri = webkit_download_get_destination_uri(download);
const gchar *dest_path = dest_uri + strlen("file://");
- gchar *details = g_strdup_printf("%s %.2lf", dest_path, progress);
- send_event(DOWNLOAD_PROGRESS, details, NULL);
- g_free(details);
+ send_event(DOWNLOAD_PROGRESS, NULL,
+ TYPE_STR, dest_path,
+ TYPE_FLOAT, progress,
+ NULL);
}
void
@@ -814,7 +813,7 @@ download_status_cb(WebKitDownload *download, GParamSpec *pspec, gpointer user_da
{
const gchar *dest_uri = webkit_download_get_destination_uri(download);
const gchar *dest_path = dest_uri + strlen("file://");
- send_event(DOWNLOAD_COMPLETE, dest_path, NULL);
+ send_event(DOWNLOAD_COMPLETE, NULL, TYPE_STR, dest_path, NULL);
}
}
}
@@ -905,7 +904,7 @@ download_cb(WebKitWebView *web_view, WebKitDownload *download, gpointer user_dat
g_free(rel_path);
}
- send_event(DOWNLOAD_STARTED, destination_path, NULL);
+ send_event(DOWNLOAD_STARTED, NULL, TYPE_STR, destination_path, NULL);
/* convert absolute path to file:// URI */
gchar *destination_uri = g_strconcat("file://", destination_path, NULL);
@@ -926,12 +925,13 @@ scroll_vert_cb(GtkAdjustment *adjust, void *w)
gdouble min = gtk_adjustment_get_lower(adjust);
gdouble max = gtk_adjustment_get_upper(adjust);
gdouble page = gtk_adjustment_get_page_size(adjust);
- gchar* details;
- details = g_strdup_printf("%g %g %g %g", value, min, max, page);
-
- send_event(SCROLL_VERT, details, NULL);
- g_free(details);
+ send_event (SCROLL_VERT, NULL,
+ TYPE_FLOAT, value,
+ TYPE_FLOAT, min,
+ TYPE_FLOAT, max,
+ TYPE_FLOAT, page,
+ NULL);
return (FALSE);
}
@@ -945,12 +945,13 @@ scroll_horiz_cb(GtkAdjustment *adjust, void *w)
gdouble min = gtk_adjustment_get_lower(adjust);
gdouble max = gtk_adjustment_get_upper(adjust);
gdouble page = gtk_adjustment_get_page_size(adjust);
- gchar* details;
- details = g_strdup_printf("%g %g %g %g", value, min, max, page);
- send_event(SCROLL_HORIZ, details, NULL);
-
- g_free(details);
+ send_event (SCROLL_HORIZ, NULL,
+ TYPE_FLOAT, value,
+ TYPE_FLOAT, min,
+ TYPE_FLOAT, max,
+ TYPE_FLOAT, page,
+ NULL);
return (FALSE);
}
@@ -1020,3 +1021,5 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) {
}
}
}
+
+/* vi: set et ts=4: */
diff --git a/src/cookie-jar.c b/src/cookie-jar.c
index 82a5269..bc7d022 100644
--- a/src/cookie-jar.c
+++ b/src/cookie-jar.c
@@ -45,13 +45,15 @@ changed(SoupCookieJar *jar, SoupCookie *old_cookie, SoupCookie *new_cookie) {
if(cookie->expires)
expires = g_strdup_printf ("%d", soup_date_to_time_t (cookie->expires));
- gchar * eventstr = g_strdup_printf ("'%s' '%s' '%s' '%s' '%s' '%s'",
- cookie->domain, cookie->path, cookie->name, cookie->value, scheme, expires?expires:"");
- if(new_cookie)
- send_event(ADD_COOKIE, eventstr, NULL);
- else
- send_event(DELETE_COOKIE, eventstr, NULL);
- g_free(eventstr);
+ send_event (new_cookie ? ADD_COOKIE : DELETE_COOKIE, NULL,
+ TYPE_STR, cookie->domain,
+ TYPE_STR, cookie->path,
+ TYPE_STR, cookie->name,
+ TYPE_STR, cookie->value,
+ TYPE_STR, scheme,
+ TYPE_STR, expires ? expires : "",
+ NULL);
+
if(expires)
g_free(expires);
}
diff --git a/src/events.c b/src/events.c
index 31a95d5..b9b5a18 100644
--- a/src/events.c
+++ b/src/events.c
@@ -137,32 +137,53 @@ send_event_stdout(GString *msg) {
fflush(stdout);
}
+void
+vsend_event(int type, const gchar *custom_event, va_list vargs) {
+ GString *event_message = g_string_sized_new (512);
+ if (type >= LAST_EVENT)
+ return;
+ const gchar *event = custom_event ? custom_event : event_table[type];
+
+ int next;
+ g_string_printf (event_message, "EVENT [%s] %s",
+ uzbl.state.instance_name, event);
+
+ while ((next = va_arg (vargs, int)) != 0) {
+ switch(next) {
+ case TYPE_INT:
+ g_string_append_printf (event_message, " %d", va_arg (vargs, int));
+ break;
+ case TYPE_STR:
+ g_string_append_printf (event_message, " %s", va_arg (vargs, char*));
+ break;
+ case TYPE_FLOAT:
+ // ‘float’ is promoted to ‘double’ when passed through ‘...’
+ g_string_append_printf (event_message, " %.2g", va_arg (vargs, double));
+ break;
+ }
+ }
+
+ g_string_append_c(event_message, '\n');
+
+ if (uzbl.state.events_stdout)
+ send_event_stdout (event_message);
+ send_event_socket (event_message);
+
+ g_string_free (event_message, TRUE);
+}
+
/*
* build event string and send over the supported interfaces
* custom_event == NULL indicates an internal event
*/
void
-send_event(int type, const gchar *details, const gchar *custom_event) {
- GString *event_message = g_string_new("");
-
- /* check for custom events */
- if(custom_event) {
- g_string_printf(event_message, "EVENT [%s] %s %s\n",
- uzbl.state.instance_name, custom_event, details);
- }
- /* check wether we support the internal event */
- else if(type < LAST_EVENT) {
- g_string_printf(event_message, "EVENT [%s] %s %s\n",
- uzbl.state.instance_name, event_table[type], details);
- }
-
- if(event_message->str) {
- if(uzbl.state.events_stdout)
- send_event_stdout(event_message);
- send_event_socket(event_message);
-
- g_string_free(event_message, TRUE);
- }
+send_event(int type, const gchar *custom_event, ...) {
+ va_list vargs, vacopy;
+ va_start (vargs, custom_event);
+ va_copy (vacopy, vargs);
+ vsend_event (type, custom_event, vacopy);
+ va_end (vacopy);
+ va_end (vargs);
}
/* Transform gdk key events to our own events */
@@ -181,12 +202,14 @@ key_to_event(guint keyval, gint mode) {
ucs[ulen] = 0;
send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE,
- ucs, NULL);
+ NULL, TYPE_STR, ucs, NULL);
}
/* send keysym for non-printable chars */
else {
send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE,
- gdk_keyval_name(keyval), NULL);
+ NULL, TYPE_STR, gdk_keyval_name(keyval), NULL);
}
}
+
+/* vi: set et ts=4: */
diff --git a/src/events.h b/src/events.h
index 4edc5ab..8e75097 100644
--- a/src/events.h
+++ b/src/events.h
@@ -7,6 +7,7 @@
#define __EVENTS__
#include <glib.h>
+#include <stdarg.h>
/* Event system */
enum event_type {
@@ -38,7 +39,10 @@ void
send_event_stdout(GString *msg);
void
-send_event(int type, const gchar *details, const gchar *custom_event);
+vsend_event(int type, const gchar *custom_event, va_list vargs);
+
+void
+send_event(int type, const gchar *custom_event, ...) G_GNUC_NULL_TERMINATED;
void
key_to_event(guint keyval, gint mode);
diff --git a/src/uzbl-core.c b/src/uzbl-core.c
index 4c709f7..7c0e2c3 100644
--- a/src/uzbl-core.c
+++ b/src/uzbl-core.c
@@ -337,7 +337,7 @@ expand(const char* s, guint recurse) {
void
clean_up(void) {
if (uzbl.info.pid_str) {
- send_event(INSTANCE_EXIT, uzbl.info.pid_str, NULL);
+ send_event (INSTANCE_EXIT, NULL, TYPE_STR, uzbl.info.pid_str, NULL);
g_free(uzbl.info.pid_str);
uzbl.info.pid_str = NULL;
}
@@ -560,7 +560,7 @@ builtins() {
g_string_append_c(command_list, ' ');
}
- send_event(BUILTINS, command_list->str, NULL);
+ send_event(BUILTINS, NULL, TYPE_STR, command_list->str, NULL);
g_string_free(command_list, TRUE);
}
@@ -597,7 +597,7 @@ event(WebKitWebView *page, GArray *argv, GString *result) {
else
return;
- send_event(0, split[1]?split[1]:"", event_name->str);
+ send_event(0, event_name->str, TYPE_STR, split[1] ? split[1] : "", NULL);
g_string_free(event_name, TRUE);
g_strfreev(split);
@@ -640,11 +640,11 @@ include(WebKitWebView *page, GArray *argv, GString *result) {
if((path = find_existing_file(path))) {
if(!for_each_line_in_file(path, parse_cmd_line_cb, NULL)) {
gchar *tmp = g_strdup_printf("File %s can not be read.", path);
- send_event(COMMAND_ERROR, tmp, NULL);
+ send_event(COMMAND_ERROR, NULL, TYPE_STR, tmp, NULL);
g_free(tmp);
}
- send_event(FILE_INCLUDED, path, NULL);
+ send_event(FILE_INCLUDED, NULL, TYPE_STR, path, NULL);
g_free(path);
}
}
@@ -1103,13 +1103,17 @@ run_parsed_command(const CommandInfo *c, GArray *a, GString *result) {
if(strcmp("set", c->key) &&
strcmp("event", c->key) &&
strcmp("request", c->key)) {
- GString *tmp = g_string_new(c->key);
+ // FIXME, build string inside send_event
+ GString *param = g_string_new("");
const gchar *p;
guint i = 0;
while ((p = argv_idx(a, i++)))
- g_string_append_printf(tmp, " '%s'", p);
- send_event(COMMAND_EXECUTED, tmp->str, NULL);
- g_string_free(tmp, TRUE);
+ g_string_append_printf(param, " '%s'", p);
+ send_event(COMMAND_EXECUTED, NULL,
+ TYPE_STR, c->key,
+ TYPE_STR, param->str,
+ NULL);
+ g_string_free(param, TRUE);
}
if(result) {
@@ -1177,9 +1181,10 @@ parse_command(const char *cmd, const char *params, GString *result) {
g_array_free (a, TRUE);
} else {
- gchar *tmp = g_strconcat(cmd, " ", params, NULL);
- send_event(COMMAND_ERROR, tmp, NULL);
- g_free(tmp);
+ send_event(COMMAND_ERROR, NULL,
+ TYPE_STR, cmd,
+ TYPE_STR, params ? params : "",
+ NULL);
}
}
@@ -1238,7 +1243,7 @@ set_var_value(const gchar *name, gchar *val) {
g_string_append_printf(msg, " float %f", *c->ptr.f);
}
- send_event(VARIABLE_SET, msg->str, NULL);
+ send_event(VARIABLE_SET, NULL, TYPE_STR, msg->str, NULL);
g_string_free(msg,TRUE);
/* invoke a command specific function */
@@ -1265,7 +1270,7 @@ set_var_value(const gchar *name, gchar *val) {
msg = g_string_new(name);
g_string_append_printf(msg, " str %s", buf);
- send_event(VARIABLE_SET, msg->str, NULL);
+ send_event(VARIABLE_SET, NULL, TYPE_STR, msg->str, NULL);
g_string_free(msg,TRUE);
}
update_title();
@@ -1463,7 +1468,7 @@ settings_init () {
if (s->config_file) {
if (!for_each_line_in_file(s->config_file, parse_cmd_line_cb, NULL)) {
gchar *tmp = g_strdup_printf("File %s can not be read.", s->config_file);
- send_event(COMMAND_ERROR, tmp, NULL);
+ send_event(COMMAND_ERROR, NULL, TYPE_STR, tmp, NULL);
g_free(tmp);
}
g_setenv("UZBL_CONFIG", s->config_file, TRUE);
@@ -1571,7 +1576,7 @@ dump_var_hash_as_event(gpointer k, gpointer v, gpointer ud) {
g_string_append_printf(msg, " float %f", *c->ptr.f);
}
- send_event(VARIABLE_SET, msg->str, NULL);
+ send_event(VARIABLE_SET, NULL, TYPE_STR, msg->str, NULL);
g_string_free(msg, TRUE);
}
@@ -1779,12 +1784,10 @@ main (int argc, char* argv[]) {
uzbl.info.pid_str = g_strdup_printf("%d", getpid());
g_setenv("UZBL_PID", uzbl.info.pid_str, TRUE);
- send_event(INSTANCE_START, uzbl.info.pid_str, NULL);
+ send_event(INSTANCE_START, NULL, TYPE_STR, uzbl.info.pid_str, NULL);
if (uzbl.state.plug_mode) {
- char *t = g_strdup_printf("%d", gtk_plug_get_id(uzbl.gui.plug));
- send_event(PLUG_CREATED, t, NULL);
- g_free(t);
+ send_event(PLUG_CREATED, NULL, TYPE_INT, gtk_plug_get_id (uzbl.gui.plug), NULL);
}
/* Generate an event with a list of built in commands */
diff --git a/src/uzbl-core.h b/src/uzbl-core.h
index a10c0ce..649f159 100644
--- a/src/uzbl-core.h
+++ b/src/uzbl-core.h
@@ -241,7 +241,8 @@ extern UzblCore uzbl; /* Main Uzbl object */
typedef void sigfunc(int);
/* Uzbl variables */
-enum ptr_type {TYPE_INT, TYPE_STR, TYPE_FLOAT};
+/* uzbl variables */
+enum ptr_type {TYPE_INT = 1, TYPE_STR, TYPE_FLOAT};
typedef struct {
enum ptr_type type;
union {