From b9013fb779379c502b7707169eeac7dc15cfdd51 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Sat, 5 Sep 2009 19:22:30 +0200 Subject: move 'uzbl' to more specific 'uzbl-core' program, and add 'uzbl-browser' script which wraps around it to make the browser --- uzbl-core.h | 607 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 607 insertions(+) create mode 100644 uzbl-core.h (limited to 'uzbl-core.h') diff --git a/uzbl-core.h b/uzbl-core.h new file mode 100644 index 0000000..010cbe5 --- /dev/null +++ b/uzbl-core.h @@ -0,0 +1,607 @@ +/* -*- c-basic-offset: 4; -*- + + * See LICENSE for license details + * + * Changelog: + * --------- + * + * (c) 2009 by Robert Manea + * - introduced struct concept + * - statusbar template + * + */ + +/* status bar elements */ +typedef struct { + gint load_progress; + gchar *msg; + gchar *progress_s, *progress_u; + int progress_w; + gchar *progress_bar; + gchar *mode_indicator; +} StatusBar; + + +/* gui elements */ +typedef struct { + GtkWidget* main_window; + gchar* geometry; + GtkPlug* plug; + GtkWidget* scrolled_win; + GtkWidget* vbox; + GtkWidget* mainbar; + GtkWidget* mainbar_label; + 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 + WebKitWebView* web_view; + gchar* main_title; + gchar* icon; + + /* WebInspector */ + GtkWidget *inspector_window; + WebKitWebInspector *inspector; + + StatusBar sbar; +} GUI; + + +/* external communication*/ +enum { FIFO, SOCKET}; +typedef struct { + gchar *fifo_path; + gchar *socket_path; + /* stores (key)"variable name" -> (value)"pointer to this var*/ + GHashTable *proto_var; + + gchar *sync_stdout; +} Communication; + + +/* internal state */ +typedef struct { + gchar *uri; + gchar *config_file; + int socket_id; + char *instance_name; + gchar *selected_url; + gchar *executable_path; + gchar* keycmd; + gchar* searchtx; + gboolean verbose; +} State; + + +/* networking */ +typedef struct { + SoupSession *soup_session; + SoupLogger *soup_logger; + char *proxy_url; + char *useragent; + gint max_conns; + gint max_conns_host; +} Network; + + +/* behaviour */ +typedef struct { + gchar* load_finish_handler; + gchar* load_start_handler; + gchar* load_commit_handler; + gchar* status_format; + gchar* title_format_short; + gchar* title_format_long; + gchar* status_background; + gchar* fifo_dir; + gchar* socket_dir; + gchar* download_handler; + gchar* cookie_handler; + gchar* new_window; + gchar* default_font_family; + gchar* monospace_font_family; + gchar* sans_serif_font_family; + gchar* serif_font_family; + gchar* fantasy_font_family; + gchar* cursive_font_family; + gchar* scheme_handler; + gboolean always_insert_mode; + gboolean show_status; + gboolean insert_mode; + gboolean status_top; + gboolean reset_command_mode; + gchar* modkey; + guint modmask; + guint http_debug; + gchar* shell_cmd; + /* WebKitWebSettings exports */ + guint font_size; + guint monospace_size; + guint minimum_font_size; + gfloat zoom_level; + guint disable_plugins; + guint disable_scripts; + guint autoload_img; + guint autoshrink_img; + guint enable_spellcheck; + guint enable_private; + guint print_bg; + gchar* style_uri; + guint resizable_txt; + gchar* default_encoding; + guint enforce_96dpi; + gchar *inject_html; + guint caret_browsing; + guint mode; + gchar* base_url; + gchar* insert_indicator; + gchar* cmd_indicator; + gboolean print_version; + + /* command list: (key)name -> (value)Command */ + GHashTable* commands; + /* event lookup: (key)event_id -> (value)event_name */ + GHashTable *event_lookup; +} Behaviour; + +/* javascript */ +typedef struct { + gboolean initialized; + JSClassDefinition classdef; + JSClassRef classref; +} Javascript; + +/* static information */ +typedef struct { + int webkit_major; + int webkit_minor; + int webkit_micro; + gchar *arch; + gchar *commit; +} Info; + +/* main uzbl data structure */ +typedef struct { + GUI gui; + State state; + Network net; + Behaviour behave; + Communication comm; + Javascript js; + Info info; + + Window xwin; + + /* group bindings: key -> action */ + GHashTable* bindings; +} UzblCore; + + +typedef struct { + char* name; + char* param; +} Action; + +typedef void sigfunc(int); + +/* Event system */ +enum event_type { + LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, + KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, + LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, + WEBINSPECTOR, COOKIE, NEW_WINDOW, SELECTION_CHANGED, + VARIABLE_SET, FIFO_SET, + + /* must be last entry */ + LAST_EVENT +}; + +/* XDG Stuff */ +typedef struct { + gchar* environmental; + gchar* default_value; +} XDG_Var; + +XDG_Var XDG[] = +{ + { "XDG_CONFIG_HOME", "~/.config" }, + { "XDG_DATA_HOME", "~/.local/share" }, + { "XDG_CACHE_HOME", "~/.cache" }, + { "XDG_CONFIG_DIRS", "/etc/xdg" }, + { "XDG_DATA_DIRS", "/usr/local/share/:/usr/share/" }, +}; + +/* Functions */ +char * +itos(int val); + +char * +str_replace (const char* search, const char* replace, const char* string); + +GArray* +read_file_by_line (const gchar *path); + +gchar* +parseenv (char* string); + +void +clean_up(void); + +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); + +gboolean +navigation_decision_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data); + +gboolean +new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data); + +gboolean +mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data); + +/*@null@*/ WebKitWebView* +create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data); + +gboolean +download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data); + +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); + +void +title_change_cb (WebKitWebView* web_view, GParamSpec param_spec); + +void +progress_change_cb (WebKitWebView* page, gint progress, gpointer data); + +void +load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); + +void +load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); + +void +load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); + +void +selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud); + +void +destroy_cb (GtkWidget* widget, gpointer data); + +void +commands_hash(void); + +void +free_action(gpointer act); + +Action* +new_action(const gchar *name, const gchar *param); + +bool +file_exists (const char * filename); + +void +set_keycmd(); + +void +set_mode_indicator(); + +void +update_indicator(); + +void +set_insert_mode(gboolean mode); + +void +toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result); + +void +load_uri (WebKitWebView * web_view, GArray *argv, GString *result); + +void +new_window_load_uri (const gchar * uri); + +void +chain (WebKitWebView *page, GArray *argv, GString *result); + +void +keycmd (WebKitWebView *page, GArray *argv, GString *result); + +void +keycmd_nl (WebKitWebView *page, GArray *argv, GString *result); + +void +keycmd_bs (WebKitWebView *page, GArray *argv, GString *result); + +void +close_uzbl (WebKitWebView *page, GArray *argv, GString *result); + +gboolean +run_command(const gchar *command, const guint npre, + const gchar **args, const gboolean sync, char **output_stdout); + +char* +build_progressbar_ascii(int percent); + +void +talk_to_socket(WebKitWebView *web_view, GArray *argv, GString *result); + +void +spawn(WebKitWebView *web_view, GArray *argv, GString *result); + +void +spawn_sh(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 +parse_command(const char *cmd, const char *param, GString *result); + +void +parse_cmd_line(const char *ctl_line, GString *result); + +/*@null@*/ gchar* +build_stream_name(int type, const gchar *dir); + +gboolean +control_fifo(GIOChannel *gio, GIOCondition condition); + +/*@null@*/ gchar* +init_fifo(gchar *dir); + +gboolean +control_stdin(GIOChannel *gio, GIOCondition condition); + +void +create_stdin(); + +/*@null@*/ gchar* +init_socket(gchar *dir); + +gboolean +control_socket(GIOChannel *chan); + +gboolean +control_client_socket(GIOChannel *chan); + +void +update_title (void); + +gboolean +key_press_cb (GtkWidget* window, GdkEventKey* event); + +void +run_keycmd(const gboolean key_ret); + +void +exec_paramcmd(const Action* act, const guint i); + +void +initialize (int argc, char *argv[]); + +void +create_browser (); + +GtkWidget* +create_mainbar (); + +GtkWidget* +create_window (); + +GtkPlug* +create_plug (); + +void +run_handler (const gchar *act, const gchar *args); + +void +add_binding (const gchar *key, const gchar *act); + +/*@null@*/ gchar* +get_xdg_var (XDG_Var xdg); + +/*@null@*/ gchar* +find_xdg_file (int xdg_type, const char* filename); + +void +settings_init (); + +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 +dehilight (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 +eval_js(WebKitWebView * web_view, gchar *script, GString *result); + +void handle_cookies (SoupSession *session, + SoupMessage *msg, + gpointer user_data); +void +save_cookies (SoupMessage *msg, + gpointer user_data); + +void +set_var(WebKitWebView *page, GArray *argv, GString *result); + +void +act_bind(WebKitWebView *page, GArray *argv, GString *result); + +void +act_dump_config(); + +void +dump_var_hash(gpointer k, gpointer v, gpointer ud); + +void +dump_key_hash(gpointer k, gpointer v, gpointer ud); + +void +dump_config(); + +void +retrieve_geometry(); + +void +update_gui(WebKitWebView *page, GArray *argv, GString *result); + +gboolean +configure_event_cb(GtkWidget* window, GdkEventConfigure* event); + +typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result); +typedef struct { + Command function; + gboolean no_split; +} CommandInfo; + +/* Command callbacks */ +void +cmd_load_uri(); + +void +cmd_set_status(); + +void +set_proxy_url(); + +void +set_icon(); + +void +cmd_cookie_handler(); + +void +cmd_scheme_handler(); + +void +move_statusbar(); + +void +cmd_always_insert_mode(); + +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_disable_plugins(); + +void +cmd_disable_scripts(); + +void +cmd_minimum_font_size(); + +void +cmd_fifo_dir(); + +void +cmd_socket_dir(); + +void +cmd_modkey(); + +void +cmd_useragent() ; + +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 +cmd_enforce_96dpi(); + +void +cmd_inject_html(); + +void +cmd_caret_browsing(); + +void +cmd_set_geometry(); + +/* vi: set et ts=4: */ -- cgit v1.2.3 From 53ad9e51bbb04c3de86046663a81a43e2aba95cd Mon Sep 17 00:00:00 2001 From: Mason Larobina Date: Sun, 6 Sep 2009 20:41:54 +0800 Subject: Config type checking, events +SOCKET_SET -COOKIE & dump config on load. --- examples/data/uzbl/scripts/event_manager.py | 48 +++++++++-------- uzbl-core.c | 84 ++++++++++++++++++----------- uzbl-core.h | 9 ++-- 3 files changed, 83 insertions(+), 58 deletions(-) (limited to 'uzbl-core.h') diff --git a/examples/data/uzbl/scripts/event_manager.py b/examples/data/uzbl/scripts/event_manager.py index 65089c1..0332178 100755 --- a/examples/data/uzbl/scripts/event_manager.py +++ b/examples/data/uzbl/scripts/event_manager.py @@ -45,7 +45,6 @@ import sys import select import re import types -import pprint import socket from traceback import print_exc @@ -83,13 +82,13 @@ config = { # Define some globals. _VALIDSETKEY = re.compile("^[a-zA-Z][a-zA-Z0-9_]*$").match _SCRIPTNAME = os.path.basename(sys.argv[0]) - +_TYPECONVERT = {'int': int, 'float': float, 'str': str} def echo(msg): '''Prints only if the verbose flag has been set.''' if config['verbose']: - sys.stderr.write("%s: %s\n" % (_SCRIPTNAME, msg)) + sys.stdout.write("%s: %s\n" % (_SCRIPTNAME, msg)) def counter(): @@ -177,12 +176,13 @@ class PluginManager(dict): if not hasattr(plugin, 'init'): raise ImportError('plugin missing main "init" function.') - print "Loaded plugin: %r" % name - except: print_exc() self._unload_plugin(name) + if len(self.keys()): + echo("loaded plugin(s): %s" % ', '.join(self.keys())) + def reload_plugins(self): '''Unload all loaded plugins then run load_plugins() again. @@ -214,6 +214,16 @@ class UzblInstance: '''Updates the config dict and relays any changes back to the uzbl instance via the set function.''' + if type(value) == types.BooleanType: + value = int(value) + + if key in self.keys() and type(value) != type(self[key]): + raise TypeError("%r for %r" % (type(value), key)) + + else: + # All custom variables are strings. + value = "" if value is None else str(value) + self._setcmd(key, value) dict.__setitem__(self, key, value) @@ -280,8 +290,6 @@ class UzblInstance: def _init_plugins(self): '''Call the init() function in every plugin.''' - pprint.pprint(self.plugins) - for plugin in self.plugins.keys(): try: self.plugins[plugin].init(self) @@ -344,7 +352,7 @@ class UzblInstance: d = {'handler': handler, 'args': args, 'kargs': kargs} self.handlers[event][id] = d - print "Added handler:", event, d + echo("added handler for %s: %r" % (event, d)) # The unique id is returned so that the newly created event handler can # be destroyed if need be. @@ -356,7 +364,7 @@ class UzblInstance: for event in self.handlers.keys(): if id in self.handlers[event].keys(): - print "Removed handler:", self.handlers[event][id] + echo("removed handler %d" % id) del self.handlers[event][id] @@ -377,7 +385,7 @@ class UzblInstance: if not cmd: if glob in self.binds.keys(): - print "Deleted bind:", self.binds[glob] + echo("deleted bind: %r" % self.binds[glob]) del self.binds[glob] d = {'glob': glob, 'once': True, 'hasargs': True, 'cmd': cmd} @@ -394,7 +402,7 @@ class UzblInstance: d['hasargs'] = False self.binds[glob] = d - print "Added bind:", d + echo("added bind: %r" % d) def set(self, key, value): @@ -453,20 +461,19 @@ class UzblInstance: def handle_event(self, event, args): '''Handle uzbl events internally before dispatch.''' + print event, args + if event == 'VARIABLE_SET': - l = args.split(' ', 1) - if len(l) == 1: + l = args.split(' ', 2) + if len(l) == 2: l.append("") - key, value = l - dict.__setitem__(self._config, key, value) + key, type, value = l + dict.__setitem__(self._config, key, _TYPECONVERT[type](value)) elif event == 'FIFO_SET': self.fifo_socket = args - # Workaround until SOCKET_SET is implemented. - self.socket_file = args.replace("fifo", "socket") - elif event == 'SOCKET_SET': self.socket_file = args @@ -477,12 +484,10 @@ class UzblInstance: def dispatch_event(self, event, args): '''Now send the event to any event handlers added with the connect function. In other words: handle plugin's event hooks.''' - unhandled = True if event in self.handlers.keys(): for hid in self.handlers[event]: try: - unhandled = False handler = self.handlers[event][hid] print "Executing handler:", event, handler self.exc_handler(handler, args) @@ -490,9 +495,6 @@ class UzblInstance: except: print_exc() - if unhandled: - print "Unhandled event:", event, args - def exc_handler(self, d, args): '''Handle handler.''' diff --git a/uzbl-core.c b/uzbl-core.c index ad7dd56..9541cfa 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -192,29 +192,29 @@ const struct var_name_to_ptr_t { }; /* Event id to name mapping - * Event names must be in the same + * Event names must be in the same * order as in 'enum event_type' * * TODO: Add more useful events */ const char *event_table[LAST_EVENT] = { - "LOAD_START" , - "LOAD_COMMIT" , - "LOAD_FINISH" , - "LOAD_ERROR" , + "LOAD_START" , + "LOAD_COMMIT" , + "LOAD_FINISH" , + "LOAD_ERROR" , "KEY_PRESS" , "KEY_RELEASE" , - "DOWNLOAD_REQUEST" , + "DOWNLOAD_REQUEST" , "COMMAND_EXECUTED" , "LINK_HOVER" , "TITLE_CHANGED" , "GEOMETRY_CHANGED" , "WEBINSPECTOR" , - "COOKIE" , "NEW_WINDOW" , "SELECTION_CHANGED", "VARIABLE_SET", - "FIFO_SET" + "FIFO_SET", + "SOCKET_SET" }; @@ -1966,23 +1966,35 @@ set_var_value(const gchar *name, gchar *val) { if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { if(!c->writeable) return FALSE; + if (uzbl.state.config_loaded) + msg = g_string_new(name); + /* check for the variable type */ if (c->type == TYPE_STR) { buf = expand(val, 0); g_free(*c->ptr.s); *c->ptr.s = buf; - msg = g_string_new(name); - g_string_append_printf(msg, " %s", buf); - send_event(VARIABLE_SET, msg->str); - g_string_free(msg,TRUE); + if (uzbl.state.config_loaded) + g_string_append_printf(msg, " str %s", buf); + } else if(c->type == TYPE_INT) { buf = expand(val, 0); *c->ptr.i = (int)strtoul(buf, &endp, 10); g_free(buf); + if (uzbl.state.config_loaded) + g_string_append_printf(msg, " int %d", *c->ptr.i); + } else if (c->type == TYPE_FLOAT) { buf = expand(val, 0); *c->ptr.f = strtod(buf, &endp); g_free(buf); + if (uzbl.state.config_loaded) + g_string_append_printf(msg, " float %f", *c->ptr.f); + } + + if (uzbl.state.config_loaded) { + send_event(VARIABLE_SET, msg->str); + g_string_free(msg,TRUE); } /* invoke a command specific function */ @@ -2006,6 +2018,13 @@ set_var_value(const gchar *name, gchar *val) { *c->ptr.s = buf; g_hash_table_insert(uzbl.comm.proto_var, g_strdup(name), (gpointer) c); + + if (uzbl.state.config_loaded) { + msg = g_string_new(name); + g_string_append_printf(msg, " str %s", buf); + send_event(VARIABLE_SET, msg->str); + g_string_free(msg,TRUE); + } } return TRUE; } @@ -2235,6 +2254,7 @@ init_socket(gchar *dir) { /* return dir or, on error, free dir and return NULL * if( (chan = g_io_channel_unix_new(sock)) ) { g_io_add_watch(chan, G_IO_IN|G_IO_HUP, (GIOFunc) control_socket, chan); uzbl.comm.socket_path = path; + send_event(SOCKET_SET, path); return dir; } } else g_warning ("init_socket: could not open in %s: %s\n", path, strerror(errno)); @@ -2292,7 +2312,7 @@ configure_event_cb(GtkWidget* window, GdkEventConfigure* event) { (void) event; retrieve_geometry(); - send_event(GEOMETRY_CHANGED, uzbl.gui.geometry); + send_event(GEOMETRY_CHANGED, uzbl.gui.geometry); return FALSE; } @@ -2331,7 +2351,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) void run_keycmd(const gboolean key_ret) { - + /* run the keycmd immediately if it isn't incremental and doesn't take args */ Action *act; gchar *tmp; @@ -2641,6 +2661,8 @@ void settings_init () { State *s = &uzbl.state; Network *n = &uzbl.net; + uzbl.state.config_loaded = FALSE; + int i; for (i = 0; default_config[i].command != NULL; i++) { parse_cmd_line(default_config[i].command, NULL); @@ -2671,6 +2693,11 @@ settings_init () { printf ("No configuration file loaded.\n"); } + /* The config has now been loaded so dump the complete hash table for the + * event manager to parse */ + uzbl.state.config_loaded = TRUE; + dump_config(); + g_signal_connect_after(n->soup_session, "request-started", G_CALLBACK(handle_cookies), NULL); } @@ -2686,7 +2713,6 @@ void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data) g_string_printf(s, "GET '%s' '%s' '%s'", soup_uri->scheme, soup_uri->host, soup_uri->path); if(uzbl.behave.cookie_handler) run_handler(uzbl.behave.cookie_handler, s->str); - send_event(COOKIE, s->str); if(uzbl.behave.cookie_handler && uzbl.comm.sync_stdout && strcmp (uzbl.comm.sync_stdout, "") != 0) { @@ -2712,7 +2738,6 @@ save_cookies (SoupMessage *msg, gpointer user_data){ GString *s = g_string_new (""); g_string_printf(s, "PUT '%s' '%s' '%s' '%s'", soup_uri->scheme, soup_uri->host, soup_uri->path, cookie); run_handler(uzbl.behave.cookie_handler, s->str); - send_event(COOKIE, s->str); g_free (cookie); g_string_free(s, TRUE); } @@ -2818,31 +2843,28 @@ void dump_var_hash(gpointer k, gpointer v, gpointer ud) { (void) ud; uzbl_cmdprop *c = v; + GString *msg; 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_key_hash(gpointer k, gpointer v, gpointer ud) { - (void) ud; - Action *a = v; + /* check for the variable type */ + msg = g_string_new((char *)k); + if (c->type == TYPE_STR) { + g_string_append_printf(msg, " str %s", *c->ptr.s ? *c->ptr.s : " "); + } else if(c->type == TYPE_INT) { + g_string_append_printf(msg, " int %d", *c->ptr.i); + } else if (c->type == TYPE_FLOAT) { + g_string_append_printf(msg, " float %f", *c->ptr.f); + } - printf("bind %s = %s %s\n", (char *)k , - (char *)a->name, a->param?(char *)a->param:""); + send_event(VARIABLE_SET, msg->str); + g_string_free(msg, TRUE); } void dump_config() { g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash, NULL); - g_hash_table_foreach(uzbl.bindings, dump_key_hash, NULL); } void diff --git a/uzbl-core.h b/uzbl-core.h index 010cbe5..bde1e43 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -70,6 +70,7 @@ typedef struct { gchar* keycmd; gchar* searchtx; gboolean verbose; + gboolean config_loaded; } State; @@ -188,10 +189,10 @@ typedef void sigfunc(int); enum event_type { LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, - LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, - WEBINSPECTOR, COOKIE, NEW_WINDOW, SELECTION_CHANGED, - VARIABLE_SET, FIFO_SET, - + LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, + WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, + VARIABLE_SET, FIFO_SET, SOCKET_SET, + /* must be last entry */ LAST_EVENT }; -- cgit v1.2.3 From 6e92d603955f3cb3635cb01a21830f6c510d4e5b Mon Sep 17 00:00:00 2001 From: Mason Larobina Date: Mon, 7 Sep 2009 00:49:50 +0800 Subject: Removed uzbl.state.config_loaded variable. --- uzbl-core.c | 34 ++++++++++------------------------ uzbl-core.h | 1 - 2 files changed, 10 insertions(+), 25 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 9541cfa..39ff9d8 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -1966,36 +1966,30 @@ set_var_value(const gchar *name, gchar *val) { if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { if(!c->writeable) return FALSE; - if (uzbl.state.config_loaded) - msg = g_string_new(name); + msg = g_string_new(name); /* check for the variable type */ if (c->type == TYPE_STR) { buf = expand(val, 0); g_free(*c->ptr.s); *c->ptr.s = buf; - if (uzbl.state.config_loaded) - g_string_append_printf(msg, " str %s", buf); + g_string_append_printf(msg, " str %s", buf); } else if(c->type == TYPE_INT) { buf = expand(val, 0); *c->ptr.i = (int)strtoul(buf, &endp, 10); g_free(buf); - if (uzbl.state.config_loaded) - g_string_append_printf(msg, " int %d", *c->ptr.i); + g_string_append_printf(msg, " int %d", *c->ptr.i); } else if (c->type == TYPE_FLOAT) { buf = expand(val, 0); *c->ptr.f = strtod(buf, &endp); g_free(buf); - if (uzbl.state.config_loaded) - g_string_append_printf(msg, " float %f", *c->ptr.f); + g_string_append_printf(msg, " float %f", *c->ptr.f); } - if (uzbl.state.config_loaded) { - send_event(VARIABLE_SET, msg->str); - g_string_free(msg,TRUE); - } + send_event(VARIABLE_SET, msg->str); + g_string_free(msg,TRUE); /* invoke a command specific function */ if(c->func) c->func(); @@ -2019,12 +2013,10 @@ set_var_value(const gchar *name, gchar *val) { g_hash_table_insert(uzbl.comm.proto_var, g_strdup(name), (gpointer) c); - if (uzbl.state.config_loaded) { - msg = g_string_new(name); - g_string_append_printf(msg, " str %s", buf); - send_event(VARIABLE_SET, msg->str); - g_string_free(msg,TRUE); - } + msg = g_string_new(name); + g_string_append_printf(msg, " str %s", buf); + send_event(VARIABLE_SET, msg->str); + g_string_free(msg,TRUE); } return TRUE; } @@ -2661,7 +2653,6 @@ void settings_init () { State *s = &uzbl.state; Network *n = &uzbl.net; - uzbl.state.config_loaded = FALSE; int i; for (i = 0; default_config[i].command != NULL; i++) { @@ -2693,11 +2684,6 @@ settings_init () { printf ("No configuration file loaded.\n"); } - /* The config has now been loaded so dump the complete hash table for the - * event manager to parse */ - uzbl.state.config_loaded = TRUE; - dump_config(); - g_signal_connect_after(n->soup_session, "request-started", G_CALLBACK(handle_cookies), NULL); } diff --git a/uzbl-core.h b/uzbl-core.h index bde1e43..aaaeca1 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -70,7 +70,6 @@ typedef struct { gchar* keycmd; gchar* searchtx; gboolean verbose; - gboolean config_loaded; } State; -- cgit v1.2.3 From 13cd8f34e86fe9bd17fffd770eb0c1ee57bd1815 Mon Sep 17 00:00:00 2001 From: Mason Larobina Date: Mon, 7 Sep 2009 01:34:28 +0800 Subject: Added the command and functions to dump_config_as_events --- uzbl-core.c | 105 ++++++++++++++++++++++++++++++++++++++---------------------- uzbl-core.h | 6 ++++ 2 files changed, 72 insertions(+), 39 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 39ff9d8..fd4fb8d 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -886,43 +886,44 @@ VIEWFUNC(go_forward) /* -- command to callback/function map for things we cannot attach to any signals */ struct {const char *key; CommandInfo value;} cmdlist[] = -{ /* key function no_split */ - { "back", {view_go_back, 0} }, - { "forward", {view_go_forward, 0} }, - { "scroll_vert", {scroll_vert, 0} }, - { "scroll_horz", {scroll_horz, 0} }, - { "scroll_begin", {scroll_begin, 0} }, - { "scroll_end", {scroll_end, 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, 0} }, - { "sync_spawn", {spawn_sync, 0} }, // needed for cookie handler - { "sh", {spawn_sh, 0} }, - { "sync_sh", {spawn_sh_sync, 0} }, // needed for cookie handler - { "talk_to_socket", {talk_to_socket, 0} }, - { "exit", {close_uzbl, 0} }, - { "search", {search_forward_text, TRUE} }, - { "search_reverse", {search_reverse_text, TRUE} }, - { "dehilight", {dehilight, 0} }, - { "toggle_insert_mode", {toggle_insert_mode, 0} }, - { "set", {set_var, TRUE} }, - //{ "get", {get_var, TRUE} }, - { "bind", {act_bind, TRUE} }, - { "dump_config", {act_dump_config, 0} }, - { "keycmd", {keycmd, TRUE} }, - { "keycmd_nl", {keycmd_nl, TRUE} }, - { "keycmd_bs", {keycmd_bs, 0} }, - { "chain", {chain, 0} }, - { "print", {print, TRUE} }, - { "update_gui", {update_gui, TRUE} } +{ /* key function no_split */ + { "back", {view_go_back, 0} }, + { "forward", {view_go_forward, 0} }, + { "scroll_vert", {scroll_vert, 0} }, + { "scroll_horz", {scroll_horz, 0} }, + { "scroll_begin", {scroll_begin, 0} }, + { "scroll_end", {scroll_end, 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, 0} }, + { "sync_spawn", {spawn_sync, 0} }, // needed for cookie handler + { "sh", {spawn_sh, 0} }, + { "sync_sh", {spawn_sh_sync, 0} }, // needed for cookie handler + { "talk_to_socket", {talk_to_socket, 0} }, + { "exit", {close_uzbl, 0} }, + { "search", {search_forward_text, TRUE} }, + { "search_reverse", {search_reverse_text, TRUE} }, + { "dehilight", {dehilight, 0} }, + { "toggle_insert_mode", {toggle_insert_mode, 0} }, + { "set", {set_var, TRUE} }, + //{ "get", {get_var, TRUE} }, + { "bind", {act_bind, TRUE} }, + { "dump_config", {act_dump_config, 0} }, + { "dump_config_as_events", {act_dump_config_as_events, 0} }, + { "keycmd", {keycmd, TRUE} }, + { "keycmd_nl", {keycmd_nl, TRUE} }, + { "keycmd_bs", {keycmd_bs, 0} }, + { "chain", {chain, 0} }, + { "print", {print, TRUE} }, + { "update_gui", {update_gui, TRUE} } }; void @@ -1009,6 +1010,11 @@ act_dump_config() { dump_config(); } +void +act_dump_config_as_events() { + dump_config_as_events(); +} + void set_keycmd() { run_keycmd(FALSE); @@ -2829,6 +2835,27 @@ 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; GString *msg; if(!c->dump) @@ -2849,8 +2876,8 @@ dump_var_hash(gpointer k, gpointer v, gpointer ud) { } void -dump_config() { - g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash, NULL); +dump_config_as_events() { + g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash_as_event, NULL); } void diff --git a/uzbl-core.h b/uzbl-core.h index aaaeca1..a5470e1 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -463,6 +463,9 @@ act_bind(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); @@ -472,6 +475,9 @@ dump_key_hash(gpointer k, gpointer v, gpointer ud); void dump_config(); +void +dump_config_as_events(); + void retrieve_geometry(); -- cgit v1.2.3 From e6cdd95b0f08de2a8b71df40f8cfedacbf8c58b5 Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Sun, 6 Sep 2009 23:38:00 +0200 Subject: Added KEY_RELEASE event --- uzbl-core.c | 15 ++++++++++++++- uzbl-core.h | 3 +++ 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index ad7dd56..d8179df 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -2304,7 +2304,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) (void) window; if(event->type == GDK_KEY_PRESS) - send_event(KEY_PRESS, gdk_keyval_name(event->keyval) ); + send_event(KEY_PRESS, gdk_keyval_name(event->keyval)); if (event->type != GDK_KEY_PRESS || event->keyval == GDK_Page_Up || @@ -2329,6 +2329,16 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) return TRUE; } +gboolean +key_release_cb (GtkWidget* window, GdkEventKey* event) { + (void) window; + + if(event->type == GDK_KEY_RELEASE) + send_event(KEY_RELEASE, gdk_keyval_name(event->keyval)); + + return TRUE; +} + void run_keycmd(const gboolean key_ret) { @@ -2437,6 +2447,7 @@ create_mainbar () { gtk_misc_set_padding (GTK_MISC(g->mainbar_label), 2, 2); gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label, TRUE, TRUE, 0); g_signal_connect (G_OBJECT (g->mainbar), "key-press-event", G_CALLBACK (key_press_cb), NULL); + g_signal_connect (G_OBJECT (g->mainbar), "key-release-event", G_CALLBACK (key_release_cb), NULL); return g->mainbar; } @@ -2447,6 +2458,7 @@ create_window () { gtk_widget_set_name (window, "Uzbl browser"); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL); g_signal_connect (G_OBJECT (window), "key-press-event", G_CALLBACK (key_press_cb), NULL); + g_signal_connect (G_OBJECT (window), "key-release-event", G_CALLBACK (key_release_cb), NULL); g_signal_connect (G_OBJECT (window), "configure-event", G_CALLBACK (configure_event_cb), NULL); return window; @@ -2457,6 +2469,7 @@ create_plug () { 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); + g_signal_connect (G_OBJECT (plug), "key-release-event", G_CALLBACK (key_release_cb), NULL); return plug; } diff --git a/uzbl-core.h b/uzbl-core.h index 010cbe5..842d965 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -390,6 +390,9 @@ update_title (void); gboolean key_press_cb (GtkWidget* window, GdkEventKey* event); +gboolean +key_release_cb (GtkWidget* window, GdkEventKey* event); + void run_keycmd(const gboolean key_ret); -- cgit v1.2.3 From 59c99ce1f8c10df88e62936e4ddb1bdc521e599e Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 7 Sep 2009 14:50:05 +0200 Subject: Added INSTANCE_START, INSTANCE_EXIT events and PID constant --- uzbl-core.c | 12 +++++++++++- uzbl-core.h | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index d8179df..e843182 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -187,6 +187,7 @@ const struct var_name_to_ptr_t { { "SELECTED_URI", PTR_C_STR(uzbl.state.selected_url, NULL)}, { "MODE", PTR_C_STR(uzbl.gui.sbar.mode_indicator, NULL)}, { "NAME", PTR_C_STR(uzbl.state.instance_name, NULL)}, + { "PID", PTR_C_STR(uzbl.info.pid_str, NULL)}, { NULL, {.ptr.s = NULL, .type = TYPE_INT, .dump = 0, .writeable = 0, .func = NULL}} }; @@ -214,7 +215,9 @@ const char *event_table[LAST_EVENT] = { "NEW_WINDOW" , "SELECTION_CHANGED", "VARIABLE_SET", - "FIFO_SET" + "FIFO_SET", + "INSTANCE_START", + "INSTANCE_EXIT", }; @@ -530,6 +533,8 @@ clean_up(void) { g_free(uzbl.state.keycmd); g_hash_table_destroy(uzbl.bindings); g_hash_table_destroy(uzbl.behave.commands); + + send_event(INSTANCE_EXIT, uzbl.info.pid_str); } /* --- SIGNAL HANDLER --- */ @@ -2963,6 +2968,11 @@ main (int argc, char* argv[]) { if(!uzbl.state.instance_name) uzbl.state.instance_name = itos((int)uzbl.xwin); + GString *tmp = g_string_new(""); + g_string_printf(tmp, "%d", getpid()); + uzbl.info.pid_str = g_string_free(tmp, FALSE); + send_event(INSTANCE_START, uzbl.info.pid_str); + gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); if (uzbl.state.verbose) { diff --git a/uzbl-core.h b/uzbl-core.h index 842d965..7c557ef 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -158,6 +158,7 @@ typedef struct { int webkit_micro; gchar *arch; gchar *commit; + gchar *pid_str; } Info; /* main uzbl data structure */ @@ -190,7 +191,7 @@ enum event_type { KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, WEBINSPECTOR, COOKIE, NEW_WINDOW, SELECTION_CHANGED, - VARIABLE_SET, FIFO_SET, + VARIABLE_SET, FIFO_SET, INSTANCE_START, INSTANCE_EXIT, /* must be last entry */ LAST_EVENT -- cgit v1.2.3 From 5a9b220413079bb01b4685d6ed7237e278f2ca42 Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 7 Sep 2009 16:49:47 +0200 Subject: removed modkey functionality --- uzbl-core.c | 43 ------------------------------------------- uzbl-core.h | 4 ---- 2 files changed, 47 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 3d4bea8..94dd762 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -134,7 +134,6 @@ const struct var_name_to_ptr_t { { "insert_mode", PTR_V_INT(uzbl.behave.insert_mode, 1, set_mode_indicator)}, { "always_insert_mode", PTR_V_INT(uzbl.behave.always_insert_mode, 1, cmd_always_insert_mode)}, { "reset_command_mode", PTR_V_INT(uzbl.behave.reset_command_mode, 1, NULL)}, - { "modkey", PTR_V_STR(uzbl.behave.modkey, 1, cmd_modkey)}, { "load_finish_handler", PTR_V_STR(uzbl.behave.load_finish_handler, 1, NULL)}, { "load_start_handler", PTR_V_STR(uzbl.behave.load_start_handler, 1, NULL)}, { "load_commit_handler", PTR_V_STR(uzbl.behave.load_commit_handler, 1, NULL)}, @@ -221,30 +220,6 @@ const char *event_table[LAST_EVENT] = { }; -const struct { - /*@null@*/ char *key; - guint mask; -} modkeys[] = { - { "SHIFT", GDK_SHIFT_MASK }, // shift - { "LOCK", GDK_LOCK_MASK }, // capslock or shiftlock, depending on xserver's modmappings - { "CONTROL", GDK_CONTROL_MASK }, // control - { "MOD1", GDK_MOD1_MASK }, // 4th mod - normally alt but depends on modmappings - { "MOD2", GDK_MOD2_MASK }, // 5th mod - { "MOD3", GDK_MOD3_MASK }, // 6th mod - { "MOD4", GDK_MOD4_MASK }, // 7th mod - { "MOD5", GDK_MOD5_MASK }, // 8th mod - { "BUTTON1", GDK_BUTTON1_MASK }, // 1st mouse button - { "BUTTON2", GDK_BUTTON2_MASK }, // 2nd mouse button - { "BUTTON3", GDK_BUTTON3_MASK }, // 3rd mouse button - { "BUTTON4", GDK_BUTTON4_MASK }, // 4th mouse button - { "BUTTON5", GDK_BUTTON5_MASK }, // 5th mouse button - { "SUPER", GDK_SUPER_MASK }, // super (since 2.10) - { "HYPER", GDK_HYPER_MASK }, // hyper (since 2.10) - { "META", GDK_META_MASK }, // meta (since 2.10) - { NULL, 0 } -}; - - /* construct a hash from the var_name_to_ptr array for quick access */ void create_var_to_name_hash() { @@ -1912,24 +1887,6 @@ cmd_inject_html() { } } -void -cmd_modkey() { - int i; - char *buf; - - buf = g_utf8_strup(uzbl.behave.modkey, -1); - uzbl.behave.modmask = 0; - - if(uzbl.behave.modkey) - g_free(uzbl.behave.modkey); - uzbl.behave.modkey = buf; - - for (i = 0; modkeys[i].key != NULL; i++) { - if (g_strrstr(buf, modkeys[i].key)) - uzbl.behave.modmask |= modkeys[i].mask; - } -} - void cmd_useragent() { if (*uzbl.net.useragent == ' ') { diff --git a/uzbl-core.h b/uzbl-core.h index a274060..01eef08 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -110,7 +110,6 @@ typedef struct { gboolean insert_mode; gboolean status_top; gboolean reset_command_mode; - gchar* modkey; guint modmask; guint http_debug; gchar* shell_cmd; @@ -573,9 +572,6 @@ cmd_fifo_dir(); void cmd_socket_dir(); -void -cmd_modkey(); - void cmd_useragent() ; -- cgit v1.2.3 From 0867992ad75f8f749a8e34b27030bbda4acbe40a Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 7 Sep 2009 18:01:09 +0200 Subject: added event command --- uzbl-core.c | 26 ++++++++++++++++++++++++++ uzbl-core.h | 3 +++ 2 files changed, 29 insertions(+) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 94dd762..8710a07 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -903,6 +903,7 @@ struct {const char *key; CommandInfo value;} cmdlist[] = { "keycmd_bs", {keycmd_bs, 0} }, { "chain", {chain, 0} }, { "print", {print, TRUE} }, + { "event", {event, 0} }, { "update_gui", {update_gui, TRUE} } }; @@ -964,6 +965,31 @@ update_gui(WebKitWebView *page, GArray *argv, GString *result) { update_title(); } +void +event(WebKitWebView *page, GArray *argv, GString *result) { + (void) page; (void) result; + GString *event_name; + gchar *event_details = NULL; + + if(argv_idx(argv, 0)) + event_name = g_string_ascii_up(g_string_new(argv_idx(argv, 0))); + else + return; + + if(argv_idx(argv, 1)) + event_details = expand(argv_idx(argv, 1), 0); + + printf("EVENT %s [%s] %s\n", + event_name->str, + uzbl.state.instance_name, + event_details?event_details:""); + fflush(stdout); + + g_string_free(event_name, TRUE); + if(event_details) + g_free(event_details); +} + void print(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; diff --git a/uzbl-core.h b/uzbl-core.h index 01eef08..a4cb1ed 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -488,6 +488,9 @@ retrieve_geometry(); void update_gui(WebKitWebView *page, GArray *argv, GString *result); +void +event(WebKitWebView *page, GArray *argv, GString *result); + gboolean configure_event_cb(GtkWidget* window, GdkEventConfigure* event); -- cgit v1.2.3 From 2d099c0efd24118f251c1aa3ff04f2103b5dd7a7 Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Wed, 9 Sep 2009 13:26:18 +0200 Subject: Added support for sending events over the socket --- uzbl-core.c | 120 +++++++++++++++++++++++++++++++++++++++--------------------- uzbl-core.h | 1 + 2 files changed, 79 insertions(+), 42 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 9828e5d..6fbae8f 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -393,15 +393,55 @@ expand(const char *s, guint recurse) { return g_string_free(buf, FALSE); } -/* send events as strings to stdout (do we need to support fifo/socket as output mechanism?) - * we send all events to the output. it's the users task to filter out what he cares about. -*/ void -send_event(int type, const gchar *details) { +send_event_socket(GString *msg) { + GError *error = NULL; + GIOStatus ret; + gsize len; - if(type < LAST_EVENT) { - printf("EVENT %s [%s] %s\n", event_table[type], uzbl.state.instance_name, details); - fflush(stdout); + if(uzbl.comm.socket_path && + uzbl.comm.clientchan && + uzbl.comm.clientchan->is_writeable) { + ret = g_io_channel_write_chars (uzbl.comm.clientchan, + msg->str, msg->len, + &len, &error); + if (ret == G_IO_STATUS_ERROR) { + g_warning ("Error sending event to socket: %s", error->message); + } + g_io_channel_flush(uzbl.comm.clientchan, &error); + } +} + +void send_event_stdout(GString *msg) { + printf("%s", msg->str); + fflush(stdout); +} + +/* + * build event string and send over the supported interfaces + * cutom_event == NULL indicates an internal event +*/ +void +send_event(int type, const gchar *details, const gchar *custom_event) { + GString *event_message = g_string_new(""); + + /* check for custom events */ + if(custom_event) { + g_string_printf(event_message, "EVENT %s [%s] %s\n", + custom_event, uzbl.state.instance_name, details); + } + /* check wether we support the internal event */ + else if(type < LAST_EVENT) { + g_string_printf(event_message, "EVENT %s [%s] %s\n", + event_table[type], uzbl.state.instance_name, details); + } + + if(event_message->str) { + /* TODO: a means to select the interface to which events are sent */ + send_event_stdout(event_message); + send_event_socket(event_message); + + g_string_free(event_message, TRUE); } } @@ -509,7 +549,7 @@ clean_up(void) { g_hash_table_destroy(uzbl.bindings); g_hash_table_destroy(uzbl.behave.commands); - send_event(INSTANCE_EXIT, uzbl.info.pid_str); + send_event(INSTANCE_EXIT, uzbl.info.pid_str, NULL); } /* --- SIGNAL HANDLER --- */ @@ -578,7 +618,7 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequ if (uzbl.state.verbose) printf("New window requested -> %s \n", uri); webkit_web_policy_decision_use(policy_decision); - send_event(NEW_WINDOW, uri); + send_event(NEW_WINDOW, uri, NULL); return TRUE; } @@ -636,7 +676,7 @@ download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) { g_string_free(args, TRUE); } - send_event(DOWNLOAD_REQ, webkit_download_get_uri ((WebKitDownload*)download)); + send_event(DOWNLOAD_REQ, webkit_download_get_uri ((WebKitDownload*)download), NULL); return (FALSE); } @@ -746,7 +786,7 @@ link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpoin uzbl.state.selected_url = NULL; if (link) { uzbl.state.selected_url = g_strdup(link); - send_event(LINK_HOVER, uzbl.state.selected_url); + send_event(LINK_HOVER, uzbl.state.selected_url, NULL); } update_title(); } @@ -760,7 +800,7 @@ title_change_cb (WebKitWebView* web_view, GParamSpec param_spec) { g_free (uzbl.gui.main_title); uzbl.gui.main_title = title ? g_strdup (title) : g_strdup ("(no title)"); update_title(); - send_event(TITLE_CHANGED, uzbl.gui.main_title); + send_event(TITLE_CHANGED, uzbl.gui.main_title, NULL); } void @@ -782,7 +822,7 @@ selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) { webkit_web_view_copy_clipboard(webkitwebview); tmp = gtk_clipboard_wait_for_text(gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)); - send_event(SELECTION_CHANGED, tmp); + send_event(SELECTION_CHANGED, tmp, NULL); g_free(tmp); } @@ -794,7 +834,7 @@ load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { if (uzbl.behave.load_finish_handler) run_handler(uzbl.behave.load_finish_handler, ""); - send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame)); + send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame), NULL); } void clear_keycmd() { @@ -811,7 +851,7 @@ load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { if (uzbl.behave.load_start_handler) run_handler(uzbl.behave.load_start_handler, ""); - send_event(LOAD_START, uzbl.state.uri); + send_event(LOAD_START, uzbl.state.uri, NULL); } void @@ -823,7 +863,7 @@ load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer gchar *details; details = g_strdup_printf("%s %d:%s", uri, err->code, err->message); - send_event(LOAD_ERROR, details); + send_event(LOAD_ERROR, details, NULL); g_free(details); } @@ -842,7 +882,7 @@ load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { run_handler(uzbl.behave.load_commit_handler, uzbl.state.uri); /* event message */ - send_event(LOAD_COMMIT, webkit_web_frame_get_uri (frame)); + send_event(LOAD_COMMIT, webkit_web_frame_get_uri (frame), NULL); } void @@ -979,11 +1019,7 @@ event(WebKitWebView *page, GArray *argv, GString *result) { if(argv_idx(argv, 1)) event_details = expand(argv_idx(argv, 1), 0); - printf("EVENT %s [%s] %s\n", - event_name->str, - uzbl.state.instance_name, - event_details?event_details:""); - fflush(stdout); + send_event(0, event_details?event_details:"", event_name->str); g_string_free(event_name, TRUE); if(event_details) @@ -1257,7 +1293,7 @@ new_window_load_uri (const gchar * uri) { GString *s = g_string_new (""); g_string_printf(s, "'%s'", uri); run_handler(uzbl.behave.new_window, s->str); - send_event(NEW_WINDOW, s->str); + send_event(NEW_WINDOW, s->str, NULL); return; } GString* to_execute = g_string_new (""); @@ -1275,7 +1311,7 @@ new_window_load_uri (const gchar * uri) { printf("\n%s\n", to_execute->str); g_spawn_command_line_async (to_execute->str, NULL); /* TODO: should we just report the uri as event detail? */ - send_event(NEW_WINDOW, to_execute->str); + send_event(NEW_WINDOW, to_execute->str, NULL); g_string_free (to_execute, TRUE); } @@ -1982,7 +2018,7 @@ set_var_value(const gchar *name, gchar *val) { g_string_append_printf(msg, " float %f", *c->ptr.f); } - send_event(VARIABLE_SET, msg->str); + send_event(VARIABLE_SET, msg->str, NULL); g_string_free(msg,TRUE); /* invoke a command specific function */ @@ -2009,7 +2045,7 @@ set_var_value(const gchar *name, gchar *val) { msg = g_string_new(name); g_string_append_printf(msg, " str %s", buf); - send_event(VARIABLE_SET, msg->str); + send_event(VARIABLE_SET, msg->str, NULL); g_string_free(msg,TRUE); } return TRUE; @@ -2102,7 +2138,7 @@ init_fifo(gchar *dir) { /* return dir or, on error, free dir and return NULL */ if (g_io_add_watch(chan, G_IO_IN|G_IO_HUP, (GIOFunc) control_fifo, NULL)) { if (uzbl.state.verbose) printf ("init_fifo: created successfully as %s\n", path); - send_event(FIFO_SET, path); + send_event(FIFO_SET, path, NULL); uzbl.comm.fifo_path = path; return dir; } else g_warning ("init_fifo: could not add watch on %s\n", path); @@ -2157,14 +2193,14 @@ control_socket(GIOChannel *chan) { struct sockaddr_un remote; unsigned int t = sizeof(remote); int clientsock; - GIOChannel *clientchan; + //GIOChannel *clientchan; clientsock = accept (g_io_channel_unix_get_fd(chan), (struct sockaddr *) &remote, &t); - if ((clientchan = g_io_channel_unix_new(clientsock))) { - g_io_add_watch(clientchan, G_IO_IN|G_IO_HUP, - (GIOFunc) control_client_socket, clientchan); + if ((uzbl.comm.clientchan = g_io_channel_unix_new(clientsock))) { + g_io_add_watch(uzbl.comm.clientchan, G_IO_IN|G_IO_HUP, + (GIOFunc) control_client_socket, uzbl.comm.clientchan); } return TRUE; @@ -2240,7 +2276,7 @@ init_socket(gchar *dir) { /* return dir or, on error, free dir and return NULL * if( (chan = g_io_channel_unix_new(sock)) ) { g_io_add_watch(chan, G_IO_IN|G_IO_HUP, (GIOFunc) control_socket, chan); uzbl.comm.socket_path = path; - send_event(SOCKET_SET, path); + send_event(SOCKET_SET, path, NULL); return dir; } } else g_warning ("init_socket: could not open in %s: %s\n", path, strerror(errno)); @@ -2298,7 +2334,7 @@ configure_event_cb(GtkWidget* window, GdkEventConfigure* event) { (void) event; retrieve_geometry(); - send_event(GEOMETRY_CHANGED, uzbl.gui.geometry); + send_event(GEOMETRY_CHANGED, uzbl.gui.geometry, NULL); return FALSE; } @@ -2311,11 +2347,11 @@ key_to_event(guint keyval, gint mode) { (keyval >= 0x00a0 && keyval <= 0x00ff)) { sprintf(byte, "%c", keyval); send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, - byte); + byte, NULL); } else send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, - gdk_keyval_name(keyval)); + gdk_keyval_name(keyval), NULL); } @@ -2352,7 +2388,7 @@ run_keycmd(const gboolean key_ret) { parse_command(act->name, act->param, NULL); tmp = g_strdup_printf("%s %s", act->name, act->param?act->param:""); - send_event(COMMAND_EXECUTED, tmp); + send_event(COMMAND_EXECUTED, tmp, NULL); g_free(tmp); return; } @@ -2373,7 +2409,7 @@ run_keycmd(const gboolean key_ret) { exec_paramcmd(act, i); clear_keycmd(); tmp = g_strdup_printf("%s %s", act->name, act->param?act->param:""); - send_event(COMMAND_EXECUTED, tmp); + send_event(COMMAND_EXECUTED, tmp, NULL); g_free(tmp); break; } else if ((act = g_hash_table_lookup(uzbl.bindings, short_keys_inc->str))) { @@ -2382,7 +2418,7 @@ run_keycmd(const gboolean key_ret) { else { exec_paramcmd(act, i); /* otherwise execute the incremental */ tmp = g_strdup_printf("%s %s", act->name, act->param?act->param:""); - send_event(COMMAND_EXECUTED, tmp); + send_event(COMMAND_EXECUTED, tmp, NULL); g_free(tmp); } break; @@ -2774,7 +2810,7 @@ inspector_show_window_cb (WebKitWebInspector* inspector){ (void) inspector; gtk_widget_show(uzbl.gui.inspector_window); - send_event(WEBINSPECTOR, "open"); + send_event(WEBINSPECTOR, "open", NULL); return TRUE; } @@ -2782,7 +2818,7 @@ inspector_show_window_cb (WebKitWebInspector* inspector){ gboolean inspector_close_window_cb (WebKitWebInspector* inspector){ (void) inspector; - send_event(WEBINSPECTOR, "close"); + send_event(WEBINSPECTOR, "close", NULL); return TRUE; } @@ -2867,7 +2903,7 @@ dump_var_hash_as_event(gpointer k, gpointer v, gpointer ud) { g_string_append_printf(msg, " float %f", *c->ptr.f); } - send_event(VARIABLE_SET, msg->str); + send_event(VARIABLE_SET, msg->str, NULL); g_string_free(msg, TRUE); } @@ -2984,7 +3020,7 @@ main (int argc, char* argv[]) { GString *tmp = g_string_new(""); g_string_printf(tmp, "%d", getpid()); uzbl.info.pid_str = g_string_free(tmp, FALSE); - send_event(INSTANCE_START, uzbl.info.pid_str); + send_event(INSTANCE_START, uzbl.info.pid_str, NULL); gtk_widget_grab_focus (GTK_WIDGET (uzbl.gui.web_view)); diff --git a/uzbl-core.h b/uzbl-core.h index a4cb1ed..9b25e94 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -56,6 +56,7 @@ typedef struct { GHashTable *proto_var; gchar *sync_stdout; + GIOChannel *clientchan; } Communication; -- cgit v1.2.3 From 94cd3845314105733045ba487d730013547f1e15 Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Fri, 11 Sep 2009 15:47:20 +0200 Subject: added view_source variable, only workable with webkit >=1.1.14 --- uzbl-core.c | 16 ++++++++++++++-- uzbl-core.h | 6 ++++++ 2 files changed, 20 insertions(+), 2 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 9eaa753..522bf08 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -149,6 +149,8 @@ const struct var_name_to_ptr_t { { "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)}, + /* 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)}, @@ -412,7 +414,8 @@ send_event_socket(GString *msg) { } } -void send_event_stdout(GString *msg) { +void +send_event_stdout(GString *msg) { printf("%s", msg->str); fflush(stdout); } @@ -466,7 +469,7 @@ str_replace (const char* search, const char* replace, const char* string) { buf = g_strsplit (string, search, -1); ret = g_strjoinv (replace, buf); - g_strfreev(buf); // somebody said this segfaults + g_strfreev(buf); return ret; } @@ -1960,6 +1963,15 @@ cmd_useragent() { } } +/* 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 move_statusbar() { if (!uzbl.gui.scrolled_win && diff --git a/uzbl-core.h b/uzbl-core.h index 9b25e94..07d307f 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -114,6 +114,7 @@ typedef struct { guint modmask; guint http_debug; gchar* shell_cmd; + guint view_source; /* WebKitWebSettings exports */ guint font_size; guint monospace_size; @@ -615,4 +616,9 @@ cmd_caret_browsing(); void cmd_set_geometry(); +/* +void +cmd_view_source(); +*/ + /* vi: set et ts=4: */ -- cgit v1.2.3 From d0330cba2849f716be672da6183724786dfb3b9b Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Sun, 13 Sep 2009 02:25:20 +0200 Subject: added ability to buffer events until a client attached to the socket --- uzbl-core.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------ uzbl-core.h | 1 + 2 files changed, 65 insertions(+), 6 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 522bf08..9a71c31 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -395,22 +395,64 @@ expand(const char *s, guint recurse) { return g_string_free(buf, FALSE); } +void +event_buffer_timeout(guint sec) { + struct itimerval t; + memset(&t, 0, sizeof t); + t.it_value.tv_sec = sec; + t.it_value.tv_usec = 0; + setitimer(ITIMER_REAL, &t, NULL); +} + + void send_event_socket(GString *msg) { GError *error = NULL; + GString *tmp; GIOStatus ret; gsize len; + guint i=0; if(uzbl.comm.socket_path && uzbl.comm.clientchan && uzbl.comm.clientchan->is_writeable) { - ret = g_io_channel_write_chars (uzbl.comm.clientchan, - msg->str, msg->len, - &len, &error); - if (ret == G_IO_STATUS_ERROR) { - g_warning ("Error sending event to socket: %s", error->message); + + if(uzbl.state.event_buffer) { + event_buffer_timeout(0); + + while(i < uzbl.state.event_buffer->len) { + tmp = g_ptr_array_index(uzbl.state.event_buffer, i++); + ret = g_io_channel_write_chars (uzbl.comm.clientchan, + tmp->str, tmp->len, + &len, &error); + /* is g_ptr_array_free(uzbl.state.event_buffer, TRUE) enough? */ + //g_string_free(tmp, TRUE); + if (ret == G_IO_STATUS_ERROR) { + g_warning ("Error sending event to socket: %s", error->message); + } + g_io_channel_flush(uzbl.comm.clientchan, &error); + } + g_ptr_array_free(uzbl.state.event_buffer, TRUE); + uzbl.state.event_buffer = NULL; } - g_io_channel_flush(uzbl.comm.clientchan, &error); + if(msg) { + ret = g_io_channel_write_chars (uzbl.comm.clientchan, + msg->str, msg->len, + &len, &error); + + if (ret == G_IO_STATUS_ERROR) { + g_warning ("Error sending event to socket: %s", error->message); + } + g_io_channel_flush(uzbl.comm.clientchan, &error); + } + } + /* buffer events until a socket is set and connected + * or a timeout is encountered + */ + else { + if(!uzbl.state.event_buffer) + uzbl.state.event_buffer = g_ptr_array_new(); + g_ptr_array_add(uzbl.state.event_buffer, (gpointer)g_string_new(msg->str)); } } @@ -570,6 +612,13 @@ catch_sigint(int s) { exit(EXIT_SUCCESS); } +void +catch_sigalrm(int s) { + (void) s; + g_ptr_array_free(uzbl.state.event_buffer, TRUE); + uzbl.state.event_buffer = NULL; +} + /* --- CALLBACKS --- */ gboolean @@ -2213,6 +2262,8 @@ control_socket(GIOChannel *chan) { if ((uzbl.comm.clientchan = g_io_channel_unix_new(clientsock))) { g_io_add_watch(uzbl.comm.clientchan, G_IO_IN|G_IO_HUP, (GIOFunc) control_client_socket, uzbl.comm.clientchan); + /* replay buffered events */ + send_event_socket(NULL); } return TRUE; @@ -2971,6 +3022,13 @@ initialize(int argc, char *argv[]) { if(setup_signal(SIGINT, catch_sigint) == SIG_ERR) fprintf(stderr, "uzbl: error hooking SIGINT\n"); + /* Set up the timer for the event buffer */ + if(setup_signal(SIGALRM, catch_sigalrm) == SIG_ERR) { + fprintf(stderr, "uzbl: error hooking SIGALRM\n"); + exit(EXIT_FAILURE); + } + event_buffer_timeout(10); + uzbl.gui.sbar.progress_s = g_strdup("="); //TODO: move these to config.h uzbl.gui.sbar.progress_u = g_strdup("·"); uzbl.gui.sbar.progress_w = 10; diff --git a/uzbl-core.h b/uzbl-core.h index 07d307f..5b59c61 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -71,6 +71,7 @@ typedef struct { gchar* keycmd; gchar* searchtx; gboolean verbose; + GPtrArray *event_buffer; } State; -- cgit v1.2.3 From 3af2a6d1f2eb011f75b3e146ad9d687f499ca9fc Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 14 Sep 2009 10:55:47 +0200 Subject: removed obsolete key binding code --- uzbl-core.c | 161 ++---------------------------------------------------------- uzbl-core.h | 25 +--------- 2 files changed, 5 insertions(+), 181 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 9a71c31..b7f3cca 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -117,7 +117,7 @@ const struct var_name_to_ptr_t { { "verbose", PTR_V_INT(uzbl.state.verbose, 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)}, - { "keycmd", PTR_V_STR(uzbl.state.keycmd, 1, set_keycmd)}, + { "keycmd", PTR_V_STR(uzbl.state.keycmd, 1, update_title)}, { "status_message", PTR_V_STR(uzbl.gui.sbar.msg, 1, update_title)}, { "show_status", PTR_V_INT(uzbl.behave.show_status, 1, cmd_set_status)}, { "status_top", PTR_V_INT(uzbl.behave.status_top, 1, move_statusbar)}, @@ -584,17 +584,15 @@ setup_signal(int signr, sigfunc *shandler) { void clean_up(void) { + send_event(INSTANCE_EXIT, uzbl.info.pid_str, NULL); + if (uzbl.behave.fifo_dir) unlink (uzbl.comm.fifo_path); if (uzbl.behave.socket_dir) unlink (uzbl.comm.socket_path); g_free(uzbl.state.executable_path); - g_free(uzbl.state.keycmd); - g_hash_table_destroy(uzbl.bindings); g_hash_table_destroy(uzbl.behave.commands); - - send_event(INSTANCE_EXIT, uzbl.info.pid_str, NULL); } /* --- SIGNAL HANDLER --- */ @@ -889,11 +887,6 @@ load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame), NULL); } -void clear_keycmd() { - g_free(uzbl.state.keycmd); - uzbl.state.keycmd = g_strdup(""); -} - void load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { (void) page; @@ -986,13 +979,8 @@ struct {const char *key; CommandInfo value;} cmdlist[] = { "dehilight", {dehilight, 0} }, { "toggle_insert_mode", {toggle_insert_mode, 0} }, { "set", {set_var, TRUE} }, - //{ "get", {get_var, TRUE} }, - { "bind", {act_bind, TRUE} }, { "dump_config", {act_dump_config, 0} }, { "dump_config_as_events", {act_dump_config_as_events, 0} }, - { "keycmd", {keycmd, TRUE} }, - { "keycmd_nl", {keycmd_nl, TRUE} }, - { "keycmd_bs", {keycmd_bs, 0} }, { "chain", {chain, 0} }, { "print", {print, TRUE} }, { "event", {event, 0} }, @@ -1088,17 +1076,6 @@ print(WebKitWebView *page, GArray *argv, GString *result) { g_free(buf); } -void -act_bind(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) result; - gchar **split = g_strsplit(argv_idx(argv, 0), " = ", 2); - gchar *value = parseenv(g_strdup(split[1] ? g_strchug(split[1]) : " ")); - add_binding(g_strstrip(split[0]), value); - g_free(value); - g_strfreev(split); -} - - void act_dump_config() { dump_config(); @@ -1109,12 +1086,6 @@ act_dump_config_as_events() { dump_config_as_events(); } -void -set_keycmd() { - run_keycmd(FALSE); - update_title(); -} - void set_mode_indicator() { uzbl.gui.sbar.mode_indicator = (uzbl.behave.insert_mode ? @@ -1381,39 +1352,6 @@ chain (WebKitWebView *page, GArray *argv, GString *result) { } } -void -keycmd (WebKitWebView *page, GArray *argv, GString *result) { - (void)page; - (void)argv; - (void)result; - uzbl.state.keycmd = g_strdup(argv_idx(argv, 0)); - run_keycmd(FALSE); - update_title(); -} - -void -keycmd_nl (WebKitWebView *page, GArray *argv, GString *result) { - (void)page; - (void)argv; - (void)result; - uzbl.state.keycmd = g_strdup(argv_idx(argv, 0)); - run_keycmd(TRUE); - update_title(); -} - -void -keycmd_bs (WebKitWebView *page, GArray *argv, GString *result) { - gchar *prev; - (void)page; - (void)argv; - (void)result; - int len = strlen(uzbl.state.keycmd); - prev = g_utf8_find_prev_char(uzbl.state.keycmd, uzbl.state.keycmd + len); - if (prev) - uzbl.state.keycmd[prev - uzbl.state.keycmd] = '\0'; - update_title(); -} - void close_uzbl (WebKitWebView *page, GArray *argv, GString *result) { (void)page; @@ -2439,77 +2377,6 @@ key_release_cb (GtkWidget* window, GdkEventKey* event) { return TRUE; } -void -run_keycmd(const gboolean key_ret) { - - /* run the keycmd immediately if it isn't incremental and doesn't take args */ - Action *act; - gchar *tmp; - - if ((act = g_hash_table_lookup(uzbl.bindings, uzbl.state.keycmd))) { - clear_keycmd(); - parse_command(act->name, act->param, NULL); - - tmp = g_strdup_printf("%s %s", act->name, act->param?act->param:""); - send_event(COMMAND_EXECUTED, tmp, NULL); - g_free(tmp); - return; - } - - /* try if it's an incremental keycmd or one that takes args, and run it */ - GString* short_keys = g_string_new (""); - GString* short_keys_inc = g_string_new (""); - guint i; - guint len = strlen(uzbl.state.keycmd); - for (i=0; istr); - g_string_append_c(short_keys, '_'); - g_string_append_c(short_keys_inc, '*'); - - if (key_ret && (act = g_hash_table_lookup(uzbl.bindings, short_keys->str))) { - /* run normal cmds only if return was pressed */ - exec_paramcmd(act, i); - clear_keycmd(); - tmp = g_strdup_printf("%s %s", act->name, act->param?act->param:""); - send_event(COMMAND_EXECUTED, tmp, NULL); - g_free(tmp); - break; - } else if ((act = g_hash_table_lookup(uzbl.bindings, short_keys_inc->str))) { - if (key_ret) /* just quit the incremental command on return */ - clear_keycmd(); - else { - exec_paramcmd(act, i); /* otherwise execute the incremental */ - tmp = g_strdup_printf("%s %s", act->name, act->param?act->param:""); - send_event(COMMAND_EXECUTED, tmp, NULL); - g_free(tmp); - } - break; - } - - g_string_truncate(short_keys, short_keys->len - 1); - } - g_string_free (short_keys, TRUE); - g_string_free (short_keys_inc, TRUE); -} - -void -exec_paramcmd(const Action *act, const guint i) { - GString *parampart = g_string_new (uzbl.state.keycmd); - GString *actionname = g_string_new (""); - GString *actionparam = g_string_new (""); - g_string_erase (parampart, 0, i+1); - if (act->name) - g_string_printf (actionname, act->name, parampart->str); - if (act->param) - g_string_printf (actionparam, act->param, parampart->str); - parse_command(actionname->str, actionparam->str, NULL); - g_string_free(actionname, TRUE); - g_string_free(actionparam, TRUE); - g_string_free(parampart, TRUE); -} - - void create_browser () { GUI *g = &uzbl.gui; @@ -2678,25 +2545,6 @@ run_handler (const gchar *act, const gchar *args) { g_strfreev(parts); } -void -add_binding (const gchar *key, const gchar *act) { - char **parts = g_strsplit(act, " ", 2); - Action *action; - - if (!parts) - return; - - //Debug: - if (uzbl.state.verbose) - printf ("Binding %-10s : %s\n", key, act); - action = new_action(parts[0], parts[1]); - - if (g_hash_table_remove (uzbl.bindings, key)) - g_warning ("Overwriting existing binding for \"%s\"", key); - g_hash_table_replace(uzbl.bindings, g_strdup(key), action); - g_strfreev(parts); -} - /*@null@*/ gchar* get_xdg_var (XDG_Var xdg) { const gchar* actual_value = getenv (xdg.environmental); @@ -3011,9 +2859,6 @@ initialize(int argc, char *argv[]) { exit(EXIT_SUCCESS); } - /* initialize hash table */ - uzbl.bindings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, free_action); - uzbl.net.soup_session = webkit_get_default_session(); uzbl.state.keycmd = g_strdup(""); diff --git a/uzbl-core.h b/uzbl-core.h index 5b59c61..b88dd7e 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -140,6 +140,7 @@ typedef struct { gchar* cmd_indicator; gboolean print_version; + /* command list: (key)name -> (value)Command */ /* command list: (key)name -> (value)Command */ GHashTable* commands; /* event lookup: (key)event_id -> (value)event_name */ @@ -174,9 +175,6 @@ typedef struct { Info info; Window xwin; - - /* group bindings: key -> action */ - GHashTable* bindings; } UzblCore; @@ -324,15 +322,6 @@ new_window_load_uri (const gchar * uri); void chain (WebKitWebView *page, GArray *argv, GString *result); -void -keycmd (WebKitWebView *page, GArray *argv, GString *result); - -void -keycmd_nl (WebKitWebView *page, GArray *argv, GString *result); - -void -keycmd_bs (WebKitWebView *page, GArray *argv, GString *result); - void close_uzbl (WebKitWebView *page, GArray *argv, GString *result); @@ -400,9 +389,6 @@ key_release_cb (GtkWidget* window, GdkEventKey* event); void run_keycmd(const gboolean key_ret); -void -exec_paramcmd(const Action* act, const guint i); - void initialize (int argc, char *argv[]); @@ -421,9 +407,6 @@ create_plug (); void run_handler (const gchar *act, const gchar *args); -void -add_binding (const gchar *key, const gchar *act); - /*@null@*/ gchar* get_xdg_var (XDG_Var xdg); @@ -458,15 +441,11 @@ void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data); void -save_cookies (SoupMessage *msg, - gpointer user_data); +save_cookies (SoupMessage *msg, gpointer user_data); void set_var(WebKitWebView *page, GArray *argv, GString *result); -void -act_bind(WebKitWebView *page, GArray *argv, GString *result); - void act_dump_config(); -- cgit v1.2.3 From 86df99cf27a6e833f175060288eb8cef9d0cb593 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Sat, 19 Sep 2009 09:47:22 +0200 Subject: deprecate insert/command mode, always_insert_mode, mode indicators, in favor of soon to be implemented EM replacements. uzbl-core now only knows if it should forward_keys to the webkitview or not --- README | 13 ++++++----- tests/test-command.c | 4 ++-- tests/test-expand.c | 4 ++-- uzbl-core.c | 64 +++------------------------------------------------- uzbl-core.h | 22 +----------------- 5 files changed, 15 insertions(+), 92 deletions(-) (limited to 'uzbl-core.h') diff --git a/README b/README index e1e7682..a6305a4 100644 --- a/README +++ b/README @@ -147,7 +147,7 @@ The following commands are recognized: * `search ` * `search_reverse ` - search with no string will search for the next/previous occurrence of the string previously searched for -* `toggle_insert_mode ` +* `toggle_insert_mode ` TODO new plugin based syntax - if the optional state is 0, disable insert mode. If 1, enable insert mode. * `dump_config` - dumps your current config (which may have been changed at runtime) to stdout, in a format you can use to pipe into uzbl again (or use as config file) @@ -186,14 +186,15 @@ Besides the builtin variables you can also define your own ones and use them in - status_pbar_pending: character to denote pending % of pageload - status_pbar_width: width of progressbar - status_background: color which can be used to override Gtk theme. - - insert_indicator: string to denote insert mode - - command_indicator: string to denote command mode + - insert_indicator: string to denote insert mode TODO plugin variable + - command_indicator: string to denote command mode TODO plugin variable - title_format_long: titlebar string when no statusbar shown (will be expanded - title_format_short: titlebar string when statusbar shown (will be expanded) - icon: path to icon for Gtk - - insert_mode: whether insert mode is active - - always_insert_mode: set this to true if you don't like modal (vim-like) interfaces - - reset_command_mode: automatically revert to command mode on pageload (unless always_insert_mode is set) + - forward_keys: whether uzbl-core should send key events to the webkit view + - insert_mode: whether insert mode is active TODO explain plugin variable + - always_insert_mode: set this to true if you don't like modal (vim-like) interfaces TODO explain plugin variable + - reset_command_mode: automatically revert to command mode on pageload (unless always_insert_mode is set) TODO explain plugin variable - modkey: modkey which can be pressed to activate keybind from inside insert mode - load_finish_handler - load_start_handler diff --git a/tests/test-command.c b/tests/test-command.c index a752ca6..2a226b2 100644 --- a/tests/test-command.c +++ b/tests/test-command.c @@ -35,13 +35,13 @@ test_keycmd (void) { /* the 'keycmd' command */ parse_command("keycmd", "insert", NULL); - g_assert_cmpint(1, ==, uzbl.behave.insert_mode); + g_assert_cmpint(1, ==, uzbl.behave.forward_keys); g_assert_cmpstr("", ==, uzbl.state.keycmd); /* setting the keycmd variable directly, equivalent to the 'keycmd' comand */ set_var_value("keycmd", "command"); - g_assert_cmpint(0, ==, uzbl.behave.insert_mode); + g_assert_cmpint(0, ==, uzbl.behave.forward_keys); g_assert_cmpstr("", ==, uzbl.state.keycmd); } diff --git a/tests/test-expand.c b/tests/test-expand.c index 0ced1f4..f01e5c7 100644 --- a/tests/test-expand.c +++ b/tests/test-expand.c @@ -79,10 +79,10 @@ test_NAME (void) { void test_MODE (void) { - set_var_value("insert_mode", "0"); + set_var_value("forward_keys", "0"); g_assert_cmpstr(expand("@MODE", 0), ==, "C"); - set_var_value("insert_mode", "1"); + set_var_value("forward_keys", "1"); g_assert_cmpstr(expand("@MODE", 0), ==, "I"); } diff --git a/uzbl-core.c b/uzbl-core.c index e0af0e4..2ad11ac 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -126,14 +126,10 @@ const struct var_name_to_ptr_t { { "status_pbar_pending", PTR_V_STR(uzbl.gui.sbar.progress_u, 1, update_title)}, { "status_pbar_width", PTR_V_INT(uzbl.gui.sbar.progress_w, 1, update_title)}, { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, update_title)}, - { "insert_indicator", PTR_V_STR(uzbl.behave.insert_indicator, 1, update_indicator)}, - { "command_indicator", PTR_V_STR(uzbl.behave.cmd_indicator, 1, update_indicator)}, { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, update_title)}, { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, update_title)}, { "icon", PTR_V_STR(uzbl.gui.icon, 1, set_icon)}, - { "insert_mode", PTR_V_INT(uzbl.behave.insert_mode, 1, set_mode_indicator)}, - { "always_insert_mode", PTR_V_INT(uzbl.behave.always_insert_mode, 1, cmd_always_insert_mode)}, - { "reset_command_mode", PTR_V_INT(uzbl.behave.reset_command_mode, 1, NULL)}, + { "forward_keys", PTR_V_INT(uzbl.behave.forward_keys, 1, NULL)}, { "load_finish_handler", PTR_V_STR(uzbl.behave.load_finish_handler, 1, NULL)}, { "load_start_handler", PTR_V_STR(uzbl.behave.load_start_handler, 1, NULL)}, { "load_commit_handler", PTR_V_STR(uzbl.behave.load_commit_handler, 1, NULL)}, @@ -186,7 +182,6 @@ const struct var_name_to_ptr_t { { "LOAD_PROGRESSBAR", PTR_C_STR(uzbl.gui.sbar.progress_bar, NULL)}, { "TITLE", PTR_C_STR(uzbl.gui.main_title, NULL)}, { "SELECTED_URI", PTR_C_STR(uzbl.state.selected_url, NULL)}, - { "MODE", PTR_C_STR(uzbl.gui.sbar.mode_indicator, NULL)}, { "NAME", PTR_C_STR(uzbl.state.instance_name, NULL)}, { "PID", PTR_C_STR(uzbl.info.pid_str, NULL)}, @@ -923,10 +918,7 @@ load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { g_free (uzbl.state.uri); GString* newuri = g_string_new (webkit_web_frame_get_uri (frame)); uzbl.state.uri = g_string_free (newuri, FALSE); - if (uzbl.behave.reset_command_mode && uzbl.behave.insert_mode) { - set_insert_mode(uzbl.behave.always_insert_mode); - update_title(); - } + if (uzbl.behave.load_commit_handler) run_handler(uzbl.behave.load_commit_handler, uzbl.state.uri); @@ -981,7 +973,6 @@ struct {const char *key; CommandInfo value;} cmdlist[] = { "search", {search_forward_text, TRUE} }, { "search_reverse", {search_reverse_text, TRUE} }, { "dehilight", {dehilight, 0} }, - { "toggle_insert_mode", {toggle_insert_mode, 0} }, { "set", {set_var, TRUE} }, { "dump_config", {act_dump_config, 0} }, { "dump_config_as_events", {act_dump_config_as_events, 0} }, @@ -1087,42 +1078,6 @@ act_dump_config_as_events() { dump_config_as_events(); } -void -set_mode_indicator() { - uzbl.gui.sbar.mode_indicator = (uzbl.behave.insert_mode ? - uzbl.behave.insert_indicator : uzbl.behave.cmd_indicator); -} - -void -update_indicator() { - set_mode_indicator(); - update_title(); -} - -void -set_insert_mode(gboolean mode) { - uzbl.behave.insert_mode = mode; - send_event(VARIABLE_SET, uzbl.behave.insert_mode ? "insert_mode int 1" : "insert_mode int 0", NULL); - set_mode_indicator(); -} - -void -toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result) { - (void) page; (void) result; - - if (argv_idx(argv, 0)) { - if (strcmp (argv_idx(argv, 0), "0") == 0) { - set_insert_mode(FALSE); - } else { - set_insert_mode(TRUE); - } - } else { - set_insert_mode( !uzbl.behave.insert_mode ); - } - - update_title(); -} - void load_uri (WebKitWebView *web_view, GArray *argv, GString *result) { (void) result; @@ -1726,12 +1681,6 @@ cmd_load_uri() { g_array_free (a, TRUE); } -void -cmd_always_insert_mode() { - set_insert_mode(uzbl.behave.always_insert_mode); - update_title(); -} - void cmd_max_conns() { g_object_set(G_OBJECT(uzbl.net.soup_session), @@ -2374,7 +2323,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) { if(event->type == GDK_KEY_PRESS) key_to_event(event->keyval, GDK_KEY_PRESS); - return uzbl.behave.insert_mode ? FALSE : TRUE; + return uzbl.behave.forward_keys ? FALSE : TRUE; } gboolean @@ -2889,10 +2838,6 @@ initialize(int argc, char *argv[]) { uzbl.gui.sbar.progress_u = g_strdup("·"); uzbl.gui.sbar.progress_w = 10; - /* default mode indicators */ - uzbl.behave.insert_indicator = g_strdup("I"); - uzbl.behave.cmd_indicator = g_strdup("C"); - uzbl.info.webkit_major = WEBKIT_MAJOR_VERSION; uzbl.info.webkit_minor = WEBKIT_MINOR_VERSION; uzbl.info.webkit_micro = WEBKIT_MICRO_VERSION; @@ -2982,9 +2927,6 @@ main (int argc, char* argv[]) { settings_init (); - if (!uzbl.behave.always_insert_mode) - set_insert_mode(FALSE); - if (!uzbl.behave.show_status) gtk_widget_hide(uzbl.gui.mainbar); else diff --git a/uzbl-core.h b/uzbl-core.h index b88dd7e..55f5eb1 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -18,7 +18,6 @@ typedef struct { gchar *progress_s, *progress_u; int progress_w; gchar *progress_bar; - gchar *mode_indicator; } StatusBar; @@ -107,11 +106,9 @@ typedef struct { gchar* fantasy_font_family; gchar* cursive_font_family; gchar* scheme_handler; - gboolean always_insert_mode; gboolean show_status; - gboolean insert_mode; + gboolean forward_keys; gboolean status_top; - gboolean reset_command_mode; guint modmask; guint http_debug; gchar* shell_cmd; @@ -136,8 +133,6 @@ typedef struct { guint caret_browsing; guint mode; gchar* base_url; - gchar* insert_indicator; - gchar* cmd_indicator; gboolean print_version; /* command list: (key)name -> (value)Command */ @@ -301,18 +296,6 @@ file_exists (const char * filename); void set_keycmd(); -void -set_mode_indicator(); - -void -update_indicator(); - -void -set_insert_mode(gboolean mode); - -void -toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result); - void load_uri (WebKitWebView * web_view, GArray *argv, GString *result); @@ -504,9 +487,6 @@ cmd_scheme_handler(); void move_statusbar(); -void -cmd_always_insert_mode(); - void cmd_http_debug(); -- cgit v1.2.3 From a4b4914ff82d895710af3bc1834abd881ddab246 Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Sun, 20 Sep 2009 17:56:28 +0200 Subject: added LOAD_PROGRESS event --- uzbl-core.c | 8 +++++++- uzbl-core.h | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 5586247..04089d8 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -213,7 +213,8 @@ const char *event_table[LAST_EVENT] = { "FIFO_SET" , "SOCKET_SET" , "INSTANCE_START" , - "INSTANCE_EXIT" + "INSTANCE_EXIT" , + "LOAD_PROGRESS" }; @@ -857,10 +858,15 @@ progress_change_cb (WebKitWebView* page, gint progress, gpointer data) { (void) page; (void) data; uzbl.gui.sbar.load_progress = progress; + gchar *prg_str; g_free(uzbl.gui.sbar.progress_bar); uzbl.gui.sbar.progress_bar = build_progressbar_ascii(uzbl.gui.sbar.load_progress); + prg_str = itos(progress); + send_event(LOAD_PROGRESS, prg_str, NULL); + g_free(prg_str); + update_title(); } diff --git a/uzbl-core.h b/uzbl-core.h index 55f5eb1..9801e52 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -187,7 +187,7 @@ enum event_type { LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, VARIABLE_SET, FIFO_SET, SOCKET_SET, - INSTANCE_START, INSTANCE_EXIT, + INSTANCE_START, INSTANCE_EXIT, LOAD_PROGRESS, /* must be last entry */ LAST_EVENT -- cgit v1.2.3 From 05f80ed124619901c3b510056f150ae7370a603f Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 21 Sep 2009 11:42:01 +0200 Subject: make LINK_HOVER report unhover events --- uzbl-core.c | 4 ++++ uzbl-core.h | 3 +++ 2 files changed, 7 insertions(+) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 04089d8..71bca80 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -834,10 +834,14 @@ link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpoin //Set selected_url state variable g_free(uzbl.state.selected_url); uzbl.state.selected_url = NULL; + if (link) { uzbl.state.selected_url = g_strdup(link); send_event(LINK_HOVER, uzbl.state.selected_url, NULL); } + else + send_event(LINK_HOVER, "", NULL); + update_title(); } diff --git a/uzbl-core.h b/uzbl-core.h index 9801e52..b7db61d 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -581,4 +581,7 @@ void cmd_view_source(); */ +void +cmd_load_start(); + /* vi: set et ts=4: */ -- cgit v1.2.3 From 327db778f3a5446d57969bb6ce1e038799aa86aa Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 21 Sep 2009 13:07:50 +0200 Subject: added LINK_UNHOVER event --- uzbl-core.c | 34 ++++++++++++++++++++++++++-------- uzbl-core.h | 2 ++ 2 files changed, 28 insertions(+), 8 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 71bca80..c52b759 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -214,7 +214,8 @@ const char *event_table[LAST_EVENT] = { "SOCKET_SET" , "INSTANCE_START" , "INSTANCE_EXIT" , - "LOAD_PROGRESS" + "LOAD_PROGRESS" , + "LINK_UNHOVER" }; @@ -831,16 +832,33 @@ link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpoin (void) page; (void) title; (void) data; - //Set selected_url state variable - g_free(uzbl.state.selected_url); - uzbl.state.selected_url = NULL; + State *s = &uzbl.state; + + 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); + s->last_selected_url = NULL; + } + + g_free(s->selected_url); + s->selected_url = NULL; if (link) { - uzbl.state.selected_url = g_strdup(link); - send_event(LINK_HOVER, uzbl.state.selected_url, NULL); + s->selected_url = g_strdup(link); + + if(s->last_selected_url && + g_strcmp0(s->selected_url, s->last_selected_url)) + send_event(LINK_UNHOVER, s->last_selected_url, NULL); + + send_event(LINK_HOVER, s->selected_url, NULL); + } + else if(s->last_selected_url) { + send_event(LINK_UNHOVER, s->last_selected_url, NULL); } - else - send_event(LINK_HOVER, "", NULL); update_title(); } diff --git a/uzbl-core.h b/uzbl-core.h index b7db61d..d3ea143 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -66,6 +66,7 @@ typedef struct { int socket_id; char *instance_name; gchar *selected_url; + gchar *last_selected_url; gchar *executable_path; gchar* keycmd; gchar* searchtx; @@ -188,6 +189,7 @@ enum event_type { WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, VARIABLE_SET, FIFO_SET, SOCKET_SET, INSTANCE_START, INSTANCE_EXIT, LOAD_PROGRESS, + LINK_UNHOVER, /* must be last entry */ LAST_EVENT -- cgit v1.2.3 From e6741daec0c4fb3cbed63becb54b60525bfcc4fd Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Tue, 22 Sep 2009 10:40:15 +0200 Subject: get rid of the progressbar --- uzbl-core.c | 33 --------------------------------- uzbl-core.h | 6 ------ 2 files changed, 39 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index c52b759..0c9f50a 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -122,9 +122,6 @@ const struct var_name_to_ptr_t { { "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, update_title)}, - { "status_pbar_done", PTR_V_STR(uzbl.gui.sbar.progress_s, 1, update_title)}, - { "status_pbar_pending", PTR_V_STR(uzbl.gui.sbar.progress_u, 1, update_title)}, - { "status_pbar_width", PTR_V_INT(uzbl.gui.sbar.progress_w, 1, update_title)}, { "status_background", PTR_V_STR(uzbl.behave.status_background, 1, update_title)}, { "title_format_long", PTR_V_STR(uzbl.behave.title_format_long, 1, update_title)}, { "title_format_short", PTR_V_STR(uzbl.behave.title_format_short, 1, update_title)}, @@ -179,7 +176,6 @@ const struct var_name_to_ptr_t { { "ARCH_UZBL", PTR_C_STR(uzbl.info.arch, NULL)}, { "COMMIT", PTR_C_STR(uzbl.info.commit, NULL)}, { "LOAD_PROGRESS", PTR_C_INT(uzbl.gui.sbar.load_progress, NULL)}, - { "LOAD_PROGRESSBAR", PTR_C_STR(uzbl.gui.sbar.progress_bar, 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)}, @@ -879,12 +875,8 @@ void progress_change_cb (WebKitWebView* page, gint progress, gpointer data) { (void) page; (void) data; - uzbl.gui.sbar.load_progress = progress; gchar *prg_str; - g_free(uzbl.gui.sbar.progress_bar); - uzbl.gui.sbar.progress_bar = build_progressbar_ascii(uzbl.gui.sbar.load_progress); - prg_str = itos(progress); send_event(LOAD_PROGRESS, prg_str, NULL); g_free(prg_str); @@ -1345,27 +1337,6 @@ close_uzbl (WebKitWebView *page, GArray *argv, GString *result) { gtk_main_quit (); } -/* --Statusbar functions-- */ -char* -build_progressbar_ascii(int percent) { - int width=uzbl.gui.sbar.progress_w; - int i; - double l; - GString *bar = g_string_new(""); - - l = (double)percent*((double)width/100.); - l = (int)(l+.5)>=(int)l ? l+.5 : l; - - for(i=0; i<(int)l; i++) - g_string_append(bar, uzbl.gui.sbar.progress_s); - - for(; i Date: Fri, 25 Sep 2009 13:16:22 +0800 Subject: Whitespace cleanups in uzbl-core.{c,h} --- uzbl-core.c | 18 +++++++++--------- uzbl-core.h | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'uzbl-core.h') diff --git a/uzbl-core.c b/uzbl-core.c index 48af825..e7cd66f 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -406,7 +406,7 @@ send_event_socket(GString *msg) { gsize len; guint i=0; - if(uzbl.comm.socket_path && + if(uzbl.comm.socket_path && uzbl.comm.clientchan && uzbl.comm.clientchan->is_writeable) { @@ -415,7 +415,7 @@ send_event_socket(GString *msg) { while(i < uzbl.state.event_buffer->len) { tmp = g_ptr_array_index(uzbl.state.event_buffer, i++); - ret = g_io_channel_write_chars (uzbl.comm.clientchan, + ret = g_io_channel_write_chars (uzbl.comm.clientchan, tmp->str, tmp->len, &len, &error); /* is g_ptr_array_free(uzbl.state.event_buffer, TRUE) enough? */ @@ -429,7 +429,7 @@ send_event_socket(GString *msg) { uzbl.state.event_buffer = NULL; } if(msg) { - ret = g_io_channel_write_chars (uzbl.comm.clientchan, + ret = g_io_channel_write_chars (uzbl.comm.clientchan, msg->str, msg->len, &len, &error); @@ -455,10 +455,10 @@ send_event_stdout(GString *msg) { fflush(stdout); } -/* - * build event string and send over the supported interfaces +/* + * build event string and send over the supported interfaces * custom_event == NULL indicates an internal event -*/ +*/ void send_event(int type, const gchar *details, const gchar *custom_event) { GString *event_message = g_string_new(""); @@ -1011,7 +1011,7 @@ struct {const char *key; CommandInfo value;} cmdlist[] = /* a request is just semantic sugar to make things more obvious for * the user, technically events and requests are the very same thing */ - { "request", {event, TRUE} }, + { "request", {event, TRUE} }, { "update_gui", {update_gui, TRUE} } }; @@ -1093,7 +1093,7 @@ event(WebKitWebView *page, GArray *argv, GString *result) { void print(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - gchar* buf; + gchar* buf; buf = expand(argv_idx(argv, 0), 0); g_string_assign(result, buf); @@ -2026,7 +2026,7 @@ parse_cmd_line(const char *ctl_line, GString *result) { g_free(work_string); if( strcmp(g_strchug(ctlstrip), "") && - strcmp(exp_line = expand(ctlstrip, 0), "") + strcmp(exp_line = expand(ctlstrip, 0), "") ) { /* ignore comments */ if((exp_line[0] == '#')) diff --git a/uzbl-core.h b/uzbl-core.h index 3f7dacf..854060f 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -182,12 +182,12 @@ typedef void sigfunc(int); enum event_type { LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, - LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, + LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, - VARIABLE_SET, FIFO_SET, SOCKET_SET, + VARIABLE_SET, FIFO_SET, SOCKET_SET, INSTANCE_START, INSTANCE_EXIT, LOAD_PROGRESS, LINK_UNHOVER, - + /* must be last entry */ LAST_EVENT }; -- cgit v1.2.3 From 85bd94abb4fb507b5d230a06f5f7c2b4138110ca Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Fri, 2 Oct 2009 11:15:13 +0200 Subject: split source into multiple files --- Makefile | 34 +++++++++-- Makefile-new-test | 48 --------------- uzbl-core.c | 176 ++++-------------------------------------------------- uzbl-core.h | 61 +++++++++++-------- uzbl-events.c | 145 ++++++++++++++++++++++++++++++++++++++++++++ uzbl-events.h | 29 +++++++++ 6 files changed, 249 insertions(+), 244 deletions(-) delete mode 100644 Makefile-new-test create mode 100644 uzbl-events.c create mode 100644 uzbl-events.h (limited to 'uzbl-core.h') diff --git a/Makefile b/Makefile index 581a005..2989afe 100644 --- a/Makefile +++ b/Makefile @@ -1,20 +1,40 @@ # first entries are for gnu make, 2nd for BSD make. see http://lists.uzbl.org/pipermail/uzbl-dev-uzbl.org/2009-July/000177.html -CFLAGS:=-std=c99 $(shell pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0) -ggdb -Wall -W -DARCH="\"$(shell uname -m)\"" -lgthread-2.0 -DG_ERRORCHECK_MUTEXES -DCOMMIT="\"$(shell git log | head -n1 | sed "s/.* //")\"" $(CPPFLAGS) -fPIC -W -Wall -Wextra -pedantic -ggdb3 -CFLAGS!=echo -std=c99 `pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0` -ggdb -Wall -W -DARCH='"\""'`uname -m`'"\""' -lgthread-2.0 -DG_ERRORCHECK_MUTEXES -DCOMMIT='"\""'`git log | head -n1 | sed "s/.* //"`'"\""' $(CPPFLAGS) -fPIC -W -Wall -Wextra -pedantic -ggdb3 +CFLAGS:=-std=c99 $(shell pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0) -ggdb -Wall -W -DARCH="\"$(shell uname -m)\"" -lgthread-2.0 -DCOMMIT="\"$(shell git log | head -n1 | sed "s/.* //")\"" $(CPPFLAGS) -fPIC -W -Wall -Wextra -pedantic -ggdb3 +CFLAGS!=echo -std=c99 `pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0` -ggdb -Wall -W -DARCH='"\""'`uname -m`'"\""' -lgthread-2.0 -DCOMMIT='"\""'`git log | head -n1 | sed "s/.* //"`'"\""' $(CPPFLAGS) -fPIC -W -Wall -Wextra -pedantic -ggdb3 LDFLAGS:=$(shell pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0) -pthread $(LDFLAGS) LDFLAGS!=echo `pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0` -pthread $(LDFLAGS) -all: uzbl-browser +SRC = uzbl-core.c uzbl-events.c +OBJ = ${SRC:.c=.o} + +all: uzbl-browser options + +options: + @echo uzbl-core build options: + @echo "CFLAGS = ${CFLAGS}" + @echo "LDFLAGS = ${LDFLAGS}" + +.c.o: + @echo Compiling $< + @${CC} -c ${CFLAGS} $< + +${OBJ}: uzbl-core.h uzbl-events.h config.h + +uzbl-core: ${OBJ} + @echo Linking $< + @${CC} -o $@ ${OBJ} ${LDFLAGS} + + uzbl-browser: uzbl-core PREFIX?=$(DESTDIR)/usr/local # When compiling unit tests, compile uzbl as a library first -tests: uzbl-core.o - $(CC) -DUZBL_LIBRARY -shared -Wl uzbl-core.o -o ./tests/libuzbl-core.so +tests: uzbl-core.o uzbl-events.o + $(CC) -DUZBL_LIBRARY -shared -Wl uzbl-core.o uzbl-events.o -o ./tests/libuzbl-core.so cd ./tests/; $(MAKE) test: uzbl-core @@ -40,9 +60,10 @@ test-share-browser: uzbl-browser clean: rm -f uzbl-core rm -f uzbl-core.o + rm -f uzbl-events.o cd ./tests/; $(MAKE) clean -install: +install: all install -d $(PREFIX)/bin install -d $(PREFIX)/share/uzbl/docs install -d $(PREFIX)/share/uzbl/examples @@ -58,3 +79,4 @@ install: uninstall: rm -rf $(PREFIX)/bin/uzbl-* rm -rf $(PREFIX)/share/uzbl + diff --git a/Makefile-new-test b/Makefile-new-test deleted file mode 100644 index a1efa56..0000000 --- a/Makefile-new-test +++ /dev/null @@ -1,48 +0,0 @@ -LIBS := gtk+-2.0 webkit-1.0 -ARCH := $(shell uname -m) -COMMIT := $(shell git log | head -n1 | sed "s/.* //") -DEBUG := -ggdb -Wall -W -DG_ERRORCHECK_MUTEXES - -CFLAGS := $(shell --cflags $(LIBS)) $(DEBUG) -DARCH="$(ARCH)" -DCOMMIT="\"$(COMMIT)\"" -LDFLAGS := $(shell --libs $(LIBS)) $(LDFLAGS) - -PREFIX ?= $(DESTDIR)/usr -BINDIR ?= $(PREFIX)/bin -UZBLDATA ?= $(PREFIX)/share/uzbl -DOCSDIR ?= $(PREFIX)/share/uzbl/docs -EXMPLSDIR ?= $(PREFIX)/share/uzbl/examples - -all: uzbl - -uzbl: uzbl.c uzbl.h config.h - -%: %.c - $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(LIBS) -o $@ $< - -test: uzbl - ./uzbl --uri http://www.uzbl.org - -test-config: uzbl - ./uzbl --uri http://www.uzbl.org < examples/configs/sampleconfig-dev - -test-config-real: uzbl - ./uzbl --uri http://www.uzbl.org < $(EXMPLSDIR)/configs/sampleconfig - -clean: - rm -f uzbl - -install: - install -d $(BINDIR) - install -d $(DOCSDIR) - install -d $(EXMPLSDIR) - install -D -m755 uzbl $(BINDIR)/uzbl - cp -ax docs/* $(DOCSDIR) - cp -ax config.h $(DOCSDIR) - cp -ax examples/* $(EXMPLSDIR) - install -D -m644 AUTHORS $(DOCSDIR) - install -D -m644 README $(DOCSDIR) - - -uninstall: - rm -rf $(BINDIR)/uzbl - rm -rf $(UZBLDATA) diff --git a/uzbl-core.c b/uzbl-core.c index e86da21..71bc474 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -29,36 +29,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -#define LENGTH(x) (sizeof x / sizeof x[0]) -#define _POSIX_SOURCE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "uzbl-core.h" +#include "uzbl-events.h" #include "config.h" UzblCore uzbl; @@ -84,9 +56,17 @@ GOptionEntry entries[] = { NULL, 0, 0, 0, NULL, NULL, NULL } }; -enum ptr_type {TYPE_INT, TYPE_STR, TYPE_FLOAT}; +XDG_Var XDG[] = +{ + { "XDG_CONFIG_HOME", "~/.config" }, + { "XDG_DATA_HOME", "~/.local/share" }, + { "XDG_CACHE_HOME", "~/.cache" }, + { "XDG_CONFIG_DIRS", "/etc/xdg" }, + { "XDG_DATA_DIRS", "/usr/local/share/:/usr/share/" }, +}; /* associate command names to their properties */ +enum ptr_type {TYPE_INT, TYPE_STR, TYPE_FLOAT}; typedef struct { enum ptr_type type; union { @@ -183,38 +163,6 @@ const struct var_name_to_ptr_t { { NULL, {.ptr.s = NULL, .type = TYPE_INT, .dump = 0, .writeable = 0, .func = NULL}} }; - -/* Event id to name mapping - * Event names must be in the same - * order as in 'enum event_type' - * - * TODO: Add more useful events -*/ -const char *event_table[LAST_EVENT] = { - "LOAD_START" , - "LOAD_COMMIT" , - "LOAD_FINISH" , - "LOAD_ERROR" , - "KEY_PRESS" , - "KEY_RELEASE" , - "DOWNLOAD_REQUEST" , - "COMMAND_EXECUTED" , - "LINK_HOVER" , - "TITLE_CHANGED" , - "GEOMETRY_CHANGED" , - "WEBINSPECTOR" , - "NEW_WINDOW" , - "SELECTION_CHANGED", - "VARIABLE_SET" , - "FIFO_SET" , - "SOCKET_SET" , - "INSTANCE_START" , - "INSTANCE_EXIT" , - "LOAD_PROGRESS" , - "LINK_UNHOVER" -}; - - /* construct a hash from the var_name_to_ptr array for quick access */ void create_var_to_name_hash() { @@ -388,110 +336,6 @@ expand(const char *s, guint recurse) { return g_string_free(buf, FALSE); } -void -event_buffer_timeout(guint sec) { - struct itimerval t; - memset(&t, 0, sizeof t); - t.it_value.tv_sec = sec; - t.it_value.tv_usec = 0; - setitimer(ITIMER_REAL, &t, NULL); -} - - -void -send_event_socket(GString *msg) { - GError *error = NULL; - GString *tmp; - GIOStatus ret; - gsize len; - guint i=0; - - if(uzbl.comm.socket_path && - uzbl.comm.clientchan && - uzbl.comm.clientchan->is_writeable) { - - if(uzbl.state.event_buffer) { - event_buffer_timeout(0); - - while(i < uzbl.state.event_buffer->len) { - tmp = g_ptr_array_index(uzbl.state.event_buffer, i++); - ret = g_io_channel_write_chars (uzbl.comm.clientchan, - tmp->str, tmp->len, - &len, &error); - /* is g_ptr_array_free(uzbl.state.event_buffer, TRUE) enough? */ - //g_string_free(tmp, TRUE); - if (ret == G_IO_STATUS_ERROR) { - g_warning ("Error sending event to socket: %s", error->message); - } - g_io_channel_flush(uzbl.comm.clientchan, &error); - } - g_ptr_array_free(uzbl.state.event_buffer, TRUE); - uzbl.state.event_buffer = NULL; - } - if(msg) { - ret = g_io_channel_write_chars (uzbl.comm.clientchan, - msg->str, msg->len, - &len, &error); - - if (ret == G_IO_STATUS_ERROR) { - g_warning ("Error sending event to socket: %s", error->message); - } - g_io_channel_flush(uzbl.comm.clientchan, &error); - } - } - /* buffer events until a socket is set and connected - * or a timeout is encountered - */ - else { - if(!uzbl.state.event_buffer) - uzbl.state.event_buffer = g_ptr_array_new(); - g_ptr_array_add(uzbl.state.event_buffer, (gpointer)g_string_new(msg->str)); - } -} - -void -send_event_stdout(GString *msg) { - printf("%s", msg->str); - fflush(stdout); -} - -/* - * build event string and send over the supported interfaces - * custom_event == NULL indicates an internal event -*/ -void -send_event(int type, const gchar *details, const gchar *custom_event) { - GString *event_message = g_string_new(""); - gchar *buf, *p_val = NULL; - - /* expand shell vars */ - if(details) { - buf = g_strdup(details); - p_val = parseenv(g_strdup(buf ? g_strchug(buf) : " ")); - g_free(buf); - } - - /* check for custom events */ - if(custom_event) { - g_string_printf(event_message, "EVENT [%s] %s %s\n", - uzbl.state.instance_name, custom_event, p_val); - } - /* check wether we support the internal event */ - else if(type < LAST_EVENT) { - g_string_printf(event_message, "EVENT [%s] %s %s\n", - uzbl.state.instance_name, event_table[type], p_val); - } - - if(event_message->str) { - /* TODO: a means to select the interface to which events are sent */ - send_event_stdout(event_message); - send_event_socket(event_message); - - g_string_free(event_message, TRUE); - } - g_free(p_val); -} - char * itos(int val) { char tmp[20]; diff --git a/uzbl-core.h b/uzbl-core.h index 854060f..d5fbcb7 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -11,6 +11,36 @@ * */ +#define _POSIX_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LENGTH(x) (sizeof x / sizeof x[0]) + /* status bar elements */ typedef struct { gint load_progress; @@ -170,42 +200,22 @@ typedef struct { Window xwin; } UzblCore; +/* Main Uzbl object */ +extern UzblCore uzbl; + +typedef void sigfunc(int); typedef struct { char* name; char* param; } Action; -typedef void sigfunc(int); - -/* Event system */ -enum event_type { - LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, - KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, - LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, - WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, - VARIABLE_SET, FIFO_SET, SOCKET_SET, - INSTANCE_START, INSTANCE_EXIT, LOAD_PROGRESS, - LINK_UNHOVER, - - /* must be last entry */ - LAST_EVENT -}; - /* XDG Stuff */ typedef struct { gchar* environmental; gchar* default_value; } XDG_Var; -XDG_Var XDG[] = -{ - { "XDG_CONFIG_HOME", "~/.config" }, - { "XDG_DATA_HOME", "~/.local/share" }, - { "XDG_CACHE_HOME", "~/.cache" }, - { "XDG_CONFIG_DIRS", "/etc/xdg" }, - { "XDG_DATA_DIRS", "/usr/local/share/:/usr/share/" }, -}; /* Functions */ char * @@ -229,6 +239,9 @@ catch_sigterm(int s); sigfunc * setup_signal(int signe, sigfunc *shandler); +gchar* +parseenv (char* string); + gboolean set_var_value(const gchar *name, gchar *val); diff --git a/uzbl-events.c b/uzbl-events.c new file mode 100644 index 0000000..b052b6b --- /dev/null +++ b/uzbl-events.c @@ -0,0 +1,145 @@ +/* Uzbl event routines + * (c) 2009 by Robert Manea +*/ + +#include "uzbl-core.h" +#include "uzbl-events.h" + +UzblCore uzbl; + +/* Event id to name mapping + * Event names must be in the same + * order as in 'enum event_type' + * + * TODO: Add more useful events +*/ +const char *event_table[LAST_EVENT] = { + "LOAD_START" , + "LOAD_COMMIT" , + "LOAD_FINISH" , + "LOAD_ERROR" , + "KEY_PRESS" , + "KEY_RELEASE" , + "DOWNLOAD_REQUEST" , + "COMMAND_EXECUTED" , + "LINK_HOVER" , + "TITLE_CHANGED" , + "GEOMETRY_CHANGED" , + "WEBINSPECTOR" , + "NEW_WINDOW" , + "SELECTION_CHANGED", + "VARIABLE_SET" , + "FIFO_SET" , + "SOCKET_SET" , + "INSTANCE_START" , + "INSTANCE_EXIT" , + "LOAD_PROGRESS" , + "LINK_UNHOVER" +}; + +void +event_buffer_timeout(guint sec) { + struct itimerval t; + memset(&t, 0, sizeof t); + t.it_value.tv_sec = sec; + t.it_value.tv_usec = 0; + setitimer(ITIMER_REAL, &t, NULL); +} + + +void +send_event_socket(GString *msg) { + GError *error = NULL; + GString *tmp; + GIOStatus ret = 0; + gsize len; + guint i=0; + + if(uzbl.comm.socket_path && + uzbl.comm.clientchan && + uzbl.comm.clientchan->is_writeable) { + + if(uzbl.state.event_buffer) { + event_buffer_timeout(0); + + while(i < uzbl.state.event_buffer->len) { + tmp = g_ptr_array_index(uzbl.state.event_buffer, i++); + ret = g_io_channel_write_chars (uzbl.comm.clientchan, + tmp->str, tmp->len, + &len, &error); + /* is g_ptr_array_free(uzbl.state.event_buffer, TRUE) enough? */ + //g_string_free(tmp, TRUE); + if (ret == G_IO_STATUS_ERROR) { + g_warning ("Error sending event to socket: %s", error->message); + } + g_io_channel_flush(uzbl.comm.clientchan, &error); + } + g_ptr_array_free(uzbl.state.event_buffer, TRUE); + uzbl.state.event_buffer = NULL; + } + if(msg) { + while(!ret || + ret == G_IO_STATUS_AGAIN) { + ret = g_io_channel_write_chars (uzbl.comm.clientchan, + msg->str, msg->len, + &len, &error); + } + + if (ret == G_IO_STATUS_ERROR) { + g_warning ("Error sending event to socket: %s", error->message); + } + g_io_channel_flush(uzbl.comm.clientchan, &error); + } + } + /* buffer events until a socket is set and connected + * or a timeout is encountered + */ + else { + if(!uzbl.state.event_buffer) + uzbl.state.event_buffer = g_ptr_array_new(); + g_ptr_array_add(uzbl.state.event_buffer, (gpointer)g_string_new(msg->str)); + } +} + +void +send_event_stdout(GString *msg) { + printf("%s", msg->str); + fflush(stdout); +} + +/* + * build event string and send over the supported interfaces + * custom_event == NULL indicates an internal event +*/ +void +send_event(int type, const gchar *details, const gchar *custom_event) { + GString *event_message = g_string_new(""); + gchar *buf, *p_val = NULL; + + /* expand shell vars */ + if(details) { + buf = g_strdup(details); + p_val = parseenv(g_strdup(buf ? g_strchug(buf) : " ")); + g_free(buf); + } + + /* check for custom events */ + if(custom_event) { + g_string_printf(event_message, "EVENT [%s] %s %s\n", + uzbl.state.instance_name, custom_event, p_val); + } + /* check wether we support the internal event */ + else if(type < LAST_EVENT) { + g_string_printf(event_message, "EVENT [%s] %s %s\n", + uzbl.state.instance_name, event_table[type], p_val); + } + + if(event_message->str) { + /* TODO: a means to select the interface to which events are sent */ + send_event_stdout(event_message); + send_event_socket(event_message); + + g_string_free(event_message, TRUE); + } + g_free(p_val); +} diff --git a/uzbl-events.h b/uzbl-events.h new file mode 100644 index 0000000..782243d --- /dev/null +++ b/uzbl-events.h @@ -0,0 +1,29 @@ +/* Uzbl event routines + * (c) 2009 by Robert Manea +*/ + +/* Event system */ +enum event_type { + LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, + KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, + LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, + WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, + VARIABLE_SET, FIFO_SET, SOCKET_SET, + INSTANCE_START, INSTANCE_EXIT, LOAD_PROGRESS, + LINK_UNHOVER, + + /* must be last entry */ + LAST_EVENT +}; + +void +event_buffer_timeout(guint sec); + +void +send_event_socket(GString *msg); + +void +send_event_stdout(GString *msg); + +void +send_event(int type, const gchar *details, const gchar *custom_event); -- cgit v1.2.3 From a120934f0c209c68a13a5782371d68eaa97d290d Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 5 Oct 2009 10:35:07 +0200 Subject: Source splitting --- Makefile | 9 +- callbacks.c | 594 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ callbacks.h | 189 +++++++++++++++++++ events.c | 145 ++++++++++++++ events.h | 29 +++ uzbl-core.c | 592 +-------------------------------------------------------- uzbl-core.h | 172 +---------------- uzbl-events.c | 145 -------------- uzbl-events.h | 29 --- 9 files changed, 973 insertions(+), 931 deletions(-) create mode 100644 callbacks.c create mode 100644 callbacks.h create mode 100644 events.c create mode 100644 events.h delete mode 100644 uzbl-events.c delete mode 100644 uzbl-events.h (limited to 'uzbl-core.h') diff --git a/Makefile b/Makefile index 2989afe..bc348a5 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ CFLAGS!=echo -std=c99 `pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthre LDFLAGS:=$(shell pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0) -pthread $(LDFLAGS) LDFLAGS!=echo `pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0` -pthread $(LDFLAGS) -SRC = uzbl-core.c uzbl-events.c +SRC = uzbl-core.c events.c callbacks.c OBJ = ${SRC:.c=.o} all: uzbl-browser options @@ -20,10 +20,10 @@ options: @echo Compiling $< @${CC} -c ${CFLAGS} $< -${OBJ}: uzbl-core.h uzbl-events.h config.h +${OBJ}: uzbl-core.h events.h callbacks.h config.h uzbl-core: ${OBJ} - @echo Linking $< + @echo Linking object files @${CC} -o $@ ${OBJ} ${LDFLAGS} @@ -60,7 +60,8 @@ test-share-browser: uzbl-browser clean: rm -f uzbl-core rm -f uzbl-core.o - rm -f uzbl-events.o + rm -f events.o + rm -f callbacks.o cd ./tests/; $(MAKE) clean install: all diff --git a/callbacks.c b/callbacks.c new file mode 100644 index 0000000..e55d15b --- /dev/null +++ b/callbacks.c @@ -0,0 +1,594 @@ +/* + ** Callbacks + ** + ** (c) 2009 by Robert Manea et al. +*/ + +#include "uzbl-core.h" +#include "callbacks.h" +#include "events.h" + + +void +set_proxy_url() { + SoupURI *suri; + + 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); + } + return; +} + +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() { + if(!gtk_window_parse_geometry(GTK_WINDOW(uzbl.gui.main_window), uzbl.gui.geometry)) { + if(uzbl.state.verbose) + printf("Error in geometry string: %s\n", uzbl.gui.geometry); + } + /* 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 +cmd_load_uri() { + GArray *a = g_array_new (TRUE, FALSE, sizeof(gchar*)); + g_array_append_val (a, uzbl.state.uri); + load_uri(uzbl.gui.web_view, a, NULL); + g_array_free (a, TRUE); +} + +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)); +} + +WebKitWebSettings* +view_settings() { + return webkit_web_view_get_settings(uzbl.gui.web_view); +} + +void +cmd_font_size() { + WebKitWebSettings *ws = view_settings(); + if (uzbl.behave.font_size > 0) { + g_object_set (G_OBJECT(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", + uzbl.behave.monospace_size, NULL); + } else { + g_object_set (G_OBJECT(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_disable_plugins() { + g_object_set (G_OBJECT(view_settings()), "enable-plugins", + !uzbl.behave.disable_plugins, NULL); +} + +void +cmd_disable_scripts() { + g_object_set (G_OBJECT(view_settings()), "enable-scripts", + !uzbl.behave.disable_scripts, NULL); +} + +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); +} + + +void +cmd_autoshrink_img() { + g_object_set (G_OBJECT(view_settings()), "auto-shrink-images", + uzbl.behave.autoshrink_img, NULL); +} + + +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); +} + +void +cmd_default_encoding() { + g_object_set (G_OBJECT(view_settings()), "default-encoding", + uzbl.behave.default_encoding, NULL); +} + +void +cmd_enforce_96dpi() { + g_object_set (G_OBJECT(view_settings()), "enforce-96-dpi", + uzbl.behave.enforce_96dpi, NULL); +} + +void +cmd_caret_browsing() { + g_object_set (G_OBJECT(view_settings()), "enable-caret-browsing", + uzbl.behave.caret_browsing, NULL); +} + +void +cmd_cookie_handler() { + gchar **split = g_strsplit(uzbl.behave.cookie_handler, " ", 2); + /* pitfall: doesn't handle chain actions; must the sync_ action manually */ + if ((g_strcmp0(split[0], "sh") == 0) || + (g_strcmp0(split[0], "spawn") == 0)) { + g_free (uzbl.behave.cookie_handler); + uzbl.behave.cookie_handler = + g_strdup_printf("sync_%s %s", split[0], split[1]); + } + g_strfreev (split); +} + +void +cmd_scheme_handler() { + gchar **split = g_strsplit(uzbl.behave.scheme_handler, " ", 2); + /* pitfall: doesn't handle chain actions; must the sync_ action manually */ + if ((g_strcmp0(split[0], "sh") == 0) || + (g_strcmp0(split[0], "spawn") == 0)) { + g_free (uzbl.behave.scheme_handler); + uzbl.behave.scheme_handler = + g_strdup_printf("sync_%s %s", split[0], split[1]); + } + g_strfreev (split); +} + +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); + } +} + +/* 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 +toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result) { + (void)page; + (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; + State *s = &uzbl.state; + + 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); + s->last_selected_url = NULL; + } + + g_free(s->selected_url); + s->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, s->last_selected_url, NULL); + + send_event(LINK_HOVER, s->selected_url, NULL); + } + else if(s->last_selected_url) { + send_event(LINK_UNHOVER, s->last_selected_url, NULL); + } + + update_title(); +} + +void +title_change_cb (WebKitWebView* web_view, GParamSpec param_spec) { + (void) web_view; + (void) param_spec; + const gchar *title = webkit_web_view_get_title(web_view); + if (uzbl.gui.main_title) + g_free (uzbl.gui.main_title); + uzbl.gui.main_title = title ? g_strdup (title) : g_strdup ("(no title)"); + update_title(); + send_event(TITLE_CHANGED, uzbl.gui.main_title, NULL); +} + +void +progress_change_cb (WebKitWebView* page, gint progress, gpointer data) { + (void) page; + (void) data; + gchar *prg_str; + + prg_str = itos(progress); + send_event(LOAD_PROGRESS, prg_str, NULL); + g_free(prg_str); + + update_title(); +} + +void +selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) { + (void)ud; + gchar *tmp; + + webkit_web_view_copy_clipboard(webkitwebview); + tmp = gtk_clipboard_wait_for_text(gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)); + send_event(SELECTION_CHANGED, tmp, NULL); + g_free(tmp); +} + +void +load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { + (void) page; + (void) data; + + if (uzbl.behave.load_finish_handler) + run_handler(uzbl.behave.load_finish_handler, ""); + + send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame), NULL); +} + +void +load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { + (void) page; + (void) frame; + (void) data; + uzbl.gui.sbar.load_progress = 0; + if (uzbl.behave.load_start_handler) + run_handler(uzbl.behave.load_start_handler, ""); + + send_event(LOAD_START, uzbl.state.uri, NULL); +} + +void +load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud) { + (void) page; + (void) frame; + (void) ud; + GError *err = web_err; + gchar *details; + + details = g_strdup_printf("%s %d:%s", uri, err->code, err->message); + send_event(LOAD_ERROR, details, NULL); + g_free(details); +} + +void +load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { + (void) page; + (void) data; + g_free (uzbl.state.uri); + GString* newuri = g_string_new (webkit_web_frame_get_uri (frame)); + uzbl.state.uri = g_string_free (newuri, FALSE); + + if (uzbl.behave.load_commit_handler) + run_handler(uzbl.behave.load_commit_handler, uzbl.state.uri); + + /* event message */ + send_event(LOAD_COMMIT, webkit_web_frame_get_uri (frame), NULL); +} + +void +destroy_cb (GtkWidget* widget, gpointer data) { + (void) widget; + (void) data; + gtk_main_quit (); +} + +gboolean +configure_event_cb(GtkWidget* window, GdkEventConfigure* event) { + (void) window; + (void) event; + + retrieve_geometry(); + send_event(GEOMETRY_CHANGED, uzbl.gui.geometry, NULL); + return FALSE; +} + +gboolean +key_press_cb (GtkWidget* window, GdkEventKey* event) { + (void) window; + + if(event->type == GDK_KEY_PRESS) + key_to_event(event->keyval, GDK_KEY_PRESS); + + return uzbl.behave.forward_keys ? FALSE : TRUE; +} + +gboolean +key_release_cb (GtkWidget* window, GdkEventKey* event) { + (void) window; + + if(event->type == GDK_KEY_RELEASE) + key_to_event(event->keyval, GDK_KEY_RELEASE); + + return TRUE; +} + +gboolean +navigation_decision_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { + (void) web_view; + (void) frame; + (void) navigation_action; + (void) user_data; + + const gchar* uri = webkit_network_request_get_uri (request); + gboolean decision_made = FALSE; + + if (uzbl.state.verbose) + printf("Navigation requested -> %s\n", uri); + + if (uzbl.behave.scheme_handler) { + GString *s = g_string_new (""); + g_string_printf(s, "'%s'", uri); + + run_handler(uzbl.behave.scheme_handler, s->str); + + if(uzbl.comm.sync_stdout && strcmp (uzbl.comm.sync_stdout, "") != 0) { + char *p = strchr(uzbl.comm.sync_stdout, '\n' ); + if ( p != NULL ) *p = '\0'; + if (!strcmp(uzbl.comm.sync_stdout, "USED")) { + webkit_web_policy_decision_ignore(policy_decision); + decision_made = TRUE; + } + } + if (uzbl.comm.sync_stdout) + uzbl.comm.sync_stdout = strfree(uzbl.comm.sync_stdout); + + g_string_free(s, TRUE); + } + if (!decision_made) + webkit_web_policy_decision_use(policy_decision); + + return TRUE; +} + +gboolean +new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { + (void) web_view; + (void) frame; + (void) navigation_action; + (void) policy_decision; + (void) user_data; + const gchar* uri = webkit_network_request_get_uri (request); + if (uzbl.state.verbose) + printf("New window requested -> %s \n", uri); + webkit_web_policy_decision_use(policy_decision); + send_event(NEW_WINDOW, uri, NULL); + return TRUE; +} + +gboolean +mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { + (void) frame; + (void) request; + (void) user_data; + + /* If we can display it, let's display it... */ + if (webkit_web_view_can_show_mime_type (web_view, mime_type)) { + webkit_web_policy_decision_use (policy_decision); + return TRUE; + } + + /* ...everything we can't display is downloaded */ + webkit_web_policy_decision_download (policy_decision); + return TRUE; +} + +/*@null@*/ WebKitWebView* +create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data) { + (void) web_view; + (void) frame; + (void) user_data; + if (uzbl.state.selected_url != NULL) { + if (uzbl.state.verbose) + printf("\nNew web view -> %s\n",uzbl.state.selected_url); + new_window_load_uri(uzbl.state.selected_url); + } else { + if (uzbl.state.verbose) + printf("New web view -> %s\n","Nothing to open, exiting"); + } + return (NULL); +} + +gboolean +download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) { + (void) web_view; + (void) user_data; + if (uzbl.behave.download_handler) { + const gchar* uri = webkit_download_get_uri ((WebKitDownload*)download); + if (uzbl.state.verbose) + printf("Download -> %s\n",uri); + /* if urls not escaped, we may have to escape and quote uri before this call */ + + GString *args = g_string_new(uri); + + if (uzbl.net.proxy_url) { + g_string_append_c(args, ' '); + g_string_append(args, uzbl.net.proxy_url); + } + + run_handler(uzbl.behave.download_handler, args->str); + + g_string_free(args, TRUE); + } + send_event(DOWNLOAD_REQ, webkit_download_get_uri ((WebKitDownload*)download), NULL); + return (FALSE); +} diff --git a/callbacks.h b/callbacks.h new file mode 100644 index 0000000..f4562c8 --- /dev/null +++ b/callbacks.h @@ -0,0 +1,189 @@ +/* (c) 2009 by Robert Manea + * Callbacks +*/ + +void +cmd_load_uri(); + +void +cmd_set_status(); + +void +set_proxy_url(); + +void +set_icon(); + +void +cmd_cookie_handler(); + +void +cmd_scheme_handler(); + +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_disable_plugins(); + +void +cmd_disable_scripts(); + +void +cmd_minimum_font_size(); + +void +cmd_fifo_dir(); + +void +cmd_socket_dir(); + +void +cmd_useragent() ; + +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 +cmd_enforce_96dpi(); + +void +cmd_inject_html(); + +void +cmd_caret_browsing(); + +void +cmd_set_geometry(); + +/* +void +cmd_view_source(); +*/ + +void +cmd_load_start(); + +WebKitWebSettings* +view_settings(); + +gboolean +download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data); + +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); + +void +title_change_cb (WebKitWebView* web_view, GParamSpec param_spec); + +void +progress_change_cb (WebKitWebView* page, gint progress, gpointer data); + +void +load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); + +void +load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); + +void +load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); + +void +load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud); + +void +selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud); + +void +destroy_cb (GtkWidget* widget, gpointer data); + +gboolean +configure_event_cb(GtkWidget* window, GdkEventConfigure* event); + +gboolean +key_press_cb (GtkWidget* window, GdkEventKey* event); + +gboolean +key_release_cb (GtkWidget* window, GdkEventKey* event); + +gboolean +navigation_decision_cb (WebKitWebView *web_view, WebKitWebFrame *frame, + WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, + WebKitWebPolicyDecision *policy_decision, gpointer user_data); + +gboolean +new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, + WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, + WebKitWebPolicyDecision *policy_decision, gpointer user_data); + +gboolean +mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, + gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data); + +/*@null@*/ WebKitWebView* +create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data); + +gboolean +download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data); + diff --git a/events.c b/events.c new file mode 100644 index 0000000..91cfe57 --- /dev/null +++ b/events.c @@ -0,0 +1,145 @@ +/* Uzbl event routines + * (c) 2009 by Robert Manea +*/ + +#include "uzbl-core.h" +#include "events.h" + +UzblCore uzbl; + +/* Event id to name mapping + * Event names must be in the same + * order as in 'enum event_type' + * + * TODO: Add more useful events +*/ +const char *event_table[LAST_EVENT] = { + "LOAD_START" , + "LOAD_COMMIT" , + "LOAD_FINISH" , + "LOAD_ERROR" , + "KEY_PRESS" , + "KEY_RELEASE" , + "DOWNLOAD_REQUEST" , + "COMMAND_EXECUTED" , + "LINK_HOVER" , + "TITLE_CHANGED" , + "GEOMETRY_CHANGED" , + "WEBINSPECTOR" , + "NEW_WINDOW" , + "SELECTION_CHANGED", + "VARIABLE_SET" , + "FIFO_SET" , + "SOCKET_SET" , + "INSTANCE_START" , + "INSTANCE_EXIT" , + "LOAD_PROGRESS" , + "LINK_UNHOVER" +}; + +void +event_buffer_timeout(guint sec) { + struct itimerval t; + memset(&t, 0, sizeof t); + t.it_value.tv_sec = sec; + t.it_value.tv_usec = 0; + setitimer(ITIMER_REAL, &t, NULL); +} + + +void +send_event_socket(GString *msg) { + GError *error = NULL; + GString *tmp; + GIOStatus ret = 0; + gsize len; + guint i=0; + + if(uzbl.comm.socket_path && + uzbl.comm.clientchan && + uzbl.comm.clientchan->is_writeable) { + + if(uzbl.state.event_buffer) { + event_buffer_timeout(0); + + while(i < uzbl.state.event_buffer->len) { + tmp = g_ptr_array_index(uzbl.state.event_buffer, i++); + ret = g_io_channel_write_chars (uzbl.comm.clientchan, + tmp->str, tmp->len, + &len, &error); + /* is g_ptr_array_free(uzbl.state.event_buffer, TRUE) enough? */ + //g_string_free(tmp, TRUE); + if (ret == G_IO_STATUS_ERROR) { + g_warning ("Error sending event to socket: %s", error->message); + } + g_io_channel_flush(uzbl.comm.clientchan, &error); + } + g_ptr_array_free(uzbl.state.event_buffer, TRUE); + uzbl.state.event_buffer = NULL; + } + if(msg) { + while(!ret || + ret == G_IO_STATUS_AGAIN) { + ret = g_io_channel_write_chars (uzbl.comm.clientchan, + msg->str, msg->len, + &len, &error); + } + + if (ret == G_IO_STATUS_ERROR) { + g_warning ("Error sending event to socket: %s", error->message); + } + g_io_channel_flush(uzbl.comm.clientchan, &error); + } + } + /* buffer events until a socket is set and connected + * or a timeout is encountered + */ + else { + if(!uzbl.state.event_buffer) + uzbl.state.event_buffer = g_ptr_array_new(); + g_ptr_array_add(uzbl.state.event_buffer, (gpointer)g_string_new(msg->str)); + } +} + +void +send_event_stdout(GString *msg) { + printf("%s", msg->str); + fflush(stdout); +} + +/* + * build event string and send over the supported interfaces + * custom_event == NULL indicates an internal event +*/ +void +send_event(int type, const gchar *details, const gchar *custom_event) { + GString *event_message = g_string_new(""); + gchar *buf, *p_val = NULL; + + /* expand shell vars */ + if(details) { + buf = g_strdup(details); + p_val = parseenv(g_strdup(buf ? g_strchug(buf) : " ")); + g_free(buf); + } + + /* check for custom events */ + if(custom_event) { + g_string_printf(event_message, "EVENT [%s] %s %s\n", + uzbl.state.instance_name, custom_event, p_val); + } + /* check wether we support the internal event */ + else if(type < LAST_EVENT) { + g_string_printf(event_message, "EVENT [%s] %s %s\n", + uzbl.state.instance_name, event_table[type], p_val); + } + + if(event_message->str) { + /* TODO: a means to select the interface to which events are sent */ + send_event_stdout(event_message); + send_event_socket(event_message); + + g_string_free(event_message, TRUE); + } + g_free(p_val); +} diff --git a/events.h b/events.h new file mode 100644 index 0000000..782243d --- /dev/null +++ b/events.h @@ -0,0 +1,29 @@ +/* Uzbl event routines + * (c) 2009 by Robert Manea +*/ + +/* Event system */ +enum event_type { + LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, + KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, + LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, + WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, + VARIABLE_SET, FIFO_SET, SOCKET_SET, + INSTANCE_START, INSTANCE_EXIT, LOAD_PROGRESS, + LINK_UNHOVER, + + /* must be last entry */ + LAST_EVENT +}; + +void +event_buffer_timeout(guint sec); + +void +send_event_socket(GString *msg); + +void +send_event_stdout(GString *msg); + +void +send_event(int type, const gchar *details, const gchar *custom_event); diff --git a/uzbl-core.c b/uzbl-core.c index 71bc474..3b999e1 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -30,7 +30,8 @@ */ #include "uzbl-core.h" -#include "uzbl-events.h" +#include "callbacks.h" +#include "events.h" #include "config.h" UzblCore uzbl; @@ -345,7 +346,10 @@ itos(int val) { } gchar* -strfree(gchar *str) { g_free(str); return NULL; } // for freeing & setting to null in one go +strfree(gchar *str) { + g_free(str); + return NULL; +} gchar* argv_idx(const GArray *a, const guint idx) { return g_array_index(a, gchar*, idx); } @@ -495,7 +499,6 @@ clean_up(void) { } /* --- SIGNAL HANDLER --- */ - void catch_sigterm(int s) { (void) s; @@ -516,119 +519,6 @@ catch_sigalrm(int s) { uzbl.state.event_buffer = NULL; } -/* --- CALLBACKS --- */ - -gboolean -navigation_decision_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { - (void) web_view; - (void) frame; - (void) navigation_action; - (void) user_data; - - const gchar* uri = webkit_network_request_get_uri (request); - gboolean decision_made = FALSE; - - if (uzbl.state.verbose) - printf("Navigation requested -> %s\n", uri); - - if (uzbl.behave.scheme_handler) { - GString *s = g_string_new (""); - g_string_printf(s, "'%s'", uri); - - run_handler(uzbl.behave.scheme_handler, s->str); - - if(uzbl.comm.sync_stdout && strcmp (uzbl.comm.sync_stdout, "") != 0) { - char *p = strchr(uzbl.comm.sync_stdout, '\n' ); - if ( p != NULL ) *p = '\0'; - if (!strcmp(uzbl.comm.sync_stdout, "USED")) { - webkit_web_policy_decision_ignore(policy_decision); - decision_made = TRUE; - } - } - if (uzbl.comm.sync_stdout) - uzbl.comm.sync_stdout = strfree(uzbl.comm.sync_stdout); - - g_string_free(s, TRUE); - } - if (!decision_made) - webkit_web_policy_decision_use(policy_decision); - - return TRUE; -} - -gboolean -new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { - (void) web_view; - (void) frame; - (void) navigation_action; - (void) policy_decision; - (void) user_data; - const gchar* uri = webkit_network_request_get_uri (request); - if (uzbl.state.verbose) - printf("New window requested -> %s \n", uri); - webkit_web_policy_decision_use(policy_decision); - send_event(NEW_WINDOW, uri, NULL); - return TRUE; -} - -gboolean -mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { - (void) frame; - (void) request; - (void) user_data; - - /* If we can display it, let's display it... */ - if (webkit_web_view_can_show_mime_type (web_view, mime_type)) { - webkit_web_policy_decision_use (policy_decision); - return TRUE; - } - - /* ...everything we can't display is downloaded */ - webkit_web_policy_decision_download (policy_decision); - return TRUE; -} - -/*@null@*/ WebKitWebView* -create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data) { - (void) web_view; - (void) frame; - (void) user_data; - if (uzbl.state.selected_url != NULL) { - if (uzbl.state.verbose) - printf("\nNew web view -> %s\n",uzbl.state.selected_url); - new_window_load_uri(uzbl.state.selected_url); - } else { - if (uzbl.state.verbose) - printf("New web view -> %s\n","Nothing to open, exiting"); - } - return (NULL); -} - -gboolean -download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) { - (void) web_view; - (void) user_data; - if (uzbl.behave.download_handler) { - const gchar* uri = webkit_download_get_uri ((WebKitDownload*)download); - if (uzbl.state.verbose) - printf("Download -> %s\n",uri); - /* if urls not escaped, we may have to escape and quote uri before this call */ - - GString *args = g_string_new(uri); - - if (uzbl.net.proxy_url) { - g_string_append_c(args, ' '); - g_string_append(args, uzbl.net.proxy_url); - } - - run_handler(uzbl.behave.download_handler, args->str); - - g_string_free(args, TRUE); - } - send_event(DOWNLOAD_REQ, webkit_download_get_uri ((WebKitDownload*)download), NULL); - return (FALSE); -} - /* scroll a bar in a given direction */ void scroll (GtkAdjustment* bar, GArray *argv) { @@ -677,183 +567,6 @@ scroll_horz(WebKitWebView* page, GArray *argv, GString *result) { scroll(uzbl.gui.bar_h, argv); } -void -cmd_set_geometry() { - if(!gtk_window_parse_geometry(GTK_WINDOW(uzbl.gui.main_window), uzbl.gui.geometry)) { - if(uzbl.state.verbose) - printf("Error in geometry string: %s\n", uzbl.gui.geometry); - } - /* 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 -toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result) { - (void)page; - (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; - State *s = &uzbl.state; - - 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); - s->last_selected_url = NULL; - } - - g_free(s->selected_url); - s->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, s->last_selected_url, NULL); - - send_event(LINK_HOVER, s->selected_url, NULL); - } - else if(s->last_selected_url) { - send_event(LINK_UNHOVER, s->last_selected_url, NULL); - } - - update_title(); -} - -void -title_change_cb (WebKitWebView* web_view, GParamSpec param_spec) { - (void) web_view; - (void) param_spec; - const gchar *title = webkit_web_view_get_title(web_view); - if (uzbl.gui.main_title) - g_free (uzbl.gui.main_title); - uzbl.gui.main_title = title ? g_strdup (title) : g_strdup ("(no title)"); - update_title(); - send_event(TITLE_CHANGED, uzbl.gui.main_title, NULL); -} - -void -progress_change_cb (WebKitWebView* page, gint progress, gpointer data) { - (void) page; - (void) data; - gchar *prg_str; - - prg_str = itos(progress); - send_event(LOAD_PROGRESS, prg_str, NULL); - g_free(prg_str); - - update_title(); -} - -void -selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud) { - (void)ud; - gchar *tmp; - - webkit_web_view_copy_clipboard(webkitwebview); - tmp = gtk_clipboard_wait_for_text(gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)); - send_event(SELECTION_CHANGED, tmp, NULL); - g_free(tmp); -} - -void -load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { - (void) page; - (void) data; - - if (uzbl.behave.load_finish_handler) - run_handler(uzbl.behave.load_finish_handler, ""); - - send_event(LOAD_FINISH, webkit_web_frame_get_uri(frame), NULL); -} - -void -load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { - (void) page; - (void) frame; - (void) data; - uzbl.gui.sbar.load_progress = 0; - if (uzbl.behave.load_start_handler) - run_handler(uzbl.behave.load_start_handler, ""); - - send_event(LOAD_START, uzbl.state.uri, NULL); -} - -void -load_error_cb (WebKitWebView* page, WebKitWebFrame* frame, gchar *uri, gpointer web_err, gpointer ud) { - (void) page; - (void) frame; - (void) ud; - GError *err = web_err; - gchar *details; - - details = g_strdup_printf("%s %d:%s", uri, err->code, err->message); - send_event(LOAD_ERROR, details, NULL); - g_free(details); -} - -void -load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { - (void) page; - (void) data; - g_free (uzbl.state.uri); - GString* newuri = g_string_new (webkit_web_frame_get_uri (frame)); - uzbl.state.uri = g_string_free (newuri, FALSE); - - if (uzbl.behave.load_commit_handler) - run_handler(uzbl.behave.load_commit_handler, uzbl.state.uri); - - /* event message */ - send_event(LOAD_COMMIT, webkit_web_frame_get_uri (frame), NULL); -} - -void -destroy_cb (GtkWidget* widget, gpointer data) { - (void) widget; - (void) data; - gtk_main_quit (); -} /* VIEW funcs (little webkit wrappers) */ @@ -1559,270 +1272,6 @@ parse_command(const char *cmd, const char *param, GString *result) { g_printerr ("command \"%s\" not understood. ignoring.\n", cmd); } -void -set_proxy_url() { - SoupURI *suri; - - 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); - } - return; -} - -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_load_uri() { - GArray *a = g_array_new (TRUE, FALSE, sizeof(gchar*)); - g_array_append_val (a, uzbl.state.uri); - load_uri(uzbl.gui.web_view, a, NULL); - g_array_free (a, TRUE); -} - -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)); -} - -WebKitWebSettings* -view_settings() { - return webkit_web_view_get_settings(uzbl.gui.web_view); -} - -void -cmd_font_size() { - WebKitWebSettings *ws = view_settings(); - if (uzbl.behave.font_size > 0) { - g_object_set (G_OBJECT(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", - uzbl.behave.monospace_size, NULL); - } else { - g_object_set (G_OBJECT(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_disable_plugins() { - g_object_set (G_OBJECT(view_settings()), "enable-plugins", - !uzbl.behave.disable_plugins, NULL); -} - -void -cmd_disable_scripts() { - g_object_set (G_OBJECT(view_settings()), "enable-scripts", - !uzbl.behave.disable_scripts, NULL); -} - -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); -} - - -void -cmd_autoshrink_img() { - g_object_set (G_OBJECT(view_settings()), "auto-shrink-images", - uzbl.behave.autoshrink_img, NULL); -} - - -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); -} - -void -cmd_default_encoding() { - g_object_set (G_OBJECT(view_settings()), "default-encoding", - uzbl.behave.default_encoding, NULL); -} - -void -cmd_enforce_96dpi() { - g_object_set (G_OBJECT(view_settings()), "enforce-96-dpi", - uzbl.behave.enforce_96dpi, NULL); -} - -void -cmd_caret_browsing() { - g_object_set (G_OBJECT(view_settings()), "enable-caret-browsing", - uzbl.behave.caret_browsing, NULL); -} - -void -cmd_cookie_handler() { - gchar **split = g_strsplit(uzbl.behave.cookie_handler, " ", 2); - /* pitfall: doesn't handle chain actions; must the sync_ action manually */ - if ((g_strcmp0(split[0], "sh") == 0) || - (g_strcmp0(split[0], "spawn") == 0)) { - g_free (uzbl.behave.cookie_handler); - uzbl.behave.cookie_handler = - g_strdup_printf("sync_%s %s", split[0], split[1]); - } - g_strfreev (split); -} - -void -cmd_scheme_handler() { - gchar **split = g_strsplit(uzbl.behave.scheme_handler, " ", 2); - /* pitfall: doesn't handle chain actions; must the sync_ action manually */ - if ((g_strcmp0(split[0], "sh") == 0) || - (g_strcmp0(split[0], "spawn") == 0)) { - g_free (uzbl.behave.scheme_handler); - uzbl.behave.scheme_handler = - g_strdup_printf("sync_%s %s", split[0], split[1]); - } - g_strfreev (split); -} - -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); - } -} - -/* 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 move_statusbar() { @@ -2204,15 +1653,6 @@ update_title (void) { } } -gboolean -configure_event_cb(GtkWidget* window, GdkEventConfigure* event) { - (void) window; - (void) event; - - retrieve_geometry(); - send_event(GEOMETRY_CHANGED, uzbl.gui.geometry, NULL); - return FALSE; -} void key_to_event(guint keyval, gint mode) { @@ -2231,26 +1671,6 @@ key_to_event(guint keyval, gint mode) { } -gboolean -key_press_cb (GtkWidget* window, GdkEventKey* event) { - (void) window; - - if(event->type == GDK_KEY_PRESS) - key_to_event(event->keyval, GDK_KEY_PRESS); - - return uzbl.behave.forward_keys ? FALSE : TRUE; -} - -gboolean -key_release_cb (GtkWidget* window, GdkEventKey* event) { - (void) window; - - if(event->type == GDK_KEY_RELEASE) - key_to_event(event->keyval, GDK_KEY_RELEASE); - - return TRUE; -} - void create_browser () { GUI *g = &uzbl.gui; diff --git a/uzbl-core.h b/uzbl-core.h index d5fbcb7..5a32907 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -7,7 +7,6 @@ * * (c) 2009 by Robert Manea * - introduced struct concept - * - statusbar template * */ @@ -224,6 +223,9 @@ itos(int val); char * str_replace (const char* search, const char* replace, const char* string); +gchar* +strfree(gchar *str); + GArray* read_file_by_line (const gchar *path); @@ -248,51 +250,6 @@ set_var_value(const gchar *name, gchar *val); void print(WebKitWebView *page, GArray *argv, GString *result); -gboolean -navigation_decision_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data); - -gboolean -new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data); - -gboolean -mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data); - -/*@null@*/ WebKitWebView* -create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data); - -gboolean -download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data); - -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); - -void -title_change_cb (WebKitWebView* web_view, GParamSpec param_spec); - -void -progress_change_cb (WebKitWebView* page, gint progress, gpointer data); - -void -load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); - -void -load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); - -void -load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); - -void -selection_changed_cb(WebKitWebView *webkitwebview, gpointer ud); - -void -destroy_cb (GtkWidget* widget, gpointer data); - void commands_hash(void); @@ -465,8 +422,8 @@ update_gui(WebKitWebView *page, GArray *argv, GString *result); void event(WebKitWebView *page, GArray *argv, GString *result); -gboolean -configure_event_cb(GtkWidget* window, GdkEventConfigure* event); +void +key_to_event(guint keyval, gint mode); typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result); typedef struct { @@ -474,123 +431,4 @@ typedef struct { gboolean no_split; } CommandInfo; -/* Command callbacks */ -void -cmd_load_uri(); - -void -cmd_set_status(); - -void -set_proxy_url(); - -void -set_icon(); - -void -cmd_cookie_handler(); - -void -cmd_scheme_handler(); - -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_disable_plugins(); - -void -cmd_disable_scripts(); - -void -cmd_minimum_font_size(); - -void -cmd_fifo_dir(); - -void -cmd_socket_dir(); - -void -cmd_useragent() ; - -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 -cmd_enforce_96dpi(); - -void -cmd_inject_html(); - -void -cmd_caret_browsing(); - -void -cmd_set_geometry(); - -/* -void -cmd_view_source(); -*/ - -void -cmd_load_start(); - /* vi: set et ts=4: */ diff --git a/uzbl-events.c b/uzbl-events.c deleted file mode 100644 index b052b6b..0000000 --- a/uzbl-events.c +++ /dev/null @@ -1,145 +0,0 @@ -/* Uzbl event routines - * (c) 2009 by Robert Manea -*/ - -#include "uzbl-core.h" -#include "uzbl-events.h" - -UzblCore uzbl; - -/* Event id to name mapping - * Event names must be in the same - * order as in 'enum event_type' - * - * TODO: Add more useful events -*/ -const char *event_table[LAST_EVENT] = { - "LOAD_START" , - "LOAD_COMMIT" , - "LOAD_FINISH" , - "LOAD_ERROR" , - "KEY_PRESS" , - "KEY_RELEASE" , - "DOWNLOAD_REQUEST" , - "COMMAND_EXECUTED" , - "LINK_HOVER" , - "TITLE_CHANGED" , - "GEOMETRY_CHANGED" , - "WEBINSPECTOR" , - "NEW_WINDOW" , - "SELECTION_CHANGED", - "VARIABLE_SET" , - "FIFO_SET" , - "SOCKET_SET" , - "INSTANCE_START" , - "INSTANCE_EXIT" , - "LOAD_PROGRESS" , - "LINK_UNHOVER" -}; - -void -event_buffer_timeout(guint sec) { - struct itimerval t; - memset(&t, 0, sizeof t); - t.it_value.tv_sec = sec; - t.it_value.tv_usec = 0; - setitimer(ITIMER_REAL, &t, NULL); -} - - -void -send_event_socket(GString *msg) { - GError *error = NULL; - GString *tmp; - GIOStatus ret = 0; - gsize len; - guint i=0; - - if(uzbl.comm.socket_path && - uzbl.comm.clientchan && - uzbl.comm.clientchan->is_writeable) { - - if(uzbl.state.event_buffer) { - event_buffer_timeout(0); - - while(i < uzbl.state.event_buffer->len) { - tmp = g_ptr_array_index(uzbl.state.event_buffer, i++); - ret = g_io_channel_write_chars (uzbl.comm.clientchan, - tmp->str, tmp->len, - &len, &error); - /* is g_ptr_array_free(uzbl.state.event_buffer, TRUE) enough? */ - //g_string_free(tmp, TRUE); - if (ret == G_IO_STATUS_ERROR) { - g_warning ("Error sending event to socket: %s", error->message); - } - g_io_channel_flush(uzbl.comm.clientchan, &error); - } - g_ptr_array_free(uzbl.state.event_buffer, TRUE); - uzbl.state.event_buffer = NULL; - } - if(msg) { - while(!ret || - ret == G_IO_STATUS_AGAIN) { - ret = g_io_channel_write_chars (uzbl.comm.clientchan, - msg->str, msg->len, - &len, &error); - } - - if (ret == G_IO_STATUS_ERROR) { - g_warning ("Error sending event to socket: %s", error->message); - } - g_io_channel_flush(uzbl.comm.clientchan, &error); - } - } - /* buffer events until a socket is set and connected - * or a timeout is encountered - */ - else { - if(!uzbl.state.event_buffer) - uzbl.state.event_buffer = g_ptr_array_new(); - g_ptr_array_add(uzbl.state.event_buffer, (gpointer)g_string_new(msg->str)); - } -} - -void -send_event_stdout(GString *msg) { - printf("%s", msg->str); - fflush(stdout); -} - -/* - * build event string and send over the supported interfaces - * custom_event == NULL indicates an internal event -*/ -void -send_event(int type, const gchar *details, const gchar *custom_event) { - GString *event_message = g_string_new(""); - gchar *buf, *p_val = NULL; - - /* expand shell vars */ - if(details) { - buf = g_strdup(details); - p_val = parseenv(g_strdup(buf ? g_strchug(buf) : " ")); - g_free(buf); - } - - /* check for custom events */ - if(custom_event) { - g_string_printf(event_message, "EVENT [%s] %s %s\n", - uzbl.state.instance_name, custom_event, p_val); - } - /* check wether we support the internal event */ - else if(type < LAST_EVENT) { - g_string_printf(event_message, "EVENT [%s] %s %s\n", - uzbl.state.instance_name, event_table[type], p_val); - } - - if(event_message->str) { - /* TODO: a means to select the interface to which events are sent */ - send_event_stdout(event_message); - send_event_socket(event_message); - - g_string_free(event_message, TRUE); - } - g_free(p_val); -} diff --git a/uzbl-events.h b/uzbl-events.h deleted file mode 100644 index 782243d..0000000 --- a/uzbl-events.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Uzbl event routines - * (c) 2009 by Robert Manea -*/ - -/* Event system */ -enum event_type { - LOAD_START, LOAD_COMMIT, LOAD_FINISH, LOAD_ERROR, - KEY_PRESS, KEY_RELEASE, DOWNLOAD_REQ, COMMAND_EXECUTED, - LINK_HOVER, TITLE_CHANGED, GEOMETRY_CHANGED, - WEBINSPECTOR, NEW_WINDOW, SELECTION_CHANGED, - VARIABLE_SET, FIFO_SET, SOCKET_SET, - INSTANCE_START, INSTANCE_EXIT, LOAD_PROGRESS, - LINK_UNHOVER, - - /* must be last entry */ - LAST_EVENT -}; - -void -event_buffer_timeout(guint sec); - -void -send_event_socket(GString *msg); - -void -send_event_stdout(GString *msg); - -void -send_event(int type, const gchar *details, const gchar *custom_event); -- cgit v1.2.3 From 3d37212af16dee6c6dc8031f5b89c891d2271c4a Mon Sep 17 00:00:00 2001 From: Robert Manea Date: Mon, 5 Oct 2009 12:22:59 +0200 Subject: move webinspector code to a separate file --- Makefile | 5 +-- events.c | 18 ++++++++++ events.h | 3 ++ inspector.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ inspector.h | 7 ++++ uzbl-core.c | 114 +----------------------------------------------------------- uzbl-core.h | 3 -- 7 files changed, 135 insertions(+), 118 deletions(-) create mode 100644 inspector.c create mode 100644 inspector.h (limited to 'uzbl-core.h') diff --git a/Makefile b/Makefile index b6d573f..635253b 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ CFLAGS!=echo -std=c99 `pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthre LDFLAGS:=$(shell pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0) -pthread $(LDFLAGS) LDFLAGS!=echo `pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0` -pthread $(LDFLAGS) -SRC = uzbl-core.c events.c callbacks.c +SRC = uzbl-core.c events.c callbacks.c inspector.c OBJ = ${SRC:.c=.o} all: uzbl-browser options @@ -25,7 +25,7 @@ options: @${CC} -c ${CFLAGS} $< @echo ... done. -${OBJ}: uzbl-core.h events.h callbacks.h config.h +${OBJ}: uzbl-core.h events.h callbacks.h inspector.h config.h uzbl-core: ${OBJ} @echo @@ -69,6 +69,7 @@ clean: rm -f uzbl-core.o rm -f events.o rm -f callbacks.o + rm -f inspector.o cd ./tests/; $(MAKE) clean install: all diff --git a/events.c b/events.c index a55bba7..abd794b 100644 --- a/events.c +++ b/events.c @@ -144,3 +144,21 @@ send_event(int type, const gchar *details, const gchar *custom_event) { } g_free(p_val); } + +/* Transform gdk key events to our own events */ +void +key_to_event(guint keyval, gint mode) { + char byte[2]; + + /* check for Latin-1 characters (1:1 mapping) */ + if ((keyval > 0x0020 && keyval <= 0x007e) || + (keyval >= 0x00a0 && keyval <= 0x00ff)) { + sprintf(byte, "%c", keyval); + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, + byte, NULL); + } + else + send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, + gdk_keyval_name(keyval), NULL); + +} diff --git a/events.h b/events.h index 9a4382e..15e33e6 100644 --- a/events.h +++ b/events.h @@ -28,3 +28,6 @@ send_event_stdout(GString *msg); void send_event(int type, const gchar *details, const gchar *custom_event); + +void +key_to_event(guint keyval, gint mode); diff --git a/inspector.c b/inspector.c new file mode 100644 index 0000000..de3dbcd --- /dev/null +++ b/inspector.c @@ -0,0 +1,103 @@ +/* + ** WebInspector + ** (c) 2009 by Robert Manea +*/ + +#include "uzbl-core.h" +#include "events.h" +#include "callbacks.h" + + +void +hide_window_cb(GtkWidget *widget, gpointer data) { + (void) data; + + gtk_widget_hide(widget); +} + +WebKitWebView* +create_inspector_cb (WebKitWebInspector* web_inspector, WebKitWebView* page, gpointer data){ + (void) data; + (void) page; + (void) web_inspector; + GtkWidget* scrolled_window; + GtkWidget* new_web_view; + GUI *g = &uzbl.gui; + + g->inspector_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + g_signal_connect(G_OBJECT(g->inspector_window), "delete-event", + G_CALLBACK(hide_window_cb), NULL); + + gtk_window_set_title(GTK_WINDOW(g->inspector_window), "Uzbl WebInspector"); + gtk_window_set_default_size(GTK_WINDOW(g->inspector_window), 400, 300); + gtk_widget_show(g->inspector_window); + + scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add(GTK_CONTAINER(g->inspector_window), scrolled_window); + gtk_widget_show(scrolled_window); + + new_web_view = webkit_web_view_new(); + gtk_container_add(GTK_CONTAINER(scrolled_window), new_web_view); + + return WEBKIT_WEB_VIEW(new_web_view); +} + +gboolean +inspector_show_window_cb (WebKitWebInspector* inspector){ + (void) inspector; + gtk_widget_show(uzbl.gui.inspector_window); + + send_event(WEBINSPECTOR, "open", NULL); + return TRUE; +} + +/* TODO: Add variables and code to make use of these functions */ +gboolean +inspector_close_window_cb (WebKitWebInspector* inspector){ + (void) inspector; + send_event(WEBINSPECTOR, "close", NULL); + return TRUE; +} + +gboolean +inspector_attach_window_cb (WebKitWebInspector* inspector){ + (void) inspector; + return FALSE; +} + +gboolean +inspector_detach_window_cb (WebKitWebInspector* inspector){ + (void) inspector; + return FALSE; +} + +gboolean +inspector_uri_changed_cb (WebKitWebInspector* inspector){ + (void) inspector; + return FALSE; +} + +gboolean +inspector_inspector_destroyed_cb (WebKitWebInspector* inspector){ + (void) inspector; + return FALSE; +} + +void +set_up_inspector() { + GUI *g = &uzbl.gui; + WebKitWebSettings *settings = view_settings(); + g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL); + + uzbl.gui.inspector = webkit_web_view_get_inspector(uzbl.gui.web_view); + g_signal_connect (G_OBJECT (g->inspector), "inspect-web-view", G_CALLBACK (create_inspector_cb), NULL); + g_signal_connect (G_OBJECT (g->inspector), "show-window", G_CALLBACK (inspector_show_window_cb), NULL); + g_signal_connect (G_OBJECT (g->inspector), "close-window", G_CALLBACK (inspector_close_window_cb), NULL); + g_signal_connect (G_OBJECT (g->inspector), "attach-window", G_CALLBACK (inspector_attach_window_cb), NULL); + g_signal_connect (G_OBJECT (g->inspector), "detach-window", G_CALLBACK (inspector_detach_window_cb), NULL); + g_signal_connect (G_OBJECT (g->inspector), "finished", G_CALLBACK (inspector_inspector_destroyed_cb), NULL); + + g_signal_connect (G_OBJECT (g->inspector), "notify::inspected-uri", G_CALLBACK (inspector_uri_changed_cb), NULL); +} diff --git a/inspector.h b/inspector.h new file mode 100644 index 0000000..57d0ca9 --- /dev/null +++ b/inspector.h @@ -0,0 +1,7 @@ +/* + ** WebInspector + ** (c) 2009 by Robert Manea +*/ + +void +set_up_inspector(); diff --git a/uzbl-core.c b/uzbl-core.c index 3b999e1..3b0b7b4 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -32,6 +32,7 @@ #include "uzbl-core.h" #include "callbacks.h" #include "events.h" +#include "inspector.h" #include "config.h" UzblCore uzbl; @@ -1653,24 +1654,6 @@ update_title (void) { } } - -void -key_to_event(guint keyval, gint mode) { - char byte[2]; - - /* check for Latin-1 characters (1:1 mapping) */ - if ((keyval > 0x0020 && keyval <= 0x007e) || - (keyval >= 0x00a0 && keyval <= 0x00ff)) { - sprintf(byte, "%c", keyval); - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, - byte, NULL); - } - else - send_event(mode == GDK_KEY_PRESS ? KEY_PRESS : KEY_RELEASE, - gdk_keyval_name(keyval), NULL); - -} - void create_browser () { GUI *g = &uzbl.gui; @@ -1974,101 +1957,6 @@ save_cookies (SoupMessage *msg, gpointer user_data){ g_slist_free(ck); } -/* --- WEBINSPECTOR --- */ -void -hide_window_cb(GtkWidget *widget, gpointer data) { - (void) data; - - gtk_widget_hide(widget); -} - -WebKitWebView* -create_inspector_cb (WebKitWebInspector* web_inspector, WebKitWebView* page, gpointer data){ - (void) data; - (void) page; - (void) web_inspector; - GtkWidget* scrolled_window; - GtkWidget* new_web_view; - GUI *g = &uzbl.gui; - - g->inspector_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - g_signal_connect(G_OBJECT(g->inspector_window), "delete-event", - G_CALLBACK(hide_window_cb), NULL); - - gtk_window_set_title(GTK_WINDOW(g->inspector_window), "Uzbl WebInspector"); - gtk_window_set_default_size(GTK_WINDOW(g->inspector_window), 400, 300); - gtk_widget_show(g->inspector_window); - - scrolled_window = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_container_add(GTK_CONTAINER(g->inspector_window), scrolled_window); - gtk_widget_show(scrolled_window); - - new_web_view = webkit_web_view_new(); - gtk_container_add(GTK_CONTAINER(scrolled_window), new_web_view); - - return WEBKIT_WEB_VIEW(new_web_view); -} - -gboolean -inspector_show_window_cb (WebKitWebInspector* inspector){ - (void) inspector; - gtk_widget_show(uzbl.gui.inspector_window); - - send_event(WEBINSPECTOR, "open", NULL); - return TRUE; -} - -/* TODO: Add variables and code to make use of these functions */ -gboolean -inspector_close_window_cb (WebKitWebInspector* inspector){ - (void) inspector; - send_event(WEBINSPECTOR, "close", NULL); - return TRUE; -} - -gboolean -inspector_attach_window_cb (WebKitWebInspector* inspector){ - (void) inspector; - return FALSE; -} - -gboolean -inspector_detach_window_cb (WebKitWebInspector* inspector){ - (void) inspector; - return FALSE; -} - -gboolean -inspector_uri_changed_cb (WebKitWebInspector* inspector){ - (void) inspector; - return FALSE; -} - -gboolean -inspector_inspector_destroyed_cb (WebKitWebInspector* inspector){ - (void) inspector; - return FALSE; -} - -void -set_up_inspector() { - GUI *g = &uzbl.gui; - WebKitWebSettings *settings = view_settings(); - g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL); - - uzbl.gui.inspector = webkit_web_view_get_inspector(uzbl.gui.web_view); - g_signal_connect (G_OBJECT (g->inspector), "inspect-web-view", G_CALLBACK (create_inspector_cb), NULL); - g_signal_connect (G_OBJECT (g->inspector), "show-window", G_CALLBACK (inspector_show_window_cb), NULL); - g_signal_connect (G_OBJECT (g->inspector), "close-window", G_CALLBACK (inspector_close_window_cb), NULL); - g_signal_connect (G_OBJECT (g->inspector), "attach-window", G_CALLBACK (inspector_attach_window_cb), NULL); - g_signal_connect (G_OBJECT (g->inspector), "detach-window", G_CALLBACK (inspector_detach_window_cb), NULL); - g_signal_connect (G_OBJECT (g->inspector), "finished", G_CALLBACK (inspector_inspector_destroyed_cb), NULL); - - g_signal_connect (G_OBJECT (g->inspector), "notify::inspected-uri", G_CALLBACK (inspector_uri_changed_cb), NULL); -} - void dump_var_hash(gpointer k, gpointer v, gpointer ud) { (void) ud; diff --git a/uzbl-core.h b/uzbl-core.h index 5a32907..f0b60ab 100644 --- a/uzbl-core.h +++ b/uzbl-core.h @@ -422,9 +422,6 @@ update_gui(WebKitWebView *page, GArray *argv, GString *result); void event(WebKitWebView *page, GArray *argv, GString *result); -void -key_to_event(guint keyval, gint mode); - typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result); typedef struct { Command function; -- cgit v1.2.3