Пример #1
0
void
cmd_set_zoom_type () {
    if(uzbl.behave.zoom_type) 
        webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, TRUE);
    else
        webkit_web_view_set_full_content_zoom (uzbl.gui.web_view, FALSE);
}
Пример #2
0
void
toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result) {
    (void)argv;
    (void)result;

    webkit_web_view_set_full_content_zoom (page, !webkit_web_view_get_full_content_zoom (page));
}
Пример #3
0
Win*
win_create(void) {
    Win *w;
    GdkGeometry g;
    GtkPolicyType h, v;

    w = emalloc(sizeof(Win));
    w->win = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
    w->scroll = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
    w->web = WEBKIT_WEB_VIEW(webkit_web_view_new());
    w->ignore = w->zoom = FALSE;
    g.min_width = g.min_height = 1;
    data.wins = g_list_append(data.wins, w);
    webkit_web_view_set_full_content_zoom(w->web, TRUE);
    webkit_web_view_set_zoom_level(w->web, ZOOM);
    gtk_window_set_geometry_hints(w->win, NULL, &g, GDK_HINT_MIN_SIZE);
    gtk_window_set_default_size(w->win, WIDTH, HEIGHT);
    gtk_container_add(GTK_CONTAINER(w->scroll), GTK_WIDGET(w->web));
    gtk_container_add(GTK_CONTAINER(w->win), GTK_WIDGET(w->scroll));
    gtk_widget_show_all(GTK_WIDGET(w->win));
    gdk_window_set_events(GWIN(w), GDK_PROPERTY_CHANGE_MASK);
    gdk_window_add_filter(GWIN(w), atom_propertynotify, w);
    event_init(w);
    h = SHOW_HSCROLL ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER;
    v = SHOW_VSCROLL ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER;
    gtk_scrolled_window_set_policy(w->scroll, h, v);
    gtk_widget_grab_focus(GTK_WIDGET(w->web));
    return w;
}
Пример #4
0
static void zoomOut(gboolean fullContentsZoom)
{
    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
    if (!view)
        return;

    webkit_web_view_set_full_content_zoom(view, fullContentsZoom);
    gfloat currentZoom = webkit_web_view_get_zoom_level(view);
    webkit_web_view_set_zoom_level(view, currentZoom / zoomMultiplierRatio);
}
Пример #5
0
static GtkScrolledWindow*
create_browser ()
{
    scrolled_window = (GtkScrolledWindow*)gtk_scrolled_window_new (NULL, NULL);
    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

    g_web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ());
    webkit_web_view_set_transparent(g_web_view, true);
    gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (g_web_view));
    webkit_web_view_set_full_content_zoom(g_web_view, true);

    g_signal_connect (g_web_view, "notify::load-status", G_CALLBACK (notify_load_status_cb), g_web_view);
    g_signal_connect (g_web_view, "hovering-over-link", G_CALLBACK (link_hover_cb), g_web_view);

    g_signal_connect (g_web_view, "focus-out-event", G_CALLBACK (focus_out_cb), g_web_view);

    g_signal_connect (g_web_view, "document-load-finished", G_CALLBACK (document_load_finished_cb), g_web_view);

    g_signal_connect (g_web_view, "window_object_cleared", G_CALLBACK (window_object_cleared_cb), g_web_view);

    return scrolled_window;
}
Пример #6
0
void wxWebViewWebKit::SetZoomType(wxWebViewZoomType type)
{
    webkit_web_view_set_full_content_zoom(WEBKIT_WEB_VIEW(web_view),
                                          (type == wxWEB_VIEW_ZOOM_TYPE_LAYOUT ?
                                          TRUE : FALSE));
}
Пример #7
0
Client *
newclient(void) {
	int i;
	Client *c;
	WebKitWebSettings *settings;
	GdkGeometry hints = { 1, 1 };
	char *uri, *ua;

	if(!(c = calloc(1, sizeof(Client))))
		die("Cannot malloc!\n");
	/* Window */
	if(embed) {
		c->win = gtk_plug_new(embed);
	}
	else {
		c->win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
		/* TA:  20091214:  Despite what the GNOME docs say, the ICCCM
		 * is always correct, so we should still call this function.
		 * But when doing so, we *must* differentiate between a
		 * WM_CLASS and a resource on the window.  By convention, the
		 * window class (WM_CLASS) is capped, while the resource is in
		 * lowercase.   Both these values come as a pair.
		 */
		gtk_window_set_wmclass(GTK_WINDOW(c->win), "surf", "surf");

		/* TA:  20091214:  And set the role here as well -- so that
		 * sessions can pick this up.
		 */
		gtk_window_set_role(GTK_WINDOW(c->win), "Surf");
	}
	gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600);
	g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin), c);
	g_signal_connect(G_OBJECT(c->win), "key-press-event", G_CALLBACK(keypress), c);
	g_signal_connect(G_OBJECT(c->win), "size-allocate", G_CALLBACK(resize), c);

	if(!(c->items = calloc(1, sizeof(GtkWidget *) * LENGTH(items))))
		die("Cannot malloc!\n");

	/* contextmenu */
	for(i = 0; i < LENGTH(items); i++) {
		c->items[i] = gtk_menu_item_new_with_label(items[i].label);
		g_signal_connect(G_OBJECT(c->items[i]), "activate",
				G_CALLBACK(itemclick), c);
	}

	/* VBox */
	c->vbox = gtk_vbox_new(FALSE, 0);

	/* Scrolled Window */
	c->scroll = gtk_scrolled_window_new(NULL, NULL);
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->scroll),
			GTK_POLICY_NEVER, GTK_POLICY_NEVER);

	/* Webview */
	c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
	g_signal_connect(G_OBJECT(c->view), "title-changed", G_CALLBACK(titlechange), c);
	g_signal_connect(G_OBJECT(c->view), "load-progress-changed", G_CALLBACK(progresschange), c);
	g_signal_connect(G_OBJECT(c->view), "load-committed", G_CALLBACK(loadcommit), c);
	g_signal_connect(G_OBJECT(c->view), "load-started", G_CALLBACK(loadstart), c);
	g_signal_connect(G_OBJECT(c->view), "hovering-over-link", G_CALLBACK(linkhover), c);
	g_signal_connect(G_OBJECT(c->view), "create-web-view", G_CALLBACK(createwindow), c);
	g_signal_connect(G_OBJECT(c->view), "new-window-policy-decision-requested", G_CALLBACK(decidewindow), c);
	g_signal_connect(G_OBJECT(c->view), "mime-type-policy-decision-requested", G_CALLBACK(decidedownload), c);
	g_signal_connect(G_OBJECT(c->view), "download-requested", G_CALLBACK(initdownload), c);
	g_signal_connect(G_OBJECT(c->view), "window-object-cleared", G_CALLBACK(windowobjectcleared), c);
	g_signal_connect(G_OBJECT(c->view), "populate-popup", G_CALLBACK(context), c);

	/* Indicator */
	c->indicator = gtk_drawing_area_new();
	gtk_widget_set_size_request(c->indicator, 0, 2);
	g_signal_connect (G_OBJECT (c->indicator), "expose_event",
			G_CALLBACK (exposeindicator), c);

	/* Arranging */
	gtk_container_add(GTK_CONTAINER(c->scroll), GTK_WIDGET(c->view));
	gtk_container_add(GTK_CONTAINER(c->win), c->vbox);
	gtk_container_add(GTK_CONTAINER(c->vbox), c->scroll);
	gtk_container_add(GTK_CONTAINER(c->vbox), c->indicator);

	/* Setup */
	gtk_box_set_child_packing(GTK_BOX(c->vbox), c->indicator, FALSE, FALSE, 0, GTK_PACK_START);
	gtk_box_set_child_packing(GTK_BOX(c->vbox), c->scroll, TRUE, TRUE, 0, GTK_PACK_START);
	gtk_widget_grab_focus(GTK_WIDGET(c->view));
	gtk_widget_show(c->vbox);
	gtk_widget_show(c->indicator);
	gtk_widget_show(c->scroll);
	gtk_widget_show(GTK_WIDGET(c->view));
	gtk_widget_show(c->win);
	gtk_window_set_geometry_hints(GTK_WINDOW(c->win), NULL, &hints, GDK_HINT_MIN_SIZE);
	gdk_window_set_events(GTK_WIDGET(c->win)->window, GDK_ALL_EVENTS_MASK);
	gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
	webkit_web_view_set_full_content_zoom(c->view, TRUE);
	settings = webkit_web_view_get_settings(c->view);
	if(!(ua = getenv("SURF_USERAGENT")))
		ua = useragent;
	g_object_set(G_OBJECT(settings), "user-agent", ua, NULL);
	uri = g_strconcat("file://", stylefile, NULL);
	g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL);
	g_free(uri);
	setatom(c, findprop, "");

	c->download = NULL;
	c->title = NULL;
	c->next = clients;
	clients = c;
	if(showxid) {
		gdk_display_sync(gtk_widget_get_display(c->win));
		printf("%u\n", (guint)GDK_WINDOW_XID(GTK_WIDGET(c->win)->window));
		fflush(NULL);
	}
	return c;
}
Пример #8
0
int main(int argc, char* argv[])
{
    // Initialize GTK+
    gtk_init(&argc, &argv);
    gdk_threads_init();

    GtkWidget *main_window;
    GdkWindow *gdk_window;
    createDrawContext(&main_window, &gdk_window);

    // Create a browser instance
    WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new());

    // make sure the background of the main window is black plz
    GdkColor blaaack;
    gdk_color_parse("#000000", &blaaack);
    gtk_widget_modify_bg(main_window, GTK_STATE_NORMAL, &blaaack);

    // Put the browser area into the main window
    gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView));
    // necessary for ensuring positioning relative to xscreensaver-demo is right
    gtk_widget_show_all(main_window);

    // Set up callbacks so that if either the main window or the browser instance is
    // closed, the program will exit
    g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindow), NULL);
    g_signal_connect(main_window, "delete-event", G_CALLBACK(destroyWindow), NULL);

    // transparent background so we dont have any white flashes
    webkit_web_view_set_transparent(webView, true);

    int height;
    int width;
    gdk_window_get_geometry(gdk_window, NULL, NULL, &width, &height, NULL);
    if (height < 480 && width < 640) {
      // make the tiny preview windows look reasonable
      webkit_web_view_set_full_content_zoom(webView, true);
      webkit_web_view_set_zoom_level(webView, 0.4);
    }

    // set up some webkit settings
    WebKitWebSettings *settings = webkit_web_view_get_settings(webView);
    g_object_set (G_OBJECT(settings), "enable-webgl", true, NULL);
    // accelerated-compositing chokes on my machine, but maybe its my shitty nvidia drivers
    g_object_set (G_OBJECT(settings), "enable-accelerated-compositing", false, NULL);

    // select tag and format url
    wordexp_t exp_result;
    wordexp(CONFIG_PATH, &exp_result, 0);
    printf("Loading tags file at %s\n", exp_result.we_wordv[0]);
    char* tags_path = exp_result.we_wordv[0];
    char url[MAX_URL_LENGTH];
    char tags[MAX_NUMBER_TAGS][MAX_TAG_LENGTH];
    int  tags_length = 0;

    FILE* tags_file;
    if (tags_path == NULL || (tags_file = fopen(tags_path, "r")) == NULL) {
        printf("No tag file found. using defaults\n");
        int default_tags_length = sizeof(DEFAULT_TAGS) / sizeof(char*);
        for (int i = 0; i < default_tags_length; ++i) {
            printf("%d\n", i);
            strcpy(tags[i], DEFAULT_TAGS[i]);
        }
        tags_length = default_tags_length;
    } else {
        int i = 0;
        printf("Iterating through file\n");
        while (i < MAX_NUMBER_TAGS && fgets(tags[i], sizeof(tags[0]), tags_file)) {
            tags[i][strlen(tags[i]) - 1] = '\0';
            printf("Got %s!\n", tags[i]);
            ++i;
        }
        tags_length = i;
    }

    printf("%d tags found. selecting one.\n", tags_length);
    srand(time(0));
    int index = rand() % tags_length;
    printf("%d is our index...\n", index);
    printf("%s selected!\n", tags[index]);
    sprintf(url, URL_FORMAT, tags[index]);

    printf("Loading %s\n", url);
    webkit_web_view_load_uri(webView, url);

    // Make sure that when the browser area becomes visible, it will get mouse
    // and keyboard events
    gtk_widget_grab_focus(GTK_WIDGET(webView));
    // hit our callback whenever load-status changes
    g_signal_connect(G_OBJECT(webView), "notify::load-status", G_CALLBACK(load_status_cb), &url);
    g_signal_connect(G_OBJECT(webView), "load-error", G_CALLBACK(load_error_cb), &url);

    // Run the main GTK+ event loop
    gtk_main();

    return 0;
}
Пример #9
0
Client *
newclient(void) {
	Client *c;
	WebKitWebSettings *settings;
	gchar *uri;

	if(!(c = calloc(1, sizeof(Client))))
		die("Cannot malloc!\n");
	/* Window */
	if(embed) {
		c->win = gtk_plug_new(embed);
	}
	else {
		c->win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
		gtk_window_set_wmclass(GTK_WINDOW(c->win), "surf", "surf");
	}
	gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600);
	g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin), c);
	g_signal_connect(G_OBJECT(c->win), "key-press-event", G_CALLBACK(keypress), c);

	/* VBox */
	c->vbox = gtk_vbox_new(FALSE, 0);

	/* scrolled window */
	c->scroll = gtk_scrolled_window_new(NULL, NULL);
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->scroll),
			GTK_POLICY_NEVER, GTK_POLICY_NEVER);

	/* webview */
	c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
	g_signal_connect(G_OBJECT(c->view), "title-changed", G_CALLBACK(titlechange), c);
	g_signal_connect(G_OBJECT(c->view), "load-progress-changed", G_CALLBACK(progresschange), c);
	g_signal_connect(G_OBJECT(c->view), "load-finished", G_CALLBACK(loadfinished), c);
	g_signal_connect(G_OBJECT(c->view), "load-committed", G_CALLBACK(loadcommit), c);
	g_signal_connect(G_OBJECT(c->view), "load-started", G_CALLBACK(loadstart), c);
	g_signal_connect(G_OBJECT(c->view), "hovering-over-link", G_CALLBACK(linkhover), c);
	g_signal_connect(G_OBJECT(c->view), "create-web-view", G_CALLBACK(newwindow), c);
	g_signal_connect(G_OBJECT(c->view), "download-requested", G_CALLBACK(initdownload), c);
	g_signal_connect(G_OBJECT(c->view), "window-object-cleared", G_CALLBACK(windowobjectcleared), c);
	g_signal_connect_after(session, "request-started", G_CALLBACK(request), c);

	/* urlbar */
	c->urlbar = gtk_entry_new();
	gtk_entry_set_has_frame(GTK_ENTRY(c->urlbar), FALSE);
	g_signal_connect(G_OBJECT(c->urlbar), "focus-out-event", G_CALLBACK(unfocusbar), c);

	/* searchbar */
	c->searchbar = gtk_entry_new();
	gtk_entry_set_has_frame(GTK_ENTRY(c->searchbar), FALSE);
	g_signal_connect(G_OBJECT(c->searchbar), "focus-out-event", G_CALLBACK(unfocusbar), c);

	/* indicator */
	c->indicator = gtk_drawing_area_new();
	gtk_widget_set_size_request(c->indicator, 0, 2);
	g_signal_connect (G_OBJECT (c->indicator), "expose_event",
			G_CALLBACK (exposeindicator), c);

	/* Arranging */
	gtk_container_add(GTK_CONTAINER(c->scroll), GTK_WIDGET(c->view));
	gtk_container_add(GTK_CONTAINER(c->win), c->vbox);
	gtk_container_add(GTK_CONTAINER(c->vbox), c->scroll);
	gtk_container_add(GTK_CONTAINER(c->vbox), c->searchbar);
	gtk_container_add(GTK_CONTAINER(c->vbox), c->urlbar);
	gtk_container_add(GTK_CONTAINER(c->vbox), c->indicator);

	/* Setup */
	gtk_box_set_child_packing(GTK_BOX(c->vbox), c->urlbar, FALSE, FALSE, 0, GTK_PACK_START);
	gtk_box_set_child_packing(GTK_BOX(c->vbox), c->searchbar, FALSE, FALSE, 0, GTK_PACK_START);
	gtk_box_set_child_packing(GTK_BOX(c->vbox), c->indicator, FALSE, FALSE, 0, GTK_PACK_START);
	gtk_box_set_child_packing(GTK_BOX(c->vbox), c->scroll, TRUE, TRUE, 0, GTK_PACK_START);
	gtk_widget_grab_focus(GTK_WIDGET(c->view));
	gtk_widget_hide_all(c->searchbar);
	gtk_widget_hide_all(c->urlbar);
	gtk_widget_show(c->vbox);
	gtk_widget_show(c->indicator);
	gtk_widget_show(c->scroll);
	gtk_widget_show(GTK_WIDGET(c->view));
	gtk_widget_show(c->win);
	gdk_window_set_events(GTK_WIDGET(c->win)->window, GDK_ALL_EVENTS_MASK);
	gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
	webkit_web_view_set_full_content_zoom(c->view, TRUE);
	settings = webkit_web_view_get_settings(c->view);
	g_object_set(G_OBJECT(settings), "user-agent", "surf", NULL);
	uri = g_strconcat("file://", stylefile, NULL);
	g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL);
	g_free(uri);

	c->download = NULL;
	c->title = NULL;
	c->next = clients;
	clients = c;
	if(showxid) {
		gdk_display_sync(gtk_widget_get_display(c->win));
		printf("%u\n", (guint)GDK_WINDOW_XID(GTK_WIDGET(c->win)->window));
		fflush(NULL);
	}
	return c;
}
Пример #10
0
static void activateEntry(GtkWidget* entry, gpointer* gdata) {
	WebKitWebView* webView = g_object_get_data(G_OBJECT(entry), "webView");
	const gchar* entry_str = gtk_entry_get_text(GTK_ENTRY(entry));
	WebKitWebSettings* settings = webkit_web_view_get_settings(
			WEBKIT_WEB_VIEW(webView));
	gfloat current_zoom = webkit_web_view_get_zoom_level(webView);
	gboolean fz = webkit_web_view_get_full_content_zoom(webView);
	if (entry_str[0] != 0) {
		if (strncmp(entry_str, "?", 1) == 0) {
			gchar* s = g_strdup(entry_str);
			s++;
			gtk_entry_set_text(GTK_ENTRY(entry),
					g_strjoin(NULL, search_str, s, NULL));
			if ((startpage == TRUE) && (fz == TRUE) && (current_zoom != 1.0)) {
				fz = FALSE;
				webkit_web_view_set_full_content_zoom(webView, fz);
				GtkWidget* window = g_object_get_data(G_OBJECT(entry),
						"window");
				setZbutton(window, fz);
			}
		} else if (strncmp(entry_str, "=", 1) == 0) {
			gchar* s = g_strdup(entry_str);
			s++;
			searchText(webView, s);
			return;
		} else if (strncmp(entry_str, "#", 1) == 0) {
			int r = 0;
			r = fork();
			if (r == 0) {
				execl("/usr/local/bin/kwebhelper.py", "kwebhelper.py", "cmd",
						entry_str, NULL);
			}
			return;
		} else if (strncmp(entry_str, "!", 1) == 0) {
			gchar* s = g_strdup(entry_str);
			s++;
			if (strlen(s) > 1) {
				g_object_set(G_OBJECT(settings), "spell-checking-languages", s,
						NULL);
				gtk_entry_set_text(GTK_ENTRY(entry),
						g_strjoin(NULL,
								"Spell checking language has been set to: ", s,
								NULL));
			}
			return;
		}

		else if (strncmp(entry_str, "&", 1) == 0) {
			gchar* s = g_strdup(entry_str);
			s++;
			g_object_set(G_OBJECT(settings), "user-stylesheet-uri", s, NULL);
			gtk_entry_set_text(GTK_ENTRY(entry),
					g_strjoin(NULL, "User style sheet: ", s, NULL));
			return;
		} else if (strncmp(entry_str, "$", 1) == 0) {
			gchar* s = g_strdup(entry_str);
			s++;
			g_object_set(G_OBJECT(settings), "user-agent", s, NULL);
			const gchar* t = webkit_web_settings_get_user_agent(settings);
			gtk_entry_set_text(GTK_ENTRY(entry),
					g_strjoin(NULL, "User agent: ", t, NULL));
			return;
		}

		else if (strcmp(entry_str, ":c") == 0) {
			gtk_entry_set_text(GTK_ENTRY(entry),
					g_strjoin(NULL, "file://", homedir, "/kweb_about_c.html",
							NULL));
		} else if (strncmp(entry_str, ":", 1) == 0) {
			gchar* s = g_strdup(entry_str);
			s++;
			gchar* fname = g_strjoin(NULL, "/usr/local/share/kweb/kweb_about_",
					s, ".html", NULL);

			struct stat stbc;
			if (stat(fname, &stbc) == 0) {
				gtk_entry_set_text(GTK_ENTRY(entry),
						g_strjoin(NULL, "file://", fname, NULL));
			} else {
				gtk_entry_set_text(GTK_ENTRY(entry),
						g_strjoin(NULL,
								"file:///usr/local/share/kweb/kweb_about_e.html",
								NULL));
			}
		} else if (strstr(entry_str, "://") == NULL) {
			if (strncmp(entry_str, "/", 1) == 0) {
				gtk_entry_set_text(GTK_ENTRY(entry),
						g_strjoin(NULL, "file://", entry_str, NULL));
			} else {
				gtk_entry_set_text(GTK_ENTRY(entry),
						g_strjoin(NULL, "http://", entry_str, NULL));
			}
		}
		const gchar* uri = gtk_entry_get_text(GTK_ENTRY(entry));
		webkit_web_view_stop_loading(webView);
		webkit_web_view_load_uri(webView, uri);
		gtk_widget_grab_focus(GTK_WIDGET(webView));
	}
}
Пример #11
0
static void toggleZoom(GtkWidget* item, WebKitWebView* webView) {
	gboolean fz;
	fz = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(item));
	webkit_web_view_set_full_content_zoom(webView, fz);
}