static GtkWidget* gURLBarEntry;
static GtkWidget* gTopLevelWindow;
-static WebKitGtkPage* gPage;
+static GtkStatusbar* gStatusbar;
+static WebKitPage* gPage;
static gchar* gTitle;
static gint gProgress;
-
-static bool stringIsEqual(const char* str1, const char* str2)
-{
- return 0 == strcmp(str1, str2);
-}
-
-static gchar* autocorrectURL(const gchar* url)
-{
- if (strncmp("http://", url, 7) != 0 && strncmp("https://", url, 8) != 0 && strncmp("file://", url, 7) != 0 && strncmp("ftp://", url, 6) != 0) {
- GString* string = g_string_new("http://");
- g_string_append(string, url);
- return g_string_free(string, FALSE);
- }
-
- return g_strdup(url);
-}
+static guint gStatusbarContextId;
static void goToURLBarText(GtkWidget* urlBarEntry)
{
if (!url || strlen(url) == 0)
return;
- gchar* parsedURL = autocorrectURL(url);
- webkit_gtk_page_open(gPage, parsedURL);
- g_free(parsedURL);
+ webkit_page_open(gPage, url);
}
static void goButtonClickedCallback(GtkWidget*, GtkWidget* entry)
g_free(title);
}
-static void titleChanged(WebKitGtkPage*, const gchar* title, const gchar* url, WebKitGtkPage*)
+static void hoveringOverLink(WebKitPage*, const gchar*, const gchar* link, void*)
+{
+ // underflow is allowed
+ gtk_statusbar_pop(gStatusbar, gStatusbarContextId);
+ if (link)
+ gtk_statusbar_push(gStatusbar, gStatusbarContextId, link);
+}
+
+static void titleChanged(WebKitPage*, const gchar* title, const gchar* url, WebKitPage*)
{
gtk_entry_set_text(GTK_ENTRY(gURLBarEntry), url);
updateWindowTitle();
}
-static void progressChanged(WebKitGtkPage*, gint progress, WebKitGtkPage*)
+static void progressChanged(WebKitPage*, gint progress, WebKitPage*)
{
gProgress = progress;
updateWindowTitle();
static void menuMainBackCallback(gpointer data)
{
g_assert(!data);
- webkit_gtk_page_go_backward(gPage);
+ webkit_page_go_backward(gPage);
}
static void menuMainForwardCallback(gpointer data)
{
g_assert(!data);
- webkit_gtk_page_go_forward(gPage);
+ webkit_page_go_forward(gPage);
}
static void menuMainQuitCallback(gpointer)
gtk_main_quit();
}
-int main(int argc, char* argv[])
+static GtkWidget* setupMainMenu()
{
- gtk_init(&argc, &argv);
- webkit_gtk_init();
-
- gchar* url = "http://www.google.com";
- bool exitAfterLoading = false;
- bool dumpRenderTree = false;
- for (int argPos = 1; argPos < argc; ++argPos) {
- char *currArg = argv[argPos];
- if (stringIsEqual(currArg, "-exit-after-loading"))
- exitAfterLoading = true;
- else if (stringIsEqual(currArg, "-exitafterloading"))
- exitAfterLoading = true;
- else if (stringIsEqual(currArg, "-exitafterload"))
- exitAfterLoading = true;
- else if (stringIsEqual(currArg, "-exit-after-load"))
- exitAfterLoading = true;
- else if (stringIsEqual(currArg, "-drt"))
- dumpRenderTree = true;
- else if (stringIsEqual(currArg, "-dump-render-tree"))
- dumpRenderTree = true;
- else if (stringIsEqual(currArg, "-dumprendertree"))
- dumpRenderTree = true;
- else
- url = autocorrectURL(currArg);
- }
-
GtkWidget* menuMain = gtk_menu_new();
GtkWidget* menuMainBack = gtk_menu_item_new_with_label("Back");
gtk_menu_shell_append(GTK_MENU_SHELL(menuMain), menuMainBack);
GtkWidget* menuMainRoot = gtk_menu_item_new_with_label("Main");
gtk_widget_show(menuMainRoot);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuMainRoot), menuMain);
+
+ return menuMainRoot;
+}
+
+static void setupMainWindowUI()
+{
+ GtkWidget* menuMainRoot = setupMainMenu();
GtkWidget* menuBar = gtk_menu_bar_new();
gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), menuMainRoot);
GtkWidget* scrolledWindow = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gPage = WEBKIT_GTK_PAGE(webkit_gtk_page_new());
+
+
+ gPage = WEBKIT_PAGE(webkit_page_new());
gtk_container_add(GTK_CONTAINER(scrolledWindow), GTK_WIDGET(gPage));
gtk_box_pack_start(GTK_BOX(vbox), scrolledWindow, TRUE, TRUE, 0);
+
+ gStatusbar = GTK_STATUSBAR(gtk_statusbar_new());
+ gStatusbarContextId = gtk_statusbar_get_context_id(gStatusbar, "Link Hover");
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(gStatusbar), FALSE, FALSE, 0);
g_signal_connect(gPage, "title-changed", G_CALLBACK(titleChanged), gPage);
g_signal_connect(gPage, "load-progress-changed", G_CALLBACK(progressChanged), gPage);
- webkit_gtk_page_open(gPage, url);
+ g_signal_connect(gPage, "hovering-over-link", G_CALLBACK(hoveringOverLink), gPage);
+}
+
+int main(int argc, char* argv[])
+{
+ gtk_init(&argc, &argv);
+ webkit_init();
+
+ setupMainWindowUI();
+
+ const gchar* url = static_cast<const gchar*>(argc > 1 ? argv[1] : "http://www.google.com");
+ webkit_page_open(gPage, url);
gtk_widget_show_all(gTopLevelWindow);
gtk_main();