+ static wxSize size = wxDefaultSize;
+ if (size == wxDefaultSize)
+ {
+ // NB: Default size of buttons should be same as size of stock
+ // buttons as used in most GTK+ apps. Unfortunately it's a little
+ // tricky to obtain this size: stock button's size may be smaller
+ // than size of button in GtkButtonBox and vice versa,
+ // GtkButtonBox's minimal button size may be smaller than stock
+ // button's size. We have to retrieve both values and combine them.
+
+ GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkWidget *box = gtk_hbutton_box_new();
+ GtkWidget *btn = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ gtk_container_add(GTK_CONTAINER(box), btn);
+ gtk_container_add(GTK_CONTAINER(wnd), box);
+ GtkRequisition req;
+#ifdef __WXGTK3__
+ gtk_widget_get_preferred_height(btn, NULL, &req.height);
+ gtk_widget_get_preferred_width_for_height(btn, req.height, NULL, &req.width);
+#else
+ gtk_widget_size_request(btn, &req);
+#endif
+
+ gint minwidth, minheight;
+ gtk_widget_style_get(box,
+ "child-min-width", &minwidth,
+ "child-min-height", &minheight,
+ NULL);
+
+ size.x = wxMax(minwidth, req.width);
+ size.y = wxMax(minheight, req.height);
+
+ gtk_widget_destroy(wnd);
+ }
+ return size;