]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/combobox.cpp
Moved all the coordinate system calculation to wxDCBase
[wxWidgets.git] / src / gtk / combobox.cpp
index 9f631e21d887d4ce376d060c358835660ce509d9..00792deb148bf25ceeae1858051050ef937fcaea 100644 (file)
 
 #include "wx/combobox.h"
 
-#include "wx/settings.h"
-#include "wx/arrstr.h"
-#include "wx/intl.h"
-
-#include "wx/textctrl.h"    // for wxEVT_COMMAND_TEXT_UPDATED
+#ifndef WX_PRECOMP
+    #include "wx/intl.h"
+    #include "wx/settings.h"
+    #include "wx/textctrl.h"    // for wxEVT_COMMAND_TEXT_UPDATED
+    #include "wx/arrstr.h"
+#endif
 
 // We use GtkCombo which has been deprecated since GTK+ 2.3.0
 // in favour of GtkComboBox for <GTK2.4 runtime
@@ -44,8 +45,6 @@ extern "C" {
 static void
 gtkcombo_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
-    if (g_isIdle) wxapp_install_idle_handler();
-
     if (combo->m_ignoreNextUpdate)
     {
         combo->m_ignoreNextUpdate = false;
@@ -117,8 +116,6 @@ extern "C" {
 static void
 gtkcombo_combo_select_child_callback( GtkList *WXUNUSED(list), GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
-    if (g_isIdle) wxapp_install_idle_handler();
-
     if (!combo->m_hasVMT) return;
 
     if (g_blockEventsOnDrag) return;
@@ -170,8 +167,6 @@ extern "C" {
 static void
 gtkcombobox_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
-    if (g_isIdle) wxapp_install_idle_handler();
-
     if (!combo->m_hasVMT) return;
 
     wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() );
@@ -185,10 +180,11 @@ extern "C" {
 static void
 gtkcombobox_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 {
-    if (g_isIdle) wxapp_install_idle_handler();
-
     if (!combo->m_hasVMT) return;
 
+    if (combo->GetSelection() == -1)
+        return;
+
     wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, combo->GetId() );
     event.SetInt( combo->GetSelection() );
     event.SetString( combo->GetStringSelection() );
@@ -196,6 +192,7 @@ gtkcombobox_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
     combo->GetEventHandler()->ProcessEvent( event );
 }
 }
+
 #endif
 
 //-----------------------------------------------------------------------------
@@ -245,8 +242,6 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
                          const wxString& name )
 {
     m_ignoreNextUpdate = false;
-    m_needParent = true;
-    m_acceptsFocus = true;
     m_prevSelection = 0;
 
     if (!PreCreation( parent, pos, size ) ||
@@ -292,7 +287,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
         gtk_combo_set_case_sensitive( GTK_COMBO(m_widget), TRUE );
 
         if (style & wxNO_BORDER)
-            g_object_set( GTK_ENTRY( combo->entry ), "has-frame", FALSE, NULL );
+            g_object_set (combo->entry, "has-frame", FALSE, NULL );
 
         GtkWidget *list = combo->list;
 
@@ -344,6 +339,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
 
         g_signal_connect_after (m_widget, "changed",
                             G_CALLBACK (gtkcombobox_changed_callback), this);
+
     }
     else
 #endif
@@ -367,15 +363,9 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
                             this);
         g_signal_connect_after (entry, "changed",
                             G_CALLBACK (gtkcombo_text_changed_callback), this);
-
-        // This is required for tool bar support
-        // Doesn't currently work
-//        wxSize setsize = GetSize();
-//        gtk_widget_set_size_request( m_widget, setsize.x, setsize.y );
     }
 
-    SetBestSize(size); // need this too because this is a wxControlWithItems
-
+    SetInitialSize(size); // need this too because this is a wxControlWithItems
 
     return true;
 }
@@ -435,9 +425,9 @@ int wxComboBox::DoAppend( const wxString &item )
         GtkRcStyle *style = CreateWidgetStyle();
         if (style)
         {
-            gtk_widget_modify_style( GTK_WIDGET( list_item ), style );
+            gtk_widget_modify_style(list_item, style);
             GtkBin *bin = GTK_BIN( list_item );
-            GtkWidget *label = GTK_WIDGET( bin->child );
+            GtkWidget *label = bin->child;
             gtk_widget_modify_style( label, style );
             gtk_rc_style_unref( style );
         }
@@ -956,7 +946,10 @@ void wxComboBox::SetValue( const wxString& value )
 
     wxString tmp;
     if (!value.IsNull()) tmp = value;
+    
+    DisableEvents();
     gtk_entry_set_text( entry, wxGTK_CONV( tmp ) );
+    EnableEvents();
 
     InvalidateBestSize();
 }
@@ -1324,21 +1317,23 @@ GtkWidget* wxComboBox::GetConnectWidget()
     return GTK_WIDGET( entry );
 }
 
-bool wxComboBox::IsOwnGtkWindow( GdkWindow *window )
+GdkWindow *wxComboBox::GTKGetWindow(wxArrayGdkWindows& windows) const
 {
-    GtkEntry *entry = NULL;
 #ifdef __WXGTK24__
     if (!gtk_check_version(2,4,0))
     {
-        entry = GTK_ENTRY( GTK_BIN(m_widget)->child );
-        return (window == entry->text_area);
+        wxUnusedVar(windows);
+
+        return GTK_ENTRY(GTK_BIN(m_widget)->child)->text_area;
     }
     else
-#endif
+#endif // GTK+ 2.4
     {
-        entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry );
-        return ( (window == entry->text_area) ||
-                 (window == GTK_COMBO(m_widget)->button->window ) );
+        windows.push_back(GTK_ENTRY(GTK_COMBO(m_widget)->entry)->text_area);
+        windows.push_back(GTK_COMBO(m_widget)->button->window);
+
+        // indicate that we return multiple windows in the windows array
+        return NULL;
     }
 }