aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/uzbl-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/uzbl-core.c')
-rw-r--r--src/uzbl-core.c209
1 files changed, 95 insertions, 114 deletions
diff --git a/src/uzbl-core.c b/src/uzbl-core.c
index e498762..693f3ce 100644
--- a/src/uzbl-core.c
+++ b/src/uzbl-core.c
@@ -47,12 +47,15 @@ GOptionEntry entries[] = {
"Uri to load at startup (equivalent to 'uzbl <uri>' or 'set uri = URI' after uzbl has launched)", "URI" },
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &uzbl.state.verbose,
"Whether to print all messages or just errors.", NULL },
- { "name", 'n', 0, G_OPTION_ARG_STRING, &uzbl.state.instance_name,
+ { "named", 'n', 0, G_OPTION_ARG_STRING, &uzbl.state.instance_name,
"Name of the current instance (defaults to Xorg window id or random for GtkSocket mode)", "NAME" },
{ "config", 'c', 0, G_OPTION_ARG_STRING, &uzbl.state.config_file,
"Path to config file or '-' for stdin", "FILE" },
+ /* TODO: explain the difference between these two options */
{ "socket", 's', 0, G_OPTION_ARG_INT, &uzbl.state.socket_id,
- "Xembed Socket ID", "SOCKET" },
+ "Xembed socket ID, this window should embed itself", "SOCKET" },
+ { "embed", 'e', 0, G_OPTION_ARG_NONE, &uzbl.state.embed,
+ "Whether this window should expect to be embedded", NULL },
{ "connect-socket", 0, 0, G_OPTION_ARG_STRING_ARRAY, &uzbl.state.connect_socket_names,
"Connect to server socket for event managing", "CSOCKET" },
{ "print-events", 'p', 0, G_OPTION_ARG_NONE, &uzbl.state.events_stdout,
@@ -134,7 +137,10 @@ const struct var_name_to_ptr_t {
{ "current_encoding", PTR_V_STR(uzbl.behave.current_encoding, 1, set_current_encoding)},
{ "enforce_96_dpi", PTR_V_INT(uzbl.behave.enforce_96dpi, 1, cmd_enforce_96dpi)},
{ "caret_browsing", PTR_V_INT(uzbl.behave.caret_browsing, 1, cmd_caret_browsing)},
+
+#if !GTK_CHECK_VERSION(3,0,0)
{ "scrollbars_visible", PTR_V_INT(uzbl.gui.scrollbars_visible, 1, cmd_scrollbars_visibility)},
+#endif
/* constants (not dumpable or writeable) */
{ "WEBKIT_MAJOR", PTR_C_INT(uzbl.info.webkit_major, NULL)},
@@ -464,30 +470,25 @@ scroll_cmd(WebKitWebView* page, GArray *argv, GString *result) {
(void) page; (void) result;
gchar *direction = g_array_index(argv, gchar*, 0);
gchar *argv1 = g_array_index(argv, gchar*, 1);
+ GtkAdjustment *bar = NULL;
if (g_strcmp0(direction, "horizontal") == 0)
- {
- if (g_strcmp0(argv1, "begin") == 0)
- gtk_adjustment_set_value(uzbl.gui.bar_h, gtk_adjustment_get_lower(uzbl.gui.bar_h));
- else if (g_strcmp0(argv1, "end") == 0)
- gtk_adjustment_set_value (uzbl.gui.bar_h, gtk_adjustment_get_upper(uzbl.gui.bar_h) -
- gtk_adjustment_get_page_size(uzbl.gui.bar_h));
- else
- scroll(uzbl.gui.bar_h, argv1);
- }
+ bar = uzbl.gui.bar_h;
else if (g_strcmp0(direction, "vertical") == 0)
- {
- if (g_strcmp0(argv1, "begin") == 0)
- gtk_adjustment_set_value(uzbl.gui.bar_v, gtk_adjustment_get_lower(uzbl.gui.bar_v));
- else if (g_strcmp0(argv1, "end") == 0)
- gtk_adjustment_set_value (uzbl.gui.bar_v, gtk_adjustment_get_upper(uzbl.gui.bar_v) -
- gtk_adjustment_get_page_size(uzbl.gui.bar_v));
- else
- scroll(uzbl.gui.bar_v, argv1);
+ bar = uzbl.gui.bar_v;
+ else {
+ if(uzbl.state.verbose)
+ puts("Unrecognized scroll format");
+ return;
}
+
+ if (g_strcmp0(argv1, "begin") == 0)
+ gtk_adjustment_set_value(bar, gtk_adjustment_get_lower(bar));
+ else if (g_strcmp0(argv1, "end") == 0)
+ gtk_adjustment_set_value (bar, gtk_adjustment_get_upper(bar) -
+ gtk_adjustment_get_page_size(bar));
else
- if(uzbl.state.verbose)
- puts("Unrecognized scroll format");
+ scroll(bar, argv1);
}
@@ -552,7 +553,8 @@ CommandInfo cmdlist[] =
{ "show_inspector", show_inspector, 0 },
{ "add_cookie", add_cookie, 0 },
{ "delete_cookie", delete_cookie, 0 },
- { "clear_cookies", clear_cookies, 0 }
+ { "clear_cookies", clear_cookies, 0 },
+ { "download", download, 0 }
};
void
@@ -741,6 +743,28 @@ clear_cookies(WebKitWebView *page, GArray *argv, GString *result) {
}
void
+download(WebKitWebView *web_view, GArray *argv, GString *result) {
+ (void) result;
+
+ const gchar *uri = argv_idx(argv, 0);
+ const gchar *destination = NULL;
+ if(argv->len > 1)
+ destination = argv_idx(argv, 1);
+
+ WebKitNetworkRequest *req = webkit_network_request_new(uri);
+ WebKitDownload *download = webkit_download_new(req);
+
+ download_cb(web_view, download, (gpointer)destination);
+
+ if(webkit_download_get_destination_uri(download))
+ webkit_download_start(download);
+ else
+ g_object_unref(download);
+
+ g_object_unref(req);
+}
+
+void
act_dump_config() {
dump_config();
}
@@ -759,7 +783,7 @@ load_uri(WebKitWebView *web_view, GArray *argv, GString *result) {
/* Javascript*/
void
-eval_js(WebKitWebView * web_view, gchar *script, GString *result, const char *file) {
+eval_js(WebKitWebView * web_view, const gchar *script, GString *result, const char *file) {
WebKitWebFrame *frame;
JSGlobalContextRef context;
JSObjectRef globalobject;
@@ -1233,8 +1257,7 @@ parse_command(const char *cmd, const char *params, GString *result) {
void
move_statusbar() {
- if (!uzbl.gui.scrolled_win &&
- !uzbl.gui.mainbar)
+ if (!uzbl.gui.scrolled_win && !uzbl.gui.mainbar)
return;
g_object_ref(uzbl.gui.scrolled_win);
@@ -1419,12 +1442,13 @@ create_scrolled_win() {
g->web_view = WEBKIT_WEB_VIEW(webkit_web_view_new());
g->scrolled_win = gtk_scrolled_window_new(NULL, NULL);
+ WebKitWebFrame *wf = webkit_web_view_get_main_frame (g->web_view);
- gtk_scrolled_window_set_policy(
- GTK_SCROLLED_WINDOW(g->scrolled_win),
- GTK_POLICY_NEVER,
- GTK_POLICY_NEVER
- );
+#if !GTK_CHECK_VERSION(3,0,0)
+ /* hide the scrollbars by default */
+ uzbl.gui.scrollbars_visible = 0;
+ cmd_scrollbars_visibility();
+#endif
gtk_container_add(
GTK_CONTAINER(g->scrolled_win),
@@ -1453,6 +1477,11 @@ create_scrolled_win() {
"signal::populate-popup", (GCallback)populate_popup_cb, NULL,
"signal::focus-in-event", (GCallback)focus_cb, NULL,
"signal::focus-out-event", (GCallback)focus_cb, NULL,
+ "signal::window-object-cleared", (GCallback)window_object_cleared_cb,NULL,
+ NULL);
+
+ g_object_connect (G_OBJECT (wf),
+ "signal::scrollbars-policy-changed", (GCallback)scrollbars_policy_cb, NULL,
NULL);
}
@@ -1463,28 +1492,39 @@ create_mainbar() {
g->mainbar = gtk_hbox_new (FALSE, 0);
- /* Left panel */
+ /* create left panel */
g->mainbar_label_left = gtk_label_new ("");
gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_left), TRUE);
gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_left), 0, 0);
gtk_misc_set_padding (GTK_MISC(g->mainbar_label_left), 2, 2);
- gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_left, FALSE, FALSE, 0);
-
- /* Right panel */
+ /* create right panel */
g->mainbar_label_right = gtk_label_new ("");
gtk_label_set_selectable(GTK_LABEL(g->mainbar_label_right), TRUE);
gtk_misc_set_alignment (GTK_MISC(g->mainbar_label_right), 1, 0);
gtk_misc_set_padding (GTK_MISC(g->mainbar_label_right), 2, 2);
gtk_label_set_ellipsize(GTK_LABEL(g->mainbar_label_right), PANGO_ELLIPSIZE_START);
- gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_right, TRUE, TRUE, 0);
+ /* add the labels to the mainbar */
+ gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_left, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label_right, TRUE, TRUE, 0);
+ /* set up signal handlers */
g_object_connect((GObject*)g->mainbar,
"signal::key-press-event", (GCallback)key_press_cb, NULL,
"signal::key-release-event", (GCallback)key_release_cb, NULL,
NULL);
+ g_object_connect((GObject*)g->mainbar_label_left,
+ "signal::key-press-event", (GCallback)key_press_cb, NULL,
+ "signal::key-release-event", (GCallback)key_release_cb, NULL,
+ NULL);
+
+ g_object_connect((GObject*)g->mainbar_label_right,
+ "signal::key-press-event", (GCallback)key_press_cb, NULL,
+ "signal::key-release-event", (GCallback)key_release_cb, NULL,
+ NULL);
+
return g->mainbar;
}
@@ -1498,15 +1538,14 @@ create_window() {
gtk_window_set_title(GTK_WINDOW(window), "Uzbl browser");
#if GTK_CHECK_VERSION(3,0,0)
- gtk_window_set_has_resize_grip (window, FALSE);
+ gtk_window_set_has_resize_grip (GTK_WINDOW (window), FALSE);
#endif
- /* if the window has been made small, it shouldn't try to resize itself due
- * to a long statusbar. */
- GdkGeometry hints;
- hints.min_height = -1;
- hints.min_width = 1;
- gtk_window_set_geometry_hints (GTK_WINDOW (window), window, &hints, GDK_HINT_MIN_SIZE);
+ /* the window should never make itself bigger. */
+ GdkGeometry hints = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ hints.min_height = 1;
+ hints.min_width = 1;
+ gtk_window_set_geometry_hints (GTK_WINDOW (window), NULL, &hints, GDK_HINT_MIN_SIZE);
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL);
g_signal_connect (G_OBJECT (window), "configure-event", G_CALLBACK (configure_event_cb), NULL);
@@ -1517,6 +1556,7 @@ create_window() {
GtkPlug*
create_plug() {
+ if(uzbl.state.embed) uzbl.state.socket_id = 0;
GtkPlug* plug = GTK_PLUG (gtk_plug_new (uzbl.state.socket_id));
g_signal_connect (G_OBJECT (plug), "destroy", G_CALLBACK (destroy_cb), NULL);
g_signal_connect (G_OBJECT (plug), "key-press-event", G_CALLBACK (key_press_cb), NULL);
@@ -1667,28 +1707,6 @@ retrieve_geometry() {
uzbl.gui.geometry = g_string_free(buf, FALSE);
}
-void
-set_webview_scroll_adjustments() {
-#if GTK_CHECK_VERSION(2,91,0)
- gtk_scrollable_set_hadjustment (GTK_SCROLLABLE(uzbl.gui.web_view), uzbl.gui.bar_h);
- gtk_scrollable_set_vadjustment (GTK_SCROLLABLE(uzbl.gui.web_view), uzbl.gui.bar_v);
-#else
- gtk_widget_set_scroll_adjustments (GTK_WIDGET (uzbl.gui.web_view),
- uzbl.gui.bar_h, uzbl.gui.bar_v);
-#endif
-
- g_object_connect((GObject*)uzbl.gui.bar_v,
- "signal::value-changed", (GCallback)scroll_vert_cb, NULL,
- "signal::changed", (GCallback)scroll_vert_cb, NULL,
- NULL);
-
- g_object_connect((GObject*)uzbl.gui.bar_h,
- "signal::value-changed", (GCallback)scroll_horiz_cb, NULL,
- "signal::changed", (GCallback)scroll_horiz_cb, NULL,
- NULL);
-}
-
-
/* Set up gtk, gobject, variable defaults and other things that tests and other
* external applications need to do anyhow */
void
@@ -1723,7 +1741,7 @@ initialize(int argc, char** argv) {
}
/* Embedded mode */
- if (uzbl.state.socket_id)
+ if (uzbl.state.socket_id || uzbl.state.embed)
uzbl.state.plug_mode = TRUE;
if (!g_thread_supported())
@@ -1758,49 +1776,6 @@ initialize(int argc, char** argv) {
}
-void
-load_uri_imp(gchar *uri) {
- GString* newuri;
- SoupURI* soup_uri;
-
- /* Strip leading whitespaces */
- while (*uri) {
- if (!isspace(*uri)) break;
- uri++;
- }
-
- if (g_strstr_len (uri, 11, "javascript:") != NULL) {
- eval_js(uzbl.gui.web_view, uri, NULL, "javascript:");
- return;
- }
-
- newuri = g_string_new (uri);
- soup_uri = soup_uri_new(uri);
-
- if (!soup_uri) {
- gchar* fullpath;
- if (g_path_is_absolute (newuri->str))
- fullpath = newuri->str;
- else {
- gchar* wd = g_get_current_dir ();
- fullpath = g_build_filename (wd, newuri->str, NULL);
- g_free(wd);
- }
- struct stat stat_result;
- if (! g_stat(fullpath, &stat_result))
- g_string_printf (newuri, "file://%s", fullpath);
- else
- g_string_prepend (newuri, "http://");
- } else {
- soup_uri_free(soup_uri);
- }
-
- /* if we do handle cookies, ask our handler for them */
- webkit_web_view_load_uri (uzbl.gui.web_view, newuri->str);
- g_string_free (newuri, TRUE);
-}
-
-
#ifndef UZBL_LIBRARY
/** -- MAIN -- **/
int
@@ -1834,12 +1809,18 @@ main (int argc, char* argv[]) {
}
/* Scrolling */
- uzbl.gui.scbar_v = (GtkScrollbar*) gtk_vscrollbar_new (NULL);
- uzbl.gui.bar_v = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_v);
- uzbl.gui.scbar_h = (GtkScrollbar*) gtk_hscrollbar_new (NULL);
- uzbl.gui.bar_h = gtk_range_get_adjustment((GtkRange*) uzbl.gui.scbar_h);
+ uzbl.gui.bar_h = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win));
+ uzbl.gui.bar_v = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (uzbl.gui.scrolled_win));
- set_webview_scroll_adjustments();
+ g_object_connect(G_OBJECT (uzbl.gui.bar_v),
+ "signal::value-changed", (GCallback)scroll_vert_cb, NULL,
+ "signal::changed", (GCallback)scroll_vert_cb, NULL,
+ NULL);
+
+ g_object_connect(G_OBJECT (uzbl.gui.bar_h),
+ "signal::value-changed", (GCallback)scroll_horiz_cb, NULL,
+ "signal::changed", (GCallback)scroll_horiz_cb, NULL,
+ NULL);
gchar *xwin = g_strdup_printf("%d", (int)uzbl.xwin);
g_setenv("UZBL_XID", xwin, TRUE);
@@ -1899,7 +1880,7 @@ main (int argc, char* argv[]) {
if (uzbl.state.verbose) {
printf("Uzbl start location: %s\n", argv[0]);
if (uzbl.state.socket_id)
- printf("plug_id %i\n", gtk_plug_get_id(uzbl.gui.plug));
+ printf("plug_id %i\n", (int)gtk_plug_get_id(uzbl.gui.plug));
else
printf("window_id %i\n",(int) uzbl.xwin);
printf("pid %i\n", getpid ());