aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/uzbl-core.c
diff options
context:
space:
mode:
authorGravatar Brendan Taylor <whateley@gmail.com>2011-02-17 13:09:50 -0700
committerGravatar Brendan Taylor <whateley@gmail.com>2011-02-17 13:09:50 -0700
commit67af28c8d147e35c91ea91b0ddf51680d9feb475 (patch)
tree697e96acc530fefdc6ab6189d95e23127cc127cc /src/uzbl-core.c
parentb7a47b3f58e6fa05d56577ea6425d353a41ddb86 (diff)
parente3b04d3ae9fb6dfeff5e6099784586b54591814e (diff)
Merge branch 'escaped_events' into experimental
Conflicts: src/util.c
Diffstat (limited to 'src/uzbl-core.c')
-rw-r--r--src/uzbl-core.c131
1 files changed, 77 insertions, 54 deletions
diff --git a/src/uzbl-core.c b/src/uzbl-core.c
index 936dbdc..b2e7a7a 100644
--- a/src/uzbl-core.c
+++ b/src/uzbl-core.c
@@ -351,7 +351,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_INT, getpid(), NULL);
g_free(uzbl.info.pid_str);
uzbl.info.pid_str = NULL;
}
@@ -574,7 +574,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);
}
@@ -611,7 +611,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_FORMATTEDSTR, split[1] ? split[1] : "", NULL);
g_string_free(event_name, TRUE);
g_strfreev(split);
@@ -657,11 +657,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);
}
}
@@ -1120,13 +1120,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_NAME, c->key,
+ TYPE_FORMATTEDSTR, param->str,
+ NULL);
+ g_string_free(param, TRUE);
}
if(result) {
@@ -1166,7 +1170,9 @@ parse_command_parts(const gchar *line, GArray *a) {
c = g_hash_table_lookup(uzbl.behave.commands, tokens[0]);
if(!c) {
- send_event(COMMAND_ERROR, exp_line, NULL);
+ send_event(COMMAND_ERROR, NULL,
+ TYPE_STR, exp_line,
+ NULL);
g_free(exp_line);
g_strfreev(tokens);
return NULL;
@@ -1194,9 +1200,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_NAME, cmd,
+ TYPE_STR, params ? params : "",
+ NULL);
}
}
@@ -1227,42 +1234,73 @@ move_statusbar() {
}
gboolean
+valid_name(const gchar* name) {
+ char *invalid_chars = "\t^°!\"§$%&/()=?'`'+~*'#-:,;@<>| \\{}[]¹²³¼½";
+ return strpbrk(name, invalid_chars) == NULL;
+}
+
+void
+send_set_var_event(const char *name, const uzbl_cmdprop *c) {
+ /* check for the variable type */
+ switch(c->type) {
+ case TYPE_STR:
+ send_event (VARIABLE_SET, NULL,
+ TYPE_NAME, name,
+ TYPE_NAME, "str",
+ TYPE_STR, *c->ptr.s ? *c->ptr.s : " ",
+ NULL);
+ break;
+ case TYPE_INT:
+ send_event (VARIABLE_SET, NULL,
+ TYPE_NAME, name,
+ TYPE_NAME, "int",
+ TYPE_INT, *c->ptr.i,
+ NULL);
+ break;
+ case TYPE_FLOAT:
+ send_event (VARIABLE_SET, NULL,
+ TYPE_NAME, name,
+ TYPE_NAME, "float",
+ TYPE_FLOAT, *c->ptr.f,
+ NULL);
+ break;
+ default:
+ g_assert_not_reached();
+ }
+}
+
+gboolean
set_var_value(const gchar *name, gchar *val) {
uzbl_cmdprop *c = NULL;
char *endp = NULL;
char *buf = NULL;
- char *invalid_chars = "\t^°!\"§$%&/()=?'`'+~*'#-:,;@<>| \\{}[]¹²³¼½";
- GString *msg;
if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) {
if(!c->writeable) return FALSE;
- msg = g_string_new(name);
-
- /* check for the variable type */
- if (c->type == TYPE_STR) {
+ switch(c->type) {
+ case TYPE_STR:
buf = g_strdup(val);
g_free(*c->ptr.s);
*c->ptr.s = buf;
- g_string_append_printf(msg, " str %s", buf);
-
- } else if(c->type == TYPE_INT) {
+ break;
+ case TYPE_INT:
*c->ptr.i = (int)strtoul(val, &endp, 10);
- g_string_append_printf(msg, " int %d", *c->ptr.i);
-
- } else if (c->type == TYPE_FLOAT) {
+ break;
+ case TYPE_FLOAT:
*c->ptr.f = strtod(val, &endp);
- g_string_append_printf(msg, " float %f", *c->ptr.f);
+ break;
+ default:
+ g_assert_not_reached();
}
- send_event(VARIABLE_SET, msg->str, NULL);
- g_string_free(msg,TRUE);
+ send_set_var_event(name, c);
/* invoke a command specific function */
if(c->func) c->func();
} else {
/* check wether name violates our naming scheme */
- if(strpbrk(name, invalid_chars)) {
+ if(!valid_name(name)) {
if (uzbl.state.verbose)
printf("Invalid variable name: %s\n", name);
return FALSE;
@@ -1280,10 +1318,11 @@ set_var_value(const gchar *name, gchar *val) {
g_hash_table_insert(uzbl.comm.proto_var,
g_strdup(name), (gpointer) c);
- msg = g_string_new(name);
- g_string_append_printf(msg, " str %s", buf);
- send_event(VARIABLE_SET, msg->str, NULL);
- g_string_free(msg,TRUE);
+ send_event (VARIABLE_SET, NULL,
+ TYPE_NAME, name,
+ TYPE_NAME, "str",
+ TYPE_STR, buf,
+ NULL);
}
update_title();
return TRUE;
@@ -1480,7 +1519,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);
@@ -1573,23 +1612,9 @@ void
dump_var_hash_as_event(gpointer k, gpointer v, gpointer ud) {
(void) ud;
uzbl_cmdprop *c = v;
- GString *msg;
-
- if(!c->dump)
- return;
-
- /* check for the variable type */
- msg = g_string_new((char *)k);
- if (c->type == TYPE_STR) {
- g_string_append_printf(msg, " str %s", *c->ptr.s ? *c->ptr.s : " ");
- } else if(c->type == TYPE_INT) {
- g_string_append_printf(msg, " int %d", *c->ptr.i);
- } else if (c->type == TYPE_FLOAT) {
- g_string_append_printf(msg, " float %f", *c->ptr.f);
- }
- send_event(VARIABLE_SET, msg->str, NULL);
- g_string_free(msg, TRUE);
+ if(c->dump)
+ send_set_var_event(k, c);
}
void
@@ -1796,12 +1821,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_INT, getpid(), 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 */