aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands.c')
-rw-r--r--src/commands.c130
1 files changed, 121 insertions, 9 deletions
diff --git a/src/commands.c b/src/commands.c
index 85057b3..b3546a9 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -34,6 +34,7 @@ CommandInfo cmdlist[] =
{ "search_clear", search_clear, TRUE },
{ "dehilight", dehilight, 0 },
{ "set", set_var, TRUE },
+ { "toggle", toggle_var, 0 },
{ "dump_config", act_dump_config, 0 },
{ "dump_config_as_events", act_dump_config_as_events, 0 },
{ "chain", chain, 0 },
@@ -110,23 +111,25 @@ view_go_forward(WebKitWebView *page, GArray *argv, GString *result) {
void
toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result) {
- (void)argv; (void)result;
- webkit_web_view_set_full_content_zoom (page, !webkit_web_view_get_full_content_zoom (page));
+ (void)page; (void)argv; (void)result;
+
+ int current_type = get_zoom_type();
+ set_zoom_type(!current_type);
}
void
toggle_status (WebKitWebView* page, GArray *argv, GString *result) {
(void)page; (void)argv; (void)result;
- uzbl.behave.show_status = !uzbl.behave.show_status;
-
- set_show_status();
+ int current_status = get_show_status();
+ set_show_status(!current_status);
}
/*
* scroll vertical 20
* scroll vertical 20%
* scroll vertical -40
+ * scroll vertical 20!
* scroll vertical begin
* scroll vertical end
* scroll horizontal 10
@@ -175,6 +178,112 @@ set_var(WebKitWebView *page, GArray *argv, GString *result) {
g_strfreev(split);
}
+void
+toggle_var(WebKitWebView *page, GArray *argv, GString *result) {
+ (void) page; (void) result;
+
+ if(!argv_idx(argv, 0))
+ return;
+
+ const gchar *var_name = argv_idx(argv, 0);
+
+ uzbl_cmdprop *c = get_var_c(var_name);
+
+ if(!c) {
+ set_var_value(var_name, argv_idx(argv, 1));
+ return;
+ }
+
+ switch(c->type) {
+ case TYPE_STR:
+ {
+ const gchar *next;
+
+ if(argv->len >= 3) {
+ gchar *current = get_var_value_string_c(c);
+
+ guint i = 2;
+ const gchar *first = argv_idx(argv, 1);
+ const gchar *this = first;
+ next = argv_idx(argv, 2);
+
+ while(next && strcmp(current, this)) {
+ this = next;
+ next = argv_idx(argv, ++i);
+ }
+
+ if(!next)
+ next = first;
+
+ g_free(current);
+ } else
+ next = "";
+
+ set_var_value_string_c(c, next);
+ break;
+ }
+ case TYPE_INT:
+ {
+ int current = get_var_value_int_c(c);
+ int next;
+
+ if(argv->len >= 3) {
+ guint i = 2;
+
+ int first = strtoul(argv_idx(argv, 1), NULL, 10);
+ int this = first;
+
+ const gchar *next_s = argv_idx(argv, 2);
+
+ while(next_s && this != current) {
+ this = strtoul(next_s, NULL, 10);
+ next_s = argv_idx(argv, ++i);
+ }
+
+ if(next_s)
+ next = strtoul(next_s, NULL, 10);
+ else
+ next = first;
+ } else
+ next = !current;
+
+ set_var_value_int_c(c, next);
+ break;
+ }
+ case TYPE_FLOAT:
+ {
+ float current = get_var_value_float_c(c);
+ float next;
+
+ if(argv->len >= 3) {
+ guint i = 2;
+
+ float first = strtod(argv_idx(argv, 1), NULL);
+ float this = first;
+
+ const gchar *next_s = argv_idx(argv, 2);
+
+ while(next_s && this != current) {
+ this = strtod(next_s, NULL);
+ next_s = argv_idx(argv, ++i);
+ }
+
+ if(next_s)
+ next = strtod(next_s, NULL);
+ else
+ next = first;
+ } else
+ next = !current;
+
+ set_var_value_float_c(c, next);
+ break;
+ }
+ default:
+ g_assert_not_reached();
+ }
+
+ send_set_var_event(var_name, c);
+}
void
event(WebKitWebView *page, GArray *argv, GString *result) {
@@ -418,10 +527,13 @@ chain(WebKitWebView *page, GArray *argv, GString *result) {
void
close_uzbl (WebKitWebView *page, GArray *argv, GString *result) {
(void)page; (void)argv; (void)result;
- // hide window a soon as possible to avoid getting stuck with a
- // non-response window in the cleanup steps
- if (uzbl.gui.main_window)
- gtk_widget_destroy(uzbl.gui.main_window);
+ // hide window a soon as possible to avoid getting stuck with a
+ // non-response window in the cleanup steps
+ if (uzbl.gui.main_window)
+ gtk_widget_destroy(uzbl.gui.main_window);
+ else if (uzbl.gui.plug)
+ gtk_widget_destroy(GTK_WIDGET(uzbl.gui.plug));
+
gtk_main_quit ();
}