From 6eb6482e94ee5a82891a7e3294e4f8d72f2104d5 Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Mon, 18 Sep 2017 20:06:24 -0400 Subject: src/tab-chrome.c: Try to synchronize tab history list icon sizes Doesn't work. --- (limited to 'src') diff --git a/src/tab-chrome.c b/src/tab-chrome.c index 88c440d..25d132b 100644 --- a/src/tab-chrome.c +++ b/src/tab-chrome.c @@ -50,9 +50,44 @@ back_forward_toggle_button_toggled(GtkToggleButton *toggle_button, "text" : "list")); } +static GtkRequisition * +get_max_requisition(GtkWidget *widget_a, GtkWidget *widget_b) +{ + GtkRequisition *req_a; + GtkRequisition *req_b; + GtkRequisition *max_req; + + /* Allocate widget requisitions. */ + req_a = g_malloc(sizeof(*req_a)); + req_b = g_malloc(sizeof(*req_b)); + + /* Get requisitions. */ + gtk_widget_get_preferred_size(widget_a, req_a, NULL); + gtk_widget_get_preferred_size(widget_b, req_b, NULL); + + /* Allocate and calculate maximum requisition. */ + max_req = g_malloc(sizeof(*max_req)); + max_req->width = MAX(req_a->width, req_b->width); + max_req->height = MAX(req_a->height, req_b->height); + + /* Free widget requisitions. */ + g_free(req_a); + g_free(req_b); + + /* For convenience, remove the widgets' floating references (assume + * ownership) and decrease their reference counts (finalize them). + * They're instantiated only for this function. */ + g_object_ref_sink(widget_a); + g_object_ref_sink(widget_b); + g_object_unref(widget_a); + g_object_unref(widget_b); + + return max_req; +} + static GtkWidget * back_forward_list_item_new(WebKitBackForwardListItem *list_item, - GtkWidget *icon) + GtkWidget *icon, GtkRequisition *max_req) { GtkWidget *label; GtkWidget *box; @@ -60,6 +95,7 @@ back_forward_list_item_new(WebKitBackForwardListItem *list_item, label = gtk_label_new(webkit_back_forward_list_item_get_title( list_item)); gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_set_size_request(icon, max_req->width, max_req->height); box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(box), icon, FALSE, FALSE, 0); @@ -76,6 +112,7 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, { WebKitBackForwardList *back_forward_list; GtkWidget *list_box; + GtkRequisition *max_req; GList *list_item; GtkWidget *stack; GtkWidget *toggle_button; @@ -94,9 +131,14 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, GTK_SELECTION_BROWSE); gtk_list_box_set_activate_on_single_click(GTK_LIST_BOX(list_box), TRUE); + max_req = get_max_requisition(gtk_radio_button_new(NULL), + gtk_image_new_from_icon_name("go-previous", + GTK_ICON_SIZE_BUTTON)); + gtk_list_box_insert(GTK_LIST_BOX(list_box), back_forward_list_item_new( webkit_back_forward_list_get_current_item( - back_forward_list), gtk_radio_button_new(NULL)), + back_forward_list), gtk_radio_button_new(NULL), + max_req), -1); gtk_list_box_select_row(GTK_LIST_BOX(list_box), gtk_list_box_get_row_at_index(GTK_LIST_BOX(list_box), 0)); @@ -107,7 +149,7 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, gtk_list_box_insert(GTK_LIST_BOX(list_box), back_forward_list_item_new(list_item->data, gtk_image_new_from_icon_name("go-previous", - GTK_ICON_SIZE_BUTTON)), 0); + GTK_ICON_SIZE_BUTTON), max_req), 0); } list_item = webkit_back_forward_list_get_forward_list( @@ -116,9 +158,11 @@ back_forward_box_button_press_cb(GtkWidget *widget, GdkEvent *event, gtk_list_box_insert(GTK_LIST_BOX(list_box), back_forward_list_item_new(list_item->data, gtk_image_new_from_icon_name("go-next", - GTK_ICON_SIZE_BUTTON)), -1); + GTK_ICON_SIZE_BUTTON), max_req), -1); } + g_free(max_req); + stack = gtk_stack_new(); gtk_stack_add_named(GTK_STACK(stack), list_box, "list"); gtk_stack_add_named(GTK_STACK(stack), gtk_label_new("Text"), "text"); -- cgit v0.9.1