- wxCHECK_RET( m_widget != NULL, "invalid button" );
-
- wxControl::SetLabel( label );
-
- gtk_label_set( GTK_LABEL( GTK_BUTTON(m_widget)->child ), GetLabel() );
+#ifdef __WXGTK20__
+ 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;
+ gtk_widget_size_request(btn, &req);
+
+ 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;
+#else
+ return wxSize(80,26);
+#endif