From b2001631c3a8eb8ea141b9589927facd0674a731 Mon Sep 17 00:00:00 2001 From: keis Date: Fri, 25 Feb 2011 15:43:54 +0100 Subject: fix phantom scrollbars --- src/callbacks.c | 22 ++++++++++++++++------ src/callbacks.h | 3 +++ src/uzbl-core.c | 16 +++++++++------- src/uzbl-core.h | 2 -- 4 files changed, 28 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index d315a9e..a12d51c 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -339,15 +339,19 @@ cmd_javascript_windows() { void cmd_scrollbars_visibility() { if(uzbl.gui.scrollbars_visible) { - uzbl.gui.bar_h = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win)); - uzbl.gui.bar_v = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win)); + gtk_scrolled_window_set_policy ( + uzbl.gui.scrolled_win, + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC + ); } else { - uzbl.gui.bar_v = gtk_range_get_adjustment (GTK_RANGE (uzbl.gui.scbar_v)); - uzbl.gui.bar_h = gtk_range_get_adjustment (GTK_RANGE (uzbl.gui.scbar_h)); + gtk_scrolled_window_set_policy ( + uzbl.gui.scrolled_win, + GTK_POLICY_NEVER, + GTK_POLICY_NEVER + ); } - - set_webview_scroll_adjustments(); } /* requires webkit >=1.1.14 */ @@ -1042,4 +1046,10 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { } } +gboolean +scrollbars_policy_cb(WebKitWebView *view) { + (void) view; + return TRUE; +} + /* vi: set et ts=4: */ diff --git a/src/callbacks.h b/src/callbacks.h index 13cb83d..a026f46 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -216,3 +216,6 @@ scroll_vert_cb(GtkAdjustment *adjust, void *w); gboolean scroll_horiz_cb(GtkAdjustment *adjust, void *w); + +gboolean +scrollbars_policy_cb(WebKitWebView *view); diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 638dd1f..ef509a4 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1391,13 +1391,13 @@ update_title(void) { } } - void create_scrolled_win() { GUI* g = &uzbl.gui; g->web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); g->scrolled_win = gtk_scrolled_window_new(NULL, NULL); + WebKitWebFrame *wf = webkit_web_view_get_main_frame (g->web_view); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(g->scrolled_win), @@ -1432,6 +1432,10 @@ create_scrolled_win() { "signal::focus-in-event", (GCallback)focus_cb, NULL, "signal::focus-out-event", (GCallback)focus_cb, NULL, NULL); + + g_object_connect (G_OBJECT (wf), + "signal::scrollbars-policy-changed", (GCallback)scrollbars_policy_cb, NULL, + NULL); } @@ -1651,12 +1655,12 @@ set_webview_scroll_adjustments() { uzbl.gui.bar_h, uzbl.gui.bar_v); #endif - g_object_connect((GObject*)uzbl.gui.bar_v, + g_object_connect(G_OBJECT (uzbl.gui.bar_v), "signal::value-changed", (GCallback)scroll_vert_cb, NULL, "signal::changed", (GCallback)scroll_vert_cb, NULL, NULL); - g_object_connect((GObject*)uzbl.gui.bar_h, + g_object_connect(G_OBJECT (uzbl.gui.bar_h), "signal::value-changed", (GCallback)scroll_horiz_cb, NULL, "signal::changed", (GCallback)scroll_horiz_cb, NULL, NULL); @@ -1808,10 +1812,8 @@ main (int argc, char* argv[]) { } /* Scrolling */ - uzbl.gui.scbar_v = (GtkScrollbar*) gtk_vscrollbar_new (NULL); - uzbl.gui.bar_v = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_v); - uzbl.gui.scbar_h = (GtkScrollbar*) gtk_hscrollbar_new (NULL); - uzbl.gui.bar_h = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_h); + uzbl.gui.bar_h = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win)); + uzbl.gui.bar_v = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win)); set_webview_scroll_adjustments(); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 1285e3a..484f670 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -67,8 +67,6 @@ typedef struct { GtkWidget* mainbar_label_right; /* Scrolling */ - GtkScrollbar* scbar_v; /* Horizontal and Vertical Scrollbar */ - GtkScrollbar* scbar_h; /* (These are still hidden) */ GtkAdjustment* bar_v; /* Information about document length */ GtkAdjustment* bar_h; /* and scrolling position */ int scrollbars_visible; -- cgit v1.2.3 From 1a59b06c409d27f44e035b017f01a4325690e36a Mon Sep 17 00:00:00 2001 From: keis Date: Fri, 11 Mar 2011 23:17:27 +0100 Subject: fix warnings from not casting scrolled window --- src/callbacks.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 351d97e..bd50d81 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -347,14 +347,14 @@ void cmd_scrollbars_visibility() { if(uzbl.gui.scrollbars_visible) { gtk_scrolled_window_set_policy ( - uzbl.gui.scrolled_win, + GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); } else { gtk_scrolled_window_set_policy ( - uzbl.gui.scrolled_win, + GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), GTK_POLICY_NEVER, GTK_POLICY_NEVER ); -- cgit v1.2.3 From a6e1e09f9e6bf2ff0497b643eb3623065cbc841d Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sat, 12 Mar 2011 10:30:33 -0700 Subject: remove some duplicated code in scroll_cmd --- src/uzbl-core.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 4e1a7d8..5151171 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -464,30 +464,25 @@ scroll_cmd(WebKitWebView* page, GArray *argv, GString *result) { (void) page; (void) result; gchar *direction = g_array_index(argv, gchar*, 0); gchar *argv1 = g_array_index(argv, gchar*, 1); + GtkAdjustment *bar = NULL; if (g_strcmp0(direction, "horizontal") == 0) - { - if (g_strcmp0(argv1, "begin") == 0) - gtk_adjustment_set_value(uzbl.gui.bar_h, gtk_adjustment_get_lower(uzbl.gui.bar_h)); - else if (g_strcmp0(argv1, "end") == 0) - gtk_adjustment_set_value (uzbl.gui.bar_h, gtk_adjustment_get_upper(uzbl.gui.bar_h) - - gtk_adjustment_get_page_size(uzbl.gui.bar_h)); - else - scroll(uzbl.gui.bar_h, argv1); - } + bar = uzbl.gui.bar_h; else if (g_strcmp0(direction, "vertical") == 0) - { - if (g_strcmp0(argv1, "begin") == 0) - gtk_adjustment_set_value(uzbl.gui.bar_v, gtk_adjustment_get_lower(uzbl.gui.bar_v)); - else if (g_strcmp0(argv1, "end") == 0) - gtk_adjustment_set_value (uzbl.gui.bar_v, gtk_adjustment_get_upper(uzbl.gui.bar_v) - - gtk_adjustment_get_page_size(uzbl.gui.bar_v)); - else - scroll(uzbl.gui.bar_v, argv1); + bar = uzbl.gui.bar_v; + else { + if(uzbl.state.verbose) + puts("Unrecognized scroll format"); + return; } + + if (g_strcmp0(argv1, "begin") == 0) + gtk_adjustment_set_value(bar, gtk_adjustment_get_lower(bar)); + else if (g_strcmp0(argv1, "end") == 0) + gtk_adjustment_set_value (bar, gtk_adjustment_get_upper(bar) - + gtk_adjustment_get_page_size(bar)); else - if(uzbl.state.verbose) - puts("Unrecognized scroll format"); + scroll(bar, argv1); } -- cgit v1.2.3 From b7b8b4bd29d00c94e077b8ec70f795182f89e3ba Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sat, 12 Mar 2011 12:27:55 -0700 Subject: set_webview_scroll_adjustments is pointless now --- src/uzbl-core.c | 32 +++++++++----------------------- src/uzbl-core.h | 1 - 2 files changed, 9 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 5151171..c140140 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1644,28 +1644,6 @@ retrieve_geometry() { uzbl.gui.geometry = g_string_free(buf, FALSE); } -void -set_webview_scroll_adjustments() { -#if GTK_CHECK_VERSION(2,91,0) - gtk_scrollable_set_hadjustment (GTK_SCROLLABLE(uzbl.gui.web_view), uzbl.gui.bar_h); - gtk_scrollable_set_vadjustment (GTK_SCROLLABLE(uzbl.gui.web_view), uzbl.gui.bar_v); -#else - gtk_widget_set_scroll_adjustments (GTK_WIDGET (uzbl.gui.web_view), - uzbl.gui.bar_h, uzbl.gui.bar_v); -#endif - - g_object_connect(G_OBJECT (uzbl.gui.bar_v), - "signal::value-changed", (GCallback)scroll_vert_cb, NULL, - "signal::changed", (GCallback)scroll_vert_cb, NULL, - NULL); - - g_object_connect(G_OBJECT (uzbl.gui.bar_h), - "signal::value-changed", (GCallback)scroll_horiz_cb, NULL, - "signal::changed", (GCallback)scroll_horiz_cb, NULL, - NULL); -} - - /* Set up gtk, gobject, variable defaults and other things that tests and other * external applications need to do anyhow */ void @@ -1814,7 +1792,15 @@ main (int argc, char* argv[]) { uzbl.gui.bar_h = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win)); uzbl.gui.bar_v = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win)); - set_webview_scroll_adjustments(); + g_object_connect(G_OBJECT (uzbl.gui.bar_v), + "signal::value-changed", (GCallback)scroll_vert_cb, NULL, + "signal::changed", (GCallback)scroll_vert_cb, NULL, + NULL); + + g_object_connect(G_OBJECT (uzbl.gui.bar_h), + "signal::value-changed", (GCallback)scroll_horiz_cb, NULL, + "signal::changed", (GCallback)scroll_horiz_cb, NULL, + NULL); gchar *xwin = g_strdup_printf("%d", (int)uzbl.xwin); g_setenv("UZBL_XID", xwin, TRUE); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 897f68e..d8f8375 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -314,7 +314,6 @@ void dump_config(); void dump_config_as_events(); void retrieve_geometry(); -void set_webview_scroll_adjustments(); void event(WebKitWebView *page, GArray *argv, GString *result); void init_connect_socket(); gboolean remove_socket_from_array(GIOChannel *chan); -- cgit v1.2.3 From 5d65834753c2ba6ff8422b712d581f912a31dd73 Mon Sep 17 00:00:00 2001 From: Jake Probst Date: Sat, 23 Apr 2011 21:52:47 -0700 Subject: fixed a bug where when opening a new window it would fully load the page before sending the NEW_WINDOW event --- src/callbacks.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 360b0c4..de814a3 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -750,10 +750,11 @@ request_starting_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitWebRes } void -create_web_view_js2_cb (WebKitWebView* web_view, GParamSpec param_spec) { +create_web_view_js_cb (WebKitWebView* web_view, GParamSpec param_spec) { (void) web_view; (void) param_spec; + webkit_web_view_stop_loading(web_view); const gchar* uri = webkit_web_view_get_uri(web_view); if (strncmp(uri, "javascript:", strlen("javascript:")) == 0) { @@ -764,18 +765,6 @@ create_web_view_js2_cb (WebKitWebView* web_view, GParamSpec param_spec) { send_event(NEW_WINDOW, NULL, TYPE_STR, uri, NULL); } - -gboolean -create_web_view_js_cb (WebKitWebView* web_view, gpointer user_data) { - (void) web_view; - (void) user_data; - - g_object_connect (web_view, "signal::notify::uri", - G_CALLBACK(create_web_view_js2_cb), NULL, NULL); - return TRUE; -} - - /*@null@*/ WebKitWebView* create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data) { (void) web_view; @@ -787,8 +776,8 @@ create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer us WebKitWebView* new_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); - g_signal_connect (new_view, "web-view-ready", - G_CALLBACK(create_web_view_js_cb), NULL); + g_object_connect (new_view, "signal::notify::uri", + G_CALLBACK(create_web_view_js_cb), NULL, NULL); return new_view; } -- cgit v1.2.3 From d0b919ed5fb7fd42f6f4851443790e5c87116128 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sun, 24 Apr 2011 00:48:53 -0600 Subject: allow processes other than uzbl-tabbed to start uzbl-browser instances that appear in -tabbed not entirely sure that this is useful yet. --- bin/uzbl-tabbed | 47 ++++++++++++++++++++++++++++++++--------------- src/uzbl-core.c | 8 ++++++-- src/uzbl-core.h | 1 + 3 files changed, 39 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/bin/uzbl-tabbed b/bin/uzbl-tabbed index a15967a..d63d6de 100755 --- a/bin/uzbl-tabbed +++ b/bin/uzbl-tabbed @@ -303,12 +303,13 @@ class SocketClient: # List of UzblInstance objects not already linked with a SocketClient instances_queue = {} - def __init__(self, socket): + def __init__(self, socket, uzbl_tabbed): self._buffer = "" self._socket = socket self._watchers = [io_add_watch(socket, IO_IN, self._socket_recv),\ io_add_watch(socket, IO_HUP, self._socket_closed)] self.uzbl = None + self.uzbl_tabbed = uzbl_tabbed def _socket_recv(self, fd, condition): @@ -341,13 +342,17 @@ class SocketClient: if cmd: self.uzbl.parse_command(cmd) else: - name = re.findall('^EVENT \[(\d+-\d+)\] INSTANCE_START \d+$', self._buffer, re.M) + name = re.findall('^EVENT \[([^]]+)\] INSTANCE_START \d+$', self._buffer, re.M) uzbl = self.instances_queue.get(name[0]) if uzbl: + # we've found the uzbl we were waiting for del self.instances_queue[name[0]] - self.uzbl = uzbl - self.uzbl.got_socket(self) - self._feed("") + else: + # an unsolicited uzbl has connected, how exciting! + uzbl = UzblInstance(self.uzbl_tabbed, None, '', '', False) + self.uzbl = uzbl + self.uzbl.got_socket(self) + self._feed("") def send(self, data): '''Child socket send function.''' @@ -376,6 +381,12 @@ class EventDispatcher: return method(*args) + def plug_created(self, plug_id): + if not self.uzbl.tab: + tab = self.parent.create_tab() + tab.add_id(int(plug_id)) + self.uzbl.set_tab(tab) + def title_changed(self, title): self.uzbl.title = title.strip() self.uzbl.title_changed(False) @@ -477,10 +488,10 @@ class EventDispatcher: class UzblInstance: '''Uzbl instance meta-data/meta-action object.''' - def __init__(self, parent, tab, name, uri, title, switch): + def __init__(self, parent, name, uri, title, switch): self.parent = parent - self.tab = tab + self.tab = None self.dispatcher = EventDispatcher(self) self.name = name @@ -490,8 +501,11 @@ class UzblInstance: self._client = None self._switch = switch # Switch to tab after loading ? - self.title_changed() + def set_tab(self, tab): + self.tab = tab + self.title_changed() + self.parent.tabs[self.tab] = self def got_socket(self, client): '''Uzbl instance is now connected''' @@ -763,7 +777,7 @@ class UzblTabbed: '''A new uzbl instance was created''' client, _ = sock.accept() - self.clients[client] = SocketClient(client) + self.clients[client] = SocketClient(client, self) return True @@ -1045,6 +1059,12 @@ class UzblTabbed: return False + def create_tab(self, next = False): + tab = gtk.Socket() + tab.show() + self.notebook.insert_page(tab, position=next and self.notebook.get_current_page() + 1 or -1) + self.notebook.set_tab_reorderable(tab, True) + return tab def new_tab(self, uri='', title='', switch=None, next=False): '''Add a new tab to the notebook and start a new instance of uzbl. @@ -1052,10 +1072,7 @@ class UzblTabbed: when you need to load multiple tabs at a time (I.e. like when restoring a session from a file).''' - tab = gtk.Socket() - tab.show() - self.notebook.insert_page(tab, position=next and self.notebook.get_current_page() + 1 or -1) - self.notebook.set_tab_reorderable(tab, True) + tab = self.create_tab(next) sid = tab.get_id() uri = uri.strip() name = "%d-%d" % (os.getpid(), self.next_pid()) @@ -1070,9 +1087,9 @@ class UzblTabbed: '--connect-socket', self.socket_path, '--uri', str(uri)] gobject.spawn_async(cmd, flags=gobject.SPAWN_SEARCH_PATH) - uzbl = UzblInstance(self, tab, name, uri, title, switch) + uzbl = UzblInstance(self, name, uri, title, switch) + uzbl.set_tab(tab) SocketClient.instances_queue[name] = uzbl - self.tabs[tab] = uzbl def clean_slate(self): diff --git a/src/uzbl-core.c b/src/uzbl-core.c index c095a7f..e461a4c 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -51,8 +51,11 @@ GOptionEntry entries[] = { "Name of the current instance (defaults to Xorg window id or random for GtkSocket mode)", "NAME" }, { "config", 'c', 0, G_OPTION_ARG_STRING, &uzbl.state.config_file, "Path to config file or '-' for stdin", "FILE" }, + /* TODO: explain the difference between these two options */ { "socket", 's', 0, G_OPTION_ARG_INT, &uzbl.state.socket_id, - "Xembed Socket ID", "SOCKET" }, + "Xembed socket ID, this window should embed itself", "SOCKET" }, + { "embed", 'e', 0, G_OPTION_ARG_NONE, &uzbl.state.embed, + "Whether this window should expect to be embedded", NULL }, { "connect-socket", 0, 0, G_OPTION_ARG_STRING_ARRAY, &uzbl.state.connect_socket_names, "Connect to server socket for event managing", "CSOCKET" }, { "print-events", 'p', 0, G_OPTION_ARG_NONE, &uzbl.state.events_stdout, @@ -1540,6 +1543,7 @@ create_window() { GtkPlug* create_plug() { + if(uzbl.state.embed) uzbl.state.socket_id = 0; GtkPlug* plug = GTK_PLUG (gtk_plug_new (uzbl.state.socket_id)); g_signal_connect (G_OBJECT (plug), "destroy", G_CALLBACK (destroy_cb), NULL); g_signal_connect (G_OBJECT (plug), "key-press-event", G_CALLBACK (key_press_cb), NULL); @@ -1746,7 +1750,7 @@ initialize(int argc, char** argv) { } /* Embedded mode */ - if (uzbl.state.socket_id) + if (uzbl.state.socket_id || uzbl.state.embed) uzbl.state.plug_mode = TRUE; if (!g_thread_supported()) diff --git a/src/uzbl-core.h b/src/uzbl-core.h index be8fccd..07b6f99 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -109,6 +109,7 @@ typedef struct { gchar* executable_path; gchar* searchtx; gboolean verbose; + gboolean embed; GdkEventButton* last_button; gchar* last_result; gboolean plug_mode; -- cgit v1.2.3 From 753ca2800d0efb975d0ccd6450102d566941550c Mon Sep 17 00:00:00 2001 From: keis Date: Fri, 29 Apr 2011 20:29:14 +0200 Subject: add focus and blur events from DOM --- src/callbacks.c | 26 ++++++++++++++++++++++++++ src/callbacks.h | 10 ++++++++++ src/events.c | 4 +++- src/events.h | 1 + src/uzbl-core.c | 1 + 5 files changed, 41 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 6821700..c956f1b 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -1062,4 +1062,30 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { } } +void +window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, + JSGlobalContextRef *context, JSObjectRef *object) { + // Take this opportunity to set some callbacks on the DOM + WebKitDOMDocument *document = webkit_web_view_get_dom_document (webview); + webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document), + "focus", G_CALLBACK(dom_focus_cb), TRUE, NULL); + webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document), + "blur", G_CALLBACK(dom_focus_cb), TRUE, NULL); +} + +void +dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) { + WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); + gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); + send_event (FOCUS_ELEMENT, NULL, TYPE_STR, name, NULL); +} + +void +dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) { + WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); + gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); + send_event (BLUR_ELEMENT, NULL, TYPE_STR, name, NULL); +} + + /* vi: set et ts=4: */ diff --git a/src/callbacks.h b/src/callbacks.h index d34b9fa..834ed65 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -222,3 +222,13 @@ scroll_vert_cb(GtkAdjustment *adjust, void *w); gboolean scroll_horiz_cb(GtkAdjustment *adjust, void *w); + +void +window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, + JSGlobalContextRef *context, JSObjectRef *object); + +void +dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data); + +void +dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data); diff --git a/src/events.c b/src/events.c index 62d6414..05c3da6 100644 --- a/src/events.c +++ b/src/events.c @@ -54,7 +54,9 @@ const char *event_table[LAST_EVENT] = { "DOWNLOAD_PROGRESS", "DOWNLOAD_COMPLETE", "ADD_COOKIE" , - "DELETE_COOKIE" + "DELETE_COOKIE" , + "FOCUS_ELEMENT" , + "BLUR_ELEMENT" }; void diff --git a/src/events.h b/src/events.h index 0c40206..60ea8df 100644 --- a/src/events.h +++ b/src/events.h @@ -25,6 +25,7 @@ enum event_type { PTR_MOVE, SCROLL_VERT, SCROLL_HORIZ, DOWNLOAD_STARTED, DOWNLOAD_PROGRESS, DOWNLOAD_COMPLETE, ADD_COOKIE, DELETE_COOKIE, + FOCUS_ELEMENT, BLUR_ELEMENT, /* must be last entry */ LAST_EVENT diff --git a/src/uzbl-core.c b/src/uzbl-core.c index e461a4c..118c6da 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1479,6 +1479,7 @@ create_scrolled_win() { "signal::populate-popup", (GCallback)populate_popup_cb, NULL, "signal::focus-in-event", (GCallback)focus_cb, NULL, "signal::focus-out-event", (GCallback)focus_cb, NULL, + "signal::window-object-cleared", (GCallback)window_object_cleared_cb,NULL, NULL); } -- cgit v1.2.3 From a4309567b41b24174632319ab700de5c65c6debb Mon Sep 17 00:00:00 2001 From: keis Date: Fri, 29 Apr 2011 21:02:52 +0200 Subject: git rid of unused warning --- src/callbacks.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index c956f1b..fba4b77 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -1065,6 +1065,7 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { void window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, JSGlobalContextRef *context, JSObjectRef *object) { + (void) frame; (void) context; (void) object; // Take this opportunity to set some callbacks on the DOM WebKitDOMDocument *document = webkit_web_view_get_dom_document (webview); webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document), @@ -1075,6 +1076,7 @@ window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, void dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) { + (void) target; (void) user_data; WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); send_event (FOCUS_ELEMENT, NULL, TYPE_STR, name, NULL); @@ -1082,6 +1084,7 @@ dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_ void dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) { + (void) target; (void) user_data; WebKitDOMEventTarget *etarget = webkit_dom_event_get_target (event); gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); send_event (BLUR_ELEMENT, NULL, TYPE_STR, name, NULL); -- cgit v1.2.3 From cb839c2f1c1bdd360ae51ac1cce98cdbae0de796 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sat, 30 Apr 2011 08:31:51 -0600 Subject: cmd_scrollbars_visibility: don't repeat yourself. --- src/callbacks.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index bce399f..fbd5968 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -348,20 +348,9 @@ cmd_javascript_windows() { void cmd_scrollbars_visibility() { - if(uzbl.gui.scrollbars_visible) { - gtk_scrolled_window_set_policy ( - GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC - ); - } - else { - gtk_scrolled_window_set_policy ( - GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), - GTK_POLICY_NEVER, - GTK_POLICY_NEVER - ); - } + GtkPolicyType policy = uzbl.gui.scrollbars_visible ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER; + + gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), policy, policy ); } /* requires webkit >=1.1.14 */ -- cgit v1.2.3 From 1509787676376447ca7ec41b15ff85ff90f0d842 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sat, 30 Apr 2011 08:34:38 -0600 Subject: GTK3 always has scrollbars, workaround for https://bugs.webkit.org/show_bug.cgi?id=59197 :( --- README | 3 ++- src/uzbl-core.c | 16 +++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/README b/README index 08c6356..7c5a673 100644 --- a/README +++ b/README @@ -319,7 +319,8 @@ file). * `socket_dir`: location to store sockets. * `http_debug`: HTTP debug mode (value 0-3). * `scrollbars_visible`: set to 1 to have GTK scrollbars if the document - doesn't fit into the window (defaults to 0) + doesn't fit into the window (defaults to 0). (Note: This option does nothing + on GTK3 due to ) * `javascript_windows`: Whether javascript can open windows automatically * `shell_cmd`: Alias which will be expanded to use shell commands (eg `sh -c`). * `print_events`: show events on stdout diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 56d2f86..0dbff4f 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -137,7 +137,10 @@ const struct var_name_to_ptr_t { { "current_encoding", PTR_V_STR(uzbl.behave.current_encoding, 1, set_current_encoding)}, { "enforce_96_dpi", PTR_V_INT(uzbl.behave.enforce_96dpi, 1, cmd_enforce_96dpi)}, { "caret_browsing", PTR_V_INT(uzbl.behave.caret_browsing, 1, cmd_caret_browsing)}, + +#if !GTK_CHECK_VERSION(3,0,0) { "scrollbars_visible", PTR_V_INT(uzbl.gui.scrollbars_visible, 1, cmd_scrollbars_visibility)}, +#endif /* constants (not dumpable or writeable) */ { "WEBKIT_MAJOR", PTR_C_INT(uzbl.info.webkit_major, NULL)}, @@ -1254,8 +1257,7 @@ parse_command(const char *cmd, const char *params, GString *result) { void move_statusbar() { - if (!uzbl.gui.scrolled_win && - !uzbl.gui.mainbar) + if (!uzbl.gui.scrolled_win && !uzbl.gui.mainbar) return; g_object_ref(uzbl.gui.scrolled_win); @@ -1442,11 +1444,11 @@ create_scrolled_win() { g->scrolled_win = gtk_scrolled_window_new(NULL, NULL); WebKitWebFrame *wf = webkit_web_view_get_main_frame (g->web_view); - gtk_scrolled_window_set_policy( - GTK_SCROLLED_WINDOW(g->scrolled_win), - GTK_POLICY_NEVER, - GTK_POLICY_NEVER - ); +#if !GTK_CHECK_VERSION(3,0,0) + /* hide the scrollbars by default */ + uzbl.gui.scrollbars_visible = 0; + cmd_scrollbars_visibility(); +#endif gtk_container_add( GTK_CONTAINER(g->scrolled_win), -- cgit v1.2.3 From ee295737c61f27b66002f634e64e5a7447532cc7 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sat, 30 Apr 2011 08:45:27 -0600 Subject: fix compiler warnings --- src/cookie-jar.c | 2 +- src/uzbl-core.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/cookie-jar.c b/src/cookie-jar.c index bc7d022..c2ccd62 100644 --- a/src/cookie-jar.c +++ b/src/cookie-jar.c @@ -43,7 +43,7 @@ changed(SoupCookieJar *jar, SoupCookie *old_cookie, SoupCookie *new_cookie) { gchar *expires = NULL; if(cookie->expires) - expires = g_strdup_printf ("%d", soup_date_to_time_t (cookie->expires)); + expires = g_strdup_printf ("%ld", (long)soup_date_to_time_t (cookie->expires)); send_event (new_cookie ? ADD_COOKIE : DELETE_COOKIE, NULL, TYPE_STR, cookie->domain, diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 0dbff4f..046f596 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -754,7 +754,7 @@ download(WebKitWebView *web_view, GArray *argv, GString *result) { WebKitNetworkRequest *req = webkit_network_request_new(uri); WebKitDownload *download = webkit_download_new(req); - download_cb(web_view, download, destination); + download_cb(web_view, download, (gpointer)destination); if(webkit_download_get_destination_uri(download)) webkit_download_start(download); @@ -1526,7 +1526,7 @@ create_window() { gtk_window_set_title(GTK_WINDOW(window), "Uzbl browser"); #if GTK_CHECK_VERSION(3,0,0) - gtk_window_set_has_resize_grip (window, FALSE); + gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE); #endif /* if the window has been made small, it shouldn't try to resize itself due @@ -1912,7 +1912,7 @@ main (int argc, char* argv[]) { if (uzbl.state.verbose) { printf("Uzbl start location: %s\n", argv[0]); if (uzbl.state.socket_id) - printf("plug_id %i\n", gtk_plug_get_id(uzbl.gui.plug)); + printf("plug_id %i\n", (int)gtk_plug_get_id(uzbl.gui.plug)); else printf("window_id %i\n",(int) uzbl.xwin); printf("pid %i\n", getpid ()); -- cgit v1.2.3 From 8d921bdd751a96978b717e0a6088d07e09bc243a Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sun, 1 May 2011 09:19:06 -0600 Subject: load_error_cb should return gboolean --- src/callbacks.c | 4 +++- src/callbacks.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index fbd5968..3c0eaba 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -471,7 +471,7 @@ load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec) { } } -void +gboolean load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud) { (void) page; (void) frame; (void) ud; GError *err = web_err; @@ -481,6 +481,8 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer TYPE_INT, err->code, TYPE_STR, err->message, NULL); + + return FALSE; } void diff --git a/src/callbacks.h b/src/callbacks.h index 6b76ee6..20eaa92 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -157,7 +157,7 @@ progress_change_cb (WebKitWebView* web_view, GParamSpec param_spec); void load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec); -void +gboolean load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud); void -- cgit v1.2.3 From 76033ba05cad1a2ce720b9b22b3b3f57626ff308 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sun, 1 May 2011 09:48:58 -0600 Subject: cleaned up the set_proxy_url function --- src/callbacks.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 3c0eaba..fe6b8fd 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -12,21 +12,17 @@ void set_proxy_url() { - SoupURI *suri; + const gchar *url = uzbl.net.proxy_url; + SoupSession *session = uzbl.net.soup_session; + SoupURI *soup_uri = NULL; - if (uzbl.net.proxy_url == NULL || *uzbl.net.proxy_url == ' ') { - soup_session_remove_feature_by_type(uzbl.net.soup_session, - (GType) SOUP_SESSION_PROXY_URI); - } - else { - suri = soup_uri_new(uzbl.net.proxy_url); - g_object_set(G_OBJECT(uzbl.net.soup_session), - SOUP_SESSION_PROXY_URI, - suri, NULL); - soup_uri_free(suri); - } + if (url != NULL || *url != 0 || *url != ' ') + soup_uri = soup_uri_new(url); - return; + g_object_set(G_OBJECT(session), SOUP_SESSION_PROXY_URI, soup_uri, NULL); + + if(soup_uri) + soup_uri_free(soup_uri); } -- cgit v1.2.3 From 8df89f9e6dfaef530befdbde1bd026692136d2d3 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Mon, 9 May 2011 06:44:28 +0200 Subject: ignore mod2. mostly unneeded and breaks keybinds --- src/events.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/events.c b/src/events.c index 62d6414..8f8b72a 100644 --- a/src/events.c +++ b/src/events.c @@ -217,8 +217,10 @@ get_modifier_mask(guint state) { g_string_append(modifiers, "Ctrl|"); if(state & GDK_MOD1_MASK) g_string_append(modifiers,"Mod1|"); + /* Mod2 is usually Num_Luck. Ignore it as it messes up keybindings. if(state & GDK_MOD2_MASK) g_string_append(modifiers,"Mod2|"); + */ if(state & GDK_MOD3_MASK) g_string_append(modifiers,"Mod3|"); if(state & GDK_MOD4_MASK) -- cgit v1.2.3 From c0bbabfef810b3976705bd1a384ff31735479ff0 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Mon, 9 May 2011 07:04:12 +0200 Subject: wrap DOM callbacks in version check --- src/callbacks.c | 7 ++++++- src/callbacks.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index fba4b77..3448a20 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -1066,14 +1066,19 @@ void window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, JSGlobalContextRef *context, JSObjectRef *object) { (void) frame; (void) context; (void) object; +#if WEBKIT_CHECK_VERSION (1, 3, 13) // Take this opportunity to set some callbacks on the DOM WebKitDOMDocument *document = webkit_web_view_get_dom_document (webview); webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document), "focus", G_CALLBACK(dom_focus_cb), TRUE, NULL); webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (document), "blur", G_CALLBACK(dom_focus_cb), TRUE, NULL); +#else + (void) webview; +#endif } +#if WEBKIT_CHECK_VERSION (1, 3, 13) void dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data) { (void) target; (void) user_data; @@ -1089,6 +1094,6 @@ dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_d gchar* name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (etarget)); send_event (BLUR_ELEMENT, NULL, TYPE_STR, name, NULL); } - +#endif /* vi: set et ts=4: */ diff --git a/src/callbacks.h b/src/callbacks.h index 834ed65..9ad754a 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -227,8 +227,10 @@ void window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, JSGlobalContextRef *context, JSObjectRef *object); +#if WEBKIT_CHECK_VERSION (1, 3, 13) void dom_focus_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data); void dom_blur_cb(WebKitDOMEventTarget *target, WebKitDOMEvent *event, gpointer user_data); +#endif -- cgit v1.2.3 From 44b97f68f3e14f65a21d9c13d6ee50a2112be9c8 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Mon, 9 May 2011 08:24:04 -0600 Subject: dear uzbl, please listen to the user when they tell you what size to be. --- src/uzbl-core.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 046f596..8cfef55 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1529,11 +1529,10 @@ create_window() { gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE); #endif - /* if the window has been made small, it shouldn't try to resize itself due - * to a long statusbar. */ + /* the window should never make itself bigger. */ GdkGeometry hints; - hints.min_height = -1; - hints.min_width = 1; + hints.min_height = 1; + hints.min_width = 1; gtk_window_set_geometry_hints (GTK_WINDOW (window), window, &hints, GDK_HINT_MIN_SIZE); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL); -- cgit v1.2.3 From b6b5e6a7cbd114b11974c1b29d6075ab6993a49f Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Tue, 10 May 2011 22:34:43 -0600 Subject: have another shot at fixing window geometry hint issues, thanks stinky --- src/uzbl-core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index eeae2ec..41c75a0 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1531,10 +1531,10 @@ create_window() { #endif /* the window should never make itself bigger. */ - GdkGeometry hints; + GdkGeometry hints = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; hints.min_height = 1; hints.min_width = 1; - gtk_window_set_geometry_hints (GTK_WINDOW (window), window, &hints, GDK_HINT_MIN_SIZE); + gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL, &hints, GDK_HINT_MIN_SIZE); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL); g_signal_connect (G_OBJECT (window), "configure-event", G_CALLBACK (configure_event_cb), NULL); -- cgit v1.2.3 From 6672b88cf8c02fe2d03b15780996a75a6158ff0a Mon Sep 17 00:00:00 2001 From: keis Date: Sun, 15 May 2011 00:26:34 +0200 Subject: Check if file exist before trying to run it find_existing_file modified to return NULL when file does not exist even for simple paths. run_external_js and spawn prints error messages when a file could not be loaded. --- src/util.c | 2 +- src/uzbl-core.c | 43 +++++++++++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/util.c b/src/util.c index 8f6c349..42ae39e 100644 --- a/src/util.c +++ b/src/util.c @@ -134,7 +134,7 @@ find_existing_file(const gchar* path_list) { char *basename = strrchr(path_list_dup, ':'); if(!basename) - return path_list_dup; + return file_exists(path_list_dup) ? path_list_dup : NULL; basename[0] = '\0'; basename++; diff --git a/src/uzbl-core.c b/src/uzbl-core.c index e498762..1820623 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -847,27 +847,36 @@ void run_external_js (WebKitWebView * web_view, GArray *argv, GString *result) { (void) result; gchar *path = NULL; + GError *error = NULL; - if (argv_idx(argv, 0) && - ((path = find_existing_file(argv_idx(argv, 0)))) ) { + if (!argv_idx(argv, 0)) + return; + + path = find_existing_file(argv_idx(argv, 0)); + if(path) { gchar *file_contents = NULL; - GIOChannel *chan = g_io_channel_new_file(path, "r", NULL); + GIOChannel *chan = g_io_channel_new_file(path, "r", &error); if (chan) { gsize len; g_io_channel_read_to_end(chan, &file_contents, &len, NULL); g_io_channel_unref (chan); - } - if (uzbl.state.verbose) - printf ("External JavaScript file %s loaded\n", argv_idx(argv, 0)); + if (uzbl.state.verbose) + printf ("External JavaScript file %s loaded\n", argv_idx(argv, 0)); - gchar *js = str_replace("%s", argv_idx (argv, 1) ? argv_idx (argv, 1) : "", file_contents); - g_free (file_contents); + gchar *js = str_replace("%s", argv_idx (argv, 1) ? argv_idx (argv, 1) : "", file_contents); + g_free (file_contents); - eval_js (web_view, js, result, path); - g_free (js); + eval_js (web_view, js, result, path); + g_free (js); + } else { + g_printerr ("Failed to open External Javascript file %s: %s\n", path, error->message); + g_error_free (error); + } g_free(path); + } else { + g_printerr ("External JavaScript file %s not found\n", argv_idx(argv, 0)); } } @@ -1040,12 +1049,16 @@ split_quoted(const gchar* src, const gboolean unquote) { void spawn(GArray *argv, GString *result, gboolean exec) { gchar *path = NULL; - gchar *arg_car = argv_idx(argv, 0); - const gchar **arg_cdr = &g_array_index(argv, const gchar *, 1); - if (arg_car && (path = find_existing_file(arg_car))) { + if (!argv_idx(argv, 0)) + return; + + const gchar **args = &g_array_index(argv, const gchar *, 1); + + path = find_existing_file(argv_idx(argv, 0)); + if(path) { gchar *r = NULL; - run_command(path, arg_cdr, result != NULL, result ? &r : NULL); + run_command(path, args, result != NULL, result ? &r : NULL); if(result) { g_string_assign(result, r); // run each line of output from the program as a command @@ -1061,6 +1074,8 @@ spawn(GArray *argv, GString *result, gboolean exec) { } g_free(r); g_free(path); + } else { + g_printerr ("Failed to spawn child process: %s not found\n", argv_idx(argv, 0)); } } -- cgit v1.2.3 From 4a3c40a64537b1673d6619b8c200432ea807842d Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Thu, 19 May 2011 12:34:24 -0400 Subject: add key-press/-release handlers to the status bar labels. fixes #262. --- src/uzbl-core.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 41c75a0..3709a56 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1492,28 +1492,39 @@ create_mainbar() { g->mainbar = gtk_hbox_new (FALSE, 0); - /* Left panel */ + /* create left panel */ g->mainbar_label_left = gtk_label_new (""); gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_left), TRUE); gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_left), 0, 0); gtk_misc_set_padding (GTK_MISC(g->mainbar_label_left), 2, 2); - gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_left, FALSE, FALSE, 0); - - /* Right panel */ + /* create right panel */ g->mainbar_label_right = gtk_label_new (""); gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_right), TRUE); gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_right), 1, 0); gtk_misc_set_padding (GTK_MISC(g->mainbar_label_right), 2, 2); gtk_label_set_ellipsize(GTK_LABEL(g->mainbar_label_right), PANGO_ELLIPSIZE_START); - gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_right, TRUE, TRUE, 0); + /* add the labels to the mainbar */ + gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_left, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_right, TRUE, TRUE, 0); + /* set up signal handlers */ g_object_connect((GObject*)g->mainbar, "signal::key-press-event", (GCallback)key_press_cb, NULL, "signal::key-release-event", (GCallback)key_release_cb, NULL, NULL); + g_object_connect((GObject*)g->mainbar_label_left, + "signal::key-press-event", (GCallback)key_press_cb, NULL, + "signal::key-release-event", (GCallback)key_release_cb, NULL, + NULL); + + g_object_connect((GObject*)g->mainbar_label_right, + "signal::key-press-event", (GCallback)key_press_cb, NULL, + "signal::key-release-event", (GCallback)key_release_cb, NULL, + NULL); + return g->mainbar; } -- cgit v1.2.3 From f5a41502f52ad3e26f5d5a11d58869cf37f12e7b Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Fri, 20 May 2011 10:37:40 -0400 Subject: moved load_uri_imp into cmd_load_uri (the only place it was used) --- src/callbacks.c | 41 ++++++++++++++++++++++++++++++++++++++++- src/uzbl-core.c | 43 ------------------------------------------- src/uzbl-core.h | 1 - 3 files changed, 40 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 853edb2..7830032 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -112,7 +112,46 @@ cmd_set_status() { void cmd_load_uri() { - load_uri_imp (uzbl.state.uri); + const gchar *uri = uzbl.state.uri; + + GString* newuri; + SoupURI* soup_uri; + + /* Strip leading whitespaces */ + while (*uri) { + if (!isspace(*uri)) break; + uri++; + } + + if (g_strstr_len (uri, 11, "javascript:") != NULL) { + eval_js(uzbl.gui.web_view, uri, NULL, "javascript:"); + return; + } + + newuri = g_string_new (uri); + soup_uri = soup_uri_new(uri); + + if (!soup_uri) { + gchar* fullpath; + if (g_path_is_absolute (newuri->str)) + fullpath = newuri->str; + else { + gchar* wd = g_get_current_dir (); + fullpath = g_build_filename (wd, newuri->str, NULL); + g_free(wd); + } + struct stat stat_result; + if (! g_stat(fullpath, &stat_result)) + g_string_printf (newuri, "file://%s", fullpath); + else + g_string_prepend (newuri, "http://"); + } else { + soup_uri_free(soup_uri); + } + + /* if we do handle cookies, ask our handler for them */ + webkit_web_view_load_uri (uzbl.gui.web_view, newuri->str); + g_string_free (newuri, TRUE); } void diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 3709a56..d349ca4 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1776,49 +1776,6 @@ initialize(int argc, char** argv) { } -void -load_uri_imp(gchar *uri) { - GString* newuri; - SoupURI* soup_uri; - - /* Strip leading whitespaces */ - while (*uri) { - if (!isspace(*uri)) break; - uri++; - } - - if (g_strstr_len (uri, 11, "javascript:") != NULL) { - eval_js(uzbl.gui.web_view, uri, NULL, "javascript:"); - return; - } - - newuri = g_string_new (uri); - soup_uri = soup_uri_new(uri); - - if (!soup_uri) { - gchar* fullpath; - if (g_path_is_absolute (newuri->str)) - fullpath = newuri->str; - else { - gchar* wd = g_get_current_dir (); - fullpath = g_build_filename (wd, newuri->str, NULL); - g_free(wd); - } - struct stat stat_result; - if (! g_stat(fullpath, &stat_result)) - g_string_printf (newuri, "file://%s", fullpath); - else - g_string_prepend (newuri, "http://"); - } else { - soup_uri_free(soup_uri); - } - - /* if we do handle cookies, ask our handler for them */ - webkit_web_view_load_uri (uzbl.gui.web_view, newuri->str); - g_string_free (newuri, TRUE); -} - - #ifndef UZBL_LIBRARY /** -- MAIN -- **/ int diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 3fde5dc..38f356f 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -253,7 +253,6 @@ void catch_sigterm(int s); sigfunc* setup_signal(int signe, sigfunc *shandler); gboolean set_var_value(const gchar *name, gchar *val); -void load_uri_imp(gchar *uri); void print(WebKitWebView *page, GArray *argv, GString *result); void commands_hash(void); void load_uri(WebKitWebView * web_view, GArray *argv, GString *result); -- cgit v1.2.3 From 21539149b8bb628d89305873dcace871376db812 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Fri, 20 May 2011 10:39:36 -0400 Subject: eval_js should take const gchar *script --- src/uzbl-core.c | 2 +- src/uzbl-core.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index d349ca4..693f3ce 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -783,7 +783,7 @@ load_uri(WebKitWebView *web_view, GArray *argv, GString *result) { /* Javascript*/ void -eval_js(WebKitWebView * web_view, gchar *script, GString *result, const char *file) { +eval_js(WebKitWebView * web_view, const gchar *script, GString *result, const char *file) { WebKitWebFrame *frame; JSGlobalContextRef context; JSObjectRef globalobject; diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 38f356f..ce42408 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -293,7 +293,7 @@ void dehilight (WebKitWebView *page, GArray *argv, GString *result); /* Javascript functions */ void run_js (WebKitWebView * web_view, GArray *argv, GString *result); void run_external_js (WebKitWebView * web_view, GArray *argv, GString *result); -void eval_js(WebKitWebView * web_view, gchar *script, GString *result, const gchar *script_file); +void eval_js(WebKitWebView *web_view, const gchar *script, GString *result, const gchar *script_file); /* Network functions */ void handle_authentication (SoupSession *session, -- cgit v1.2.3 From 210b8ee5a48147946deea8a92a43c55b341e1253 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Fri, 20 May 2011 10:52:30 -0400 Subject: fix opening absolute paths on the filesystem --- src/callbacks.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 7830032..15dbca7 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -114,7 +114,7 @@ void cmd_load_uri() { const gchar *uri = uzbl.state.uri; - GString* newuri; + gchar *newuri; SoupURI* soup_uri; /* Strip leading whitespaces */ @@ -128,30 +128,32 @@ cmd_load_uri() { return; } - newuri = g_string_new (uri); soup_uri = soup_uri_new(uri); if (!soup_uri) { - gchar* fullpath; - if (g_path_is_absolute (newuri->str)) - fullpath = newuri->str; + /* maybe this is a path on the filesystem, check. */ + const gchar *fullpath; + if (g_path_is_absolute (uri)) + fullpath = uri; else { gchar* wd = g_get_current_dir (); - fullpath = g_build_filename (wd, newuri->str, NULL); + fullpath = g_build_filename (wd, uri, NULL); g_free(wd); } + struct stat stat_result; if (! g_stat(fullpath, &stat_result)) - g_string_printf (newuri, "file://%s", fullpath); + newuri = g_strconcat("file://", fullpath, NULL); else - g_string_prepend (newuri, "http://"); + newuri = g_strconcat("http://", uri, NULL); } else { + newuri = g_strdup(uri); soup_uri_free(soup_uri); } /* if we do handle cookies, ask our handler for them */ - webkit_web_view_load_uri (uzbl.gui.web_view, newuri->str); - g_string_free (newuri, TRUE); + webkit_web_view_load_uri (uzbl.gui.web_view, newuri); + g_free (newuri); } void -- cgit v1.2.3 From 0cd7fcbdf6cb873baafed637f472e4478013e5a5 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sun, 22 May 2011 15:27:29 +0000 Subject: load URLs like 'host:port' without a scheme --- src/callbacks.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 15dbca7..7bb4a8e 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -110,6 +110,12 @@ cmd_set_status() { update_title(); } +/* is the given string made up entirely of decimal digits? */ +gboolean +string_is_integer(const char *s) { + return (strspn(s, "0123456789") == strlen(s)); +} + void cmd_load_uri() { const gchar *uri = uzbl.state.uri; @@ -118,20 +124,20 @@ cmd_load_uri() { SoupURI* soup_uri; /* Strip leading whitespaces */ - while (*uri) { - if (!isspace(*uri)) break; + while (*uri && isspace(*uri)) uri++; - } - if (g_strstr_len (uri, 11, "javascript:") != NULL) { + /* evaluate javascript: URIs */ + if (!strncmp (uri, "javascript:", 11)) { eval_js(uzbl.gui.web_view, uri, NULL, "javascript:"); return; } + /* attempt to parse the URI */ soup_uri = soup_uri_new(uri); if (!soup_uri) { - /* maybe this is a path on the filesystem, check. */ + /* it's not a valid URI, maybe it's a path on the filesystem. */ const gchar *fullpath; if (g_path_is_absolute (uri)) fullpath = uri; @@ -147,7 +153,12 @@ cmd_load_uri() { else newuri = g_strconcat("http://", uri, NULL); } else { - newuri = g_strdup(uri); + if(soup_uri->host == NULL && string_is_integer(soup_uri->path)) + /* the user probably typed in a host:port without a scheme */ + newuri = g_strconcat("http://", uri, NULL); + else + newuri = g_strdup(uri); + soup_uri_free(soup_uri); } -- cgit v1.2.3 From 1e99fb0311d0652524ea929bc34f0cfff07cd55d Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sun, 22 May 2011 15:30:37 +0000 Subject: remove an obsolete comment --- src/callbacks.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 7bb4a8e..b665605 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -120,8 +120,8 @@ void cmd_load_uri() { const gchar *uri = uzbl.state.uri; - gchar *newuri; - SoupURI* soup_uri; + gchar *newuri; + SoupURI *soup_uri; /* Strip leading whitespaces */ while (*uri && isspace(*uri)) @@ -142,7 +142,7 @@ cmd_load_uri() { if (g_path_is_absolute (uri)) fullpath = uri; else { - gchar* wd = g_get_current_dir (); + gchar *wd = g_get_current_dir (); fullpath = g_build_filename (wd, uri, NULL); g_free(wd); } @@ -162,7 +162,6 @@ cmd_load_uri() { soup_uri_free(soup_uri); } - /* if we do handle cookies, ask our handler for them */ webkit_web_view_load_uri (uzbl.gui.web_view, newuri); g_free (newuri); } -- cgit v1.2.3 From 774ed531516cbd8583a869e155a85336f62b2be2 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Mon, 23 May 2011 05:12:52 +0000 Subject: macroify some repetitive code in callbacks.c --- src/callbacks.c | 151 +++++++++++--------------------------------------------- src/callbacks.h | 3 -- src/inspector.c | 2 +- 3 files changed, 30 insertions(+), 126 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index b665605..04ad8fc 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -190,152 +190,66 @@ cmd_http_debug() { SOUP_SESSION_FEATURE(uzbl.net.soup_logger)); } -WebKitWebSettings* +GObject* view_settings() { - return webkit_web_view_get_settings(uzbl.gui.web_view); + return G_OBJECT(webkit_web_view_get_settings(uzbl.gui.web_view)); } void cmd_font_size() { - WebKitWebSettings *ws = view_settings(); + GObject *ws = view_settings(); if (uzbl.behave.font_size > 0) { - g_object_set (G_OBJECT(ws), "default-font-size", uzbl.behave.font_size, NULL); + g_object_set (ws, "default-font-size", uzbl.behave.font_size, NULL); } if (uzbl.behave.monospace_size > 0) { - g_object_set (G_OBJECT(ws), "default-monospace-font-size", + g_object_set (ws, "default-monospace-font-size", uzbl.behave.monospace_size, NULL); } else { - g_object_set (G_OBJECT(ws), "default-monospace-font-size", + g_object_set (ws, "default-monospace-font-size", uzbl.behave.font_size, NULL); } } -void -cmd_default_font_family() { - g_object_set (G_OBJECT(view_settings()), "default-font-family", - uzbl.behave.default_font_family, NULL); -} - -void -cmd_monospace_font_family() { - g_object_set (G_OBJECT(view_settings()), "monospace-font-family", - uzbl.behave.monospace_font_family, NULL); -} - -void -cmd_sans_serif_font_family() { - g_object_set (G_OBJECT(view_settings()), "sans_serif-font-family", - uzbl.behave.sans_serif_font_family, NULL); -} - -void -cmd_serif_font_family() { - g_object_set (G_OBJECT(view_settings()), "serif-font-family", - uzbl.behave.serif_font_family, NULL); -} - -void -cmd_cursive_font_family() { - g_object_set (G_OBJECT(view_settings()), "cursive-font-family", - uzbl.behave.cursive_font_family, NULL); -} - -void -cmd_fantasy_font_family() { - g_object_set (G_OBJECT(view_settings()), "fantasy-font-family", - uzbl.behave.fantasy_font_family, NULL); -} - void cmd_zoom_level() { webkit_web_view_set_zoom_level (uzbl.gui.web_view, uzbl.behave.zoom_level); } -void -cmd_enable_pagecache() { - g_object_set (G_OBJECT(view_settings()), "enable-page-cache", - uzbl.behave.enable_pagecache, NULL); +#define EXPOSE_WEBKIT_VIEW_SETTINGS(SYM, STORAGE, PROPERTY) void cmd_##SYM() { \ + g_object_set(view_settings(), (PROPERTY), (STORAGE), NULL); \ } -void -cmd_disable_plugins() { - g_object_set (G_OBJECT(view_settings()), "enable-plugins", - !uzbl.behave.disable_plugins, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(default_font_family, uzbl.behave.default_font_family, "default-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(monospace_font_family, uzbl.behave.monospace_font_family, "monospace-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(sans_serif_font_family, uzbl.behave.sans_serif_font_family, "sans_serif-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(serif_font_family, uzbl.behave.serif_font_family, "serif-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(cursive_font_family, uzbl.behave.cursive_font_family, "cursive-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(fantasy_font_family, uzbl.behave.fantasy_font_family, "fantasy-font-family") -void -cmd_disable_scripts() { - g_object_set (G_OBJECT(view_settings()), "enable-scripts", - !uzbl.behave.disable_scripts, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(minimum_font_size, uzbl.behave.minimum_font_size, "minimum_font_size") -void -cmd_minimum_font_size() { - g_object_set (G_OBJECT(view_settings()), "minimum-font-size", - uzbl.behave.minimum_font_size, NULL); -} -void -cmd_autoload_img() { - g_object_set (G_OBJECT(view_settings()), "auto-load-images", - uzbl.behave.autoload_img, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(disable_plugins, !uzbl.behave.disable_plugins, "enable-plugins") +EXPOSE_WEBKIT_VIEW_SETTINGS(disable_scripts, !uzbl.behave.disable_scripts, "enable-scripts") +EXPOSE_WEBKIT_VIEW_SETTINGS(javascript_windows, uzbl.behave.javascript_windows, "javascript-can-open-windows-automatically") -void -cmd_autoshrink_img() { - g_object_set (G_OBJECT(view_settings()), "auto-shrink-images", - uzbl.behave.autoshrink_img, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(autoload_img, uzbl.behave.autoload_img, "auto-load-images") +EXPOSE_WEBKIT_VIEW_SETTINGS(autoshrink_img, uzbl.behave.autoshrink_img, "auto-shrink-images") +EXPOSE_WEBKIT_VIEW_SETTINGS(enable_pagecache, uzbl.behave.enable_pagecache, "enable-page-cache") +EXPOSE_WEBKIT_VIEW_SETTINGS(enable_private, uzbl.behave.enable_private, "enable-private-browsing") -void -cmd_enable_spellcheck() { - g_object_set (G_OBJECT(view_settings()), "enable-spell-checking", - uzbl.behave.enable_spellcheck, NULL); -} - -void -cmd_enable_private() { - g_object_set (G_OBJECT(view_settings()), "enable-private-browsing", - uzbl.behave.enable_private, NULL); -} - -void -cmd_print_bg() { - g_object_set (G_OBJECT(view_settings()), "print-backgrounds", - uzbl.behave.print_bg, NULL); -} - -void -cmd_style_uri() { - g_object_set (G_OBJECT(view_settings()), "user-stylesheet-uri", - uzbl.behave.style_uri, NULL); -} - -void -cmd_resizable_txt() { - g_object_set (G_OBJECT(view_settings()), "resizable-text-areas", - uzbl.behave.resizable_txt, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(enable_spellcheck, uzbl.behave.enable_spellcheck, "enable-spell-checking") +EXPOSE_WEBKIT_VIEW_SETTINGS(resizable_txt, uzbl.behave.resizable_txt, "resizable-text-areas") -void -cmd_default_encoding() { - g_object_set (G_OBJECT(view_settings()), "default-encoding", - uzbl.behave.default_encoding, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(style_uri, uzbl.behave.style_uri, "user-stylesheet-uri") +EXPOSE_WEBKIT_VIEW_SETTINGS(print_bg, uzbl.behave.print_bg, "print-backgrounds") +EXPOSE_WEBKIT_VIEW_SETTINGS(enforce_96dpi, uzbl.behave.enforce_96dpi, "enforce-96-dpi") -void -cmd_enforce_96dpi() { - g_object_set (G_OBJECT(view_settings()), "enforce-96-dpi", - uzbl.behave.enforce_96dpi, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(caret_browsing, uzbl.behave.caret_browsing, "enable-caret-browsing") -void -cmd_caret_browsing() { - g_object_set (G_OBJECT(view_settings()), "enable-caret-browsing", - uzbl.behave.caret_browsing, NULL); -} +EXPOSE_WEBKIT_VIEW_SETTINGS(default_encoding, uzbl.behave.default_encoding, "default-encoding") void set_current_encoding() { @@ -346,7 +260,6 @@ set_current_encoding() { webkit_web_view_set_custom_encoding(uzbl.gui.web_view, encoding); } - void cmd_fifo_dir() { uzbl.behave.fifo_dir = init_fifo(uzbl.behave.fifo_dir); @@ -387,12 +300,6 @@ set_accept_languages() { } } -void -cmd_javascript_windows() { - g_object_set (G_OBJECT(view_settings()), "javascript-can-open-windows-automatically", - uzbl.behave.javascript_windows, NULL); -} - void cmd_scrollbars_visibility() { GtkPolicyType policy = uzbl.gui.scrollbars_visible ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER; diff --git a/src/callbacks.h b/src/callbacks.h index 79d7910..87f9785 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -136,9 +136,6 @@ cmd_scrollbars_visibility(); void cmd_load_start(); -WebKitWebSettings* -view_settings(); - void toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result); diff --git a/src/inspector.c b/src/inspector.c index 4c8c890..7665621 100644 --- a/src/inspector.c +++ b/src/inspector.c @@ -88,7 +88,7 @@ inspector_inspector_destroyed_cb (WebKitWebInspector* inspector){ void set_up_inspector() { GUI *g = &uzbl.gui; - WebKitWebSettings *settings = view_settings(); + WebKitWebSettings *settings = webkit_web_view_get_settings(g->web_view); g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL); uzbl.gui.inspector = webkit_web_view_get_inspector(uzbl.gui.web_view); -- cgit v1.2.3 From 98ba6d72af3c078cbcffc89902969e4ece5a2493 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Mon, 23 May 2011 05:17:19 +0000 Subject: don't repeat yourself. --- src/callbacks.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 04ad8fc..2176a8e 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -874,43 +874,32 @@ download_cb(WebKitWebView *web_view, WebKitDownload *download, gpointer user_dat return TRUE; } -gboolean -scroll_vert_cb(GtkAdjustment *adjust, void *w) -{ - (void) w; - +void +send_scroll_event(int type, GtkAdjustment *adjust) { gdouble value = gtk_adjustment_get_value(adjust); gdouble min = gtk_adjustment_get_lower(adjust); gdouble max = gtk_adjustment_get_upper(adjust); gdouble page = gtk_adjustment_get_page_size(adjust); - send_event (SCROLL_VERT, NULL, + send_event (type, NULL, TYPE_FLOAT, value, TYPE_FLOAT, min, TYPE_FLOAT, max, TYPE_FLOAT, page, NULL); +} +gboolean +scroll_vert_cb(GtkAdjustment *adjust, void *w) { + (void) w; + send_scroll_event(SCROLL_VERT, adjust); return (FALSE); } gboolean -scroll_horiz_cb(GtkAdjustment *adjust, void *w) -{ +scroll_horiz_cb(GtkAdjustment *adjust, void *w) { (void) w; - - gdouble value = gtk_adjustment_get_value(adjust); - gdouble min = gtk_adjustment_get_lower(adjust); - gdouble max = gtk_adjustment_get_upper(adjust); - gdouble page = gtk_adjustment_get_page_size(adjust); - - send_event (SCROLL_HORIZ, NULL, - TYPE_FLOAT, value, - TYPE_FLOAT, min, - TYPE_FLOAT, max, - TYPE_FLOAT, page, - NULL); - + send_scroll_event(SCROLL_HORIZ, adjust); return (FALSE); } -- cgit v1.2.3 From b91497144f392fe8dfedb1c250b6b2a5a4f94c5b Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Mon, 23 May 2011 05:25:34 +0000 Subject: don't repeat yourself. --- src/callbacks.c | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 2176a8e..548cf95 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -346,36 +346,26 @@ toggle_status_cb (WebKitWebView* page, GArray *argv, GString *result) { } void -link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data) { - (void) page; - (void) title; - (void) data; +link_hover_cb (WebKitWebView *page, const gchar *title, const gchar *link, gpointer data) { + (void) page; (void) title; (void) data; State *s = &uzbl.state; + if(s->last_selected_url) + g_free(s->last_selected_url); + if(s->selected_url) { - if(s->last_selected_url) - g_free(s->last_selected_url); s->last_selected_url = g_strdup(s->selected_url); - } - else { - if(s->last_selected_url) g_free(s->last_selected_url); + g_free(s->selected_url); + s->selected_url = NULL; + } else s->last_selected_url = NULL; - } - g_free(s->selected_url); - s->selected_url = NULL; + if(s->last_selected_url && g_strcmp0(link, s->last_selected_url)) + send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL); if (link) { s->selected_url = g_strdup(link); - - if(s->last_selected_url && - g_strcmp0(s->selected_url, s->last_selected_url)) - send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL); - - send_event(LINK_HOVER, NULL, TYPE_STR, s->selected_url, NULL); - } - else if(s->last_selected_url) { - send_event(LINK_UNHOVER, NULL, TYPE_STR, s->last_selected_url, NULL); + send_event(LINK_HOVER, NULL, TYPE_STR, s->selected_url, NULL); } update_title(); -- cgit v1.2.3 From fc09b334f196b5abd6c6c88f82597e5d6ac71d0e Mon Sep 17 00:00:00 2001 From: David Keijser Date: Tue, 24 May 2011 18:13:47 +0200 Subject: split commands from uzbl-core.c --- src/callbacks.c | 23 --- src/callbacks.h | 6 - src/commands.c | 442 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/commands.h | 66 +++++++++ src/uzbl-core.c | 442 +------------------------------------------------------- src/uzbl-core.h | 42 +----- 6 files changed, 523 insertions(+), 498 deletions(-) create mode 100644 src/commands.c create mode 100644 src/commands.h (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 548cf95..a996248 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -322,29 +322,6 @@ cmd_set_zoom_type () { webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, FALSE); } -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 -toggle_status_cb (WebKitWebView* page, GArray *argv, GString *result) { - (void)page; - (void)argv; - (void)result; - - if (uzbl.behave.show_status) { - gtk_widget_hide(uzbl.gui.mainbar); - } else { - gtk_widget_show(uzbl.gui.mainbar); - } - uzbl.behave.show_status = !uzbl.behave.show_status; - update_title(); -} - void link_hover_cb (WebKitWebView *page, const gchar *title, const gchar *link, gpointer data) { (void) page; (void) title; (void) data; diff --git a/src/callbacks.h b/src/callbacks.h index 87f9785..2b333a3 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -136,12 +136,6 @@ cmd_scrollbars_visibility(); void cmd_load_start(); -void -toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result); - -void -toggle_status_cb (WebKitWebView* page, GArray *argv, GString *result); - void link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data); diff --git a/src/commands.c b/src/commands.c new file mode 100644 index 0000000..28a3b39 --- /dev/null +++ b/src/commands.c @@ -0,0 +1,442 @@ +#include "commands.h" +#include "uzbl-core.h" +#include "events.h" +#include "util.h" +#include "menu.h" +#include "callbacks.h" + +/* -- command to callback/function map for things we cannot attach to any signals */ +CommandInfo cmdlist[] = +{ /* key function no_split */ + { "back", view_go_back, 0 }, + { "forward", view_go_forward, 0 }, + { "scroll", scroll_cmd, 0 }, + { "reload", view_reload, 0 }, + { "reload_ign_cache", view_reload_bypass_cache, 0 }, + { "stop", view_stop_loading, 0 }, + { "zoom_in", view_zoom_in, 0 }, //Can crash (when max zoom reached?). + { "zoom_out", view_zoom_out, 0 }, + { "toggle_zoom_type", toggle_zoom_type, 0 }, + { "uri", load_uri, TRUE }, + { "js", run_js, TRUE }, + { "script", run_external_js, 0 }, + { "toggle_status", toggle_status, 0 }, + { "spawn", spawn_async, 0 }, + { "sync_spawn", spawn_sync, 0 }, + { "sync_spawn_exec", spawn_sync_exec, 0 }, // needed for load_cookies.sh :( + { "sh", spawn_sh_async, 0 }, + { "sync_sh", spawn_sh_sync, 0 }, + { "exit", close_uzbl, 0 }, + { "search", search_forward_text, TRUE }, + { "search_reverse", search_reverse_text, TRUE }, + { "search_clear", search_clear, TRUE }, + { "dehilight", dehilight, 0 }, + { "set", set_var, TRUE }, + { "dump_config", act_dump_config, 0 }, + { "dump_config_as_events", act_dump_config_as_events, 0 }, + { "chain", chain, 0 }, + { "print", print, TRUE }, + { "event", event, TRUE }, + { "request", event, TRUE }, + { "menu_add", menu_add, TRUE }, + { "menu_link_add", menu_add_link, TRUE }, + { "menu_image_add", menu_add_image, TRUE }, + { "menu_editable_add", menu_add_edit, TRUE }, + { "menu_separator", menu_add_separator, TRUE }, + { "menu_link_separator", menu_add_separator_link, TRUE }, + { "menu_image_separator", menu_add_separator_image, TRUE }, + { "menu_editable_separator", menu_add_separator_edit, TRUE }, + { "menu_remove", menu_remove, TRUE }, + { "menu_link_remove", menu_remove_link, TRUE }, + { "menu_image_remove", menu_remove_image, TRUE }, + { "menu_editable_remove", menu_remove_edit, TRUE }, + { "hardcopy", hardcopy, TRUE }, + { "include", include, TRUE }, + { "show_inspector", show_inspector, 0 }, + { "add_cookie", add_cookie, 0 }, + { "delete_cookie", delete_cookie, 0 }, + { "clear_cookies", clear_cookies, 0 }, + { "download", download, 0 } +}; + +void +commands_hash() { + unsigned int i; + 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, (gpointer) cmdlist[i].key, &cmdlist[i]); +} + +void +builtins() { + unsigned int i; + unsigned int len = LENGTH(cmdlist); + GString* command_list = g_string_new(""); + + for (i = 0; i < len; i++) { + g_string_append(command_list, cmdlist[i].key); + g_string_append_c(command_list, ' '); + } + + send_event(BUILTINS, NULL, TYPE_STR, command_list->str, NULL); + g_string_free(command_list, TRUE); +} + +/* VIEW funcs (little webkit wrappers) */ +#define VIEWFUNC(name) void view_##name(WebKitWebView *page, GArray *argv, GString *result){(void)argv; (void)result; webkit_web_view_##name(page);} +VIEWFUNC(reload) +VIEWFUNC(reload_bypass_cache) +VIEWFUNC(stop_loading) +VIEWFUNC(zoom_in) +VIEWFUNC(zoom_out) +VIEWFUNC(go_back) +VIEWFUNC(go_forward) +#undef VIEWFUNC + +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 +toggle_status (WebKitWebView* page, GArray *argv, GString *result) { + (void)page; (void)argv; (void)result; + + if (uzbl.behave.show_status) { + gtk_widget_hide(uzbl.gui.mainbar); + } else { + gtk_widget_show(uzbl.gui.mainbar); + } + uzbl.behave.show_status = !uzbl.behave.show_status; + update_title(); +} + +/* + * scroll vertical 20 + * scroll vertical 20% + * scroll vertical -40 + * scroll vertical begin + * scroll vertical end + * scroll horizontal 10 + * scroll horizontal -500 + * scroll horizontal begin + * scroll horizontal end + */ +void +scroll_cmd(WebKitWebView* page, GArray *argv, GString *result) { + (void) page; (void) result; + gchar *direction = g_array_index(argv, gchar*, 0); + gchar *argv1 = g_array_index(argv, gchar*, 1); + GtkAdjustment *bar = NULL; + + if (g_strcmp0(direction, "horizontal") == 0) + bar = uzbl.gui.bar_h; + else if (g_strcmp0(direction, "vertical") == 0) + bar = uzbl.gui.bar_v; + else { + if(uzbl.state.verbose) + puts("Unrecognized scroll format"); + return; + } + + if (g_strcmp0(argv1, "begin") == 0) + gtk_adjustment_set_value(bar, gtk_adjustment_get_lower(bar)); + else if (g_strcmp0(argv1, "end") == 0) + gtk_adjustment_set_value (bar, gtk_adjustment_get_upper(bar) - + gtk_adjustment_get_page_size(bar)); + else + scroll(bar, argv1); +} + +void +set_var(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) result; + + if(!argv_idx(argv, 0)) + return; + + gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2); + if (split[0] != NULL) { + gchar *value = split[1] ? g_strchug(split[1]) : " "; + set_var_value(g_strstrip(split[0]), value); + } + g_strfreev(split); +} + + +void +event(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) result; + GString *event_name; + gchar **split = NULL; + + if(!argv_idx(argv, 0)) + return; + + split = g_strsplit(argv_idx(argv, 0), " ", 2); + if(split[0]) + event_name = g_string_ascii_up(g_string_new(split[0])); + else + return; + + send_event(0, event_name->str, TYPE_FORMATTEDSTR, split[1] ? split[1] : "", NULL); + + g_string_free(event_name, TRUE); + g_strfreev(split); +} + +void +print(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) result; + gchar* buf; + + if(!result) + return; + + buf = expand(argv_idx(argv, 0), 0); + g_string_assign(result, buf); + g_free(buf); +} + +void +hardcopy(WebKitWebView *page, GArray *argv, GString *result) { + (void) argv; (void) result; + webkit_web_frame_print(webkit_web_view_get_main_frame(page)); +} + +void +include(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) result; + gchar *path = argv_idx(argv, 0); + + if(!path) + return; + + if((path = find_existing_file(path))) { + run_command_file(path); + send_event(FILE_INCLUDED, NULL, TYPE_STR, path, NULL); + g_free(path); + } +} + +void +show_inspector(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) argv; (void) result; + + webkit_web_inspector_show(uzbl.gui.inspector); +} + +void +add_cookie(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) result; + gchar *host, *path, *name, *value; + gboolean secure = 0; + SoupDate *expires = NULL; + + if(argv->len != 6) + return; + + // Parse with same syntax as ADD_COOKIE event + host = argv_idx (argv, 0); + path = argv_idx (argv, 1); + name = argv_idx (argv, 2); + value = argv_idx (argv, 3); + secure = strcmp (argv_idx (argv, 4), "https") == 0; + if (strlen (argv_idx (argv, 5)) != 0) + expires = soup_date_new_from_time_t ( + strtoul (argv_idx (argv, 5), NULL, 10)); + + // Create new cookie + SoupCookie * cookie = soup_cookie_new (name, value, host, path, -1); + soup_cookie_set_secure (cookie, secure); + if (expires) + soup_cookie_set_expires (cookie, expires); + + // Add cookie to jar + uzbl.net.soup_cookie_jar->in_manual_add = 1; + soup_cookie_jar_add_cookie (SOUP_COOKIE_JAR (uzbl.net.soup_cookie_jar), cookie); + uzbl.net.soup_cookie_jar->in_manual_add = 0; +} + +void +delete_cookie(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) result; + + if(argv->len < 4) + return; + + SoupCookie * cookie = soup_cookie_new ( + argv_idx (argv, 2), + argv_idx (argv, 3), + argv_idx (argv, 0), + argv_idx (argv, 1), + 0); + + uzbl.net.soup_cookie_jar->in_manual_add = 1; + soup_cookie_jar_delete_cookie (SOUP_COOKIE_JAR (uzbl.net.soup_cookie_jar), cookie); + uzbl.net.soup_cookie_jar->in_manual_add = 0; +} + +void +clear_cookies(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) argv; (void) result; + + // Replace the current cookie jar with a new empty jar + soup_session_remove_feature (uzbl.net.soup_session, + SOUP_SESSION_FEATURE (uzbl.net.soup_cookie_jar)); + g_object_unref (G_OBJECT (uzbl.net.soup_cookie_jar)); + uzbl.net.soup_cookie_jar = uzbl_cookie_jar_new (); + soup_session_add_feature(uzbl.net.soup_session, + SOUP_SESSION_FEATURE (uzbl.net.soup_cookie_jar)); +} + +void +download(WebKitWebView *web_view, GArray *argv, GString *result) { + (void) result; + + const gchar *uri = argv_idx(argv, 0); + const gchar *destination = NULL; + if(argv->len > 1) + destination = argv_idx(argv, 1); + + WebKitNetworkRequest *req = webkit_network_request_new(uri); + WebKitDownload *download = webkit_download_new(req); + + download_cb(web_view, download, (gpointer)destination); + + if(webkit_download_get_destination_uri(download)) + webkit_download_start(download); + else + g_object_unref(download); + + g_object_unref(req); +} + +void +load_uri(WebKitWebView *web_view, GArray *argv, GString *result) { + (void) web_view; (void) result; + gchar * uri = argv_idx(argv, 0); + set_var_value("uri", uri ? uri : ""); +} + +void +run_js (WebKitWebView * web_view, GArray *argv, GString *result) { + if (argv_idx(argv, 0)) + eval_js(web_view, argv_idx(argv, 0), result, "(command)"); +} + +void +run_external_js (WebKitWebView * web_view, GArray *argv, GString *result) { + (void) result; + gchar *path = NULL; + + if (argv_idx(argv, 0) && + ((path = find_existing_file(argv_idx(argv, 0)))) ) { + gchar *file_contents = NULL; + + GIOChannel *chan = g_io_channel_new_file(path, "r", NULL); + if (chan) { + gsize len; + g_io_channel_read_to_end(chan, &file_contents, &len, NULL); + g_io_channel_unref (chan); + } + + if (uzbl.state.verbose) + printf ("External JavaScript file %s loaded\n", argv_idx(argv, 0)); + + gchar *js = str_replace("%s", argv_idx (argv, 1) ? argv_idx (argv, 1) : "", file_contents); + g_free (file_contents); + + eval_js (web_view, js, result, path); + g_free (js); + g_free(path); + } +} + +void +search_clear(WebKitWebView *page, GArray *argv, GString *result) { + (void) argv; (void) result; + webkit_web_view_unmark_text_matches (page); + g_free(uzbl.state.searchtx); + uzbl.state.searchtx = NULL; +} + +void +search_forward_text (WebKitWebView *page, GArray *argv, GString *result) { + (void) result; + search_text(page, argv, TRUE); +} + +void +search_reverse_text(WebKitWebView *page, GArray *argv, GString *result) { + (void) result; + search_text(page, argv, FALSE); +} + +void +dehilight(WebKitWebView *page, GArray *argv, GString *result) { + (void) argv; (void) result; + webkit_web_view_set_highlight_text_matches (page, FALSE); +} + +void +chain(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; + guint i = 0; + const gchar *cmd; + GString *r = g_string_new (""); + while ((cmd = argv_idx(argv, i++))) { + GArray *a = g_array_new (TRUE, FALSE, sizeof(gchar*)); + const CommandInfo *c = parse_command_parts(cmd, a); + if (c) + run_parsed_command(c, a, r); + g_array_free (a, TRUE); + } + if(result) + g_string_assign (result, r->str); + + g_string_free(r, TRUE); +} + +void +close_uzbl (WebKitWebView *page, GArray *argv, GString *result) { + (void)page; (void)argv; (void)result; + gtk_main_quit (); +} + +void +spawn_async(WebKitWebView *web_view, GArray *argv, GString *result) { + (void)web_view; (void)result; + spawn(argv, NULL, FALSE); +} + +void +spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result) { + (void)web_view; + spawn(argv, result, FALSE); +} + +void +spawn_sync_exec(WebKitWebView *web_view, GArray *argv, GString *result) { + (void)web_view; + if(!result) { + GString *force_result = g_string_new(""); + spawn(argv, force_result, TRUE); + g_string_free (force_result, TRUE); + } else + spawn(argv, result, TRUE); +} + +void +spawn_sh_async(WebKitWebView *web_view, GArray *argv, GString *result) { + (void)web_view; (void)result; + spawn_sh(argv, NULL); +} + +void +spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result) { + (void)web_view; (void)result; + spawn_sh(argv, result); +} diff --git a/src/commands.h b/src/commands.h new file mode 100644 index 0000000..6cb10b5 --- /dev/null +++ b/src/commands.h @@ -0,0 +1,66 @@ +/* + * Uzbl Commands + */ +#ifndef __COMMANDS__ +#define __COMMANDS__ + +#include + +typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result); + +typedef struct { + const gchar *key; + Command function; + gboolean no_split; +} CommandInfo; + +/** + * Initialises the hash table uzbl.behave.commands with the available commands. + */ +void +commands_hash(); + +/** + * Sends the BUILTINS events with the available commands. + */ +void +builtins(); + + +void view_reload(WebKitWebView *page, GArray *argv, GString *result); +void view_reload_bypass_cache(WebKitWebView *page, GArray *argv, GString *result); +void view_stop_loading(WebKitWebView *page, GArray *argv, GString *result); +void view_zoom_in(WebKitWebView *page, GArray *argv, GString *result); +void view_zoom_out(WebKitWebView *page, GArray *argv, GString *result); +void view_go_back(WebKitWebView *page, GArray *argv, GString *result); +void view_go_forward(WebKitWebView *page, GArray *argv, GString *result); +void toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result); +void scroll_cmd(WebKitWebView* page, GArray *argv, GString *result); +void print(WebKitWebView *page, GArray *argv, GString *result); +void event(WebKitWebView *page, GArray *argv, GString *result); +void load_uri(WebKitWebView * web_view, GArray *argv, GString *result); +void chain(WebKitWebView *page, GArray *argv, GString *result); +void close_uzbl(WebKitWebView *page, GArray *argv, GString *result); +void spawn_async(WebKitWebView *web_view, GArray *argv, GString *result); +void spawn_sh_async(WebKitWebView *web_view, GArray *argv, GString *result); +void spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result); +void spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result); +void spawn_sync_exec(WebKitWebView *web_view, GArray *argv, GString *result); +void search_forward_text (WebKitWebView *page, GArray *argv, GString *result); +void search_reverse_text (WebKitWebView *page, GArray *argv, GString *result); +void search_clear(WebKitWebView *page, GArray *argv, GString *result); +void dehilight (WebKitWebView *page, GArray *argv, GString *result); +void hardcopy(WebKitWebView *page, GArray *argv, GString *result); +void include(WebKitWebView *page, GArray *argv, GString *result); +void show_inspector(WebKitWebView *page, GArray *argv, GString *result); +void add_cookie(WebKitWebView *page, GArray *argv, GString *result); +void delete_cookie(WebKitWebView *page, GArray *argv, GString *result); +void clear_cookies(WebKitWebView *pag, GArray *argv, GString *result); +void download(WebKitWebView *pag, GArray *argv, GString *result); +void set_var(WebKitWebView *page, GArray *argv, GString *result); +void run_js (WebKitWebView * web_view, GArray *argv, GString *result); +void run_external_js (WebKitWebView * web_view, GArray *argv, GString *result); +void toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result); +void toggle_status (WebKitWebView* page, GArray *argv, GString *result); + +#endif diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 693f3ce..d670774 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -454,194 +454,8 @@ scroll(GtkAdjustment* bar, gchar *amount_str) { gtk_adjustment_set_value (bar, value); } -/* - * scroll vertical 20 - * scroll vertical 20% - * scroll vertical -40 - * scroll vertical begin - * scroll vertical end - * scroll horizontal 10 - * scroll horizontal -500 - * scroll horizontal begin - * scroll horizontal end - */ -void -scroll_cmd(WebKitWebView* page, GArray *argv, GString *result) { - (void) page; (void) result; - gchar *direction = g_array_index(argv, gchar*, 0); - gchar *argv1 = g_array_index(argv, gchar*, 1); - GtkAdjustment *bar = NULL; - - if (g_strcmp0(direction, "horizontal") == 0) - bar = uzbl.gui.bar_h; - else if (g_strcmp0(direction, "vertical") == 0) - bar = uzbl.gui.bar_v; - else { - if(uzbl.state.verbose) - puts("Unrecognized scroll format"); - return; - } - - if (g_strcmp0(argv1, "begin") == 0) - gtk_adjustment_set_value(bar, gtk_adjustment_get_lower(bar)); - else if (g_strcmp0(argv1, "end") == 0) - gtk_adjustment_set_value (bar, gtk_adjustment_get_upper(bar) - - gtk_adjustment_get_page_size(bar)); - else - scroll(bar, argv1); -} - - -/* VIEW funcs (little webkit wrappers) */ -#define VIEWFUNC(name) void view_##name(WebKitWebView *page, GArray *argv, GString *result){(void)argv; (void)result; webkit_web_view_##name(page);} -VIEWFUNC(reload) -VIEWFUNC(reload_bypass_cache) -VIEWFUNC(stop_loading) -VIEWFUNC(zoom_in) -VIEWFUNC(zoom_out) -VIEWFUNC(go_back) -VIEWFUNC(go_forward) -#undef VIEWFUNC - -/* -- command to callback/function map for things we cannot attach to any signals */ -CommandInfo cmdlist[] = -{ /* key function no_split */ - { "back", view_go_back, 0 }, - { "forward", view_go_forward, 0 }, - { "scroll", scroll_cmd, 0 }, - { "reload", view_reload, 0 }, - { "reload_ign_cache", view_reload_bypass_cache, 0 }, - { "stop", view_stop_loading, 0 }, - { "zoom_in", view_zoom_in, 0 }, //Can crash (when max zoom reached?). - { "zoom_out", view_zoom_out, 0 }, - { "toggle_zoom_type", toggle_zoom_type, 0 }, - { "uri", load_uri, TRUE }, - { "js", run_js, TRUE }, - { "script", run_external_js, 0 }, - { "toggle_status", toggle_status_cb, 0 }, - { "spawn", spawn_async, 0 }, - { "sync_spawn", spawn_sync, 0 }, - { "sync_spawn_exec", spawn_sync_exec, 0 }, // needed for load_cookies.sh :( - { "sh", spawn_sh_async, 0 }, - { "sync_sh", spawn_sh_sync, 0 }, - { "exit", close_uzbl, 0 }, - { "search", search_forward_text, TRUE }, - { "search_reverse", search_reverse_text, TRUE }, - { "search_clear", search_clear, TRUE }, - { "dehilight", dehilight, 0 }, - { "set", set_var, TRUE }, - { "dump_config", act_dump_config, 0 }, - { "dump_config_as_events", act_dump_config_as_events, 0 }, - { "chain", chain, 0 }, - { "print", print, TRUE }, - { "event", event, TRUE }, - { "request", event, TRUE }, - { "menu_add", menu_add, TRUE }, - { "menu_link_add", menu_add_link, TRUE }, - { "menu_image_add", menu_add_image, TRUE }, - { "menu_editable_add", menu_add_edit, TRUE }, - { "menu_separator", menu_add_separator, TRUE }, - { "menu_link_separator", menu_add_separator_link, TRUE }, - { "menu_image_separator", menu_add_separator_image, TRUE }, - { "menu_editable_separator", menu_add_separator_edit, TRUE }, - { "menu_remove", menu_remove, TRUE }, - { "menu_link_remove", menu_remove_link, TRUE }, - { "menu_image_remove", menu_remove_image, TRUE }, - { "menu_editable_remove", menu_remove_edit, TRUE }, - { "hardcopy", hardcopy, TRUE }, - { "include", include, TRUE }, - { "show_inspector", show_inspector, 0 }, - { "add_cookie", add_cookie, 0 }, - { "delete_cookie", delete_cookie, 0 }, - { "clear_cookies", clear_cookies, 0 }, - { "download", download, 0 } -}; - -void -commands_hash(void) { - unsigned int i; - 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, (gpointer) cmdlist[i].key, &cmdlist[i]); -} - - -void -builtins() { - unsigned int i; - unsigned int len = LENGTH(cmdlist); - GString* command_list = g_string_new(""); - - for (i = 0; i < len; i++) { - g_string_append(command_list, cmdlist[i].key); - g_string_append_c(command_list, ' '); - } - - send_event(BUILTINS, NULL, TYPE_STR, command_list->str, NULL); - g_string_free(command_list, TRUE); -} - /* -- CORE FUNCTIONS -- */ -void -set_var(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) result; - - if(!argv_idx(argv, 0)) - return; - - gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2); - if (split[0] != NULL) { - gchar *value = split[1] ? g_strchug(split[1]) : " "; - set_var_value(g_strstrip(split[0]), value); - } - g_strfreev(split); -} - - -void -event(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) result; - GString *event_name; - gchar **split = NULL; - - if(!argv_idx(argv, 0)) - return; - - split = g_strsplit(argv_idx(argv, 0), " ", 2); - if(split[0]) - event_name = g_string_ascii_up(g_string_new(split[0])); - else - return; - - send_event(0, event_name->str, TYPE_FORMATTEDSTR, split[1] ? split[1] : "", NULL); - - g_string_free(event_name, TRUE); - g_strfreev(split); -} - -void -print(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) result; - gchar* buf; - - if(!result) - return; - - buf = expand(argv_idx(argv, 0), 0); - g_string_assign(result, buf); - g_free(buf); -} - -void -hardcopy(WebKitWebView *page, GArray *argv, GString *result) { - (void) argv; - (void) result; - - webkit_web_frame_print(webkit_web_view_get_main_frame(page)); -} - /* just a wrapper so parse_cmd_line can be used with for_each_line_in_file */ static void parse_cmd_line_cb(const char *line, void *user_data) { @@ -650,118 +464,12 @@ parse_cmd_line_cb(const char *line, void *user_data) { } void -include(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; - (void) result; - gchar *path = argv_idx(argv, 0); - - if(!path) - return; - - 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, NULL, TYPE_STR, tmp, NULL); - g_free(tmp); - } - - send_event(FILE_INCLUDED, NULL, TYPE_STR, path, NULL); - g_free(path); - } -} - -void -show_inspector(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) argv; (void) result; - - webkit_web_inspector_show(uzbl.gui.inspector); -} - -void -add_cookie(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) result; - gchar *host, *path, *name, *value; - gboolean secure = 0; - SoupDate *expires = NULL; - - if(argv->len != 6) - return; - - // Parse with same syntax as ADD_COOKIE event - host = argv_idx (argv, 0); - path = argv_idx (argv, 1); - name = argv_idx (argv, 2); - value = argv_idx (argv, 3); - secure = strcmp (argv_idx (argv, 4), "https") == 0; - if (strlen (argv_idx (argv, 5)) != 0) - expires = soup_date_new_from_time_t ( - strtoul (argv_idx (argv, 5), NULL, 10)); - - // Create new cookie - SoupCookie * cookie = soup_cookie_new (name, value, host, path, -1); - soup_cookie_set_secure (cookie, secure); - if (expires) - soup_cookie_set_expires (cookie, expires); - - // Add cookie to jar - uzbl.net.soup_cookie_jar->in_manual_add = 1; - soup_cookie_jar_add_cookie (SOUP_COOKIE_JAR (uzbl.net.soup_cookie_jar), cookie); - uzbl.net.soup_cookie_jar->in_manual_add = 0; -} - -void -delete_cookie(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) result; - - if(argv->len < 4) - return; - - SoupCookie * cookie = soup_cookie_new ( - argv_idx (argv, 2), - argv_idx (argv, 3), - argv_idx (argv, 0), - argv_idx (argv, 1), - 0); - - uzbl.net.soup_cookie_jar->in_manual_add = 1; - soup_cookie_jar_delete_cookie (SOUP_COOKIE_JAR (uzbl.net.soup_cookie_jar), cookie); - uzbl.net.soup_cookie_jar->in_manual_add = 0; -} - - -void -clear_cookies(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) argv; (void) result; - - // Replace the current cookie jar with a new empty jar - soup_session_remove_feature (uzbl.net.soup_session, - SOUP_SESSION_FEATURE (uzbl.net.soup_cookie_jar)); - g_object_unref (G_OBJECT (uzbl.net.soup_cookie_jar)); - uzbl.net.soup_cookie_jar = uzbl_cookie_jar_new (); - soup_session_add_feature(uzbl.net.soup_session, - SOUP_SESSION_FEATURE (uzbl.net.soup_cookie_jar)); -} - -void -download(WebKitWebView *web_view, GArray *argv, GString *result) { - (void) result; - - const gchar *uri = argv_idx(argv, 0); - const gchar *destination = NULL; - if(argv->len > 1) - destination = argv_idx(argv, 1); - - WebKitNetworkRequest *req = webkit_network_request_new(uri); - WebKitDownload *download = webkit_download_new(req); - - download_cb(web_view, download, (gpointer)destination); - - if(webkit_download_get_destination_uri(download)) - webkit_download_start(download); - else - g_object_unref(download); - - g_object_unref(req); +run_command_file(const gchar *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, NULL, TYPE_STR, tmp, NULL); + g_free(tmp); + } } void @@ -774,13 +482,6 @@ act_dump_config_as_events() { dump_config_as_events(); } -void -load_uri(WebKitWebView *web_view, GArray *argv, GString *result) { - (void) web_view; (void) result; - gchar * uri = argv_idx(argv, 0); - set_var_value("uri", uri ? uri : ""); -} - /* Javascript*/ void eval_js(WebKitWebView * web_view, const gchar *script, GString *result, const char *file) { @@ -861,40 +562,6 @@ eval_js(WebKitWebView * web_view, const gchar *script, GString *result, const ch JSStringRelease(js_file); } -void -run_js (WebKitWebView * web_view, GArray *argv, GString *result) { - if (argv_idx(argv, 0)) - eval_js(web_view, argv_idx(argv, 0), result, "(command)"); -} - -void -run_external_js (WebKitWebView * web_view, GArray *argv, GString *result) { - (void) result; - gchar *path = NULL; - - if (argv_idx(argv, 0) && - ((path = find_existing_file(argv_idx(argv, 0)))) ) { - gchar *file_contents = NULL; - - GIOChannel *chan = g_io_channel_new_file(path, "r", NULL); - if (chan) { - gsize len; - g_io_channel_read_to_end(chan, &file_contents, &len, NULL); - g_io_channel_unref (chan); - } - - if (uzbl.state.verbose) - printf ("External JavaScript file %s loaded\n", argv_idx(argv, 0)); - - gchar *js = str_replace("%s", argv_idx (argv, 1) ? argv_idx (argv, 1) : "", file_contents); - g_free (file_contents); - - eval_js (web_view, js, result, path); - g_free (js); - g_free(path); - } -} - void search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { if (argv_idx(argv, 0) && (*argv_idx(argv, 0) != '\0')) { @@ -915,61 +582,6 @@ search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { } } -void -search_clear(WebKitWebView *page, GArray *argv, GString *result) { - (void) argv; - (void) result; - - webkit_web_view_unmark_text_matches (page); - g_free(uzbl.state.searchtx); - uzbl.state.searchtx = NULL; -} - -void -search_forward_text (WebKitWebView *page, GArray *argv, GString *result) { - (void) result; - search_text(page, argv, TRUE); -} - -void -search_reverse_text(WebKitWebView *page, GArray *argv, GString *result) { - (void) result; - search_text(page, argv, FALSE); -} - -void -dehilight(WebKitWebView *page, GArray *argv, GString *result) { - (void) argv; (void) result; - webkit_web_view_set_highlight_text_matches (page, FALSE); -} - -void -chain(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; - guint i = 0; - const gchar *cmd; - GString *r = g_string_new (""); - while ((cmd = argv_idx(argv, i++))) { - GArray *a = g_array_new (TRUE, FALSE, sizeof(gchar*)); - const CommandInfo *c = parse_command_parts(cmd, a); - if (c) - run_parsed_command(c, a, r); - g_array_free (a, TRUE); - } - if(result) - g_string_assign (result, r->str); - - g_string_free(r, TRUE); -} - -void -close_uzbl (WebKitWebView *page, GArray *argv, GString *result) { - (void)page; - (void)argv; - (void)result; - gtk_main_quit (); -} - void sharg_append(GArray *a, const gchar *str) { const gchar *s = (str ? str : ""); @@ -1088,29 +700,6 @@ spawn(GArray *argv, GString *result, gboolean exec) { } } -void -spawn_async(WebKitWebView *web_view, GArray *argv, GString *result) { - (void)web_view; (void)result; - spawn(argv, NULL, FALSE); -} - -void -spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result) { - (void)web_view; - spawn(argv, result, FALSE); -} - -void -spawn_sync_exec(WebKitWebView *web_view, GArray *argv, GString *result) { - (void)web_view; - if(!result) { - GString *force_result = g_string_new(""); - spawn(argv, force_result, TRUE); - g_string_free (force_result, TRUE); - } else - spawn(argv, result, TRUE); -} - void spawn_sh(GArray *argv, GString *result) { if (!uzbl.behave.shell_cmd) { @@ -1141,18 +730,6 @@ spawn_sh(GArray *argv, GString *result) { g_strfreev (cmd); } -void -spawn_sh_async(WebKitWebView *web_view, GArray *argv, GString *result) { - (void)web_view; (void)result; - spawn_sh(argv, NULL); -} - -void -spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result) { - (void)web_view; (void)result; - spawn_sh(argv, result); -} - void run_parsed_command(const CommandInfo *c, GArray *a, GString *result) { /* send the COMMAND_EXECUTED event, except for set and event/request commands */ @@ -1254,7 +831,6 @@ parse_command(const char *cmd, const char *params, GString *result) { } } - void move_statusbar() { if (!uzbl.gui.scrolled_win && !uzbl.gui.mainbar) @@ -1587,11 +1163,7 @@ settings_init () { /* Load config file, if any */ 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, NULL, TYPE_STR, tmp, NULL); - g_free(tmp); - } + run_command_file(s->config_file); g_setenv("UZBL_CONFIG", s->config_file, TRUE); } else if (uzbl.state.verbose) printf ("No configuration file loaded.\n"); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index ce42408..8e322e6 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -48,6 +48,7 @@ #endif #include "cookie-jar.h" +#include "commands.h" #define LENGTH(x) (sizeof x / sizeof x[0]) @@ -253,20 +254,15 @@ void catch_sigterm(int s); sigfunc* setup_signal(int signe, sigfunc *shandler); gboolean set_var_value(const gchar *name, gchar *val); -void print(WebKitWebView *page, GArray *argv, GString *result); -void commands_hash(void); -void load_uri(WebKitWebView * web_view, GArray *argv, GString *result); -void chain(WebKitWebView *page, GArray *argv, GString *result); -void close_uzbl(WebKitWebView *page, GArray *argv, GString *result); + +/* Subprocess spawning */ +void spawn(GArray *argv, GString *result, gboolean exec); +void spawn_sh(GArray *argv, GString *result); /* Running commands */ gboolean run_command(const gchar *command, const gchar **args, const gboolean sync, char **output_stdout); -void spawn_async(WebKitWebView *web_view, GArray *argv, GString *result); -void spawn_sh_async(WebKitWebView *web_view, GArray *argv, GString *result); -void spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result); -void spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result); -void spawn_sync_exec(WebKitWebView *web_view, GArray *argv, GString *result); +void run_command_file(const gchar *path); void parse_command(const char *cmd, const char *param, GString *result); void parse_cmd_line(const char *ctl_line, GString *result); @@ -285,14 +281,8 @@ void settings_init(); /* Search functions */ void search_text (WebKitWebView *page, GArray *argv, const gboolean forward); -void search_forward_text (WebKitWebView *page, GArray *argv, GString *result); -void search_reverse_text (WebKitWebView *page, GArray *argv, GString *result); -void search_clear(WebKitWebView *page, GArray *argv, GString *result); -void dehilight (WebKitWebView *page, GArray *argv, GString *result); /* Javascript functions */ -void run_js (WebKitWebView * web_view, GArray *argv, GString *result); -void run_external_js (WebKitWebView * web_view, GArray *argv, GString *result); void eval_js(WebKitWebView *web_view, const gchar *script, GString *result, const gchar *script_file); /* Network functions */ @@ -302,7 +292,6 @@ void handle_authentication (SoupSession *session, gboolean retrying, gpointer user_data); gboolean valid_name(const gchar* name); -void set_var(WebKitWebView *page, GArray *argv, GString *result); void act_dump_config(); void act_dump_config_as_events(); void dump_var_hash(gpointer k, gpointer v, gpointer ud); @@ -311,27 +300,12 @@ void dump_config(); void dump_config_as_events(); void retrieve_geometry(); -void event(WebKitWebView *page, GArray *argv, GString *result); void init_connect_socket(); gboolean remove_socket_from_array(GIOChannel *chan); +void scroll(GtkAdjustment* bar, gchar *amount_str); gint get_click_context(); -void hardcopy(WebKitWebView *page, GArray *argv, GString *result); -void include(WebKitWebView *page, GArray *argv, GString *result); -void show_inspector(WebKitWebView *page, GArray *argv, GString *result); -void add_cookie(WebKitWebView *page, GArray *argv, GString *result); -void delete_cookie(WebKitWebView *page, GArray *argv, GString *result); -void clear_cookies(WebKitWebView *pag, GArray *argv, GString *result); -void download(WebKitWebView *pag, GArray *argv, GString *result); -void builtins(); - -typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result); - -typedef struct { - const gchar *key; - Command function; - gboolean no_split; -} CommandInfo; +gchar* expand(const char* s, guint recurse); const CommandInfo * parse_command_parts(const gchar *line, GArray *a); -- cgit v1.2.3 From 468f35efc44107fc07002638124f63839438aa4c Mon Sep 17 00:00:00 2001 From: David Keijser Date: Tue, 24 May 2011 18:21:09 +0200 Subject: refactor search commands --- src/commands.c | 4 ++-- src/uzbl-core.c | 11 +++++------ src/uzbl-core.h | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/commands.c b/src/commands.c index 28a3b39..87e7876 100644 --- a/src/commands.c +++ b/src/commands.c @@ -366,13 +366,13 @@ search_clear(WebKitWebView *page, GArray *argv, GString *result) { void search_forward_text (WebKitWebView *page, GArray *argv, GString *result) { (void) result; - search_text(page, argv, TRUE); + search_text(page, argv_idx(argv, 0), TRUE); } void search_reverse_text(WebKitWebView *page, GArray *argv, GString *result) { (void) result; - search_text(page, argv, FALSE); + search_text(page, argv_idx(argv, 0), FALSE); } void diff --git a/src/uzbl-core.c b/src/uzbl-core.c index d670774..d284859 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -563,17 +563,16 @@ eval_js(WebKitWebView * web_view, const gchar *script, GString *result, const ch } void -search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { - if (argv_idx(argv, 0) && (*argv_idx(argv, 0) != '\0')) { - if (g_strcmp0 (uzbl.state.searchtx, argv_idx(argv, 0)) != 0) { +search_text (WebKitWebView *page, const gchar *key, const gboolean forward) { + if (key && (*key != '\0')) { + if (g_strcmp0 (uzbl.state.searchtx, key) != 0) { webkit_web_view_unmark_text_matches (page); - webkit_web_view_mark_text_matches (page, argv_idx(argv, 0), FALSE, 0); + webkit_web_view_mark_text_matches (page, key, FALSE, 0); g_free (uzbl.state.searchtx); - uzbl.state.searchtx = g_strdup(argv_idx(argv, 0)); + uzbl.state.searchtx = g_strdup (key); } } - if (uzbl.state.searchtx) { if (uzbl.state.verbose) printf ("Searching: %s\n", uzbl.state.searchtx); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 8e322e6..8108e9a 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -280,7 +280,7 @@ void run_handler(const gchar *act, const gchar *args); void settings_init(); /* Search functions */ -void search_text (WebKitWebView *page, GArray *argv, const gboolean forward); +void search_text (WebKitWebView *page, const gchar *key, const gboolean forward); /* Javascript functions */ void eval_js(WebKitWebView *web_view, const gchar *script, GString *result, const gchar *script_file); -- cgit v1.2.3 From 4bba1396255a1797c57c0b4edcfc4dae5e7ef237 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Tue, 24 May 2011 19:00:00 +0200 Subject: reorganise uzbl-core.h --- src/callbacks.c | 2 +- src/menu.h | 8 ++++++++ src/uzbl-core.h | 47 ++++++++++++++++++----------------------------- 3 files changed, 27 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index a996248..d41c68e 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -8,7 +8,7 @@ #include "events.h" #include "util.h" #include "io.h" - +#include "menu.h" void set_proxy_url() { diff --git a/src/menu.h b/src/menu.h index 8b89f2f..03055e5 100644 --- a/src/menu.h +++ b/src/menu.h @@ -3,6 +3,14 @@ #include +typedef struct { + gchar* name; + gchar* cmd; + gboolean issep; + guint context; + WebKitHitTestResult* hittest; +} MenuItem; + void menu_add(WebKitWebView *page, GArray *argv, GString *result); void menu_add_link(WebKitWebView *page, GArray *argv, GString *result); void menu_add_image(WebKitWebView *page, GArray *argv, GString *result); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 8108e9a..ede271e 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -253,18 +253,31 @@ void update_title(void); void catch_sigterm(int s); sigfunc* setup_signal(int signe, sigfunc *shandler); -gboolean set_var_value(const gchar *name, gchar *val); - /* Subprocess spawning */ void spawn(GArray *argv, GString *result, gboolean exec); void spawn_sh(GArray *argv, GString *result); +/* Configuration variables */ +gboolean set_var_value(const gchar *name, gchar *val); +gboolean valid_name(const gchar* name); +void act_dump_config(); +void act_dump_config_as_events(); +void dump_var_hash(gpointer k, gpointer v, gpointer ud); +void dump_key_hash(gpointer k, gpointer v, gpointer ud); +void dump_config(); +void dump_config_as_events(); + /* Running commands */ +gchar* expand(const char* s, guint recurse); gboolean run_command(const gchar *command, const gchar **args, const gboolean sync, char **output_stdout); void run_command_file(const gchar *path); void parse_command(const char *cmd, const char *param, GString *result); void parse_cmd_line(const char *ctl_line, GString *result); +const CommandInfo * + parse_command_parts(const gchar *line, GArray *a); +void parse_command_arguments(const gchar *p, GArray *a, gboolean no_split); +void run_parsed_command(const CommandInfo *c, GArray *a, GString *result); /* Keyboard events functions */ gboolean key_press_cb(GtkWidget* window, GdkEventKey* event); @@ -276,7 +289,6 @@ void create_scrolled_win(); GtkWidget* create_mainbar(); GtkWidget* create_window(); GtkPlug* create_plug(); -void run_handler(const gchar *act, const gchar *args); void settings_init(); /* Search functions */ @@ -291,38 +303,15 @@ void handle_authentication (SoupSession *session, SoupAuth *auth, gboolean retrying, gpointer user_data); -gboolean valid_name(const gchar* name); -void act_dump_config(); -void act_dump_config_as_events(); -void dump_var_hash(gpointer k, gpointer v, gpointer ud); -void dump_key_hash(gpointer k, gpointer v, gpointer ud); -void dump_config(); -void dump_config_as_events(); -void retrieve_geometry(); void init_connect_socket(); gboolean remove_socket_from_array(GIOChannel *chan); -void scroll(GtkAdjustment* bar, gchar *amount_str); +/* Window */ +void retrieve_geometry(); +void scroll(GtkAdjustment* bar, gchar *amount_str); gint get_click_context(); -gchar* expand(const char* s, guint recurse); - -const CommandInfo * -parse_command_parts(const gchar *line, GArray *a); -void -parse_command_arguments(const gchar *p, GArray *a, gboolean no_split); - -void -run_parsed_command(const CommandInfo *c, GArray *a, GString *result); - -typedef struct { - gchar* name; - gchar* cmd; - gboolean issep; - guint context; - WebKitHitTestResult* hittest; -} MenuItem; #endif /* vi: set et ts=4: */ -- cgit v1.2.3 From 8960722f64afdd1bdf2ad3a0ee2546a322fb30c6 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Wed, 25 May 2011 06:46:55 +0200 Subject: two more commands from uzbl-core --- src/commands.c | 12 ++++++++++++ src/commands.h | 2 ++ src/uzbl-core.c | 10 ---------- src/uzbl-core.h | 2 -- 4 files changed, 14 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/commands.c b/src/commands.c index 87e7876..c2dd578 100644 --- a/src/commands.c +++ b/src/commands.c @@ -440,3 +440,15 @@ spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result) { (void)web_view; (void)result; spawn_sh(argv, result); } + +void +act_dump_config(WebKitWebView *web_view, GArray *argv, GString *result) { + (void)web_view; (void) argv; (void)result; + dump_config(); +} + +void +act_dump_config_as_events(WebKitWebView *web_view, GArray *argv, GString *result) { + (void)web_view; (void) argv; (void)result; + dump_config_as_events(); +} diff --git a/src/commands.h b/src/commands.h index 6cb10b5..b8cf095 100644 --- a/src/commands.h +++ b/src/commands.h @@ -62,5 +62,7 @@ void run_js (WebKitWebView * web_view, GArray *argv, GString *result); void run_external_js (WebKitWebView * web_view, GArray *argv, GString *result); void toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result); void toggle_status (WebKitWebView* page, GArray *argv, GString *result); +void act_dump_config(WebKitWebView* page, GArray *argv, GString *result); +void act_dump_config_as_events(WebKitWebView* page, GArray *argv, GString *result); #endif diff --git a/src/uzbl-core.c b/src/uzbl-core.c index d284859..d252106 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -472,16 +472,6 @@ run_command_file(const gchar *path) { } } -void -act_dump_config() { - dump_config(); -} - -void -act_dump_config_as_events() { - dump_config_as_events(); -} - /* Javascript*/ void eval_js(WebKitWebView * web_view, const gchar *script, GString *result, const char *file) { diff --git a/src/uzbl-core.h b/src/uzbl-core.h index ede271e..a6db25b 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -260,8 +260,6 @@ void spawn_sh(GArray *argv, GString *result); /* Configuration variables */ gboolean set_var_value(const gchar *name, gchar *val); gboolean valid_name(const gchar* name); -void act_dump_config(); -void act_dump_config_as_events(); void dump_var_hash(gpointer k, gpointer v, gpointer ud); void dump_key_hash(gpointer k, gpointer v, gpointer ud); void dump_config(); -- cgit v1.2.3 From b970eacf2fbbe5d082515f2085f3b3d4e471d467 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Wed, 25 May 2011 07:15:35 +0200 Subject: move core variable stuff into variables file --- src/callbacks.c | 1 + src/commands.c | 1 + src/cookie-jar.c | 1 + src/events.c | 3 +- src/inspector.c | 2 +- src/io.c | 1 + src/type.h | 7 ++ src/uzbl-core.c | 233 +------------------------------------------------------ src/uzbl-core.h | 21 ----- src/variables.c | 233 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/variables.h | 30 +++++++ 11 files changed, 278 insertions(+), 255 deletions(-) create mode 100644 src/type.h create mode 100644 src/variables.c create mode 100644 src/variables.h (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index d41c68e..0370889 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -9,6 +9,7 @@ #include "util.h" #include "io.h" #include "menu.h" +#include "type.h" void set_proxy_url() { diff --git a/src/commands.c b/src/commands.c index c2dd578..c4a4d34 100644 --- a/src/commands.c +++ b/src/commands.c @@ -4,6 +4,7 @@ #include "util.h" #include "menu.h" #include "callbacks.h" +#include "variables.h" /* -- command to callback/function map for things we cannot attach to any signals */ CommandInfo cmdlist[] = diff --git a/src/cookie-jar.c b/src/cookie-jar.c index c2ccd62..dd9585b 100644 --- a/src/cookie-jar.c +++ b/src/cookie-jar.c @@ -3,6 +3,7 @@ #include "cookie-jar.h" #include "uzbl-core.h" #include "events.h" +#include "type.h" G_DEFINE_TYPE (UzblCookieJar, soup_cookie_jar_socket, SOUP_TYPE_COOKIE_JAR) diff --git a/src/events.c b/src/events.c index a79a62a..d3da82b 100644 --- a/src/events.c +++ b/src/events.c @@ -6,8 +6,7 @@ #include "uzbl-core.h" #include "events.h" #include "util.h" - -UzblCore uzbl; +#include "type.h" /* Event id to name mapping * Event names must be in the same diff --git a/src/inspector.c b/src/inspector.c index 7665621..d0d86b9 100644 --- a/src/inspector.c +++ b/src/inspector.c @@ -6,7 +6,7 @@ #include "uzbl-core.h" #include "events.h" #include "callbacks.h" - +#include "type.h" void hide_window_cb(GtkWidget *widget, gpointer data) { diff --git a/src/io.c b/src/io.c index 3f8fa2f..062a853 100644 --- a/src/io.c +++ b/src/io.c @@ -6,6 +6,7 @@ #include "io.h" #include "util.h" #include "uzbl-core.h" +#include "type.h" /*@null@*/ gchar* build_stream_name(int type, const gchar* dir) { diff --git a/src/type.h b/src/type.h new file mode 100644 index 0000000..1709128 --- /dev/null +++ b/src/type.h @@ -0,0 +1,7 @@ +/* + * Uzbl Types + */ + +enum ptr_type {TYPE_INT = 1, TYPE_STR, TYPE_FLOAT, + TYPE_NAME, TYPE_FORMATTEDSTR // used by send_event +}; diff --git a/src/uzbl-core.c b/src/uzbl-core.c index d252106..b235e9e 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -37,6 +37,7 @@ #include "util.h" #include "menu.h" #include "io.h" +#include "variables.h" UzblCore uzbl; @@ -67,110 +68,6 @@ GOptionEntry entries[] = { { NULL, 0, 0, 0, NULL, NULL, NULL } }; -/* abbreviations to help keep the table's width humane */ -#define PTR_V_STR(var, d, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = d, .writeable = 1, .func = fun } -#define PTR_V_INT(var, d, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = d, .writeable = 1, .func = fun } -#define PTR_V_FLOAT(var, d, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = d, .writeable = 1, .func = fun } -#define PTR_C_STR(var, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = 0, .writeable = 0, .func = fun } -#define PTR_C_INT(var, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = 0, .writeable = 0, .func = fun } -#define PTR_C_FLOAT(var, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = 0, .writeable = 0, .func = fun } - -const struct var_name_to_ptr_t { - const char *name; - uzbl_cmdprop cp; -} var_name_to_ptr[] = { -/* variable name pointer to variable in code dump callback function */ -/* ---------------------------------------------------------------------------------------------- */ - { "uri", PTR_V_STR(uzbl.state.uri, 1, cmd_load_uri)}, - { "verbose", PTR_V_INT(uzbl.state.verbose, 1, NULL)}, - { "print_events", PTR_V_INT(uzbl.state.events_stdout, 1, NULL)}, - { "inject_html", PTR_V_STR(uzbl.behave.inject_html, 0, cmd_inject_html)}, - { "geometry", PTR_V_STR(uzbl.gui.geometry, 1, cmd_set_geometry)}, - { "show_status", PTR_V_INT(uzbl.behave.show_status, 1, cmd_set_status)}, - { "status_top", PTR_V_INT(uzbl.behave.status_top, 1, move_statusbar)}, - { "status_format", PTR_V_STR(uzbl.behave.status_format, 1, NULL)}, - { "status_format_right", PTR_V_STR(uzbl.behave.status_format_right, 1, NULL)}, - { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, set_status_background)}, - { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, NULL)}, - { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, NULL)}, - { "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)}, - { "forward_keys", PTR_V_INT(uzbl.behave.forward_keys, 1, NULL)}, - { "authentication_handler", PTR_V_STR(uzbl.behave.authentication_handler, 1, set_authentication_handler)}, - { "scheme_handler", PTR_V_STR(uzbl.behave.scheme_handler, 1, NULL)}, - { "download_handler", PTR_V_STR(uzbl.behave.download_handler, 1, NULL)}, - { "fifo_dir", PTR_V_STR(uzbl.behave.fifo_dir, 1, cmd_fifo_dir)}, - { "socket_dir", PTR_V_STR(uzbl.behave.socket_dir, 1, cmd_socket_dir)}, - { "http_debug", PTR_V_INT(uzbl.behave.http_debug, 1, cmd_http_debug)}, - { "shell_cmd", PTR_V_STR(uzbl.behave.shell_cmd, 1, NULL)}, - { "proxy_url", PTR_V_STR(uzbl.net.proxy_url, 1, set_proxy_url)}, - { "max_conns", PTR_V_INT(uzbl.net.max_conns, 1, cmd_max_conns)}, - { "max_conns_host", PTR_V_INT(uzbl.net.max_conns_host, 1, cmd_max_conns_host)}, - { "useragent", PTR_V_STR(uzbl.net.useragent, 1, cmd_useragent)}, - { "accept_languages", PTR_V_STR(uzbl.net.accept_languages, 1, set_accept_languages)}, - { "javascript_windows", PTR_V_INT(uzbl.behave.javascript_windows, 1, cmd_javascript_windows)}, - /* requires webkit >=1.1.14 */ - { "view_source", PTR_V_INT(uzbl.behave.view_source, 0, cmd_view_source)}, - - /* exported WebKitWebSettings properties */ - { "zoom_level", PTR_V_FLOAT(uzbl.behave.zoom_level, 1, cmd_zoom_level)}, - { "zoom_type", PTR_V_INT(uzbl.behave.zoom_type, 1, cmd_set_zoom_type)}, - { "font_size", PTR_V_INT(uzbl.behave.font_size, 1, cmd_font_size)}, - { "default_font_family", PTR_V_STR(uzbl.behave.default_font_family, 1, cmd_default_font_family)}, - { "monospace_font_family", PTR_V_STR(uzbl.behave.monospace_font_family, 1, cmd_monospace_font_family)}, - { "cursive_font_family", PTR_V_STR(uzbl.behave.cursive_font_family, 1, cmd_cursive_font_family)}, - { "sans_serif_font_family", PTR_V_STR(uzbl.behave.sans_serif_font_family, 1, cmd_sans_serif_font_family)}, - { "serif_font_family", PTR_V_STR(uzbl.behave.serif_font_family, 1, cmd_serif_font_family)}, - { "fantasy_font_family", PTR_V_STR(uzbl.behave.fantasy_font_family, 1, cmd_fantasy_font_family)}, - { "monospace_size", PTR_V_INT(uzbl.behave.monospace_size, 1, cmd_font_size)}, - { "minimum_font_size", PTR_V_INT(uzbl.behave.minimum_font_size, 1, cmd_minimum_font_size)}, - { "enable_pagecache", PTR_V_INT(uzbl.behave.enable_pagecache, 1, cmd_enable_pagecache)}, - { "disable_plugins", PTR_V_INT(uzbl.behave.disable_plugins, 1, cmd_disable_plugins)}, - { "disable_scripts", PTR_V_INT(uzbl.behave.disable_scripts, 1, cmd_disable_scripts)}, - { "autoload_images", PTR_V_INT(uzbl.behave.autoload_img, 1, cmd_autoload_img)}, - { "autoshrink_images", PTR_V_INT(uzbl.behave.autoshrink_img, 1, cmd_autoshrink_img)}, - { "enable_spellcheck", PTR_V_INT(uzbl.behave.enable_spellcheck, 1, cmd_enable_spellcheck)}, - { "enable_private", PTR_V_INT(uzbl.behave.enable_private, 1, cmd_enable_private)}, - { "print_backgrounds", PTR_V_INT(uzbl.behave.print_bg, 1, cmd_print_bg)}, - { "stylesheet_uri", PTR_V_STR(uzbl.behave.style_uri, 1, cmd_style_uri)}, - { "resizable_text_areas", PTR_V_INT(uzbl.behave.resizable_txt, 1, cmd_resizable_txt)}, - { "default_encoding", PTR_V_STR(uzbl.behave.default_encoding, 1, cmd_default_encoding)}, - { "current_encoding", PTR_V_STR(uzbl.behave.current_encoding, 1, set_current_encoding)}, - { "enforce_96_dpi", PTR_V_INT(uzbl.behave.enforce_96dpi, 1, cmd_enforce_96dpi)}, - { "caret_browsing", PTR_V_INT(uzbl.behave.caret_browsing, 1, cmd_caret_browsing)}, - -#if !GTK_CHECK_VERSION(3,0,0) - { "scrollbars_visible", PTR_V_INT(uzbl.gui.scrollbars_visible, 1, cmd_scrollbars_visibility)}, -#endif - - /* constants (not dumpable or writeable) */ - { "WEBKIT_MAJOR", PTR_C_INT(uzbl.info.webkit_major, NULL)}, - { "WEBKIT_MINOR", PTR_C_INT(uzbl.info.webkit_minor, NULL)}, - { "WEBKIT_MICRO", PTR_C_INT(uzbl.info.webkit_micro, NULL)}, - { "ARCH_UZBL", PTR_C_STR(uzbl.info.arch, NULL)}, - { "COMMIT", PTR_C_STR(uzbl.info.commit, NULL)}, - { "TITLE", PTR_C_STR(uzbl.gui.main_title, NULL)}, - { "SELECTED_URI", PTR_C_STR(uzbl.state.selected_url, NULL)}, - { "NAME", PTR_C_STR(uzbl.state.instance_name, NULL)}, - { "PID", PTR_C_STR(uzbl.info.pid_str, NULL)}, - { "_", PTR_C_STR(uzbl.state.last_result, NULL)}, - - { NULL, {.ptr.s = NULL, .type = TYPE_INT, .dump = 0, .writeable = 0, .func = NULL}} -}; - -/* construct a hash from the var_name_to_ptr array for quick access */ -void -create_var_to_name_hash() { - 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, - (gpointer) n2v_p->name, - (gpointer) &n2v_p->cp); - n2v_p++; - } -} - - /* --- UTILITY FUNCTIONS --- */ enum exp_type { EXP_ERR, EXP_SIMPLE_VAR, EXP_BRACED_VAR, EXP_EXPR, EXP_JS, EXP_ESCAPE @@ -851,97 +748,6 @@ valid_name(const gchar* name) { 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; - - g_assert(val != NULL); - - if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { - if(!c->writeable) return FALSE; - - switch(c->type) { - case TYPE_STR: - buf = g_strdup(val); - g_free(*c->ptr.s); - *c->ptr.s = buf; - break; - case TYPE_INT: - *c->ptr.i = (int)strtoul(val, &endp, 10); - break; - case TYPE_FLOAT: - *c->ptr.f = strtod(val, &endp); - break; - default: - g_assert_not_reached(); - } - - 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(!valid_name(name)) { - if (uzbl.state.verbose) - printf("Invalid variable name: %s\n", name); - return FALSE; - } - - /* custom vars */ - c = g_malloc(sizeof(uzbl_cmdprop)); - c->type = TYPE_STR; - c->dump = 0; - c->func = NULL; - c->writeable = 1; - buf = g_strdup(val); - c->ptr.s = g_malloc(sizeof(char *)); - *c->ptr.s = buf; - g_hash_table_insert(uzbl.comm.proto_var, - g_strdup(name), (gpointer) c); - - send_event (VARIABLE_SET, NULL, - TYPE_NAME, name, - TYPE_NAME, "str", - TYPE_STR, buf, - NULL); - } - update_title(); - return TRUE; -} - void parse_cmd_line(const char *ctl_line, GString *result) { gchar *work_string = g_strdup(ctl_line); @@ -1218,41 +1024,6 @@ void handle_authentication (SoupSession *session, SoupMessage *msg, SoupAuth *au } } -void -dump_var_hash(gpointer k, gpointer v, gpointer ud) { - (void) ud; - uzbl_cmdprop *c = v; - - if(!c->dump) - return; - - if(c->type == TYPE_STR) - printf("set %s = %s\n", (char *)k, *c->ptr.s ? *c->ptr.s : " "); - else if(c->type == TYPE_INT) - printf("set %s = %d\n", (char *)k, *c->ptr.i); - else if(c->type == TYPE_FLOAT) - printf("set %s = %f\n", (char *)k, *c->ptr.f); -} - -void -dump_config() { - g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash, NULL); -} - -void -dump_var_hash_as_event(gpointer k, gpointer v, gpointer ud) { - (void) ud; - uzbl_cmdprop *c = v; - - if(c->dump) - send_set_var_event(k, c); -} - -void -dump_config_as_events() { - g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash_as_event, NULL); -} - void retrieve_geometry() { int w, h, x, y; @@ -1324,7 +1095,7 @@ initialize(int argc, char** argv) { commands_hash(); - create_var_to_name_hash(); + variables_hash(); /* GUI */ gtk_init(&argc, &argv); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index a6db25b..c4fb94e 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -229,22 +229,6 @@ extern UzblCore uzbl; /* Main Uzbl object */ typedef void sigfunc(int); -/* Uzbl variables */ -enum ptr_type {TYPE_INT = 1, TYPE_STR, TYPE_FLOAT, - TYPE_NAME, TYPE_FORMATTEDSTR // used by send_event -}; -typedef struct { - enum ptr_type type; - union { - int *i; - float *f; - gchar **s; - } ptr; - int dump; - int writeable; - /*@null@*/ void (*func)(void); -} uzbl_cmdprop; - /* Functions */ void clean_up(void); void update_title(void); @@ -258,12 +242,7 @@ void spawn(GArray *argv, GString *result, gboolean exec); void spawn_sh(GArray *argv, GString *result); /* Configuration variables */ -gboolean set_var_value(const gchar *name, gchar *val); gboolean valid_name(const gchar* name); -void dump_var_hash(gpointer k, gpointer v, gpointer ud); -void dump_key_hash(gpointer k, gpointer v, gpointer ud); -void dump_config(); -void dump_config_as_events(); /* Running commands */ gchar* expand(const char* s, guint recurse); diff --git a/src/variables.c b/src/variables.c new file mode 100644 index 0000000..f62b54e --- /dev/null +++ b/src/variables.c @@ -0,0 +1,233 @@ +#include "variables.h" +#include "uzbl-core.h" +#include "callbacks.h" +#include "events.h" + +/* abbreviations to help keep the table's width humane */ +#define PTR_V_STR(var, d, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = d, .writeable = 1, .func = fun } +#define PTR_V_INT(var, d, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = d, .writeable = 1, .func = fun } +#define PTR_V_FLOAT(var, d, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = d, .writeable = 1, .func = fun } +#define PTR_C_STR(var, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = 0, .writeable = 0, .func = fun } +#define PTR_C_INT(var, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = 0, .writeable = 0, .func = fun } +#define PTR_C_FLOAT(var, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = 0, .writeable = 0, .func = fun } + +const struct var_name_to_ptr_t { + const char *name; + uzbl_cmdprop cp; +} var_name_to_ptr[] = { +/* variable name pointer to variable in code dump callback function */ +/* ---------------------------------------------------------------------------------------------- */ + { "uri", PTR_V_STR(uzbl.state.uri, 1, cmd_load_uri)}, + { "verbose", PTR_V_INT(uzbl.state.verbose, 1, NULL)}, + { "print_events", PTR_V_INT(uzbl.state.events_stdout, 1, NULL)}, + { "inject_html", PTR_V_STR(uzbl.behave.inject_html, 0, cmd_inject_html)}, + { "geometry", PTR_V_STR(uzbl.gui.geometry, 1, cmd_set_geometry)}, + { "show_status", PTR_V_INT(uzbl.behave.show_status, 1, cmd_set_status)}, + { "status_top", PTR_V_INT(uzbl.behave.status_top, 1, move_statusbar)}, + { "status_format", PTR_V_STR(uzbl.behave.status_format, 1, NULL)}, + { "status_format_right", PTR_V_STR(uzbl.behave.status_format_right, 1, NULL)}, + { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, set_status_background)}, + { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, NULL)}, + { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, NULL)}, + { "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)}, + { "forward_keys", PTR_V_INT(uzbl.behave.forward_keys, 1, NULL)}, + { "authentication_handler", PTR_V_STR(uzbl.behave.authentication_handler, 1, set_authentication_handler)}, + { "scheme_handler", PTR_V_STR(uzbl.behave.scheme_handler, 1, NULL)}, + { "download_handler", PTR_V_STR(uzbl.behave.download_handler, 1, NULL)}, + { "fifo_dir", PTR_V_STR(uzbl.behave.fifo_dir, 1, cmd_fifo_dir)}, + { "socket_dir", PTR_V_STR(uzbl.behave.socket_dir, 1, cmd_socket_dir)}, + { "http_debug", PTR_V_INT(uzbl.behave.http_debug, 1, cmd_http_debug)}, + { "shell_cmd", PTR_V_STR(uzbl.behave.shell_cmd, 1, NULL)}, + { "proxy_url", PTR_V_STR(uzbl.net.proxy_url, 1, set_proxy_url)}, + { "max_conns", PTR_V_INT(uzbl.net.max_conns, 1, cmd_max_conns)}, + { "max_conns_host", PTR_V_INT(uzbl.net.max_conns_host, 1, cmd_max_conns_host)}, + { "useragent", PTR_V_STR(uzbl.net.useragent, 1, cmd_useragent)}, + { "accept_languages", PTR_V_STR(uzbl.net.accept_languages, 1, set_accept_languages)}, + { "javascript_windows", PTR_V_INT(uzbl.behave.javascript_windows, 1, cmd_javascript_windows)}, + /* requires webkit >=1.1.14 */ + { "view_source", PTR_V_INT(uzbl.behave.view_source, 0, cmd_view_source)}, + + /* exported WebKitWebSettings properties */ + { "zoom_level", PTR_V_FLOAT(uzbl.behave.zoom_level, 1, cmd_zoom_level)}, + { "zoom_type", PTR_V_INT(uzbl.behave.zoom_type, 1, cmd_set_zoom_type)}, + { "font_size", PTR_V_INT(uzbl.behave.font_size, 1, cmd_font_size)}, + { "default_font_family", PTR_V_STR(uzbl.behave.default_font_family, 1, cmd_default_font_family)}, + { "monospace_font_family", PTR_V_STR(uzbl.behave.monospace_font_family, 1, cmd_monospace_font_family)}, + { "cursive_font_family", PTR_V_STR(uzbl.behave.cursive_font_family, 1, cmd_cursive_font_family)}, + { "sans_serif_font_family", PTR_V_STR(uzbl.behave.sans_serif_font_family, 1, cmd_sans_serif_font_family)}, + { "serif_font_family", PTR_V_STR(uzbl.behave.serif_font_family, 1, cmd_serif_font_family)}, + { "fantasy_font_family", PTR_V_STR(uzbl.behave.fantasy_font_family, 1, cmd_fantasy_font_family)}, + { "monospace_size", PTR_V_INT(uzbl.behave.monospace_size, 1, cmd_font_size)}, + { "minimum_font_size", PTR_V_INT(uzbl.behave.minimum_font_size, 1, cmd_minimum_font_size)}, + { "enable_pagecache", PTR_V_INT(uzbl.behave.enable_pagecache, 1, cmd_enable_pagecache)}, + { "disable_plugins", PTR_V_INT(uzbl.behave.disable_plugins, 1, cmd_disable_plugins)}, + { "disable_scripts", PTR_V_INT(uzbl.behave.disable_scripts, 1, cmd_disable_scripts)}, + { "autoload_images", PTR_V_INT(uzbl.behave.autoload_img, 1, cmd_autoload_img)}, + { "autoshrink_images", PTR_V_INT(uzbl.behave.autoshrink_img, 1, cmd_autoshrink_img)}, + { "enable_spellcheck", PTR_V_INT(uzbl.behave.enable_spellcheck, 1, cmd_enable_spellcheck)}, + { "enable_private", PTR_V_INT(uzbl.behave.enable_private, 1, cmd_enable_private)}, + { "print_backgrounds", PTR_V_INT(uzbl.behave.print_bg, 1, cmd_print_bg)}, + { "stylesheet_uri", PTR_V_STR(uzbl.behave.style_uri, 1, cmd_style_uri)}, + { "resizable_text_areas", PTR_V_INT(uzbl.behave.resizable_txt, 1, cmd_resizable_txt)}, + { "default_encoding", PTR_V_STR(uzbl.behave.default_encoding, 1, cmd_default_encoding)}, + { "current_encoding", PTR_V_STR(uzbl.behave.current_encoding, 1, set_current_encoding)}, + { "enforce_96_dpi", PTR_V_INT(uzbl.behave.enforce_96dpi, 1, cmd_enforce_96dpi)}, + { "caret_browsing", PTR_V_INT(uzbl.behave.caret_browsing, 1, cmd_caret_browsing)}, + +#if !GTK_CHECK_VERSION(3,0,0) + { "scrollbars_visible", PTR_V_INT(uzbl.gui.scrollbars_visible, 1, cmd_scrollbars_visibility)}, +#endif + + /* constants (not dumpable or writeable) */ + { "WEBKIT_MAJOR", PTR_C_INT(uzbl.info.webkit_major, NULL)}, + { "WEBKIT_MINOR", PTR_C_INT(uzbl.info.webkit_minor, NULL)}, + { "WEBKIT_MICRO", PTR_C_INT(uzbl.info.webkit_micro, NULL)}, + { "ARCH_UZBL", PTR_C_STR(uzbl.info.arch, NULL)}, + { "COMMIT", PTR_C_STR(uzbl.info.commit, NULL)}, + { "TITLE", PTR_C_STR(uzbl.gui.main_title, NULL)}, + { "SELECTED_URI", PTR_C_STR(uzbl.state.selected_url, NULL)}, + { "NAME", PTR_C_STR(uzbl.state.instance_name, NULL)}, + { "PID", PTR_C_STR(uzbl.info.pid_str, NULL)}, + { "_", PTR_C_STR(uzbl.state.last_result, NULL)}, + + { NULL, {.ptr.s = NULL, .type = TYPE_INT, .dump = 0, .writeable = 0, .func = NULL}} +}; + +/* construct a hash from the var_name_to_ptr array for quick access */ +void +variables_hash() { + 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, + (gpointer) n2v_p->name, + (gpointer) &n2v_p->cp); + n2v_p++; + } +} + +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; + + g_assert(val != NULL); + + if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { + if(!c->writeable) return FALSE; + + switch(c->type) { + case TYPE_STR: + buf = g_strdup(val); + g_free(*c->ptr.s); + *c->ptr.s = buf; + break; + case TYPE_INT: + *c->ptr.i = (int)strtoul(val, &endp, 10); + break; + case TYPE_FLOAT: + *c->ptr.f = strtod(val, &endp); + break; + default: + g_assert_not_reached(); + } + + 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(!valid_name(name)) { + if (uzbl.state.verbose) + printf("Invalid variable name: %s\n", name); + return FALSE; + } + + /* custom vars */ + c = g_malloc(sizeof(uzbl_cmdprop)); + c->type = TYPE_STR; + c->dump = 0; + c->func = NULL; + c->writeable = 1; + buf = g_strdup(val); + c->ptr.s = g_malloc(sizeof(char *)); + *c->ptr.s = buf; + g_hash_table_insert(uzbl.comm.proto_var, + g_strdup(name), (gpointer) c); + + send_event (VARIABLE_SET, NULL, + TYPE_NAME, name, + TYPE_NAME, "str", + TYPE_STR, buf, + NULL); + } + update_title(); + return TRUE; +} + +void +dump_var_hash(gpointer k, gpointer v, gpointer ud) { + (void) ud; + uzbl_cmdprop *c = v; + + if(!c->dump) + return; + + if(c->type == TYPE_STR) + printf("set %s = %s\n", (char *)k, *c->ptr.s ? *c->ptr.s : " "); + else if(c->type == TYPE_INT) + printf("set %s = %d\n", (char *)k, *c->ptr.i); + else if(c->type == TYPE_FLOAT) + printf("set %s = %f\n", (char *)k, *c->ptr.f); +} + +void +dump_config() { + g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash, NULL); +} + +void +dump_var_hash_as_event(gpointer k, gpointer v, gpointer ud) { + (void) ud; + uzbl_cmdprop *c = v; + + if(c->dump) + send_set_var_event(k, c); +} + +void +dump_config_as_events() { + g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash_as_event, NULL); +} diff --git a/src/variables.h b/src/variables.h new file mode 100644 index 0000000..653a718 --- /dev/null +++ b/src/variables.h @@ -0,0 +1,30 @@ +/* + * Uzbl Variables + */ + +#ifndef __VARIABLES__ +#define __VARIABLES__ + +#include +#include "type.h" + +/* Uzbl variables */ + +typedef struct { + enum ptr_type type; + union { + int *i; + float *f; + gchar **s; + } ptr; + int dump; + int writeable; + /*@null@*/ void (*func)(void); +} uzbl_cmdprop; + +gboolean set_var_value(const gchar *name, gchar *val); +void variables_hash(); +void dump_config(); +void dump_config_as_events(); + +#endif -- cgit v1.2.3 From 31b12cc2715db2da0b90bab9b51f33438b7af1c4 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Fri, 27 May 2011 03:48:31 -0600 Subject: wrap the mainbar_label_left when it gets too long. fixes the window resize bug, hopefully for good. --- src/uzbl-core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 693f3ce..09b1a3c 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1485,7 +1485,6 @@ create_scrolled_win() { NULL); } - GtkWidget* create_mainbar() { GUI *g = &uzbl.gui; @@ -1498,6 +1497,10 @@ create_mainbar() { gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_left), 0, 0); gtk_misc_set_padding (GTK_MISC(g->mainbar_label_left), 2, 2); + /* wrap the label when it gets too long */ + /* (otherwise it expands the window, which is not what we want) */ + gtk_label_set_line_wrap(GTK_LABEL(g->mainbar_label_left), TRUE); + /* create right panel */ g->mainbar_label_right = gtk_label_new (""); gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_right), TRUE); -- cgit v1.2.3 From a4d8fd4752ad3cda7ed594a6fc0fe5fae6c4d906 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Fri, 27 May 2011 03:49:52 -0600 Subject: rename the window "Uzbl", spaces don't play well with theming --- src/uzbl-core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 09b1a3c..9837a27 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1537,8 +1537,8 @@ create_window() { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 800, 600); - gtk_widget_set_name (window, "Uzbl browser"); - gtk_window_set_title(GTK_WINDOW(window), "Uzbl browser"); + gtk_widget_set_name (window, "Uzbl"); + gtk_window_set_title(GTK_WINDOW(window), "Uzbl"); #if GTK_CHECK_VERSION(3,0,0) gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE); -- cgit v1.2.3 From dbae85a36051ac0127c01e01ddec3078ee4ffbd4 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Fri, 27 May 2011 03:51:19 -0600 Subject: drop the set_geometry_hints stuff, it never worked anyhow --- src/uzbl-core.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 9837a27..6dd7a30 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1544,12 +1544,6 @@ create_window() { gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE); #endif - /* the window should never make itself bigger. */ - GdkGeometry hints = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - hints.min_height = 1; - hints.min_width = 1; - gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL, &hints, GDK_HINT_MIN_SIZE); - g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL); g_signal_connect (G_OBJECT (window), "configure-event", G_CALLBACK (configure_event_cb), NULL); -- cgit v1.2.3 From 41e8b1eeb2b9160bbd1f622dffc1b0da51c6bc2c Mon Sep 17 00:00:00 2001 From: David Keijser Date: Mon, 30 May 2011 06:49:18 +0200 Subject: move variable callback functions into variables.c --- src/callbacks.c | 314 -------------------------------------------------------- src/callbacks.h | 133 ------------------------ src/variables.c | 313 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/variables.h | 47 +++++++++ 4 files changed, 360 insertions(+), 447 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 0370889..5bdcb55 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -6,323 +6,9 @@ #include "uzbl-core.h" #include "callbacks.h" #include "events.h" -#include "util.h" -#include "io.h" #include "menu.h" #include "type.h" -void -set_proxy_url() { - const gchar *url = uzbl.net.proxy_url; - SoupSession *session = uzbl.net.soup_session; - SoupURI *soup_uri = NULL; - - if (url != NULL || *url != 0 || *url != ' ') - soup_uri = soup_uri_new(url); - - g_object_set(G_OBJECT(session), SOUP_SESSION_PROXY_URI, soup_uri, NULL); - - if(soup_uri) - soup_uri_free(soup_uri); -} - - -void -set_authentication_handler() { - /* Check if WEBKIT_TYPE_SOUP_AUTH_DIALOG feature is set */ - GSList *flist = soup_session_get_features (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG); - guint feature_is_set = g_slist_length(flist); - g_slist_free(flist); - - if (uzbl.behave.authentication_handler == NULL || *uzbl.behave.authentication_handler == 0) { - if (!feature_is_set) - soup_session_add_feature_by_type - (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG); - } else { - if (feature_is_set) - soup_session_remove_feature_by_type - (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG); - } - return; -} - - -void -set_status_background() { - /* labels and hboxes do not draw their own background. applying this - * on the vbox/main_window is ok as the statusbar is the only affected - * widget. (if not, we could also use GtkEventBox) */ - GtkWidget* widget = uzbl.gui.main_window ? uzbl.gui.main_window : GTK_WIDGET (uzbl.gui.plug); - -#if GTK_CHECK_VERSION(2,91,0) - GdkRGBA color; - gdk_rgba_parse (&color, uzbl.behave.status_background); - gtk_widget_override_background_color (widget, GTK_STATE_NORMAL, &color); -#else - GdkColor color; - gdk_color_parse (uzbl.behave.status_background, &color); - gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color); -#endif -} - - -void -set_icon() { - if(file_exists(uzbl.gui.icon)) { - if (uzbl.gui.main_window) - gtk_window_set_icon_from_file (GTK_WINDOW (uzbl.gui.main_window), uzbl.gui.icon, NULL); - } else { - g_printerr ("Icon \"%s\" not found. ignoring.\n", uzbl.gui.icon); - } -} - -void -cmd_set_geometry() { - int ret=0, x=0, y=0; - unsigned int w=0, h=0; - if(uzbl.gui.geometry) { - if(uzbl.gui.geometry[0] == 'm') { /* m/maximize/maximized */ - gtk_window_maximize((GtkWindow *)(uzbl.gui.main_window)); - } else { - /* we used to use gtk_window_parse_geometry() but that didn't work how it was supposed to */ - ret = XParseGeometry(uzbl.gui.geometry, &x, &y, &w, &h); - if(ret & XValue) - gtk_window_move((GtkWindow *)uzbl.gui.main_window, x, y); - if(ret & WidthValue) - gtk_window_resize((GtkWindow *)uzbl.gui.main_window, w, h); - } - } - - /* update geometry var with the actual geometry - this is necessary as some WMs don't seem to honour - the above setting and we don't want to end up with - wrong geometry information - */ - retrieve_geometry(); -} - -void -cmd_set_status() { - if (!uzbl.behave.show_status) { - gtk_widget_hide(uzbl.gui.mainbar); - } else { - gtk_widget_show(uzbl.gui.mainbar); - } - update_title(); -} - -/* is the given string made up entirely of decimal digits? */ -gboolean -string_is_integer(const char *s) { - return (strspn(s, "0123456789") == strlen(s)); -} - -void -cmd_load_uri() { - const gchar *uri = uzbl.state.uri; - - gchar *newuri; - SoupURI *soup_uri; - - /* Strip leading whitespaces */ - while (*uri && isspace(*uri)) - uri++; - - /* evaluate javascript: URIs */ - if (!strncmp (uri, "javascript:", 11)) { - eval_js(uzbl.gui.web_view, uri, NULL, "javascript:"); - return; - } - - /* attempt to parse the URI */ - soup_uri = soup_uri_new(uri); - - if (!soup_uri) { - /* it's not a valid URI, maybe it's a path on the filesystem. */ - const gchar *fullpath; - if (g_path_is_absolute (uri)) - fullpath = uri; - else { - gchar *wd = g_get_current_dir (); - fullpath = g_build_filename (wd, uri, NULL); - g_free(wd); - } - - struct stat stat_result; - if (! g_stat(fullpath, &stat_result)) - newuri = g_strconcat("file://", fullpath, NULL); - else - newuri = g_strconcat("http://", uri, NULL); - } else { - if(soup_uri->host == NULL && string_is_integer(soup_uri->path)) - /* the user probably typed in a host:port without a scheme */ - newuri = g_strconcat("http://", uri, NULL); - else - newuri = g_strdup(uri); - - soup_uri_free(soup_uri); - } - - webkit_web_view_load_uri (uzbl.gui.web_view, newuri); - g_free (newuri); -} - -void -cmd_max_conns() { - g_object_set(G_OBJECT(uzbl.net.soup_session), - SOUP_SESSION_MAX_CONNS, uzbl.net.max_conns, NULL); -} - -void -cmd_max_conns_host() { - g_object_set(G_OBJECT(uzbl.net.soup_session), - SOUP_SESSION_MAX_CONNS_PER_HOST, uzbl.net.max_conns_host, NULL); -} - -void -cmd_http_debug() { - 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)); -} - -GObject* -view_settings() { - return G_OBJECT(webkit_web_view_get_settings(uzbl.gui.web_view)); -} - -void -cmd_font_size() { - GObject *ws = view_settings(); - if (uzbl.behave.font_size > 0) { - g_object_set (ws, "default-font-size", uzbl.behave.font_size, NULL); - } - - if (uzbl.behave.monospace_size > 0) { - g_object_set (ws, "default-monospace-font-size", - uzbl.behave.monospace_size, NULL); - } else { - g_object_set (ws, "default-monospace-font-size", - uzbl.behave.font_size, NULL); - } -} - -void -cmd_zoom_level() { - webkit_web_view_set_zoom_level (uzbl.gui.web_view, uzbl.behave.zoom_level); -} - -#define EXPOSE_WEBKIT_VIEW_SETTINGS(SYM, STORAGE, PROPERTY) void cmd_##SYM() { \ - g_object_set(view_settings(), (PROPERTY), (STORAGE), NULL); \ -} - -EXPOSE_WEBKIT_VIEW_SETTINGS(default_font_family, uzbl.behave.default_font_family, "default-font-family") -EXPOSE_WEBKIT_VIEW_SETTINGS(monospace_font_family, uzbl.behave.monospace_font_family, "monospace-font-family") -EXPOSE_WEBKIT_VIEW_SETTINGS(sans_serif_font_family, uzbl.behave.sans_serif_font_family, "sans_serif-font-family") -EXPOSE_WEBKIT_VIEW_SETTINGS(serif_font_family, uzbl.behave.serif_font_family, "serif-font-family") -EXPOSE_WEBKIT_VIEW_SETTINGS(cursive_font_family, uzbl.behave.cursive_font_family, "cursive-font-family") -EXPOSE_WEBKIT_VIEW_SETTINGS(fantasy_font_family, uzbl.behave.fantasy_font_family, "fantasy-font-family") - -EXPOSE_WEBKIT_VIEW_SETTINGS(minimum_font_size, uzbl.behave.minimum_font_size, "minimum_font_size") - -EXPOSE_WEBKIT_VIEW_SETTINGS(disable_plugins, !uzbl.behave.disable_plugins, "enable-plugins") -EXPOSE_WEBKIT_VIEW_SETTINGS(disable_scripts, !uzbl.behave.disable_scripts, "enable-scripts") - -EXPOSE_WEBKIT_VIEW_SETTINGS(javascript_windows, uzbl.behave.javascript_windows, "javascript-can-open-windows-automatically") - -EXPOSE_WEBKIT_VIEW_SETTINGS(autoload_img, uzbl.behave.autoload_img, "auto-load-images") -EXPOSE_WEBKIT_VIEW_SETTINGS(autoshrink_img, uzbl.behave.autoshrink_img, "auto-shrink-images") - -EXPOSE_WEBKIT_VIEW_SETTINGS(enable_pagecache, uzbl.behave.enable_pagecache, "enable-page-cache") -EXPOSE_WEBKIT_VIEW_SETTINGS(enable_private, uzbl.behave.enable_private, "enable-private-browsing") - -EXPOSE_WEBKIT_VIEW_SETTINGS(enable_spellcheck, uzbl.behave.enable_spellcheck, "enable-spell-checking") -EXPOSE_WEBKIT_VIEW_SETTINGS(resizable_txt, uzbl.behave.resizable_txt, "resizable-text-areas") - -EXPOSE_WEBKIT_VIEW_SETTINGS(style_uri, uzbl.behave.style_uri, "user-stylesheet-uri") -EXPOSE_WEBKIT_VIEW_SETTINGS(print_bg, uzbl.behave.print_bg, "print-backgrounds") -EXPOSE_WEBKIT_VIEW_SETTINGS(enforce_96dpi, uzbl.behave.enforce_96dpi, "enforce-96-dpi") - -EXPOSE_WEBKIT_VIEW_SETTINGS(caret_browsing, uzbl.behave.caret_browsing, "enable-caret-browsing") - -EXPOSE_WEBKIT_VIEW_SETTINGS(default_encoding, uzbl.behave.default_encoding, "default-encoding") - -void -set_current_encoding() { - gchar *encoding = uzbl.behave.current_encoding; - if(strlen(encoding) == 0) - encoding = NULL; - - webkit_web_view_set_custom_encoding(uzbl.gui.web_view, encoding); -} - -void -cmd_fifo_dir() { - uzbl.behave.fifo_dir = init_fifo(uzbl.behave.fifo_dir); -} - -void -cmd_socket_dir() { - uzbl.behave.socket_dir = init_socket(uzbl.behave.socket_dir); -} - -void -cmd_inject_html() { - if(uzbl.behave.inject_html) { - webkit_web_view_load_html_string (uzbl.gui.web_view, - uzbl.behave.inject_html, NULL); - } -} - -void -cmd_useragent() { - if (*uzbl.net.useragent == ' ') { - g_free (uzbl.net.useragent); - uzbl.net.useragent = NULL; - } else { - g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_USER_AGENT, - uzbl.net.useragent, NULL); - } -} - -void -set_accept_languages() { - if (*uzbl.net.accept_languages == ' ') { - g_free (uzbl.net.accept_languages); - uzbl.net.accept_languages = NULL; - } else { - g_object_set(G_OBJECT(uzbl.net.soup_session), - SOUP_SESSION_ACCEPT_LANGUAGE, uzbl.net.accept_languages, NULL); - } -} - -void -cmd_scrollbars_visibility() { - GtkPolicyType policy = uzbl.gui.scrollbars_visible ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER; - - gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), policy, policy ); -} - -/* requires webkit >=1.1.14 */ -void -cmd_view_source() { - webkit_web_view_set_view_source_mode(uzbl.gui.web_view, - (gboolean) uzbl.behave.view_source); -} - -void -cmd_set_zoom_type () { - if(uzbl.behave.zoom_type) - webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, TRUE); - else - webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, FALSE); -} - void link_hover_cb (WebKitWebView *page, const gchar *title, const gchar *link, gpointer data) { (void) page; (void) title; (void) data; diff --git a/src/callbacks.h b/src/callbacks.h index 2b333a3..7af4332 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -3,139 +3,6 @@ ** (c) 2009 by Robert Manea et al. */ -void -cmd_load_uri(); - -void -cmd_set_status(); - -void -set_proxy_url(); - -void -set_authentication_handler(); - -void -set_status_background(); - -void -set_icon(); - -void -move_statusbar(); - -void -cmd_http_debug(); - -void -cmd_max_conns(); - -void -cmd_max_conns_host(); - -/* exported WebKitWebSettings properties */ -void -cmd_font_size(); - -void -cmd_default_font_family(); - -void -cmd_monospace_font_family(); - -void -cmd_sans_serif_font_family(); - -void -cmd_serif_font_family(); - -void -cmd_cursive_font_family(); - -void -cmd_fantasy_font_family(); - -void -cmd_zoom_level(); - -void -cmd_set_zoom_type(); - -void -cmd_enable_pagecache(); - -void -cmd_disable_plugins(); - -void -cmd_disable_scripts(); - -void -cmd_minimum_font_size(); - -void -cmd_fifo_dir(); - -void -cmd_socket_dir(); - -void -cmd_useragent() ; - -void -set_accept_languages(); - -void -cmd_autoload_img(); - -void -cmd_autoshrink_img(); - -void -cmd_enable_spellcheck(); - -void -cmd_enable_private(); - -void -cmd_print_bg(); - -void -cmd_style_uri(); - -void -cmd_resizable_txt(); - -void -cmd_default_encoding(); - -void -set_current_encoding(); - -void -cmd_enforce_96dpi(); - -void -cmd_inject_html(); - -void -cmd_caret_browsing(); - -void -cmd_javascript_windows(); - -void -cmd_set_geometry(); - -void -cmd_view_source(); - -void -cmd_scrollbars_visibility(); - -void -cmd_load_start(); - void link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data); diff --git a/src/variables.c b/src/variables.c index f62b54e..bcc3f43 100644 --- a/src/variables.c +++ b/src/variables.c @@ -2,6 +2,8 @@ #include "uzbl-core.h" #include "callbacks.h" #include "events.h" +#include "io.h" +#include "util.h" /* abbreviations to help keep the table's width humane */ #define PTR_V_STR(var, d, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = d, .writeable = 1, .func = fun } @@ -231,3 +233,314 @@ void dump_config_as_events() { g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash_as_event, NULL); } + +/* is the given string made up entirely of decimal digits? */ +gboolean +string_is_integer(const char *s) { + return (strspn(s, "0123456789") == strlen(s)); +} + + +GObject* +view_settings() { + return G_OBJECT(webkit_web_view_get_settings(uzbl.gui.web_view)); +} + +void +cmd_load_uri() { + const gchar *uri = uzbl.state.uri; + + gchar *newuri; + SoupURI *soup_uri; + + /* Strip leading whitespaces */ + while (*uri && isspace(*uri)) + uri++; + + /* evaluate javascript: URIs */ + if (!strncmp (uri, "javascript:", 11)) { + eval_js(uzbl.gui.web_view, uri, NULL, "javascript:"); + return; + } + + /* attempt to parse the URI */ + soup_uri = soup_uri_new(uri); + + if (!soup_uri) { + /* it's not a valid URI, maybe it's a path on the filesystem. */ + const gchar *fullpath; + if (g_path_is_absolute (uri)) + fullpath = uri; + else { + gchar *wd = g_get_current_dir (); + fullpath = g_build_filename (wd, uri, NULL); + g_free(wd); + } + + struct stat stat_result; + if (! g_stat(fullpath, &stat_result)) + newuri = g_strconcat("file://", fullpath, NULL); + else + newuri = g_strconcat("http://", uri, NULL); + } else { + if(soup_uri->host == NULL && string_is_integer(soup_uri->path)) + /* the user probably typed in a host:port without a scheme */ + newuri = g_strconcat("http://", uri, NULL); + else + newuri = g_strdup(uri); + + soup_uri_free(soup_uri); + } + + webkit_web_view_load_uri (uzbl.gui.web_view, newuri); + g_free (newuri); +} + +void +cmd_max_conns() { + g_object_set(G_OBJECT(uzbl.net.soup_session), + SOUP_SESSION_MAX_CONNS, uzbl.net.max_conns, NULL); +} + +void +cmd_max_conns_host() { + g_object_set(G_OBJECT(uzbl.net.soup_session), + SOUP_SESSION_MAX_CONNS_PER_HOST, uzbl.net.max_conns_host, NULL); +} + +void +cmd_http_debug() { + 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)); +} + +void +cmd_font_size() { + GObject *ws = view_settings(); + if (uzbl.behave.font_size > 0) { + g_object_set (ws, "default-font-size", uzbl.behave.font_size, NULL); + } + + if (uzbl.behave.monospace_size > 0) { + g_object_set (ws, "default-monospace-font-size", + uzbl.behave.monospace_size, NULL); + } else { + g_object_set (ws, "default-monospace-font-size", + uzbl.behave.font_size, NULL); + } +} + +void +cmd_zoom_level() { + webkit_web_view_set_zoom_level (uzbl.gui.web_view, uzbl.behave.zoom_level); +} + +#define EXPOSE_WEBKIT_VIEW_SETTINGS(SYM, STORAGE, PROPERTY) void cmd_##SYM() { \ + g_object_set(view_settings(), (PROPERTY), (STORAGE), NULL); \ +} + +EXPOSE_WEBKIT_VIEW_SETTINGS(default_font_family, uzbl.behave.default_font_family, "default-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(monospace_font_family, uzbl.behave.monospace_font_family, "monospace-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(sans_serif_font_family, uzbl.behave.sans_serif_font_family, "sans_serif-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(serif_font_family, uzbl.behave.serif_font_family, "serif-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(cursive_font_family, uzbl.behave.cursive_font_family, "cursive-font-family") +EXPOSE_WEBKIT_VIEW_SETTINGS(fantasy_font_family, uzbl.behave.fantasy_font_family, "fantasy-font-family") + +EXPOSE_WEBKIT_VIEW_SETTINGS(minimum_font_size, uzbl.behave.minimum_font_size, "minimum_font_size") + +EXPOSE_WEBKIT_VIEW_SETTINGS(disable_plugins, !uzbl.behave.disable_plugins, "enable-plugins") +EXPOSE_WEBKIT_VIEW_SETTINGS(disable_scripts, !uzbl.behave.disable_scripts, "enable-scripts") + +EXPOSE_WEBKIT_VIEW_SETTINGS(javascript_windows, uzbl.behave.javascript_windows, "javascript-can-open-windows-automatically") + +EXPOSE_WEBKIT_VIEW_SETTINGS(autoload_img, uzbl.behave.autoload_img, "auto-load-images") +EXPOSE_WEBKIT_VIEW_SETTINGS(autoshrink_img, uzbl.behave.autoshrink_img, "auto-shrink-images") + +EXPOSE_WEBKIT_VIEW_SETTINGS(enable_pagecache, uzbl.behave.enable_pagecache, "enable-page-cache") +EXPOSE_WEBKIT_VIEW_SETTINGS(enable_private, uzbl.behave.enable_private, "enable-private-browsing") + +EXPOSE_WEBKIT_VIEW_SETTINGS(enable_spellcheck, uzbl.behave.enable_spellcheck, "enable-spell-checking") +EXPOSE_WEBKIT_VIEW_SETTINGS(resizable_txt, uzbl.behave.resizable_txt, "resizable-text-areas") + +EXPOSE_WEBKIT_VIEW_SETTINGS(style_uri, uzbl.behave.style_uri, "user-stylesheet-uri") +EXPOSE_WEBKIT_VIEW_SETTINGS(print_bg, uzbl.behave.print_bg, "print-backgrounds") +EXPOSE_WEBKIT_VIEW_SETTINGS(enforce_96dpi, uzbl.behave.enforce_96dpi, "enforce-96-dpi") + +EXPOSE_WEBKIT_VIEW_SETTINGS(caret_browsing, uzbl.behave.caret_browsing, "enable-caret-browsing") + +EXPOSE_WEBKIT_VIEW_SETTINGS(default_encoding, uzbl.behave.default_encoding, "default-encoding") + +void +set_proxy_url() { + const gchar *url = uzbl.net.proxy_url; + SoupSession *session = uzbl.net.soup_session; + SoupURI *soup_uri = NULL; + + if (url != NULL || *url != 0 || *url != ' ') + soup_uri = soup_uri_new(url); + + g_object_set(G_OBJECT(session), SOUP_SESSION_PROXY_URI, soup_uri, NULL); + + if(soup_uri) + soup_uri_free(soup_uri); +} + + +void +set_authentication_handler() { + /* Check if WEBKIT_TYPE_SOUP_AUTH_DIALOG feature is set */ + GSList *flist = soup_session_get_features (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG); + guint feature_is_set = g_slist_length(flist); + g_slist_free(flist); + + if (uzbl.behave.authentication_handler == NULL || *uzbl.behave.authentication_handler == 0) { + if (!feature_is_set) + soup_session_add_feature_by_type + (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG); + } else { + if (feature_is_set) + soup_session_remove_feature_by_type + (uzbl.net.soup_session, (GType) WEBKIT_TYPE_SOUP_AUTH_DIALOG); + } + return; +} + +void +set_status_background() { + /* labels and hboxes do not draw their own background. applying this + * on the vbox/main_window is ok as the statusbar is the only affected + * widget. (if not, we could also use GtkEventBox) */ + GtkWidget* widget = uzbl.gui.main_window ? uzbl.gui.main_window : GTK_WIDGET (uzbl.gui.plug); + +#if GTK_CHECK_VERSION(2,91,0) + GdkRGBA color; + gdk_rgba_parse (&color, uzbl.behave.status_background); + gtk_widget_override_background_color (widget, GTK_STATE_NORMAL, &color); +#else + GdkColor color; + gdk_color_parse (uzbl.behave.status_background, &color); + gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color); +#endif +} + +void +set_icon() { + if(file_exists(uzbl.gui.icon)) { + if (uzbl.gui.main_window) + gtk_window_set_icon_from_file (GTK_WINDOW (uzbl.gui.main_window), uzbl.gui.icon, NULL); + } else { + g_printerr ("Icon \"%s\" not found. ignoring.\n", uzbl.gui.icon); + } +} + +void +cmd_set_geometry() { + int ret=0, x=0, y=0; + unsigned int w=0, h=0; + if(uzbl.gui.geometry) { + if(uzbl.gui.geometry[0] == 'm') { /* m/maximize/maximized */ + gtk_window_maximize((GtkWindow *)(uzbl.gui.main_window)); + } else { + /* we used to use gtk_window_parse_geometry() but that didn't work how it was supposed to */ + ret = XParseGeometry(uzbl.gui.geometry, &x, &y, &w, &h); + if(ret & XValue) + gtk_window_move((GtkWindow *)uzbl.gui.main_window, x, y); + if(ret & WidthValue) + gtk_window_resize((GtkWindow *)uzbl.gui.main_window, w, h); + } + } + + /* update geometry var with the actual geometry + this is necessary as some WMs don't seem to honour + the above setting and we don't want to end up with + wrong geometry information + */ + retrieve_geometry(); +} + +void +cmd_set_status() { + if (!uzbl.behave.show_status) { + gtk_widget_hide(uzbl.gui.mainbar); + } else { + gtk_widget_show(uzbl.gui.mainbar); + } + update_title(); +} + +void +set_current_encoding() { + gchar *encoding = uzbl.behave.current_encoding; + if(strlen(encoding) == 0) + encoding = NULL; + + webkit_web_view_set_custom_encoding(uzbl.gui.web_view, encoding); +} + +void +cmd_fifo_dir() { + uzbl.behave.fifo_dir = init_fifo(uzbl.behave.fifo_dir); +} + +void +cmd_socket_dir() { + uzbl.behave.socket_dir = init_socket(uzbl.behave.socket_dir); +} + +void +cmd_inject_html() { + if(uzbl.behave.inject_html) { + webkit_web_view_load_html_string (uzbl.gui.web_view, + uzbl.behave.inject_html, NULL); + } +} + +void +cmd_useragent() { + if (*uzbl.net.useragent == ' ') { + g_free (uzbl.net.useragent); + uzbl.net.useragent = NULL; + } else { + g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_USER_AGENT, + uzbl.net.useragent, NULL); + } +} + +void +set_accept_languages() { + if (*uzbl.net.accept_languages == ' ') { + g_free (uzbl.net.accept_languages); + uzbl.net.accept_languages = NULL; + } else { + g_object_set(G_OBJECT(uzbl.net.soup_session), + SOUP_SESSION_ACCEPT_LANGUAGE, uzbl.net.accept_languages, NULL); + } +} + +void +cmd_scrollbars_visibility() { + GtkPolicyType policy = uzbl.gui.scrollbars_visible ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER; + + gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), policy, policy ); +} + +/* requires webkit >=1.1.14 */ +void +cmd_view_source() { + webkit_web_view_set_view_source_mode(uzbl.gui.web_view, + (gboolean) uzbl.behave.view_source); +} + +void +cmd_set_zoom_type () { + if(uzbl.behave.zoom_type) + webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, TRUE); + else + webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, FALSE); +} diff --git a/src/variables.h b/src/variables.h index 653a718..1b7663a 100644 --- a/src/variables.h +++ b/src/variables.h @@ -27,4 +27,51 @@ void variables_hash(); void dump_config(); void dump_config_as_events(); + +void cmd_load_uri(); +void cmd_set_status(); +void set_proxy_url(); +void set_authentication_handler(); +void set_status_background(); +void set_icon(); +void move_statusbar(); +void cmd_http_debug(); +void cmd_max_conns(); +void cmd_max_conns_host(); + +/* exported WebKitWebSettings properties */ +void cmd_font_size(); +void cmd_default_font_family(); +void cmd_monospace_font_family(); +void cmd_sans_serif_font_family(); +void cmd_serif_font_family(); +void cmd_cursive_font_family(); +void cmd_fantasy_font_family(); +void cmd_zoom_level(); +void cmd_set_zoom_type(); +void cmd_enable_pagecache(); +void cmd_disable_plugins(); +void cmd_disable_scripts(); +void cmd_minimum_font_size(); +void cmd_fifo_dir(); +void cmd_socket_dir(); +void cmd_useragent() ; +void set_accept_languages(); +void cmd_autoload_img(); +void cmd_autoshrink_img(); +void cmd_enable_spellcheck(); +void cmd_enable_private(); +void cmd_print_bg(); +void cmd_style_uri(); +void cmd_resizable_txt(); +void cmd_default_encoding(); +void set_current_encoding(); +void cmd_enforce_96dpi(); +void cmd_inject_html(); +void cmd_caret_browsing(); +void cmd_javascript_windows(); +void cmd_set_geometry(); +void cmd_view_source(); +void cmd_scrollbars_visibility(); + #endif -- cgit v1.2.3 From 50cf5cb0605d51ee928fb4913bdcfb59d89a64f4 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Mon, 30 May 2011 06:51:53 +0200 Subject: use g_object_unref to free soup logger --- src/variables.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/variables.c b/src/variables.c index bcc3f43..3488aa4 100644 --- a/src/variables.c +++ b/src/variables.c @@ -310,10 +310,11 @@ cmd_max_conns_host() { void cmd_http_debug() { - 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);*/ + if(uzbl.net.soup_logger) { + soup_session_remove_feature + (uzbl.net.soup_session, SOUP_SESSION_FEATURE(uzbl.net.soup_logger)); + g_object_unref (uzbl.net.soup_logger); + } uzbl.net.soup_logger = soup_logger_new(uzbl.behave.http_debug, -1); soup_session_add_feature(uzbl.net.soup_session, -- cgit v1.2.3 From 952ceba2183d781245236834dbabf4365b549b95 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Mon, 30 May 2011 07:01:30 +0200 Subject: move uri_change_cb to variables --- src/callbacks.c | 9 --------- src/callbacks.h | 3 --- src/variables.c | 9 +++++++++ src/variables.h | 2 ++ 4 files changed, 11 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 5bdcb55..ef2005d 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -93,15 +93,6 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer return FALSE; } -void -uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec) { - (void) param_spec; - - g_free (uzbl.state.uri); - g_object_get (web_view, "uri", &uzbl.state.uri, NULL); - g_setenv("UZBL_URI", uzbl.state.uri, TRUE); -} - void selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) { (void)ud; diff --git a/src/callbacks.h b/src/callbacks.h index 7af4332..176cb40 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -18,9 +18,6 @@ load_status_change_cb (WebKitWebView* web_view, GParamSpec param_spec); gboolean load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud); -void -uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec); - void selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud); diff --git a/src/variables.c b/src/variables.c index 3488aa4..d1552f9 100644 --- a/src/variables.c +++ b/src/variables.c @@ -246,6 +246,15 @@ view_settings() { return G_OBJECT(webkit_web_view_get_settings(uzbl.gui.web_view)); } +void +uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec) { + (void) param_spec; + + g_free (uzbl.state.uri); + g_object_get (web_view, "uri", &uzbl.state.uri, NULL); + g_setenv("UZBL_URI", uzbl.state.uri, TRUE); +} + void cmd_load_uri() { const gchar *uri = uzbl.state.uri; diff --git a/src/variables.h b/src/variables.h index 1b7663a..c289c44 100644 --- a/src/variables.h +++ b/src/variables.h @@ -6,6 +6,7 @@ #define __VARIABLES__ #include +#include #include "type.h" /* Uzbl variables */ @@ -27,6 +28,7 @@ void variables_hash(); void dump_config(); void dump_config_as_events(); +void uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec); void cmd_load_uri(); void cmd_set_status(); -- cgit v1.2.3 From da8e6d70e09c9c92c55b110ada1d3bcc63889a72 Mon Sep 17 00:00:00 2001 From: David Keijser Date: Mon, 30 May 2011 19:07:05 +0200 Subject: move variable hashtable to a more sane place --- src/uzbl-core.c | 2 +- src/uzbl-core.h | 6 ++---- src/variables.c | 12 ++++++------ 3 files changed, 9 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index b235e9e..91a9cd0 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -147,7 +147,7 @@ expand(const char* s, guint recurse) { if(etype == EXP_SIMPLE_VAR || etype == EXP_BRACED_VAR) { - if( (c = g_hash_table_lookup(uzbl.comm.proto_var, ret)) ) { + if( (c = g_hash_table_lookup(uzbl.behave.proto_var, ret)) ) { if(c->type == TYPE_STR && *c->ptr.s != NULL) { g_string_append(buf, (gchar *)*c->ptr.s); } diff --git a/src/uzbl-core.h b/src/uzbl-core.h index c4fb94e..892c779 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -91,7 +91,6 @@ enum { FIFO, SOCKET}; typedef struct { gchar *fifo_path; gchar *socket_path; - GHashTable *proto_var; /* stores (key)"variable name" -> (value)"pointer to var */ GPtrArray *connect_chan; GPtrArray *client_chan; @@ -195,9 +194,8 @@ typedef struct { /* command list: (key)name -> (value)Command */ GHashTable* commands; - - /* event lookup: (key)event_id -> (value)event_name */ - GHashTable *event_lookup; + /* variables: (key)name -> (value)uzbl_cmdprop */ + GHashTable *proto_var; } Behaviour; diff --git a/src/variables.c b/src/variables.c index d1552f9..e22d079 100644 --- a/src/variables.c +++ b/src/variables.c @@ -99,9 +99,9 @@ const struct var_name_to_ptr_t { void variables_hash() { 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); + uzbl.behave.proto_var = g_hash_table_new(g_str_hash, g_str_equal); while(n2v_p->name) { - g_hash_table_insert(uzbl.comm.proto_var, + g_hash_table_insert(uzbl.behave.proto_var, (gpointer) n2v_p->name, (gpointer) &n2v_p->cp); n2v_p++; @@ -146,7 +146,7 @@ set_var_value(const gchar *name, gchar *val) { g_assert(val != NULL); - if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { + if( (c = g_hash_table_lookup(uzbl.behave.proto_var, name)) ) { if(!c->writeable) return FALSE; switch(c->type) { @@ -186,7 +186,7 @@ set_var_value(const gchar *name, gchar *val) { buf = g_strdup(val); c->ptr.s = g_malloc(sizeof(char *)); *c->ptr.s = buf; - g_hash_table_insert(uzbl.comm.proto_var, + g_hash_table_insert(uzbl.behave.proto_var, g_strdup(name), (gpointer) c); send_event (VARIABLE_SET, NULL, @@ -217,7 +217,7 @@ dump_var_hash(gpointer k, gpointer v, gpointer ud) { void dump_config() { - g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash, NULL); + g_hash_table_foreach(uzbl.behave.proto_var, dump_var_hash, NULL); } void @@ -231,7 +231,7 @@ dump_var_hash_as_event(gpointer k, gpointer v, gpointer ud) { void dump_config_as_events() { - g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash_as_event, NULL); + g_hash_table_foreach(uzbl.behave.proto_var, dump_var_hash_as_event, NULL); } /* is the given string made up entirely of decimal digits? */ -- cgit v1.2.3 From 1110023039fa7d13e2ddab29d6a7db50ab61f2ae Mon Sep 17 00:00:00 2001 From: David Keijser Date: Mon, 30 May 2011 19:15:01 +0200 Subject: hide some implementation details of variables --- src/commands.c | 1 + src/uzbl-core.c | 15 +++------------ src/variables.c | 29 +++++++++++++++++++++++++++++ src/variables.h | 16 +--------------- 4 files changed, 34 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/commands.c b/src/commands.c index c4a4d34..c4f63af 100644 --- a/src/commands.c +++ b/src/commands.c @@ -5,6 +5,7 @@ #include "menu.h" #include "callbacks.h" #include "variables.h" +#include "type.h" /* -- command to callback/function map for things we cannot attach to any signals */ CommandInfo cmdlist[] = diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 91a9cd0..6f82d2e 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -38,6 +38,7 @@ #include "menu.h" #include "io.h" #include "variables.h" +#include "type.h" UzblCore uzbl; @@ -90,7 +91,6 @@ get_exp_type(const gchar *s) { */ gchar* expand(const char* s, guint recurse) { - uzbl_cmdprop* c; enum exp_type etype; char* end_simple_var = "\t^°!\"§$%&/()=?'`'+~*'#-:,;@<>| \\{}[]¹²³¼½"; char* ret = NULL; @@ -147,17 +147,8 @@ expand(const char* s, guint recurse) { if(etype == EXP_SIMPLE_VAR || etype == EXP_BRACED_VAR) { - if( (c = g_hash_table_lookup(uzbl.behave.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) { - g_string_append_printf(buf, "%d", *c->ptr.i); - } - else if(c->type == TYPE_FLOAT) { - g_string_append_printf(buf, "%f", *c->ptr.f); - } - } + + expand_variable(buf, ret); if(etype == EXP_SIMPLE_VAR) s = vend; diff --git a/src/variables.c b/src/variables.c index e22d079..a3621dd 100644 --- a/src/variables.c +++ b/src/variables.c @@ -4,6 +4,7 @@ #include "events.h" #include "io.h" #include "util.h" +#include "type.h" /* abbreviations to help keep the table's width humane */ #define PTR_V_STR(var, d, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = d, .writeable = 1, .func = fun } @@ -13,6 +14,18 @@ #define PTR_C_INT(var, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = 0, .writeable = 0, .func = fun } #define PTR_C_FLOAT(var, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = 0, .writeable = 0, .func = fun } +typedef struct { + enum ptr_type type; + union { + int *i; + float *f; + gchar **s; + } ptr; + int dump; + int writeable; + /*@null@*/ void (*func)(void); +} uzbl_cmdprop; + const struct var_name_to_ptr_t { const char *name; uzbl_cmdprop cp; @@ -138,6 +151,22 @@ send_set_var_event(const char *name, const uzbl_cmdprop *c) { } } +void +expand_variable(GString *buf, const gchar *name) { + uzbl_cmdprop* c; + if((c = g_hash_table_lookup(uzbl.behave.proto_var, name))) { + if(c->type == TYPE_STR && *c->ptr.s != NULL) { + g_string_append(buf, (gchar *)*c->ptr.s); + } + else if(c->type == TYPE_INT) { + g_string_append_printf(buf, "%d", *c->ptr.i); + } + else if(c->type == TYPE_FLOAT) { + g_string_append_printf(buf, "%f", *c->ptr.f); + } + } +} + gboolean set_var_value(const gchar *name, gchar *val) { uzbl_cmdprop *c = NULL; diff --git a/src/variables.h b/src/variables.h index c289c44..035c500 100644 --- a/src/variables.h +++ b/src/variables.h @@ -7,23 +7,9 @@ #include #include -#include "type.h" - -/* Uzbl variables */ - -typedef struct { - enum ptr_type type; - union { - int *i; - float *f; - gchar **s; - } ptr; - int dump; - int writeable; - /*@null@*/ void (*func)(void); -} uzbl_cmdprop; gboolean set_var_value(const gchar *name, gchar *val); +void expand_variable(GString *buf, const gchar *name); void variables_hash(); void dump_config(); void dump_config_as_events(); -- cgit v1.2.3 From 8753f053f6643700fa683de86bb08bdfd50f2e79 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Tue, 7 Jun 2011 14:04:41 -0600 Subject: Revert "wrap the mainbar_label_left when it gets too long." This reverts commit 31b12cc2715db2da0b90bab9b51f33438b7af1c4. It didn't work the way I wanted. --- src/uzbl-core.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 3cf2407..6d2b7b1 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -847,6 +847,7 @@ create_scrolled_win() { NULL); } + GtkWidget* create_mainbar() { GUI *g = &uzbl.gui; @@ -859,10 +860,6 @@ create_mainbar() { gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_left), 0, 0); gtk_misc_set_padding (GTK_MISC(g->mainbar_label_left), 2, 2); - /* wrap the label when it gets too long */ - /* (otherwise it expands the window, which is not what we want) */ - gtk_label_set_line_wrap(GTK_LABEL(g->mainbar_label_left), TRUE); - /* create right panel */ g->mainbar_label_right = gtk_label_new (""); gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_right), TRUE); -- cgit v1.2.3 From 77dcee2aa32ca9ac348043b617b9722846adc9c1 Mon Sep 17 00:00:00 2001 From: Paul Colomiets Date: Sat, 2 Jul 2011 17:59:12 +0300 Subject: Implemented setting UZBL_URI window property This property is set for all uzbl windows unconditionally. This allows window managers and other tools organize windows more carefully. --- src/callbacks.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 360b0c4..862f608 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -492,11 +492,20 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer void uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec) { - (void) param_spec; + (void) param_spec; - g_free (uzbl.state.uri); - g_object_get (web_view, "uri", &uzbl.state.uri, NULL); - g_setenv("UZBL_URI", uzbl.state.uri, TRUE); + g_free (uzbl.state.uri); + g_object_get (web_view, "uri", &uzbl.state.uri, NULL); + g_setenv("UZBL_URI", uzbl.state.uri, TRUE); + + gdk_property_change( + gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), + gdk_atom_intern_static_string("UZBL_URI"), + gdk_atom_intern_static_string("STRING"), + 8, + GDK_PROP_MODE_REPLACE, + (unsigned char *)uzbl.state.uri, + strlen(uzbl.state.uri)); } void -- cgit v1.2.3 From cd54fab7778c11606e915d2eebceeba8bc9a46fa Mon Sep 17 00:00:00 2001 From: Paul Colomiets Date: Sat, 2 Jul 2011 18:51:58 +0300 Subject: Ensures that UZBL_URI is set when window is mapped This will help window manager to sort windows when they are mapped, instead of moving them back and forth when they are already shown. This is theoretically incurs tiny delay of showing window, but it's shown before main loop is started anyway, and you can't see anything useful before, so the delay is negligible. --- src/uzbl-core.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 1820623..91729f9 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1545,7 +1545,7 @@ settings_init () { State* s = &uzbl.state; Network* n = &uzbl.net; int i; - + /* Load default config */ for (i = 0; default_config[i].command != NULL; i++) { parse_cmd_line(default_config[i].command, NULL); @@ -1751,7 +1751,7 @@ initialize(int argc, char** argv) { fprintf(stderr, "uzbl: error hooking %d: %s\n", SIGALRM, strerror(errno)); event_buffer_timeout(10); - + /* HTTP client */ uzbl.net.soup_session = webkit_get_default_session(); uzbl.net.soup_cookie_jar = uzbl_cookie_jar_new(); @@ -1810,6 +1810,15 @@ load_uri_imp(gchar *uri) { soup_uri_free(soup_uri); } + gdk_property_change( + gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), + gdk_atom_intern_static_string("UZBL_URI"), + gdk_atom_intern_static_string("STRING"), + 8, + GDK_PROP_MODE_REPLACE, + (unsigned char *)newuri->str, + newuri->len); + /* if we do handle cookies, ask our handler for them */ webkit_web_view_load_uri (uzbl.gui.web_view, newuri->str); g_string_free (newuri, TRUE); @@ -1826,7 +1835,6 @@ main (int argc, char* argv[]) { if (uzbl.state.plug_mode) { uzbl.gui.plug = create_plug(); gtk_container_add (GTK_CONTAINER (uzbl.gui.plug), uzbl.gui.vbox); - gtk_widget_show_all (GTK_WIDGET (uzbl.gui.plug)); /* in xembed mode the window has no unique id and thus * socket/fifo names aren't unique either. * we use a custom randomizer to create a random id @@ -1836,12 +1844,13 @@ main (int argc, char* argv[]) { srand((unsigned int)tv.tv_sec*tv.tv_usec); uzbl.xwin = rand(); } - + /* Windowed mode */ else { uzbl.gui.main_window = create_window(); gtk_container_add (GTK_CONTAINER (uzbl.gui.main_window), uzbl.gui.vbox); - gtk_widget_show_all (uzbl.gui.main_window); + /* We need to ensure there is a window, before we can get XID */ + gtk_widget_realize (GTK_WIDGET (uzbl.gui.main_window)); uzbl.xwin = GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window))); @@ -1910,6 +1919,13 @@ main (int argc, char* argv[]) { g_free(uri_override); } + /* Finally show the window */ + if (uzbl.gui.main_window) { + gtk_widget_show_all (uzbl.gui.main_window); + } else { + gtk_widget_show_all (GTK_WIDGET (uzbl.gui.plug)); + } + /* Verbose feedback */ if (uzbl.state.verbose) { printf("Uzbl start location: %s\n", argv[0]); -- cgit v1.2.3 From 1037a6371e2b8f4f111676851034193318a68726 Mon Sep 17 00:00:00 2001 From: Paul Colomiets Date: Sat, 2 Jul 2011 19:05:31 +0300 Subject: Added window_role variable to set WM_WINDOW_ROLE Another feature for easier integrating with window managers --- src/callbacks.c | 6 ++++++ src/callbacks.h | 3 +++ src/uzbl-core.c | 1 + src/uzbl-core.h | 1 + 4 files changed, 11 insertions(+) (limited to 'src') diff --git a/src/callbacks.c b/src/callbacks.c index 862f608..4c927bc 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -79,6 +79,12 @@ set_icon() { } } +void +set_window_role() { + if (uzbl.gui.main_window) + gtk_window_set_role(GTK_WINDOW (uzbl.gui.main_window), uzbl.gui.window_role); +} + void cmd_set_geometry() { int ret=0, x=0, y=0; diff --git a/src/callbacks.h b/src/callbacks.h index d34b9fa..654c116 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -21,6 +21,9 @@ set_status_background(); void set_icon(); +void +set_window_role(); + void move_statusbar(); diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 91729f9..0b43df9 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -91,6 +91,7 @@ const struct var_name_to_ptr_t { { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, NULL)}, { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, NULL)}, { "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)}, + { "window_role", PTR_V_STR(uzbl.gui.window_role, 1, set_window_role)}, { "forward_keys", PTR_V_INT(uzbl.behave.forward_keys, 1, NULL)}, { "authentication_handler", PTR_V_STR(uzbl.behave.authentication_handler, 1, set_authentication_handler)}, { "scheme_handler", PTR_V_STR(uzbl.behave.scheme_handler, 1, NULL)}, diff --git a/src/uzbl-core.h b/src/uzbl-core.h index affd334..4d7a9b8 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -77,6 +77,7 @@ typedef struct { WebKitWebView* web_view; gchar* main_title; gchar* icon; + gchar* window_role; /* WebInspector */ GtkWidget* inspector_window; -- cgit v1.2.3 From 88055228d2cd8780d281eb31bf688170c23254ce Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sat, 2 Jul 2011 10:55:29 +0000 Subject: the status bar is now a custom gtk widget it gives the left side of the status bar as much space as it needs (but importantly, no more than the size of the window. this should put the window resize bug to rest for good... --- src/commands.c | 8 +--- src/status-bar.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/status-bar.h | 36 +++++++++++++++++ src/uzbl-core.c | 115 +++++++++++++++++++++---------------------------------- src/uzbl-core.h | 5 +-- src/variables.c | 10 ++--- 6 files changed, 203 insertions(+), 85 deletions(-) create mode 100644 src/status-bar.c create mode 100644 src/status-bar.h (limited to 'src') diff --git a/src/commands.c b/src/commands.c index c4f63af..1af351c 100644 --- a/src/commands.c +++ b/src/commands.c @@ -106,13 +106,9 @@ void toggle_status (WebKitWebView* page, GArray *argv, GString *result) { (void)page; (void)argv; (void)result; - if (uzbl.behave.show_status) { - gtk_widget_hide(uzbl.gui.mainbar); - } else { - gtk_widget_show(uzbl.gui.mainbar); - } uzbl.behave.show_status = !uzbl.behave.show_status; - update_title(); + + cmd_set_status(); } /* diff --git a/src/status-bar.c b/src/status-bar.c new file mode 100644 index 0000000..6365505 --- /dev/null +++ b/src/status-bar.c @@ -0,0 +1,114 @@ +#include "status-bar.h" + +G_DEFINE_TYPE (UzblStatusBar, uzbl_status_bar, GTK_TYPE_HBOX) + +static void uzbl_status_bar_size_allocate (GtkWidget *widget, + GtkAllocation *allocation); + +static void +uzbl_status_bar_class_init (UzblStatusBarClass *class) { + GtkWidgetClass *widget_class; + + widget_class = (GtkWidgetClass*) class; + + /* override the size_allocate method */ + widget_class->size_allocate = uzbl_status_bar_size_allocate; +} + +static void +uzbl_status_bar_init (UzblStatusBar *status_bar) { + gtk_box_set_homogeneous (GTK_BOX(status_bar), FALSE); + gtk_box_set_spacing (GTK_BOX(status_bar), 0); + + /* create left panel */ + status_bar->left_label = gtk_label_new (""); + gtk_label_set_selectable (GTK_LABEL(status_bar->left_label), TRUE); + gtk_misc_set_alignment (GTK_MISC(status_bar->left_label), 0, 0); + gtk_misc_set_padding (GTK_MISC(status_bar->left_label), 2, 2); + gtk_label_set_ellipsize(GTK_LABEL(status_bar->left_label), PANGO_ELLIPSIZE_END); + + /* create right panel */ + status_bar->right_label = gtk_label_new (""); + gtk_label_set_selectable(GTK_LABEL(status_bar->right_label), TRUE); + gtk_misc_set_alignment (GTK_MISC(status_bar->right_label), 1, 0); + gtk_misc_set_padding (GTK_MISC(status_bar->right_label), 2, 2); + gtk_label_set_ellipsize(GTK_LABEL(status_bar->right_label), PANGO_ELLIPSIZE_START); + + /* add the labels to the status bar */ + gtk_box_pack_start (GTK_BOX (status_bar), status_bar->left_label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (status_bar), status_bar->right_label, TRUE, TRUE, 0); +} + +static void +uzbl_status_bar_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) { + GtkRequisition left_requisition, right_requisition; + GtkAllocation left_allocation, right_allocation; + UzblStatusBar *status_bar = UZBL_STATUS_BAR(widget); + + int left_natural_width; + +#if GTK_CHECK_VERSION(3,0,0) + GtkRequisition left_requisition_nat; + + gtk_widget_get_preferred_size (status_bar->left_label, &left_requisition, &left_requisition_nat); + gtk_widget_get_preferred_size (status_bar->right_label, &right_requisition, NULL); + + left_natural_width = left_requisition_nat.width; +#else + gtk_widget_size_request(status_bar->left_label, &left_requisition); + gtk_widget_size_request(status_bar->left_label, &right_requisition); + + PangoLayout *left_layout = gtk_label_get_layout(GTK_LABEL(status_bar->left_label)); + pango_layout_get_pixel_size(left_layout, &left_natural_width, NULL); +#endif + + gtk_widget_set_allocation (widget, allocation); + + /* the entire allocation, minus the space needed for the right label's ellipsis */ + int left_max_width = allocation->width - right_requisition.width; + + /* the left label gets max(as much space as it needs, the status bar's allocation) */ + left_allocation.width = (left_max_width > left_natural_width) ? left_natural_width : left_max_width; + + /* the right label gets whatever is left over. it gets at least enough space + * for an ellipsis, it seems that it will just display everything if you give + * it 0. */ + right_allocation.width = allocation->width - left_allocation.width; + + /* don't fight guys, you can both have as much vertical space as you want! */ + left_allocation.height = right_allocation.height = allocation->height; + + left_allocation.x = 0; + right_allocation.x = left_allocation.width; + + left_allocation.y = right_allocation.y = allocation->y; + + gtk_widget_size_allocate (status_bar->left_label, &left_allocation); + gtk_widget_size_allocate (status_bar->right_label, &right_allocation); +} + +void +uzbl_status_bar_update_left(GtkWidget *widget, const gchar *format) { + UzblStatusBar *status_bar = UZBL_STATUS_BAR(widget); + + if(!format || !GTK_IS_LABEL(status_bar->left_label)) + return; + + gtk_label_set_markup(GTK_LABEL(status_bar->left_label), format); +} + +void +uzbl_status_bar_update_right(GtkWidget *widget, const gchar *format) { + UzblStatusBar *status_bar = UZBL_STATUS_BAR(widget); + + if(!format || !GTK_IS_LABEL(status_bar->right_label)) + return; + + gtk_label_set_markup(GTK_LABEL(status_bar->right_label), format); +} + +GtkWidget * +uzbl_status_bar_new() { + return g_object_new (UZBL_TYPE_STATUS_BAR, NULL); +} diff --git a/src/status-bar.h b/src/status-bar.h new file mode 100644 index 0000000..e972701 --- /dev/null +++ b/src/status-bar.h @@ -0,0 +1,36 @@ +#ifndef __UZBL_STATUS_BAR_H__ +#define __UZBL_STATUS_BAR_H__ + +#include + +#define UZBL_TYPE_STATUS_BAR (uzbl_status_bar_get_type ()) +#define UZBL_STATUS_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UZBL_TYPE_STATUS_BAR, UzblStatusBar)) +#define UZBL_STATUS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UZBL_TYPE_STATUS_BAR, UZblStatusBarClass)) +#define UZBL_IS_STATUS_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UZBL_TYPE_STATUS_BAR)) +#define UZBL_IS_STATUS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UZBL_TYPE_STATUS_BAR)) +#define UZBL_STATUS_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UZBL_TYPE_STATUS_BAR, UzblStatusBarClass)) + +typedef struct _UzblStatusBar UzblStatusBar; +typedef struct _UzblStatusBarClass UzblStatusBarClass; + +struct _UzblStatusBar { + GtkHBox hbox; + + GtkWidget *left_label; + GtkWidget *right_label; +}; + +struct _UzblStatusBarClass { + GtkHBoxClass parent_class; +}; + +GType uzbl_status_bar_get_type (void) G_GNUC_CONST; +GtkWidget * uzbl_status_bar_new (); + +void +uzbl_status_bar_update_left(GtkWidget *widget, const gchar *format); + +void +uzbl_status_bar_update_right(GtkWidget *widget, const gchar *format); + +#endif diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 6d2b7b1..598abdf 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -710,27 +710,27 @@ parse_command(const char *cmd, const char *params, GString *result) { void move_statusbar() { - if (!uzbl.gui.scrolled_win && !uzbl.gui.mainbar) + if (!uzbl.gui.scrolled_win && !uzbl.gui.status_bar) return; g_object_ref(uzbl.gui.scrolled_win); - g_object_ref(uzbl.gui.mainbar); + g_object_ref(uzbl.gui.status_bar); gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.scrolled_win); - gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.mainbar); + gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.status_bar); if(uzbl.behave.status_top) { - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.mainbar, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); - } - else { - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.mainbar, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.status_bar, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); + } else { + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.status_bar, FALSE, TRUE, 0); } + g_object_unref(uzbl.gui.scrolled_win); - g_object_unref(uzbl.gui.mainbar); + g_object_unref(uzbl.gui.status_bar); + if (!uzbl.state.plug_mode) gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); - return; } gboolean @@ -769,19 +769,13 @@ update_title(void) { if (b->show_status) { title_format = b->title_format_short; - /* Left side */ - if (b->status_format && GTK_IS_LABEL(uzbl.gui.mainbar_label_left)) { - gchar *parsed = expand(b->status_format, 0); - gtk_label_set_markup(GTK_LABEL(uzbl.gui.mainbar_label_left), parsed); - g_free(parsed); - } + gchar *parsed = expand(b->status_format, 0); + uzbl_status_bar_update_left(uzbl.gui.status_bar, parsed); + g_free(parsed); - /* Right side */ - if (b->status_format_right && GTK_IS_LABEL(uzbl.gui.mainbar_label_right)) { - gchar *parsed = expand(b->status_format_right, 0); - gtk_label_set_markup(GTK_LABEL(uzbl.gui.mainbar_label_right), parsed); - g_free(parsed); - } + parsed = expand(b->status_format_right, 0); + uzbl_status_bar_update_right(uzbl.gui.status_bar, parsed); + g_free(parsed); } /* Update window title */ @@ -848,49 +842,6 @@ create_scrolled_win() { } -GtkWidget* -create_mainbar() { - GUI *g = &uzbl.gui; - - g->mainbar = gtk_hbox_new (FALSE, 0); - - /* create left panel */ - g->mainbar_label_left = gtk_label_new (""); - gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_left), TRUE); - gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_left), 0, 0); - gtk_misc_set_padding (GTK_MISC(g->mainbar_label_left), 2, 2); - - /* create right panel */ - g->mainbar_label_right = gtk_label_new (""); - gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_right), TRUE); - gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_right), 1, 0); - gtk_misc_set_padding (GTK_MISC(g->mainbar_label_right), 2, 2); - gtk_label_set_ellipsize(GTK_LABEL(g->mainbar_label_right), PANGO_ELLIPSIZE_START); - - /* add the labels to the mainbar */ - gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_left, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_right, TRUE, TRUE, 0); - - /* set up signal handlers */ - g_object_connect((GObject*)g->mainbar, - "signal::key-press-event", (GCallback)key_press_cb, NULL, - "signal::key-release-event", (GCallback)key_release_cb, NULL, - NULL); - - g_object_connect((GObject*)g->mainbar_label_left, - "signal::key-press-event", (GCallback)key_press_cb, NULL, - "signal::key-release-event", (GCallback)key_release_cb, NULL, - NULL); - - g_object_connect((GObject*)g->mainbar_label_right, - "signal::key-press-event", (GCallback)key_press_cb, NULL, - "signal::key-release-event", (GCallback)key_release_cb, NULL, - NULL); - - return g->mainbar; -} - - GtkWidget* create_window() { GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL); @@ -1071,25 +1022,47 @@ initialize(int argc, char** argv) { fprintf(stderr, "uzbl: error hooking %d: %s\n", SIGALRM, strerror(errno)); event_buffer_timeout(10); - /* HTTP client */ uzbl.net.soup_session = webkit_get_default_session(); uzbl.net.soup_cookie_jar = uzbl_cookie_jar_new(); soup_session_add_feature(uzbl.net.soup_session, SOUP_SESSION_FEATURE(uzbl.net.soup_cookie_jar)); - commands_hash(); variables_hash(); /* GUI */ gtk_init(&argc, &argv); - create_mainbar(); + + /* set up the status bar */ + uzbl.gui.status_bar = uzbl_status_bar_new(); + + /* set up signal handlers (it's not great to have this here...) */ + g_object_connect((GObject*)uzbl.gui.status_bar, + "signal::key-press-event", (GCallback)key_press_cb, NULL, + "signal::key-release-event", (GCallback)key_release_cb, NULL, + NULL); + + /* + g_object_connect((GObject*)UZBL_STATUS_BAR(uzbl.gui.status_bar)->label_left, + "signal::key-press-event", (GCallback)key_press_cb, NULL, + "signal::key-release-event", (GCallback)key_release_cb, NULL, + NULL); + + g_object_connect((GObject*)(UZBL_STATUS_BAR(uzbl.gui.status_bar)->label_right), + "signal::key-press-event", (GCallback)key_press_cb, NULL, + "signal::key-release-event", (GCallback)key_release_cb, NULL, + NULL); + */ + + /* create the main window itself */ create_scrolled_win(); + /* pack the window and the status bar */ uzbl.gui.vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(uzbl.gui.vbox), uzbl.gui.mainbar, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(uzbl.gui.vbox), uzbl.gui.status_bar, FALSE, TRUE, 0); } @@ -1177,7 +1150,7 @@ main (int argc, char* argv[]) { /* Update status bar */ if (!uzbl.behave.show_status) - gtk_widget_hide(uzbl.gui.mainbar); + gtk_widget_hide(uzbl.gui.status_bar); else update_title(); diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 892c779..ae0fe49 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -49,6 +49,7 @@ #include "cookie-jar.h" #include "commands.h" +#include "status-bar.h" #define LENGTH(x) (sizeof x / sizeof x[0]) @@ -63,9 +64,7 @@ typedef struct { GtkWidget* vbox; /* Mainbar */ - GtkWidget* mainbar; - GtkWidget* mainbar_label_left; - GtkWidget* mainbar_label_right; + GtkWidget* status_bar; /* Scrolling */ GtkAdjustment* bar_v; /* Information about document length */ diff --git a/src/variables.c b/src/variables.c index a3621dd..5b717d9 100644 --- a/src/variables.c +++ b/src/variables.c @@ -505,11 +505,11 @@ cmd_set_geometry() { void cmd_set_status() { - if (!uzbl.behave.show_status) { - gtk_widget_hide(uzbl.gui.mainbar); - } else { - gtk_widget_show(uzbl.gui.mainbar); - } + if (!uzbl.behave.show_status) + gtk_widget_hide(uzbl.gui.status_bar); + else + gtk_widget_show(uzbl.gui.status_bar); + update_title(); } -- cgit v1.2.3 From 57b6e5af1ace03e4ee13903cee881464ee051d24 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Sun, 3 Jul 2011 05:36:16 +0000 Subject: fix ellipsization on gtk2 1. a stupid copy/paste error 2. add a bit of room to our estimation of the natural size so things don't get ellipsized unnecessarily --- src/status-bar.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/status-bar.c b/src/status-bar.c index 6365505..6d4541b 100644 --- a/src/status-bar.c +++ b/src/status-bar.c @@ -56,11 +56,14 @@ uzbl_status_bar_size_allocate (GtkWidget *widget, left_natural_width = left_requisition_nat.width; #else - gtk_widget_size_request(status_bar->left_label, &left_requisition); - gtk_widget_size_request(status_bar->left_label, &right_requisition); + gtk_widget_size_request(status_bar->left_label, &left_requisition); + gtk_widget_size_request(status_bar->right_label, &right_requisition); PangoLayout *left_layout = gtk_label_get_layout(GTK_LABEL(status_bar->left_label)); pango_layout_get_pixel_size(left_layout, &left_natural_width, NULL); + + /* some kind of fudge factor seems to be needed here */ + left_natural_width += 16; #endif gtk_widget_set_allocation (widget, allocation); -- cgit v1.2.3 From e35037c40fd39967cc1f0fbe15a667c6f534a542 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Tue, 12 Jul 2011 22:06:51 +0000 Subject: rearrange variable functions so they aren't all exposed --- src/commands.c | 2 +- src/uzbl-core.c | 27 +------ src/variables.c | 237 +++++++++++++++++++++++++++++++------------------------- src/variables.h | 49 +----------- 4 files changed, 135 insertions(+), 180 deletions(-) (limited to 'src') diff --git a/src/commands.c b/src/commands.c index 1af351c..cd1f872 100644 --- a/src/commands.c +++ b/src/commands.c @@ -108,7 +108,7 @@ toggle_status (WebKitWebView* page, GArray *argv, GString *result) { uzbl.behave.show_status = !uzbl.behave.show_status; - cmd_set_status(); + set_show_status(); } /* diff --git a/src/uzbl-core.c b/src/uzbl-core.c index 22a0dda..d6bd589 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -714,31 +714,6 @@ parse_command(const char *cmd, const char *params, GString *result) { } } -void -move_statusbar() { - if (!uzbl.gui.scrolled_win && !uzbl.gui.status_bar) - return; - - g_object_ref(uzbl.gui.scrolled_win); - g_object_ref(uzbl.gui.status_bar); - gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.scrolled_win); - gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.status_bar); - - if(uzbl.behave.status_top) { - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.status_bar, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); - } else { - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.status_bar, FALSE, TRUE, 0); - } - - g_object_unref(uzbl.gui.scrolled_win); - g_object_unref(uzbl.gui.status_bar); - - if (!uzbl.state.plug_mode) - gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); -} - gboolean valid_name(const gchar* name) { char *invalid_chars = "\t^°!\"§$%&/()=?'`'+~*'#-:,;@<>| \\{}[]¹²³¼½"; @@ -1140,7 +1115,7 @@ main (int argc, char* argv[]) { /* Check uzbl is in window mode before getting/setting geometry */ if (uzbl.gui.main_window) { if (uzbl.gui.geometry) - cmd_set_geometry(); + set_geometry(); else retrieve_geometry(); } diff --git a/src/variables.c b/src/variables.c index 529a850..4a3706a 100644 --- a/src/variables.c +++ b/src/variables.c @@ -6,14 +6,6 @@ #include "util.h" #include "type.h" -/* abbreviations to help keep the table's width humane */ -#define PTR_V_STR(var, d, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = d, .writeable = 1, .func = fun } -#define PTR_V_INT(var, d, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = d, .writeable = 1, .func = fun } -#define PTR_V_FLOAT(var, d, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = d, .writeable = 1, .func = fun } -#define PTR_C_STR(var, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = 0, .writeable = 0, .func = fun } -#define PTR_C_INT(var, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = 0, .writeable = 0, .func = fun } -#define PTR_C_FLOAT(var, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = 0, .writeable = 0, .func = fun } - typedef struct { enum ptr_type type; union { @@ -26,102 +18,6 @@ typedef struct { /*@null@*/ void (*func)(void); } uzbl_cmdprop; -const struct var_name_to_ptr_t { - const char *name; - uzbl_cmdprop cp; -} var_name_to_ptr[] = { -/* variable name pointer to variable in code dump callback function */ -/* ---------------------------------------------------------------------------------------------- */ - { "uri", PTR_V_STR(uzbl.state.uri, 1, cmd_load_uri)}, - { "verbose", PTR_V_INT(uzbl.state.verbose, 1, NULL)}, - { "print_events", PTR_V_INT(uzbl.state.events_stdout, 1, NULL)}, - { "inject_html", PTR_V_STR(uzbl.behave.inject_html, 0, cmd_inject_html)}, - { "geometry", PTR_V_STR(uzbl.gui.geometry, 1, cmd_set_geometry)}, - { "show_status", PTR_V_INT(uzbl.behave.show_status, 1, cmd_set_status)}, - { "status_top", PTR_V_INT(uzbl.behave.status_top, 1, move_statusbar)}, - { "status_format", PTR_V_STR(uzbl.behave.status_format, 1, NULL)}, - { "status_format_right", PTR_V_STR(uzbl.behave.status_format_right, 1, NULL)}, - { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, set_status_background)}, - { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, NULL)}, - { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, NULL)}, - { "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)}, - { "window_role", PTR_V_STR(uzbl.gui.window_role, 1, set_window_role)}, - { "forward_keys", PTR_V_INT(uzbl.behave.forward_keys, 1, NULL)}, - { "authentication_handler", PTR_V_STR(uzbl.behave.authentication_handler, 1, set_authentication_handler)}, - { "scheme_handler", PTR_V_STR(uzbl.behave.scheme_handler, 1, NULL)}, - { "download_handler", PTR_V_STR(uzbl.behave.download_handler, 1, NULL)}, - { "fifo_dir", PTR_V_STR(uzbl.behave.fifo_dir, 1, cmd_fifo_dir)}, - { "socket_dir", PTR_V_STR(uzbl.behave.socket_dir, 1, cmd_socket_dir)}, - { "http_debug", PTR_V_INT(uzbl.behave.http_debug, 1, cmd_http_debug)}, - { "shell_cmd", PTR_V_STR(uzbl.behave.shell_cmd, 1, NULL)}, - { "proxy_url", PTR_V_STR(uzbl.net.proxy_url, 1, set_proxy_url)}, - { "max_conns", PTR_V_INT(uzbl.net.max_conns, 1, cmd_max_conns)}, - { "max_conns_host", PTR_V_INT(uzbl.net.max_conns_host, 1, cmd_max_conns_host)}, - { "useragent", PTR_V_STR(uzbl.net.useragent, 1, cmd_useragent)}, - { "accept_languages", PTR_V_STR(uzbl.net.accept_languages, 1, set_accept_languages)}, - { "javascript_windows", PTR_V_INT(uzbl.behave.javascript_windows, 1, cmd_javascript_windows)}, - /* requires webkit >=1.1.14 */ - { "view_source", PTR_V_INT(uzbl.behave.view_source, 0, cmd_view_source)}, - - /* exported WebKitWebSettings properties */ - { "zoom_level", PTR_V_FLOAT(uzbl.behave.zoom_level, 1, cmd_zoom_level)}, - { "zoom_type", PTR_V_INT(uzbl.behave.zoom_type, 1, cmd_set_zoom_type)}, - { "font_size", PTR_V_INT(uzbl.behave.font_size, 1, cmd_font_size)}, - { "default_font_family", PTR_V_STR(uzbl.behave.default_font_family, 1, cmd_default_font_family)}, - { "monospace_font_family", PTR_V_STR(uzbl.behave.monospace_font_family, 1, cmd_monospace_font_family)}, - { "cursive_font_family", PTR_V_STR(uzbl.behave.cursive_font_family, 1, cmd_cursive_font_family)}, - { "sans_serif_font_family", PTR_V_STR(uzbl.behave.sans_serif_font_family, 1, cmd_sans_serif_font_family)}, - { "serif_font_family", PTR_V_STR(uzbl.behave.serif_font_family, 1, cmd_serif_font_family)}, - { "fantasy_font_family", PTR_V_STR(uzbl.behave.fantasy_font_family, 1, cmd_fantasy_font_family)}, - { "monospace_size", PTR_V_INT(uzbl.behave.monospace_size, 1, cmd_font_size)}, - { "minimum_font_size", PTR_V_INT(uzbl.behave.minimum_font_size, 1, cmd_minimum_font_size)}, - { "enable_pagecache", PTR_V_INT(uzbl.behave.enable_pagecache, 1, cmd_enable_pagecache)}, - { "disable_plugins", PTR_V_INT(uzbl.behave.disable_plugins, 1, cmd_disable_plugins)}, - { "disable_scripts", PTR_V_INT(uzbl.behave.disable_scripts, 1, cmd_disable_scripts)}, - { "autoload_images", PTR_V_INT(uzbl.behave.autoload_img, 1, cmd_autoload_img)}, - { "autoshrink_images", PTR_V_INT(uzbl.behave.autoshrink_img, 1, cmd_autoshrink_img)}, - { "enable_spellcheck", PTR_V_INT(uzbl.behave.enable_spellcheck, 1, cmd_enable_spellcheck)}, - { "enable_private", PTR_V_INT(uzbl.behave.enable_private, 1, cmd_enable_private)}, - { "print_backgrounds", PTR_V_INT(uzbl.behave.print_bg, 1, cmd_print_bg)}, - { "stylesheet_uri", PTR_V_STR(uzbl.behave.style_uri, 1, cmd_style_uri)}, - { "resizable_text_areas", PTR_V_INT(uzbl.behave.resizable_txt, 1, cmd_resizable_txt)}, - { "default_encoding", PTR_V_STR(uzbl.behave.default_encoding, 1, cmd_default_encoding)}, - { "current_encoding", PTR_V_STR(uzbl.behave.current_encoding, 1, set_current_encoding)}, - { "enforce_96_dpi", PTR_V_INT(uzbl.behave.enforce_96dpi, 1, cmd_enforce_96dpi)}, - { "caret_browsing", PTR_V_INT(uzbl.behave.caret_browsing, 1, cmd_caret_browsing)}, - -#if !GTK_CHECK_VERSION(3,0,0) - { "scrollbars_visible", PTR_V_INT(uzbl.gui.scrollbars_visible, 1, cmd_scrollbars_visibility)}, -#endif - - /* constants (not dumpable or writeable) */ - { "WEBKIT_MAJOR", PTR_C_INT(uzbl.info.webkit_major, NULL)}, - { "WEBKIT_MINOR", PTR_C_INT(uzbl.info.webkit_minor, NULL)}, - { "WEBKIT_MICRO", PTR_C_INT(uzbl.info.webkit_micro, NULL)}, - { "ARCH_UZBL", PTR_C_STR(uzbl.info.arch, NULL)}, - { "COMMIT", PTR_C_STR(uzbl.info.commit, NULL)}, - { "TITLE", PTR_C_STR(uzbl.gui.main_title, NULL)}, - { "SELECTED_URI", PTR_C_STR(uzbl.state.selected_url, NULL)}, - { "NAME", PTR_C_STR(uzbl.state.instance_name, NULL)}, - { "PID", PTR_C_STR(uzbl.info.pid_str, NULL)}, - { "_", PTR_C_STR(uzbl.state.last_result, NULL)}, - - { NULL, {.ptr.s = NULL, .type = TYPE_INT, .dump = 0, .writeable = 0, .func = NULL}} -}; - -/* construct a hash from the var_name_to_ptr array for quick access */ -void -variables_hash() { - const struct var_name_to_ptr_t *n2v_p = var_name_to_ptr; - uzbl.behave.proto_var = g_hash_table_new(g_str_hash, g_str_equal); - while(n2v_p->name) { - g_hash_table_insert(uzbl.behave.proto_var, - (gpointer) n2v_p->name, - (gpointer) &n2v_p->cp); - n2v_p++; - } -} - void send_set_var_event(const char *name, const uzbl_cmdprop *c) { /* check for the variable type */ @@ -504,7 +400,7 @@ set_window_role() { } void -cmd_set_geometry() { +set_geometry() { int ret=0, x=0, y=0; unsigned int w=0, h=0; if(uzbl.gui.geometry) { @@ -529,7 +425,7 @@ cmd_set_geometry() { } void -cmd_set_status() { +set_show_status() { if (!uzbl.behave.show_status) gtk_widget_hide(uzbl.gui.status_bar); else @@ -538,6 +434,31 @@ cmd_set_status() { update_title(); } +void +set_status_top() { + if (!uzbl.gui.scrolled_win && !uzbl.gui.status_bar) + return; + + g_object_ref(uzbl.gui.scrolled_win); + g_object_ref(uzbl.gui.status_bar); + gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.scrolled_win); + gtk_container_remove(GTK_CONTAINER(uzbl.gui.vbox), uzbl.gui.status_bar); + + if(uzbl.behave.status_top) { + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.status_bar, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); + } else { + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.scrolled_win, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (uzbl.gui.vbox), uzbl.gui.status_bar, FALSE, TRUE, 0); + } + + g_object_unref(uzbl.gui.scrolled_win); + g_object_unref(uzbl.gui.status_bar); + + if (!uzbl.state.plug_mode) + gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); +} + void set_current_encoding() { gchar *encoding = uzbl.behave.current_encoding; @@ -608,3 +529,107 @@ cmd_set_zoom_type () { else webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, FALSE); } + +/* abbreviations to help keep the table's width humane */ +#define PTR_V_STR(var, d, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = d, .writeable = 1, .func = fun } +#define PTR_V_INT(var, d, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = d, .writeable = 1, .func = fun } +#define PTR_V_FLOAT(var, d, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = d, .writeable = 1, .func = fun } +#define PTR_C_STR(var, fun) { .ptr.s = &(var), .type = TYPE_STR, .dump = 0, .writeable = 0, .func = fun } +#define PTR_C_INT(var, fun) { .ptr.i = (int*)&(var), .type = TYPE_INT, .dump = 0, .writeable = 0, .func = fun } +#define PTR_C_FLOAT(var, fun) { .ptr.f = &(var), .type = TYPE_FLOAT, .dump = 0, .writeable = 0, .func = fun } + +const struct var_name_to_ptr_t { + const char *name; + uzbl_cmdprop cp; +} var_name_to_ptr[] = { +/* variable name pointer to variable in code dump callback function */ +/* ---------------------------------------------------------------------------------------------- */ + { "uri", PTR_V_STR(uzbl.state.uri, 1, cmd_load_uri)}, + { "verbose", PTR_V_INT(uzbl.state.verbose, 1, NULL)}, + { "print_events", PTR_V_INT(uzbl.state.events_stdout, 1, NULL)}, + { "inject_html", PTR_V_STR(uzbl.behave.inject_html, 0, cmd_inject_html)}, + { "geometry", PTR_V_STR(uzbl.gui.geometry, 1, set_geometry)}, + { "show_status", PTR_V_INT(uzbl.behave.show_status, 1, set_show_status)}, + { "status_top", PTR_V_INT(uzbl.behave.status_top, 1, set_status_top)}, + { "status_format", PTR_V_STR(uzbl.behave.status_format, 1, NULL)}, + { "status_format_right", PTR_V_STR(uzbl.behave.status_format_right, 1, NULL)}, + { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, set_status_background)}, + { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, NULL)}, + { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, NULL)}, + { "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)}, + { "window_role", PTR_V_STR(uzbl.gui.window_role, 1, set_window_role)}, + { "forward_keys", PTR_V_INT(uzbl.behave.forward_keys, 1, NULL)}, + { "authentication_handler", PTR_V_STR(uzbl.behave.authentication_handler, 1, set_authentication_handler)}, + { "scheme_handler", PTR_V_STR(uzbl.behave.scheme_handler, 1, NULL)}, + { "download_handler", PTR_V_STR(uzbl.behave.download_handler, 1, NULL)}, + { "fifo_dir", PTR_V_STR(uzbl.behave.fifo_dir, 1, cmd_fifo_dir)}, + { "socket_dir", PTR_V_STR(uzbl.behave.socket_dir, 1, cmd_socket_dir)}, + { "http_debug", PTR_V_INT(uzbl.behave.http_debug, 1, cmd_http_debug)}, + { "shell_cmd", PTR_V_STR(uzbl.behave.shell_cmd, 1, NULL)}, + { "proxy_url", PTR_V_STR(uzbl.net.proxy_url, 1, set_proxy_url)}, + { "max_conns", PTR_V_INT(uzbl.net.max_conns, 1, cmd_max_conns)}, + { "max_conns_host", PTR_V_INT(uzbl.net.max_conns_host, 1, cmd_max_conns_host)}, + { "useragent", PTR_V_STR(uzbl.net.useragent, 1, cmd_useragent)}, + { "accept_languages", PTR_V_STR(uzbl.net.accept_languages, 1, set_accept_languages)}, + { "javascript_windows", PTR_V_INT(uzbl.behave.javascript_windows, 1, cmd_javascript_windows)}, + /* requires webkit >=1.1.14 */ + { "view_source", PTR_V_INT(uzbl.behave.view_source, 0, cmd_view_source)}, + + /* exported WebKitWebSettings properties */ + { "zoom_level", PTR_V_FLOAT(uzbl.behave.zoom_level, 1, cmd_zoom_level)}, + { "zoom_type", PTR_V_INT(uzbl.behave.zoom_type, 1, cmd_set_zoom_type)}, + { "font_size", PTR_V_INT(uzbl.behave.font_size, 1, cmd_font_size)}, + { "default_font_family", PTR_V_STR(uzbl.behave.default_font_family, 1, cmd_default_font_family)}, + { "monospace_font_family", PTR_V_STR(uzbl.behave.monospace_font_family, 1, cmd_monospace_font_family)}, + { "cursive_font_family", PTR_V_STR(uzbl.behave.cursive_font_family, 1, cmd_cursive_font_family)}, + { "sans_serif_font_family", PTR_V_STR(uzbl.behave.sans_serif_font_family, 1, cmd_sans_serif_font_family)}, + { "serif_font_family", PTR_V_STR(uzbl.behave.serif_font_family, 1, cmd_serif_font_family)}, + { "fantasy_font_family", PTR_V_STR(uzbl.behave.fantasy_font_family, 1, cmd_fantasy_font_family)}, + { "monospace_size", PTR_V_INT(uzbl.behave.monospace_size, 1, cmd_font_size)}, + { "minimum_font_size", PTR_V_INT(uzbl.behave.minimum_font_size, 1, cmd_minimum_font_size)}, + { "enable_pagecache", PTR_V_INT(uzbl.behave.enable_pagecache, 1, cmd_enable_pagecache)}, + { "disable_plugins", PTR_V_INT(uzbl.behave.disable_plugins, 1, cmd_disable_plugins)}, + { "disable_scripts", PTR_V_INT(uzbl.behave.disable_scripts, 1, cmd_disable_scripts)}, + { "autoload_images", PTR_V_INT(uzbl.behave.autoload_img, 1, cmd_autoload_img)}, + { "autoshrink_images", PTR_V_INT(uzbl.behave.autoshrink_img, 1, cmd_autoshrink_img)}, + { "enable_spellcheck", PTR_V_INT(uzbl.behave.enable_spellcheck, 1, cmd_enable_spellcheck)}, + { "enable_private", PTR_V_INT(uzbl.behave.enable_private, 1, cmd_enable_private)}, + { "print_backgrounds", PTR_V_INT(uzbl.behave.print_bg, 1, cmd_print_bg)}, + { "stylesheet_uri", PTR_V_STR(uzbl.behave.style_uri, 1, cmd_style_uri)}, + { "resizable_text_areas", PTR_V_INT(uzbl.behave.resizable_txt, 1, cmd_resizable_txt)}, + { "default_encoding", PTR_V_STR(uzbl.behave.default_encoding, 1, cmd_default_encoding)}, + { "current_encoding", PTR_V_STR(uzbl.behave.current_encoding, 1, set_current_encoding)}, + { "enforce_96_dpi", PTR_V_INT(uzbl.behave.enforce_96dpi, 1, cmd_enforce_96dpi)}, + { "caret_browsing", PTR_V_INT(uzbl.behave.caret_browsing, 1, cmd_caret_browsing)}, + +#if !GTK_CHECK_VERSION(3,0,0) + { "scrollbars_visible", PTR_V_INT(uzbl.gui.scrollbars_visible, 1, cmd_scrollbars_visibility)}, +#endif + + /* constants (not dumpable or writeable) */ + { "WEBKIT_MAJOR", PTR_C_INT(uzbl.info.webkit_major, NULL)}, + { "WEBKIT_MINOR", PTR_C_INT(uzbl.info.webkit_minor, NULL)}, + { "WEBKIT_MICRO", PTR_C_INT(uzbl.info.webkit_micro, NULL)}, + { "ARCH_UZBL", PTR_C_STR(uzbl.info.arch, NULL)}, + { "COMMIT", PTR_C_STR(uzbl.info.commit, NULL)}, + { "TITLE", PTR_C_STR(uzbl.gui.main_title, NULL)}, + { "SELECTED_URI", PTR_C_STR(uzbl.state.selected_url, NULL)}, + { "NAME", PTR_C_STR(uzbl.state.instance_name, NULL)}, + { "PID", PTR_C_STR(uzbl.info.pid_str, NULL)}, + { "_", PTR_C_STR(uzbl.state.last_result, NULL)}, + + { NULL, {.ptr.s = NULL, .type = TYPE_INT, .dump = 0, .writeable = 0, .func = NULL}} +}; + +/* construct a hash from the var_name_to_ptr array for quick access */ +void +variables_hash() { + const struct var_name_to_ptr_t *n2v_p = var_name_to_ptr; + uzbl.behave.proto_var = g_hash_table_new(g_str_hash, g_str_equal); + while(n2v_p->name) { + g_hash_table_insert(uzbl.behave.proto_var, + (gpointer) n2v_p->name, + (gpointer) &n2v_p->cp); + n2v_p++; + } +} diff --git a/src/variables.h b/src/variables.h index 22756eb..6aa0ab0 100644 --- a/src/variables.h +++ b/src/variables.h @@ -15,52 +15,7 @@ void dump_config(); void dump_config_as_events(); void uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec); - -void cmd_load_uri(); -void cmd_set_status(); -void set_proxy_url(); -void set_authentication_handler(); -void set_status_background(); -void set_icon(); -void move_statusbar(); -void cmd_http_debug(); -void cmd_max_conns(); -void cmd_max_conns_host(); - -/* exported WebKitWebSettings properties */ -void cmd_font_size(); -void cmd_default_font_family(); -void cmd_monospace_font_family(); -void cmd_sans_serif_font_family(); -void cmd_serif_font_family(); -void cmd_cursive_font_family(); -void cmd_fantasy_font_family(); -void cmd_zoom_level(); -void cmd_set_zoom_type(); -void cmd_enable_pagecache(); -void cmd_disable_plugins(); -void cmd_disable_scripts(); -void cmd_minimum_font_size(); -void cmd_fifo_dir(); -void cmd_socket_dir(); -void cmd_useragent() ; -void set_accept_languages(); -void cmd_autoload_img(); -void cmd_autoshrink_img(); -void cmd_enable_spellcheck(); -void cmd_enable_private(); -void cmd_print_bg(); -void cmd_style_uri(); -void cmd_resizable_txt(); -void cmd_default_encoding(); -void set_current_encoding(); -void cmd_enforce_96dpi(); -void cmd_inject_html(); -void cmd_caret_browsing(); -void cmd_javascript_windows(); -void set_window_role(); -void cmd_set_geometry(); -void cmd_view_source(); -void cmd_scrollbars_visibility(); +void set_show_status(); +void set_geometry(); #endif -- cgit v1.2.3 From 265c50123eb9df0b6b9fbc3b605f493333b911c4 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Tue, 12 Jul 2011 22:18:46 +0000 Subject: fix tests --- src/type.h | 21 +++++++++++++++++++-- src/variables.c | 48 ++++++++++++++++++++---------------------------- tests/Makefile | 15 +++++++++------ tests/test-command.c | 9 +++++---- tests/test-expand.c | 1 - 5 files changed, 53 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/type.h b/src/type.h index 1709128..24fc97f 100644 --- a/src/type.h +++ b/src/type.h @@ -2,6 +2,23 @@ * Uzbl Types */ -enum ptr_type {TYPE_INT = 1, TYPE_STR, TYPE_FLOAT, - TYPE_NAME, TYPE_FORMATTEDSTR // used by send_event +enum ptr_type { + TYPE_INT = 1, + TYPE_STR, + TYPE_FLOAT, + TYPE_NAME, + TYPE_FORMATTEDSTR // used by send_event }; + +typedef struct { + enum ptr_type type; + union { + int *i; + float *f; + gchar **s; + } ptr; + int dump; + int writeable; + /*@null@*/ void (*func)(void); +} uzbl_cmdprop; + diff --git a/src/variables.c b/src/variables.c index 4a3706a..d69ac6c 100644 --- a/src/variables.c +++ b/src/variables.c @@ -6,18 +6,6 @@ #include "util.h" #include "type.h" -typedef struct { - enum ptr_type type; - union { - int *i; - float *f; - gchar **s; - } ptr; - int dump; - int writeable; - /*@null@*/ void (*func)(void); -} uzbl_cmdprop; - void send_set_var_event(const char *name, const uzbl_cmdprop *c) { /* check for the variable type */ @@ -180,14 +168,16 @@ uri_change_cb (WebKitWebView *web_view, GParamSpec param_spec) { g_object_get (web_view, "uri", &uzbl.state.uri, NULL); g_setenv("UZBL_URI", uzbl.state.uri, TRUE); - gdk_property_change( - gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), - gdk_atom_intern_static_string("UZBL_URI"), - gdk_atom_intern_static_string("STRING"), - 8, - GDK_PROP_MODE_REPLACE, - (unsigned char *)uzbl.state.uri, - strlen(uzbl.state.uri)); + if(GTK_IS_WIDGET(uzbl.gui.main_window)) { + gdk_property_change( + gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), + gdk_atom_intern_static_string("UZBL_URI"), + gdk_atom_intern_static_string("STRING"), + 8, + GDK_PROP_MODE_REPLACE, + (unsigned char *)uzbl.state.uri, + strlen(uzbl.state.uri)); + } } void @@ -236,14 +226,16 @@ cmd_load_uri() { soup_uri_free(soup_uri); } - gdk_property_change( - gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), - gdk_atom_intern_static_string("UZBL_URI"), - gdk_atom_intern_static_string("STRING"), - 8, - GDK_PROP_MODE_REPLACE, - (unsigned char *)newuri, - strlen(newuri)); + if(GTK_IS_WIDGET(uzbl.gui.main_window)) { + gdk_property_change( + gtk_widget_get_window (GTK_WIDGET (uzbl.gui.main_window)), + gdk_atom_intern_static_string("UZBL_URI"), + gdk_atom_intern_static_string("STRING"), + 8, + GDK_PROP_MODE_REPLACE, + (unsigned char *)newuri, + strlen(newuri)); + } webkit_web_view_load_uri (uzbl.gui.web_view, newuri); g_free (newuri); diff --git a/tests/Makefile b/tests/Makefile index 2a5e2b6..eceb7fb 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,12 +1,15 @@ -# gtk2 -REQ_PKGS += gtk+-2.0 webkit-1.0 CPPFLAGS = -I ../ -DERRORCHECK_MUTEXES -# gtk3 -#REQ_PKGS += gtk+-3.0 webkitgtk-3.0 -#CPPFLAGS = -I ../ -DERRORCHECK_MUTEXES -DG_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED +# use GTK3-based webkit when it is available +USE_GTK3 = $(shell pkg-config --exists gtk+-3.0 webkitgtk-3.0 && echo 1) -# --- configuration ends here --- +ifeq ($(USE_GTK3),1) + REQ_PKGS += gtk+-3.0 webkitgtk-3.0 + CPPFLAGS += -DG_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED +else + REQ_PKGS += gtk+-2.0 webkit-1.0 + CPPFLAGS += +endif REQ_PKGS += libsoup-2.4 gthread-2.0 glib-2.0 diff --git a/tests/test-command.c b/tests/test-command.c index 6b55fb3..0f0f3c1 100644 --- a/tests/test-command.c +++ b/tests/test-command.c @@ -24,6 +24,7 @@ #include #include +#include extern UzblCore uzbl; @@ -189,13 +190,13 @@ test_set_variable (struct EventFixture *ef, const void *data) { /* set a custom variable */ parse_cmd_line("set nonexistant_variable = Some Value", NULL); ASSERT_EVENT(ef, "VARIABLE_SET nonexistant_variable str 'Some Value'"); - uzbl_cmdprop *c = g_hash_table_lookup(uzbl.comm.proto_var, "nonexistant_variable"); + uzbl_cmdprop *c = g_hash_table_lookup(uzbl.behave.proto_var, "nonexistant_variable"); g_assert_cmpstr("Some Value", ==, *c->ptr.s); /* set a custom variable with expansion */ parse_cmd_line("set an_expanded_variable = Test @(echo expansion)@", NULL); ASSERT_EVENT(ef, "VARIABLE_SET an_expanded_variable str 'Test expansion'"); - c = g_hash_table_lookup(uzbl.comm.proto_var, "an_expanded_variable"); + c = g_hash_table_lookup(uzbl.behave.proto_var, "an_expanded_variable"); g_assert_cmpstr("Test expansion", ==, *c->ptr.s); } @@ -216,8 +217,8 @@ test_print (void) { void test_scroll (void) { - uzbl.gui.scbar_v = (GtkScrollbar*) gtk_vscrollbar_new (NULL); - uzbl.gui.bar_v = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_v); + GtkScrollbar *scbar_v = (GtkScrollbar*) gtk_vscrollbar_new (NULL); + uzbl.gui.bar_v = gtk_range_get_adjustment((GtkRange*) scbar_v); gtk_adjustment_set_lower(uzbl.gui.bar_v, 0); gtk_adjustment_set_upper(uzbl.gui.bar_v, 100); diff --git a/tests/test-expand.c b/tests/test-expand.c index d823cfa..cfcfaed 100644 --- a/tests/test-expand.c +++ b/tests/test-expand.c @@ -28,7 +28,6 @@ extern UzblCore uzbl; -extern gchar* expand(char*, guint); extern void make_var_to_name_hash(void); void -- cgit v1.2.3 From 7180bedbc91efa454b9d5886e9491d4711c7852b Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Mon, 25 Jul 2011 19:09:49 +0000 Subject: remove the scrollbars_visible variable it doesn't work on GTK3, and discussion on the webkit-gtk mailing list suggests that it was never intended to work. instead, GTK theming can be used to hide scrollbars. --- README | 3 --- src/callbacks.c | 6 ------ src/callbacks.h | 3 --- src/uzbl-core.c | 11 ----------- src/uzbl-core.h | 1 - src/variables.c | 11 ----------- 6 files changed, 35 deletions(-) (limited to 'src') diff --git a/README b/README index 1432b80..0d65084 100644 --- a/README +++ b/README @@ -319,9 +319,6 @@ file). * `fifo_dir`: location to store FIFOs. * `socket_dir`: location to store sockets. * `http_debug`: HTTP debug mode (value 0-3). -* `scrollbars_visible`: set to 1 to have GTK scrollbars if the document - doesn't fit into the window (defaults to 0). (Note: This option does nothing - on GTK3 due to ) * `javascript_windows`: Whether javascript can open windows automatically * `shell_cmd`: Alias which will be expanded to use shell commands (eg `sh -c`). * `print_events`: show events on stdout diff --git a/src/callbacks.c b/src/callbacks.c index ef2005d..d3501b7 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -634,12 +634,6 @@ populate_popup_cb(WebKitWebView *v, GtkMenu *m, void *c) { } } -gboolean -scrollbars_policy_cb(WebKitWebView *view) { - (void) view; - return TRUE; -} - void window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, JSGlobalContextRef *context, JSObjectRef *object) { diff --git a/src/callbacks.h b/src/callbacks.h index 176cb40..e9240b5 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -78,9 +78,6 @@ scroll_vert_cb(GtkAdjustment *adjust, void *w); gboolean scroll_horiz_cb(GtkAdjustment *adjust, void *w); -gboolean -scrollbars_policy_cb(WebKitWebView *view); - void window_object_cleared_cb(WebKitWebView *webview, WebKitWebFrame *frame, JSGlobalContextRef *context, JSObjectRef *object); diff --git a/src/uzbl-core.c b/src/uzbl-core.c index d6bd589..af60767 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -779,13 +779,6 @@ create_scrolled_win() { g->web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); g->scrolled_win = gtk_scrolled_window_new(NULL, NULL); - WebKitWebFrame *wf = webkit_web_view_get_main_frame (g->web_view); - -#if !GTK_CHECK_VERSION(3,0,0) - /* hide the scrollbars by default */ - uzbl.gui.scrollbars_visible = 0; - cmd_scrollbars_visibility(); -#endif gtk_container_add( GTK_CONTAINER(g->scrolled_win), @@ -816,10 +809,6 @@ create_scrolled_win() { "signal::focus-out-event", (GCallback)focus_cb, NULL, "signal::window-object-cleared", (GCallback)window_object_cleared_cb,NULL, NULL); - - g_object_connect (G_OBJECT (wf), - "signal::scrollbars-policy-changed", (GCallback)scrollbars_policy_cb, NULL, - NULL); } diff --git a/src/uzbl-core.h b/src/uzbl-core.h index db9c32e..fb7d993 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -69,7 +69,6 @@ typedef struct { /* Scrolling */ GtkAdjustment* bar_v; /* Information about document length */ GtkAdjustment* bar_h; /* and scrolling position */ - int scrollbars_visible; /* Web page */ WebKitWebView* web_view; diff --git a/src/variables.c b/src/variables.c index d69ac6c..cf179d7 100644 --- a/src/variables.c +++ b/src/variables.c @@ -500,13 +500,6 @@ set_accept_languages() { } } -void -cmd_scrollbars_visibility() { - GtkPolicyType policy = uzbl.gui.scrollbars_visible ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER; - - gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win), policy, policy ); -} - /* requires webkit >=1.1.14 */ void cmd_view_source() { @@ -594,10 +587,6 @@ const struct var_name_to_ptr_t { { "enforce_96_dpi", PTR_V_INT(uzbl.behave.enforce_96dpi, 1, cmd_enforce_96dpi)}, { "caret_browsing", PTR_V_INT(uzbl.behave.caret_browsing, 1, cmd_caret_browsing)}, -#if !GTK_CHECK_VERSION(3,0,0) - { "scrollbars_visible", PTR_V_INT(uzbl.gui.scrollbars_visible, 1, cmd_scrollbars_visibility)}, -#endif - /* constants (not dumpable or writeable) */ { "WEBKIT_MAJOR", PTR_C_INT(uzbl.info.webkit_major, NULL)}, { "WEBKIT_MINOR", PTR_C_INT(uzbl.info.webkit_minor, NULL)}, -- cgit v1.2.3 From e035f6f991fdbe9862a72fba6e8d348dcc25532f Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Mon, 25 Jul 2011 20:54:29 +0000 Subject: add a spellcheck_languages variable exposes http://webkitgtk.org/reference/WebKitWebSettings.html#WebKitWebSettings--spell-checking-languages --- src/uzbl-core.h | 1 + src/variables.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/uzbl-core.h b/src/uzbl-core.h index fb7d993..c84380e 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -179,6 +179,7 @@ typedef struct { guint autoload_img; guint autoshrink_img; guint enable_spellcheck; + gchar* spellcheck_languages; guint enable_private; guint print_bg; gchar* style_uri; diff --git a/src/variables.c b/src/variables.c index cf179d7..b72c4b0 100644 --- a/src/variables.c +++ b/src/variables.c @@ -311,8 +311,9 @@ EXPOSE_WEBKIT_VIEW_SETTINGS(autoshrink_img, uzbl.behave.autoshrink_img, EXPOSE_WEBKIT_VIEW_SETTINGS(enable_pagecache, uzbl.behave.enable_pagecache, "enable-page-cache") EXPOSE_WEBKIT_VIEW_SETTINGS(enable_private, uzbl.behave.enable_private, "enable-private-browsing") -EXPOSE_WEBKIT_VIEW_SETTINGS(enable_spellcheck, uzbl.behave.enable_spellcheck, "enable-spell-checking") -EXPOSE_WEBKIT_VIEW_SETTINGS(resizable_txt, uzbl.behave.resizable_txt, "resizable-text-areas") +EXPOSE_WEBKIT_VIEW_SETTINGS(enable_spellcheck, uzbl.behave.enable_spellcheck, "enable-spell-checking") +EXPOSE_WEBKIT_VIEW_SETTINGS(spellcheck_languages, uzbl.behave.spellcheck_languages, "spell-checking-languages") +EXPOSE_WEBKIT_VIEW_SETTINGS(resizable_txt, uzbl.behave.resizable_txt, "resizable-text-areas") EXPOSE_WEBKIT_VIEW_SETTINGS(style_uri, uzbl.behave.style_uri, "user-stylesheet-uri") EXPOSE_WEBKIT_VIEW_SETTINGS(print_bg, uzbl.behave.print_bg, "print-backgrounds") @@ -578,6 +579,7 @@ const struct var_name_to_ptr_t { { "autoload_images", PTR_V_INT(uzbl.behave.autoload_img, 1, cmd_autoload_img)}, { "autoshrink_images", PTR_V_INT(uzbl.behave.autoshrink_img, 1, cmd_autoshrink_img)}, { "enable_spellcheck", PTR_V_INT(uzbl.behave.enable_spellcheck, 1, cmd_enable_spellcheck)}, + { "spellcheck_languages", PTR_V_STR(uzbl.behave.spellcheck_languages, 1, cmd_spellcheck_languages)}, { "enable_private", PTR_V_INT(uzbl.behave.enable_private, 1, cmd_enable_private)}, { "print_backgrounds", PTR_V_INT(uzbl.behave.print_bg, 1, cmd_print_bg)}, { "stylesheet_uri", PTR_V_STR(uzbl.behave.style_uri, 1, cmd_style_uri)}, -- cgit v1.2.3