Changeset 99206 in webkit


Ignore:
Timestamp:
Nov 3, 2011 10:01:42 AM (12 years ago)
Author:
Carlos Garcia Campos
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.

Location:
trunk/Tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r99202 r99206  
     12011-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add back/forward menus to MiniBrowser using WebKit2 GTK+ API
     4        https://bugs.webkit.org/show_bug.cgi?id=71466
     5
     6        Reviewed by Martin Robinson.
     7
     8        * MiniBrowser/gtk/BrowserWindow.c:
     9        (browserWindowHistoryItemActivated): Go to selected back formard
     10        list item using webkit_web_view_go_to_back_forward_list_item()
     11        (browserWindowCreateBackForwardMenu): Create a GtkMenu for the
     12        given GList of WebKitBackForwardListItems.
     13        (browserWindowUpdateNavigationActions): Enable/disable back and
     14        forward buttons depending on whether it's possible to go
     15        back/forward. Create a menu for back and forward toolbar buttons.
     16        (backForwadlistChanged): Call browserWindowUpdateNavigationActions().
     17        (browserWindowConstructed): Connect to WebKitBackForwardList
     18        changed signal.
     19
    1202011-11-03  Simon Hausmann  <simon.hausmann@nokia.com>
    221
  • trunk/Tools/MiniBrowser/gtk/BrowserWindow.c

    r99201 r99206  
    8787}
    8888
     89static void browserWindowHistoryItemActivated(BrowserWindow *window, GtkAction *action)
     90{
     91    WebKitBackForwardListItem *item = g_object_get_data(G_OBJECT(action), "back-forward-list-item");
     92    if (!item)
     93        return;
     94
     95    webkit_web_view_go_to_back_forward_list_item(window->webView, item);
     96}
     97
     98static GtkWidget *browserWindowCreateBackForwardMenu(BrowserWindow *window, GList *list)
     99{
     100    if (!list)
     101        return NULL;
     102
     103    GtkWidget *menu = gtk_menu_new();
     104    GList *listItem;
     105    for (listItem = list; listItem; listItem = g_list_next(listItem)) {
     106        WebKitBackForwardListItem *item = (WebKitBackForwardListItem *)listItem->data;
     107        const char *uri = webkit_back_forward_list_item_get_uri(item);
     108        const char *title = webkit_back_forward_list_item_get_title(item);
     109
     110        GtkAction *action = gtk_action_new(uri, title, NULL, NULL);
     111        g_object_set_data_full(G_OBJECT(action), "back-forward-list-item", g_object_ref(item), g_object_unref);
     112        g_signal_connect_swapped(action, "activate", G_CALLBACK(browserWindowHistoryItemActivated), window);
     113
     114        GtkWidget *menuItem = gtk_action_create_menu_item(action);
     115        g_object_unref(action);
     116
     117        gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), menuItem);
     118        gtk_widget_show(menuItem);
     119    }
     120
     121    return menu;
     122}
     123
     124static void browserWindowUpdateNavigationActions(BrowserWindow *window, WebKitBackForwardList *backForwadlist)
     125{
     126    gtk_widget_set_sensitive(window->backItem, webkit_web_view_can_go_back(window->webView));
     127    gtk_widget_set_sensitive(window->forwardItem, webkit_web_view_can_go_forward(window->webView));
     128
     129    GList *list = webkit_back_forward_list_get_back_list_with_limit(backForwadlist, 10);
     130    gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(window->backItem),
     131                                  browserWindowCreateBackForwardMenu(window, list));
     132    g_list_free(list);
     133
     134    list = webkit_back_forward_list_get_forward_list_with_limit(backForwadlist, 10);
     135    gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(window->forwardItem),
     136                                  browserWindowCreateBackForwardMenu(window, list));
     137    g_list_free(list);
     138}
     139
     140static void backForwadlistChanged(WebKitBackForwardList *backForwadlist, WebKitBackForwardListItem *itemAdded, GList *itemsRemoved, BrowserWindow *window)
     141{
     142    browserWindowUpdateNavigationActions(window, backForwadlist);
     143}
     144
    89145static void browserWindowFinalize(GObject *gObject)
    90146{
     
    176232    g_signal_connect(window->webView, "notify::estimated-load-progress", G_CALLBACK(webViewLoadProgressChanged), window);
    177233
     234    WebKitBackForwardList *backForwadlist = webkit_web_view_get_back_forward_list(window->webView);
     235    g_signal_connect(backForwadlist, "changed", G_CALLBACK(backForwadlistChanged), window);
     236
    178237    gtk_box_pack_start(GTK_BOX(window->mainBox), GTK_WIDGET(window->webView), TRUE, TRUE, 0);
    179238    gtk_widget_show(GTK_WIDGET(window->webView));
Note: See TracChangeset for help on using the changeset viewer.