]> git.saurik.com Git - wxWidgets.git/commitdiff
add support for GtkFontChooserDialog, new in GTK 3.2
authorPaul Cornett <paulcor@bullseye.com>
Tue, 15 Jan 2013 05:55:15 +0000 (05:55 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Tue, 15 Jan 2013 05:55:15 +0000 (05:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73373 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/fontdlg.h
include/wx/gtk/private/gtk2-compat.h
src/gtk/fontdlg.cpp

index 987241ec4c8431d59166826e6a0d18970e66b531..483c3e73acbbc6d6ad5b56872eb2d234d6f6d05d 100644 (file)
@@ -8,8 +8,8 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifndef __GTK_FONTDLGH__
-#define __GTK_FONTDLGH__
+#ifndef _WX_GTK_FONTDLG_H_
+#define _WX_GTK_FONTDLG_H_
 
 //-----------------------------------------------------------------------------
 // wxFontDialog
@@ -26,9 +26,6 @@ public:
 
     virtual ~wxFontDialog();
 
-    // implementation only
-    void SetChosenFont(const char *name);
-
 #if WXWIN_COMPATIBILITY_2_6
     // deprecated interface, don't use
     wxDEPRECATED( wxFontDialog(wxWindow *parent, const wxFontData *data) );
@@ -38,7 +35,6 @@ protected:
     // create the GTK dialog
     virtual bool DoCreate(wxWindow *parent);
 
-private:
     DECLARE_DYNAMIC_CLASS(wxFontDialog)
 };
 
index 0c8c0bdf50b44aa4b51f5632c8a5240bd5dc46d5..ca4e8832c1b7438d389cffcafdf40e997eb2a3e8 100644 (file)
@@ -129,18 +129,6 @@ static inline guint16 wx_gtk_entry_get_text_length(GtkEntry* entry)
 }
 #define gtk_entry_get_text_length wx_gtk_entry_get_text_length
 
-static inline GtkWidget* wx_gtk_font_selection_dialog_get_cancel_button(GtkFontSelectionDialog* fsd)
-{
-    return fsd->cancel_button;
-}
-#define gtk_font_selection_dialog_get_cancel_button wx_gtk_font_selection_dialog_get_cancel_button
-
-static inline GtkWidget* wx_gtk_font_selection_dialog_get_ok_button(GtkFontSelectionDialog* fsd)
-{
-    return fsd->ok_button;
-}
-#define gtk_font_selection_dialog_get_ok_button wx_gtk_font_selection_dialog_get_ok_button
-
 static inline const guchar* wx_gtk_selection_data_get_data(GtkSelectionData* selection_data)
 {
     return selection_data->data;
index ce8afcb7ad5dc5ea29868968ff039cd5825d6291..086d296b8536fdf4b2e2a70f801924f679c48a69 100644 (file)
 
 #ifndef WX_PRECOMP
     #include "wx/intl.h"
-    #include "wx/utils.h"
-    #include "wx/msgdlg.h"
 #endif
 
 #include "wx/fontutil.h"
-
 #include "wx/gtk/private.h"
 
 //-----------------------------------------------------------------------------
-// "delete_event"
+// "response"
 //-----------------------------------------------------------------------------
 
 extern "C" {
-static
-bool gtk_fontdialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxDialog *win )
+static void response(GtkDialog* dialog, int response_id, wxFontDialog* win)
 {
-/*
-    printf( "OnDelete from " );
-    if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
-        printf( win->GetClassInfo()->GetClassName() );
-    printf( ".\n" );
-*/
-
-    win->Close();
-
-    return true;
-}
-}
-
-//-----------------------------------------------------------------------------
-// "clicked" for OK-button
-//-----------------------------------------------------------------------------
-
-extern "C" {
-static
-void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dialog )
-{
-    GtkFontSelectionDialog *fontdlg = GTK_FONT_SELECTION_DIALOG(dialog->m_widget);
-
-    wxGtkString fontname(gtk_font_selection_dialog_get_font_name(fontdlg));
-    dialog->SetChosenFont( fontname);
-
-    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
-    event.SetEventObject( dialog );
-    dialog->HandleWindowEvent( event );
-}
-}
-
-//-----------------------------------------------------------------------------
-// "clicked" for Cancel-button
-//-----------------------------------------------------------------------------
+    int rc = wxID_CANCEL;
+    if (response_id == GTK_RESPONSE_OK)
+    {
+        rc = wxID_OK;
+#if GTK_CHECK_VERSION(3,2,0)
+        if (gtk_check_version(3,2,0) == NULL)
+        {
+            wxNativeFontInfo info;
+            info.description = gtk_font_chooser_get_font_desc(GTK_FONT_CHOOSER(dialog));
+            win->GetFontData().SetChosenFont(wxFont(info));
+        }
+        else
+#endif
+        {
+            GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(dialog);
+            wxGtkString name(gtk_font_selection_dialog_get_font_name(sel));
+            win->GetFontData().SetChosenFont(wxFont(wxString::FromUTF8(name)));
+        }
+    }
 
