Revert "Fix warnings caused by casts between ints and pointers on 64bit"
[uzbl-mobile] / uzbl.h
1 /* 
2  * See LICENSE for license details
3  *
4  * Changelog:
5  * ---------
6  *
7  * (c) 2009 by Robert Manea
8  *     - introduced struct concept
9  *     - statusbar template
10  *     
11  */
12
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"
14
15 enum {
16   /* statusbar symbols */
17   SYM_TITLE, SYM_URI, SYM_NAME, 
18   SYM_LOADPRGS, SYM_LOADPRGSBAR,
19   SYM_KEYCMD, SYM_MODE, SYM_MSG,
20   /* useragent symbols */
21   SYM_WK_MAJ, SYM_WK_MIN, SYM_WK_MIC,
22   SYM_SYSNAME, SYM_NODENAME,
23   SYM_KERNREL, SYM_KERNVER,
24   SYM_ARCHSYS, SYM_ARCHUZBL,
25   SYM_DOMAINNAME, SYM_COMMIT
26 };
27
28 const struct {
29     gchar *symbol_name;
30     guint symbol_token;
31 } symbols[] = {
32     {"NAME",                 SYM_NAME},
33     {"URI",                  SYM_URI},
34     {"TITLE",                SYM_TITLE},
35     {"KEYCMD",               SYM_KEYCMD},
36     {"MODE",                 SYM_MODE},
37     {"MSG",                  SYM_MSG},
38     {"LOAD_PROGRESS",        SYM_LOADPRGS},
39     {"LOAD_PROGRESSBAR",     SYM_LOADPRGSBAR},
40
41     {"WEBKIT_MAJOR",         SYM_WK_MAJ},
42     {"WEBKIT_MINOR",         SYM_WK_MIN},
43     {"WEBKIT_MICRO",         SYM_WK_MIC},
44     {"SYSNAME",              SYM_SYSNAME},
45     {"NODENAME",             SYM_NODENAME},
46     {"KERNREL",              SYM_KERNREL},
47     {"KERNVER",              SYM_KERNVER},
48     {"ARCH_SYSTEM",          SYM_ARCHSYS},
49     {"ARCH_UZBL",            SYM_ARCHUZBL},
50     {"DOMAINNAME",           SYM_DOMAINNAME},
51     {"COMMIT",               SYM_COMMIT},
52     {NULL,                   0}
53 }, *symp = symbols;
54
55 /* status bar elements */
56 typedef struct {
57     gint           load_progress;
58     gchar          *msg;
59 } StatusBar;
60
61
62 /* gui elements */
63 typedef struct {
64     GtkWidget*     main_window;
65     GtkWidget*     scrolled_win;
66     GtkWidget*     vbox;
67     GtkWidget*     mainbar;
68     GtkWidget*     mainbar_label;
69     GtkScrollbar*  scbar_v;   // Horizontal and Vertical Scrollbar
70     GtkScrollbar*  scbar_h;   // (These are still hidden)
71     GtkAdjustment* bar_v; // Information about document length
72     GtkAdjustment* bar_h; // and scrolling position
73     WebKitWebView* web_view;
74     gchar*         main_title;
75
76     StatusBar sbar;
77 } GUI;
78
79
80 /* external communication*/
81 enum { FIFO, SOCKET};
82 typedef struct {
83     gchar          *fifo_path;
84     gchar          *socket_path;
85     /* stores (key)"variable name" -> (value)"pointer to this var*/
86     GHashTable     *proto_var;
87     /* command parsing regexes */
88     GRegex         *set_regex;
89     GRegex         *cmd_regex;
90     GRegex         *get_regex; 
91     GRegex         *bind_regex; 
92 } Communication;
93
94
95 /* internal state */
96 typedef struct {
97     gchar    *uri;
98     gchar    *config_file;
99     char    *instance_name;
100     gchar    config_file_path[500];
101     gchar    selected_url[500];
102     char     executable_path[500];
103     GString* keycmd;
104     gchar    searchtx[500];
105     struct utsname unameinfo; /* system info */
106 } State;
107
108
109 /* networking */
110 typedef struct {
111     SoupSession *soup_session;
112     SoupLogger *soup_logger;
113     char *proxy_url;
114     char *useragent;
115     gint max_conns;
116     gint max_conns_host;
117 } Network;
118
119
120 /* behaviour */
121 typedef struct {
122     gchar*   load_finish_handler;
123     gchar*   status_format;
124     gchar*   status_background;
125     gchar*   history_handler;
126     gchar*   fifo_dir;
127     gchar*   socket_dir;
128     gchar*   download_handler;
129     gchar*   cookie_handler;
130     gboolean always_insert_mode;
131     gboolean show_status;
132     gboolean insert_mode;
133     gboolean status_top;
134     gboolean reset_command_mode;
135     gchar*   modkey;
136     guint    modmask;
137     guint    http_debug;
138
139     /* command list: name -> Command  */
140     GHashTable* commands;
141 } Behaviour;
142
143
144 /* main uzbl data structure */
145 typedef struct {
146     GUI           gui;
147     State         state;
148     Network       net;
149     Behaviour     behave;
150     Communication comm;
151
152     Window        xwin;
153     GScanner      *scan;
154
155     /* group bindings: key -> action */
156     GHashTable* bindings;
157 } Uzbl;
158
159
160 typedef struct {
161     char* name;
162     char* param;
163 } Action;
164
165 typedef void sigfunc(int);
166
167 /* Functions */
168 static void
169 setup_scanner();
170
171 char *
172 itos(int val);
173
174 static void
175 clean_up(void);
176
177 static void
178 catch_sigterm(int s);
179
180 static sigfunc *
181 setup_signal(int signe, sigfunc *shandler);
182
183 static gboolean
184 new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data);
185
186 WebKitWebView*
187 create_web_view_cb (WebKitWebView  *web_view, WebKitWebFrame *frame, gpointer user_data);
188
189 static gboolean
190 download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data);
191
192 static void
193 toggle_status_cb (WebKitWebView* page, const char *param);
194
195 static void
196 link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data);
197
198 static void
199 title_change_cb (WebKitWebView* web_view, WebKitWebFrame* web_frame, const gchar* title, gpointer data);
200
201 static void
202 progress_change_cb (WebKitWebView* page, gint progress, gpointer data);
203
204 static void
205 load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data);
206
207 static void
208 load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data);
209
210 static void
211 destroy_cb (GtkWidget* widget, gpointer data);
212
213 static void
214 log_history_cb ();
215
216 static void
217 commands_hash(void);
218
219 void
220 free_action(gpointer act);
221
222 Action*
223 new_action(const gchar *name, const gchar *param);
224
225 static bool
226 file_exists (const char * filename);
227
228 void
229 set_insert_mode(WebKitWebView *page, const gchar *param);
230
231 static void
232 load_uri (WebKitWebView * web_view, const gchar *param);
233
234 static void
235 new_window_load_uri (const gchar * uri);
236
237 static void
238 close_uzbl (WebKitWebView *page, const char *param);
239
240 static gboolean
241 run_command_async(const char *command, const char *args);
242
243 static gboolean
244 run_command_sync(const char *command, const char *args, char **stdout);
245
246 static void
247 spawn(WebKitWebView *web_view, const char *param);
248
249 static void
250 parse_command(const char *cmd, const char *param);
251
252 static void
253 runcmd(WebKitWebView *page, const char *param);
254
255 static void
256 parse_cmd_line(const char *ctl_line);
257
258 static gchar*
259 build_stream_name(int type, const gchar *dir);
260
261 static gboolean
262 var_is(const char *x, const char *y);
263
264 static gchar*
265 set_useragent(gchar *val);
266
267 static gboolean
268 control_fifo(GIOChannel *gio, GIOCondition condition);
269
270 static gchar*
271 init_fifo(gchar *dir);
272
273 static gboolean
274 control_stdin(GIOChannel *gio, GIOCondition condition);
275
276 static void
277 create_stdin();
278
279 static gchar*
280 init_socket(gchar *dir);
281
282 static void
283 control_socket(GIOChannel *chan);
284
285 static void
286 update_title (void);
287  
288 static gboolean
289 key_press_cb (WebKitWebView* page, GdkEventKey* event);
290
291 static GtkWidget*
292 create_browser ();
293
294 static GtkWidget*
295 create_mainbar ();
296
297 static
298 GtkWidget* create_window ();
299
300 static void
301 add_binding (const gchar *key, const gchar *act);
302
303 static void
304 settings_init ();
305
306 static void
307 search_text (WebKitWebView *page, const char *param);
308
309 static void
310 run_js (WebKitWebView * web_view, const gchar *param);
311
312 static void handle_cookies (SoupSession *session,
313                                                         SoupMessage *msg,
314                                                         gpointer     user_data);
315 static void
316 save_cookies (SoupMessage *msg,
317                           gpointer     user_data);
318 /* vi: set et ts=4: */