/* associate command names to their properties */
typedef 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. */
enum ptr_type type;
union {
int *i;
/* ---------------------------------------------------------------------------------------------- */
{ "uri", PTR_V_STR(uzbl.state.uri, 1, cmd_load_uri)},
{ "verbose", PTR_V_INT(uzbl.state.verbose, 1, NULL)},
- { "mode", PTR_V_INT(uzbl.behave.mode, 0, NULL)},
{ "inject_html", PTR_V_STR(uzbl.behave.inject_html, 0, cmd_inject_html)},
- { "base_url", PTR_V_STR(uzbl.behave.base_url, 1, NULL)},
- { "html_endmarker", PTR_V_STR(uzbl.behave.html_endmarker, 1, NULL)},
- { "html_mode_timeout", PTR_V_INT(uzbl.behave.html_timeout, 1, NULL)},
{ "keycmd", PTR_V_STR(uzbl.state.keycmd, 1, set_keycmd)},
{ "status_message", PTR_V_STR(uzbl.gui.sbar.msg, 1, update_title)},
{ "show_status", PTR_V_INT(uzbl.behave.show_status, 1, cmd_set_status)},
/* 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) {
g_hash_table_destroy(uzbl.behave.commands);
}
-/* used for html_mode_timeout
- * be sure to extend this function to use
- * more timers if needed in other places
-*/
-void
-set_timeout(int seconds) {
- struct itimerval t;
- memset(&t, 0, sizeof t);
-
- t.it_value.tv_sec = seconds;
- t.it_value.tv_usec = 0;
- setitimer(ITIMER_REAL, &t, NULL);
-}
-
/* --- SIGNAL HANDLER --- */
void
exit(EXIT_SUCCESS);
}
-void
-catch_alrm(int s) {
- (void) s;
-
- set_var_value("mode", "0");
- render_html();
-}
-
-
/* --- CALLBACKS --- */
gboolean
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 -- */
return TRUE;
}
-void
-render_html() {
- Behaviour *b = &uzbl.behave;
-
- if(b->html_buffer->str) {
- webkit_web_view_load_html_string (uzbl.gui.web_view,
- b->html_buffer->str, b->base_url);
- g_string_free(b->html_buffer, TRUE);
- b->html_buffer = g_string_new("");
- }
-}
-
enum {M_CMD, M_HTML};
void
parse_cmd_line(const char *ctl_line, GString *result) {
- Behaviour *b = &uzbl.behave;
size_t len=0;
- if(b->mode == M_HTML) {
- len = strlen(b->html_endmarker);
- /* ctl_line has trailing '\n' so we check for strlen(ctl_line)-1 */
- if(len == strlen(ctl_line)-1 &&
- !strncmp(b->html_endmarker, ctl_line, len)) {
- set_timeout(0);
- set_var_value("mode", "0");
- render_html();
- return;
- }
- else {
- set_timeout(b->html_timeout);
- g_string_append(b->html_buffer, ctl_line);
- }
- }
- else if((ctl_line[0] == '#') /* Comments */
+ if((ctl_line[0] == '#') /* Comments */
|| (ctl_line[0] == ' ')
|| (ctl_line[0] == '\n'))
; /* ignore these lines */
if (event->type != GDK_KEY_PRESS ||
event->keyval == GDK_Page_Up ||
event->keyval == GDK_Page_Down ||
+ event->keyval == GDK_Home ||
+ event->keyval == GDK_End ||
event->keyval == GDK_Up ||
event->keyval == GDK_Down ||
event->keyval == GDK_Left ||
fprintf(stderr, "uzbl: error hooking SIGTERM\n");
if(setup_signal(SIGINT, catch_sigint) == SIG_ERR)
fprintf(stderr, "uzbl: error hooking SIGINT\n");
- if(setup_signal(SIGALRM, catch_alrm) == SIG_ERR)
- fprintf(stderr, "uzbl: error hooking SIGALARM\n");
uzbl.gui.sbar.progress_s = g_strdup("="); //TODO: move these to config.h
uzbl.gui.sbar.progress_u = g_strdup("ยท");
uzbl.gui.sbar.progress_w = 10;
- /* HTML mode defaults*/
- uzbl.behave.html_buffer = g_string_new("");
- uzbl.behave.html_endmarker = g_strdup(".");
- uzbl.behave.html_timeout = 60;
- uzbl.behave.base_url = g_strdup("http://invalid");
-
/* default mode indicators */
uzbl.behave.insert_indicator = g_strdup("I");
uzbl.behave.cmd_indicator = g_strdup("C");
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
- retrieve_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)