-extern "C" {
-static
-void gtk_fontdialog_cancel_callback( GtkWidget *WXUNUSED(w), wxFontDialog *dialog )
-{
-    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
-    event.SetEventObject( dialog );
-    dialog->HandleWindowEvent( event );
+    if (win->IsModal())
+        win->EndModal(rc);
+    else
+        win->Show(false);
 }
 }
 
@@ -96,24 +73,24 @@ bool wxFontDialog::DoCreate(wxWindow *parent)
         return false;
     }
 
-    wxString m_message( _("Choose font") );
-    m_widget = gtk_font_selection_dialog_new( wxGTK_CONV( m_message ) );
-    g_object_ref(m_widget);
-
+    const wxString message(_("Choose font"));
+    GtkWindow* gtk_parent = NULL;
     if (parent)
-        gtk_window_set_transient_for(GTK_WINDOW(m_widget),
-                                     GTK_WINDOW(parent->m_widget));
-
-    GtkFontSelectionDialog *sel = GTK_FONT_SELECTION_DIALOG(m_widget);
+        gtk_parent = GTK_WINDOW(parent->m_widget);
 
-    g_signal_connect (gtk_font_selection_dialog_get_ok_button(sel), "clicked",
-                      G_CALLBACK (gtk_fontdialog_ok_callback), this);
-
-    g_signal_connect (gtk_font_selection_dialog_get_cancel_button(sel), "clicked",
-                      G_CALLBACK (gtk_fontdialog_cancel_callback), this);
+#if GTK_CHECK_VERSION(3,2,0)
+    if (gtk_check_version(3,2,0) == NULL)
+        m_widget = gtk_font_chooser_dialog_new(wxGTK_CONV(message), gtk_parent);
+    else
+#endif
+    {
+        m_widget = gtk_font_selection_dialog_new(wxGTK_CONV(message));
+        if (gtk_parent)
+            gtk_window_set_transient_for(GTK_WINDOW(m_widget), gtk_parent);
+    }
+    g_object_ref(m_widget);
 
-    g_signal_connect (m_widget, "delete_event",
-                      G_CALLBACK (gtk_fontdialog_delete_callback), this);
+    g_signal_connect(m_widget, "response", G_CALLBACK(response), this);
 
     wxFont font = m_fontData.GetInitialFont();
     if( font.IsOk() )
@@ -122,9 +99,16 @@ bool wxFontDialog::DoCreate(wxWindow *parent)
 
         if ( info )
         {
-
-            const wxString& fontname = info->ToString();
-            gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
+#if GTK_CHECK_VERSION(3,2,0)
+            if (gtk_check_version(3,2,0) == NULL)
+                gtk_font_chooser_set_font_desc(GTK_FONT_CHOOSER(m_widget), info->description);
+            else
+#endif
+            {
+                const wxString& fontname = info->ToString();
+                GtkFontSelectionDialog* sel = GTK_FONT_SELECTION_DIALOG(m_widget);
+                gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
+            }
         }
         else
         {
@@ -140,9 +124,4 @@ wxFontDialog::~wxFontDialog()
 {
 }
 
-void wxFontDialog::SetChosenFont(const char *fontname)
-{
-    m_fontData.SetChosenFont(wxFont( wxString::FromUTF8(fontname) ));
-}
-
 #endif // wxUSE_FONTDLG && !__WXGPE__