static gboolean
set_var_value(gchar *name, gchar *val) {
- void **p = NULL;
+ void *p = NULL;
+ uzbl_cmdprop *c = NULL;
char *endp = NULL;
- char *buf=NULL;
- if( (p = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) {
- if(var_is("status_message", name)
- || var_is("status_background", name)
- || var_is("status_format", name)
- || var_is("title_format_long", name)
- || var_is("title_format_short", name)
- || var_is("load_finish_handler", name)
- || var_is("load_start_handler", name)
- || var_is("load_commit_handler", name)
- || var_is("history_handler", name)
- || var_is("download_handler", name)
- || var_is("cookie_handler", name)) {
- if(*p)
- free(*p);
- *p = g_strdup(val);
- update_title();
- }
- else if(var_is("uri", name)) {
- if(*p) free(*p);
- *p = g_strdup(val);
- GArray *a = g_array_new(TRUE, FALSE, sizeof(gchar*));
- g_array_append_val(a, *p);
- load_uri(uzbl.gui.web_view, a);
- g_array_free(a, TRUE);
- }
- else if(var_is("proxy_url", name)) {
- if(*p) free(*p);
- *p = g_strdup(val);
- set_proxy_url();
- }
- else if(var_is("fifo_dir", name)) {
- if(*p) free(*p);
- *p = init_fifo(g_strdup(val));
- }
- else if(var_is("socket_dir", name)) {
- if(*p) free(*p);
- *p = init_socket(g_strdup(val));
- }
- else if(var_is("modkey", name)) {
- if(*p) free(*p);
- int i;
- *p = g_utf8_strup(val, -1);
- uzbl.behave.modmask = 0;
- for (i = 0; modkeys[i].key != NULL; i++) {
- if (g_strrstr(*p, modkeys[i].key))
- uzbl.behave.modmask |= modkeys[i].mask;
- }
- }
- else if(var_is("useragent", name)) {
- if(*p) free(*p);
- *p = set_useragent(g_strdup(val));
- }
- else if(var_is("shell_cmd", name)) {
- if(*p) free(*p);
- *p = g_strdup(val);
- }
- /* variables that take int values */
- else {
- int *ip = (int *)p;
+ if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) {
+ /* check for the variable type */
+ if (c->type == TYPE_STRING) {
+ free(*c->ptr);
+ *c->ptr = g_strdup(val);
+ } else if(c->type == TYPE_INT) {
+ int *ip = c->ptr;
*ip = (int)strtoul(val, &endp, 10);
-
- if(var_is("show_status", name)) {
- cmd_set_status();
- }
- else if(var_is("always_insert_mode", name)) {
- uzbl.behave.insert_mode =
- uzbl.behave.always_insert_mode ? TRUE : FALSE;
- update_title();
- }
- else if (var_is("max_conns", name)) {
- g_object_set(G_OBJECT(uzbl.net.soup_session),
- SOUP_SESSION_MAX_CONNS, uzbl.net.max_conns, NULL);
- }
- else if (var_is("max_conns_host", name)) {
- g_object_set(G_OBJECT(uzbl.net.soup_session),
- SOUP_SESSION_MAX_CONNS_PER_HOST, uzbl.net.max_conns_host, NULL);
- }
- else if (var_is("http_debug", name)) {
- //soup_session_remove_feature
- // (uzbl.net.soup_session, uzbl.net.soup_logger);
- soup_session_remove_feature
- (uzbl.net.soup_session, SOUP_SESSION_FEATURE(uzbl.net.soup_logger));
- /* do we leak if this doesn't get freed? why does it occasionally crash if freed? */
- /*g_free(uzbl.net.soup_logger);*/
-
- uzbl.net.soup_logger = soup_logger_new(uzbl.behave.http_debug, -1);
- soup_session_add_feature(uzbl.net.soup_session,
- SOUP_SESSION_FEATURE(uzbl.net.soup_logger));
- }
- else if (var_is("status_top", name)) {
- move_statusbar();
- }
- else if (var_is("default_font_size", name)) {
- WebKitWebSettings *ws = webkit_web_view_get_settings(uzbl.gui.web_view);
- g_object_set (G_OBJECT(ws), "default-font-size", *ip, NULL);
- }
- else if (var_is("minimum_font_size", name)) {
- WebKitWebSettings *ws = webkit_web_view_get_settings(uzbl.gui.web_view);
- g_object_set (G_OBJECT(ws), "minimum-font-size", *ip, NULL);
- }
}
+
+ /* invoke a command specific function */
+ if(c->func) c->func();
+
+ /* this will be removed as soon as we have converted to
+ * the callback interface
+ */
+ p = *c->ptr;
}
return TRUE;
}