]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/combobox.cpp
Added window resize patch to wxFrame
[wxWidgets.git] / src / gtk / combobox.cpp
index 63162e8ed0f6cc2ab545790dde7d4846c7d8c406..91ed541378e17894c9929c9dba55bb468e8c782f 100644 (file)
 #endif
 
 #include "wx/combobox.h"
 #endif
 
 #include "wx/combobox.h"
+#include "wx/settings.h"
 
 #include <wx/intl.h>
 
 #include "gdk/gdk.h"
 #include "gtk/gtk.h"
 
 
 #include <wx/intl.h>
 
 #include "gdk/gdk.h"
 #include "gtk/gtk.h"
 
+//-----------------------------------------------------------------------------
+// idle system
+//-----------------------------------------------------------------------------
+
+extern void wxapp_install_idle_handler();
+extern bool g_isIdle;
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
@@ -31,11 +39,11 @@ extern bool   g_blockEventsOnDrag;
 static void
 gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
 static void
 gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
-    if (!combo->HasVMT())
-        return;
+    if (g_isIdle) wxapp_install_idle_handler();
 
 
-    if (g_blockEventsOnDrag)
-        return;
+    if (!combo->HasVMT()) return;
+
+    if (g_blockEventsOnDrag) return;
 
     if (combo->m_alreadySent)
     {
 
     if (combo->m_alreadySent)
     {
@@ -60,6 +68,8 @@ gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 static void
 gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
 static void
 gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
+    if (g_isIdle) wxapp_install_idle_handler();
+    
     wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() );
     event.SetString( combo->GetValue() );
     event.SetEventObject( combo );
     wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() );
     event.SetString( combo->GetValue() );
     event.SetEventObject( combo );
@@ -107,6 +117,10 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
 
     for (int i = 0; i < n; i++)
     {
 
     for (int i = 0; i < n; i++)
     {
+        /* don't send first event, which GTK sends aways when
+          inserting the first item */
+        m_alreadySent = TRUE;
+    
         GtkWidget *list_item = gtk_list_item_new_with_label( choices[i].mbc_str() );
 
         m_clientDataList.Append( (wxObject*)NULL );
         GtkWidget *list_item = gtk_list_item_new_with_label( choices[i].mbc_str() );
 
         m_clientDataList.Append( (wxObject*)NULL );
@@ -114,10 +128,10 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
 
         gtk_container_add( GTK_CONTAINER(list), list_item );
 
 
         gtk_container_add( GTK_CONTAINER(list), list_item );
 
-        gtk_widget_show( list_item );
-
         gtk_signal_connect( GTK_OBJECT(list_item), "select",
         gtk_signal_connect( GTK_OBJECT(list_item), "select",
-        GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+           GTK_SIGNAL_FUNC(gtk_combo_clicked_callback), (gpointer)this );
+
+        gtk_widget_show( list_item );
     }
 
     m_parent->AddChild( this );
     }
 
     m_parent->AddChild( this );
@@ -136,7 +150,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
     gtk_signal_connect( GTK_OBJECT(GTK_COMBO(m_widget)->entry), "changed",
       GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 
     gtk_signal_connect( GTK_OBJECT(GTK_COMBO(m_widget)->entry), "changed",
       GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
 
-    SetBackgroundColour( parent->GetBackgroundColour() );
+    SetBackgroundColour( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_WINDOW ) );
     SetForegroundColour( parent->GetForegroundColour() );
     SetFont( parent->GetFont() );
 
     SetForegroundColour( parent->GetForegroundColour() );
     SetFont( parent->GetFont() );
 
@@ -312,7 +326,7 @@ int wxComboBox::FindString( const wxString &item )
     {
         GtkBin *bin = GTK_BIN( child->data );
         GtkLabel *label = GTK_LABEL( bin->child );
     {
         GtkBin *bin = GTK_BIN( child->data );
         GtkLabel *label = GTK_LABEL( bin->child );
-        if (item == label->label)
+        if (item == wxString(label->label,*wxConvCurrent))
             return count;
         count++;
         child = child->next;
             return count;
         count++;
         child = child->next;
@@ -357,7 +371,7 @@ wxString wxComboBox::GetString( int n ) const
     {
         GtkBin *bin = GTK_BIN( child->data );
         GtkLabel *label = GTK_LABEL( bin->child );
     {
         GtkBin *bin = GTK_BIN( child->data );
         GtkLabel *label = GTK_LABEL( bin->child );
-        str = label->label;
+        str = wxString(label->label,*wxConvCurrent);
     }
     else
     {
     }
     else
     {
@@ -377,7 +391,7 @@ wxString wxComboBox::GetStringSelection() const
     if (selection)
     {
         GtkBin *bin = GTK_BIN( selection->data );
     if (selection)
     {
         GtkBin *bin = GTK_BIN( selection->data );
-        wxString tmp = GTK_LABEL( bin->child )->label;
+        wxString tmp = wxString(GTK_LABEL( bin->child )->label,*wxConvCurrent);
         return tmp;
     }
 
         return tmp;
     }
 
@@ -418,7 +432,7 @@ void wxComboBox::SetStringSelection( const wxString &string )
 wxString wxComboBox::GetValue() const
 {
     GtkWidget *entry = GTK_COMBO(m_widget)->entry;
 wxString wxComboBox::GetValue() const
 {
     GtkWidget *entry = GTK_COMBO(m_widget)->entry;
-    wxString tmp = gtk_entry_get_text( GTK_ENTRY(entry) );
+    wxString tmp = wxString(gtk_entry_get_text( GTK_ENTRY(entry) ),*wxConvCurrent);
     return tmp;
 }
 
     return tmp;
 }
 
@@ -570,18 +584,20 @@ void wxComboBox::OnSize( wxSizeEvent &event )
 {
     wxControl::OnSize( event );
 
 {
     wxControl::OnSize( event );
 
+/*
     int w = 21;
     gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
 
     gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
     gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
     int w = 21;
     gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );
 
     gtk_widget_set_uposition( GTK_COMBO(m_widget)->button, m_x+m_width-w, m_y );
     gtk_widget_set_usize( GTK_COMBO(m_widget)->button, w, m_height );
+*/
 }
 
 void wxComboBox::ApplyWidgetStyle()
 {
     SetWidgetStyle();
 
 }
 
 void wxComboBox::ApplyWidgetStyle()
 {
     SetWidgetStyle();
 
-    gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
+//    gtk_widget_set_style( GTK_COMBO(m_widget)->button, m_widgetStyle );
     gtk_widget_set_style( GTK_COMBO(m_widget)->entry, m_widgetStyle );
     gtk_widget_set_style( GTK_COMBO(m_widget)->list, m_widgetStyle );
 
     gtk_widget_set_style( GTK_COMBO(m_widget)->entry, m_widgetStyle );
     gtk_widget_set_style( GTK_COMBO(m_widget)->list, m_widgetStyle );