+// ----------------------------------------------------------------------------
+// wxControl dealing with labels
+// ----------------------------------------------------------------------------
+
+void wxControl::SetLabel( const wxString &label )
+{
+ // keep the original string internally to be able to return it later (for
+ // consistency with the other ports)
+ m_label = label;
+
+ InvalidateBestSize();
+}
+
+wxString wxControl::GetLabel() const
+{
+ return m_label;
+}
+
+void wxControl::GTKSetLabelForLabel(GtkLabel *w, const wxString& label)
+{
+ // don't call the virtual function which might call this one back again
+ wxControl::SetLabel(label);
+
+ const wxString labelGTK = GTKConvertMnemonics(label);
+
+ gtk_label_set_text_with_mnemonic(w, wxGTK_CONV(labelGTK));
+}
+
+// ----------------------------------------------------------------------------
+// GtkFrame helpers
+//
+// GtkFrames do in fact support mnemonics in GTK2+ but not through
+// gtk_frame_set_label, rather you need to use a custom label widget
+// instead (idea gleaned from the native gtk font dialog code in GTK)
+// ----------------------------------------------------------------------------
+
+GtkWidget* wxControl::GTKCreateFrame(const wxString& label)
+{
+ const wxString labelGTK = GTKConvertMnemonics(label);
+ GtkWidget* labelwidget = gtk_label_new_with_mnemonic(wxGTK_CONV(labelGTK));
+ gtk_widget_show(labelwidget); // without this it won't show...
+
+ GtkWidget* framewidget = gtk_frame_new(NULL);
+ gtk_frame_set_label_widget(GTK_FRAME(framewidget), labelwidget);
+
+ return framewidget; //note that the label is already set so you'll
+ //only need to call wxControl::SetLabel afterwards
+}
+
+void wxControl::GTKSetLabelForFrame(GtkFrame *w, const wxString& label)
+{
+ GtkLabel* labelwidget = GTK_LABEL(gtk_frame_get_label_widget(w));
+ GTKSetLabelForLabel(labelwidget, label);
+}