#include <errno.h>
#include <fcntl.h>
#include <signal.h>
+#include <assert.h>
#include <poll.h>
#include <sys/uio.h>
#include <sys/ioctl.h>
enum ptr_type {TYPE_INT, TYPE_STR, TYPE_FLOAT};
/* associate command names to their properties */
-typedef const struct {
- /* TODO: Make this ambiguous void **ptr into a union { char *char_p; int *int_p; float *float_p; } val;
- the PTR() macro is kind of preventing this change at the moment. */
+typedef struct {
enum ptr_type type;
union {
int *i;
/* construct a hash from the var_name_to_ptr array for quick access */
void
make_var_to_name_hash() {
- struct var_name_to_ptr_t *n2v_p = &var_name_to_ptr;
+ const struct var_name_to_ptr_t *n2v_p = var_name_to_ptr;
uzbl.comm.proto_var = g_hash_table_new(g_str_hash, g_str_equal);
while(n2v_p->name) {
- g_hash_table_insert(uzbl.comm.proto_var, n2v_p->name, (gpointer) &n2v_p->cp);
+ g_hash_table_insert(uzbl.comm.proto_var,
+ (gpointer) n2v_p->name,
+ (gpointer) &n2v_p->cp);
n2v_p++;
}
}
vend = strstr(s, "]@");
if(!vend) vend = strchr(s, '\0');
break;
+ /*@notreached@*/
+ case EXP_ERR:
+ break;
}
assert(vend);
if( (c = g_hash_table_lookup(uzbl.comm.proto_var, ret)) ) {
if(c->type == TYPE_STR && *c->ptr.s != NULL) {
g_string_append(buf, (gchar *)*c->ptr.s);
- } else if(c->type == TYPE_INT) {
+ }
+ else if(c->type == TYPE_INT) {
g_string_append_printf(buf, "%d", *c->ptr.i);
}
else if(c->type == TYPE_FLOAT) {
the above setting and we don't want to end up with
wrong geometry information
*/
- retreive_geometry();
+ retrieve_geometry();
}
void
{ "keycmd_nl", {keycmd_nl, TRUE} },
{ "keycmd_bs", {keycmd_bs, 0} },
{ "chain", {chain, 0} },
- { "print", {print, TRUE} }
+ { "print", {print, TRUE} },
+ { "update_gui", {update_gui, TRUE} }
};
void
uzbl.behave.commands = g_hash_table_new(g_str_hash, g_str_equal);
for (i = 0; i < LENGTH(cmdlist); i++)
- g_hash_table_insert(uzbl.behave.commands, cmdlist[i].key, &cmdlist[i].value);
+ g_hash_table_insert(uzbl.behave.commands, (gpointer) cmdlist[i].key, &cmdlist[i].value);
}
/* -- CORE FUNCTIONS -- */
}
void
+update_gui(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page; (void) argv; (void) result;
+
+ update_title();
+}
+
+void
print(WebKitWebView *page, GArray *argv, GString *result) {
(void) page; (void) result;
gchar* buf;
void
move_statusbar() {
+ if (!uzbl.gui.scrolled_win &&
+ !uzbl.gui.mainbar)
+ return;
+
gtk_widget_ref(uzbl.gui.scrolled_win);
gtk_widget_ref(uzbl.gui.mainbar);
gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.scrolled_win);
uzbl_cmdprop *c = NULL;
char *endp = NULL;
char *buf = NULL;
+ char *invalid_chars = "^°!\"§$%&/()=?'`'+~*'#-.:,;@<>| \\{}[]¹²³¼½";
if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) {
if(!c->writeable) return FALSE;
/* invoke a command specific function */
if(c->func) c->func();
+ } else {
+ /* check wether name violates our naming scheme */
+ if(strpbrk(name, invalid_chars)) {
+ if (uzbl.state.verbose)
+ printf("Invalid variable name\n");
+ return FALSE;
+ }
+
+ /* custom vars */
+ c = malloc(sizeof(uzbl_cmdprop));
+ c->type = TYPE_STR;
+ c->dump = 0;
+ c->func = NULL;
+ c->writeable = 1;
+ buf = expand(val, 0);
+ c->ptr.s = malloc(sizeof(char *));
+ *c->ptr.s = buf;
+ g_hash_table_insert(uzbl.comm.proto_var,
+ g_strdup(name), (gpointer) c);
}
return TRUE;
}
(void) window;
(void) event;
- retreive_geometry();
+ retrieve_geometry();
return FALSE;
}
}
void
-retreive_geometry() {
+retrieve_geometry() {
int w, h, x, y;
GString *buf = g_string_new("");
uzbl.gui.bar_h = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_h);
gtk_widget_set_scroll_adjustments ((GtkWidget*) uzbl.gui.web_view, uzbl.gui.bar_h, uzbl.gui.bar_v);
- if(uzbl.gui.geometry)
- cmd_set_geometry();
- else
- retreive_geometry();
+ /* Check uzbl is in window mode before getting/setting geometry */
+ if (uzbl.gui.main_window) {
+ if(uzbl.gui.geometry)
+ cmd_set_geometry();
+ else
+ retrieve_geometry();
+ }
gchar *uri_override = (uzbl.state.uri ? g_strdup(uzbl.state.uri) : NULL);
if (argc > 1 && !uzbl.state.uri)