From 43772f9dae00572d94d6ffe9e331513724dc5dda Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Tue, 19 Sep 2017 01:12:32 -0400 Subject: src/tab-chrome.[ch]: Close back/forward popover on row activation --- (limited to 'src') diff --git a/src/tab-chrome.c b/src/tab-chrome.c index d628473..c9b7dca 100644 --- a/src/tab-chrome.c +++ b/src/tab-chrome.c @@ -96,6 +96,18 @@ back_forward_list_item_new(WebKitBackForwardListItem *list_item, return box; } +static void +back_forward_list_box_row_activated_cb(GtkListBox __attribute__((unused)) *box, + GtkListBoxRow *row, MqTabChrome *chrome) +{ + webkit_web_view_go_to_back_forward_list_item(chrome->web_view, + webkit_back_forward_list_get_nth_item( + webkit_web_view_get_back_forward_list(chrome->web_view), + gtk_list_box_row_get_index(row) - chrome->back_items)); + + gtk_widget_hide(chrome->back_forward_popover); +} + static gboolean back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, MqTabChrome *chrome) @@ -106,7 +118,6 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, GtkWidget *stack; GtkWidget *toggle_button; GtkWidget *box; - GtkWidget *popover; /* Make sure this is a mouse button press event. Either the middle or * right button is OK. */ @@ -123,6 +134,8 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, gtk_list_box_set_selection_mode(GTK_LIST_BOX(list_box), GTK_SELECTION_BROWSE); gtk_list_box_set_activate_on_single_click(GTK_LIST_BOX(list_box), TRUE); + g_signal_connect(list_box, "row-activated", + G_CALLBACK(back_forward_list_box_row_activated_cb), chrome); /* Insert the current item. */ gtk_list_box_insert(GTK_LIST_BOX(list_box), back_forward_list_item_new( @@ -134,9 +147,11 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, /* Insert back list items. */ list_item = webkit_back_forward_list_get_back_list( back_forward_list); + chrome->back_items = 0; for (; list_item; list_item = list_item->next) { gtk_list_box_insert(GTK_LIST_BOX(list_box), back_forward_list_item_new(list_item->data, -1), 0); + ++chrome->back_items; } /* Insert forward list items. */ @@ -168,11 +183,11 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, gtk_box_pack_start(GTK_BOX(box), stack, TRUE, FALSE, 0); /* Set up the popover. */ - popover = gtk_popover_new(widget); - gtk_container_add(GTK_CONTAINER(popover), box); + chrome->back_forward_popover = gtk_popover_new(widget); + gtk_container_add(GTK_CONTAINER(chrome->back_forward_popover), box); /* NB: gtk_popover_popup() is new in GTK+ 3.22. */ - gtk_widget_show_all(popover); + gtk_widget_show_all(chrome->back_forward_popover); return FALSE; } diff --git a/src/tab-chrome.h b/src/tab-chrome.h index ecd874f..baf0e3a 100644 --- a/src/tab-chrome.h +++ b/src/tab-chrome.h @@ -40,6 +40,8 @@ typedef struct { PangoAttrList *hovered_link_style; WebKitWebView *web_view; gboolean load_failed; + GtkWidget *back_forward_popover; + gint back_items; } MqTabChrome; MqTabChrome * -- cgit v0.9.1