Title: [99206] trunk/Tools
Revision
99206
Author
[email protected]
Date
2011-11-03 10:01:42 -0700 (Thu, 03 Nov 2011)

Log Message

[GTK] Add back/forward menus to MiniBrowser using WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=71466

Reviewed by Martin Robinson.

* MiniBrowser/gtk/BrowserWindow.c:
(browserWindowHistoryItemActivated): Go to selected back formard
list item using webkit_web_view_go_to_back_forward_list_item()
(browserWindowCreateBackForwardMenu): Create a GtkMenu for the
given GList of WebKitBackForwardListItems.
(browserWindowUpdateNavigationActions): Enable/disable back and
forward buttons depending on whether it's possible to go
back/forward. Create a menu for back and forward toolbar buttons.
(backForwadlistChanged): Call browserWindowUpdateNavigationActions().
(browserWindowConstructed): Connect to WebKitBackForwardList
changed signal.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (99205 => 99206)


--- trunk/Tools/ChangeLog	2011-11-03 16:54:23 UTC (rev 99205)
+++ trunk/Tools/ChangeLog	2011-11-03 17:01:42 UTC (rev 99206)
@@ -1,3 +1,22 @@
+2011-11-03  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Add back/forward menus to MiniBrowser using WebKit2 GTK+ API
+        https://bugs.webkit.org/show_bug.cgi?id=71466
+
+        Reviewed by Martin Robinson.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (browserWindowHistoryItemActivated): Go to selected back formard
+        list item using webkit_web_view_go_to_back_forward_list_item()
+        (browserWindowCreateBackForwardMenu): Create a GtkMenu for the
+        given GList of WebKitBackForwardListItems.
+        (browserWindowUpdateNavigationActions): Enable/disable back and
+        forward buttons depending on whether it's possible to go
+        back/forward. Create a menu for back and forward toolbar buttons.
+        (backForwadlistChanged): Call browserWindowUpdateNavigationActions().
+        (browserWindowConstructed): Connect to WebKitBackForwardList
+        changed signal.
+
 2011-11-03  Simon Hausmann  <[email protected]>
 
         [Qt] Remove Maemo specific code paths

Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (99205 => 99206)


--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2011-11-03 16:54:23 UTC (rev 99205)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2011-11-03 17:01:42 UTC (rev 99206)
@@ -86,6 +86,62 @@
         g_timeout_add(500, (GSourceFunc)resetEntryProgress, window->uriEntry);
 }
 
+static void browserWindowHistoryItemActivated(BrowserWindow *window, GtkAction *action)
+{
+    WebKitBackForwardListItem *item = g_object_get_data(G_OBJECT(action), "back-forward-list-item");
+    if (!item)
+        return;
+
+    webkit_web_view_go_to_back_forward_list_item(window->webView, item);
+}
+
+static GtkWidget *browserWindowCreateBackForwardMenu(BrowserWindow *window, GList *list)
+{
+    if (!list)
+        return NULL;
+
+    GtkWidget *menu = gtk_menu_new();
+    GList *listItem;
+    for (listItem = list; listItem; listItem = g_list_next(listItem)) {
+        WebKitBackForwardListItem *item = (WebKitBackForwardListItem *)listItem->data;
+        const char *uri = webkit_back_forward_list_item_get_uri(item);
+        const char *title = webkit_back_forward_list_item_get_title(item);
+
+        GtkAction *action = "" title, NULL, NULL);
+        g_object_set_data_full(G_OBJECT(action), "back-forward-list-item", g_object_ref(item), g_object_unref);
+        g_signal_connect_swapped(action, "activate", G_CALLBACK(browserWindowHistoryItemActivated), window);
+
+        GtkWidget *menuItem = gtk_action_create_menu_item(action);
+        g_object_unref(action);
+
+        gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), menuItem);
+        gtk_widget_show(menuItem);
+    }
+
+    return menu;
+}
+
+static void browserWindowUpdateNavigationActions(BrowserWindow *window, WebKitBackForwardList *backForwadlist)
+{
+    gtk_widget_set_sensitive(window->backItem, webkit_web_view_can_go_back(window->webView));
+    gtk_widget_set_sensitive(window->forwardItem, webkit_web_view_can_go_forward(window->webView));
+
+    GList *list = webkit_back_forward_list_get_back_list_with_limit(backForwadlist, 10);
+    gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(window->backItem),
+                                  browserWindowCreateBackForwardMenu(window, list));
+    g_list_free(list);
+
+    list = webkit_back_forward_list_get_forward_list_with_limit(backForwadlist, 10);
+    gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(window->forwardItem),
+                                  browserWindowCreateBackForwardMenu(window, list));
+    g_list_free(list);
+}
+
+static void backForwadlistChanged(WebKitBackForwardList *backForwadlist, WebKitBackForwardListItem *itemAdded, GList *itemsRemoved, BrowserWindow *window)
+{
+    browserWindowUpdateNavigationActions(window, backForwadlist);
+}
+
 static void browserWindowFinalize(GObject *gObject)
 {
     G_OBJECT_CLASS(browser_window_parent_class)->finalize(gObject);
@@ -175,6 +231,9 @@
     g_signal_connect(window->webView, "notify::uri", G_CALLBACK(webViewURIChanged), window);
     g_signal_connect(window->webView, "notify::estimated-load-progress", G_CALLBACK(webViewLoadProgressChanged), window);
 
+    WebKitBackForwardList *backForwadlist = webkit_web_view_get_back_forward_list(window->webView);
+    g_signal_connect(backForwadlist, "changed", G_CALLBACK(backForwadlistChanged), window);
+
     gtk_box_pack_start(GTK_BOX(window->mainBox), GTK_WIDGET(window->webView), TRUE, TRUE, 0);
     gtk_widget_show(GTK_WIDGET(window->webView));
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to