Merge commit 'rob/master' into experimental
[uzbl-00z.git] / uzbl.h
blobea990038ce8197f7b035e665d72ba12abea3ae0d
1 /*
2 * See LICENSE for license details
4 * Changelog:
5 * ---------
7 * (c) 2009 by Robert Manea
8 * - introduced struct concept
9 * - statusbar template
13 #define STATUS_DEFAULT "<span background=\"darkblue\" foreground=\"white\"> MODE </span> <span background=\"red\" foreground=\"white\">KEYCMD</span> (LOAD_PROGRESS%) <b>TITLE</b> - Uzbl browser"
15 /* statusbar symbols */
16 enum { SYM_TITLE, SYM_URI, SYM_NAME,
17 SYM_LOADPRGS, SYM_LOADPRGSBAR,
18 SYM_KEYCMD, SYM_MODE};
19 const struct {
20 gchar *symbol_name;
21 guint symbol_token;
22 } symbols[] = {
23 {"NAME", SYM_NAME},
24 {"URI", SYM_URI},
25 {"TITLE", SYM_TITLE},
26 {"KEYCMD", SYM_KEYCMD},
27 {"MODE", SYM_MODE},
28 {"LOAD_PROGRESS", SYM_LOADPRGS},
29 {"LOAD_PROGRESSBAR", SYM_LOADPRGSBAR},
30 {NULL, 0}
31 }, *symp = symbols;
33 /* status bar elements */
34 typedef struct {
35 gint load_progress;
36 } StatusBar;
39 /* gui elements */
40 typedef struct {
41 GtkWidget* main_window;
42 GtkWidget* mainbar;
43 GtkWidget* mainbar_label;
44 GtkScrollbar* scbar_v; // Horizontal and Vertical Scrollbar
45 GtkScrollbar* scbar_h; // (These are still hidden)
46 GtkAdjustment* bar_v; // Information about document length
47 GtkAdjustment* bar_h; // and scrolling position
48 WebKitWebView* web_view;
49 gchar* main_title;
51 StatusBar sbar;
52 } GUI;
55 /* external communication*/
56 enum { FIFO, SOCKET};
57 typedef struct {
58 char fifo_path[64];
59 char socket_path[108];
60 } Communication;
63 /* internal state */
64 typedef struct {
65 gchar *uri;
66 gchar *config_file;
67 gchar *instance_name;
68 gchar config_file_path[500];
69 gchar selected_url[500];
70 char executable_path[500];
71 GString* keycmd;
72 gchar searchtx[500];
73 struct utsname unameinfo; /* system info */
74 } State;
77 /* networking */
78 typedef struct {
79 SoupSession *soup_session;
80 SoupLogger *soup_logger;
81 char *proxy_url;
82 char *useragent;
83 gint max_conns;
84 gint max_conns_host;
85 } Network;
88 /* behaviour */
89 typedef struct {
90 gchar *status_format;
91 gchar* history_handler;
92 gchar* fifo_dir;
93 gchar* socket_dir;
94 gchar* download_handler;
95 gchar* cookie_handler;
96 gboolean always_insert_mode;
97 gboolean show_status;
98 gboolean insert_mode;
99 gboolean status_top;
100 gchar* modkey;
101 guint modmask;
102 guint http_debug;
104 /* command list: name -> Command */
105 GHashTable* commands;
106 } Behaviour;
109 /* main uzbl data structure */
110 typedef struct {
111 GUI gui;
112 State state;
113 Network net;
114 Behaviour behave;
115 Communication comm;
117 Window xwin;
118 GScanner *scan;
120 /* group bindings: key -> action */
121 GHashTable* bindings;
122 } Uzbl;
125 typedef struct {
126 char* name;
127 char* param;
128 } Action;
130 typedef void sigfunc(int);
132 /* Functions */
133 static void
134 setup_scanner();
136 char *
137 itos(int val);
139 static void
140 clean_up(void);
142 static void
143 catch_sigterm(int s);
145 static sigfunc *
146 setup_signal(int signe, sigfunc *shandler);
148 static gboolean
149 new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data);
151 WebKitWebView*
152 create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data);
154 static gboolean
155 download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data);
157 static void
158 toggle_status_cb (WebKitWebView* page, const char *param);
160 static void
161 link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data);
163 static void
164 title_change_cb (WebKitWebView* web_view, WebKitWebFrame* web_frame, const gchar* title, gpointer data);
166 static void
167 progress_change_cb (WebKitWebView* page, gint progress, gpointer data);
169 static void
170 load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data);
172 static void
173 destroy_cb (GtkWidget* widget, gpointer data);
175 static void
176 log_history_cb ();
178 static void
179 commands_hash(void);
181 void
182 free_action(gpointer act);
184 Action*
185 new_action(const gchar *name, const gchar *param);
187 static bool
188 file_exists (const char * filename);
190 void
191 set_insert_mode(WebKitWebView *page, const gchar *param);
193 static void
194 load_uri (WebKitWebView * web_view, const gchar *param);
196 static void
197 new_window_load_uri (const gchar * uri);
199 static void
200 close_uzbl (WebKitWebView *page, const char *param);
202 static gboolean
203 run_command_async(const char *command, const char *args);
205 static gboolean
206 run_command_sync(const char *command, const char *args, char **stdout);
208 static void
209 spawn(WebKitWebView *web_view, const char *param);
211 static void
212 parse_command(const char *cmd, const char *param);
214 static void
215 parse_line(char *line);
217 void
218 build_stream_name(int type);
220 static void
221 control_fifo(GIOChannel *gio, GIOCondition condition);
223 static void
224 create_fifo();
226 static void
227 create_socket();
229 static void
230 control_socket(GIOChannel *chan);
233 static void
234 update_title (void);
236 static gboolean
237 key_press_cb (WebKitWebView* page, GdkEventKey* event);
239 static GtkWidget*
240 create_browser ();
242 static GtkWidget*
243 create_mainbar ();
245 static
246 GtkWidget* create_window ();
248 static void
249 add_binding (const gchar *key, const gchar *act);
251 static void
252 settings_init ();
254 static void
255 search_text (WebKitWebView *page, const char *param);
257 static void
258 run_js (WebKitWebView * web_view, const gchar *param);
260 static char *
261 str_replace (const char* search, const char* replace, const char* string);
263 static void handle_cookies (SoupSession *session,
264 SoupMessage *msg,
265 gpointer user_data);
266 static void
267 save_cookies (SoupMessage *msg,
268 gpointer user_data);
269 /* vi: set et ts=4: */