void wxSocketImplUnix::OnWriteWaiting() { wxASSERT_MSG( m_fd != INVALID_SOCKET, "invalid socket ready for writing?" ); // see comment in the beginning of OnReadWaiting() above DisableEvents(wxSOCKET_OUTPUT_FLAG); // check whether this is a notification for the completion of a // non-blocking connect() if ( m_establishing && !m_server ) { m_establishing = false; // check whether we connected successfully int error; SOCKOPTLEN_T len = sizeof(error); getsockopt(m_fd, SOL_SOCKET, SO_ERROR, (char*)&error, &len); if ( error ) { OnStateChange(wxSOCKET_LOST); return; } OnStateChange(wxSOCKET_CONNECTION); } OnStateChange(wxSOCKET_OUTPUT); }
void wxComboBox::DoDeleteOneItem(unsigned int n) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list ); GList *child = g_list_nth( listbox->children, n ); if (!child) { wxFAIL_MSG(wxT("wrong index")); return; } DisableEvents(); GList *list = g_list_append( NULL, child->data ); gtk_list_remove_items( listbox, list ); g_list_free( list ); wxList::compatibility_iterator node = m_clientObjectList.Item( n ); if (node) { m_clientObjectList.Erase( node ); } node = m_clientDataList.Item( n ); if (node) m_clientDataList.Erase( node ); EnableEvents(); InvalidateBestSize(); }
void wxSocketImplUnix::OnReadWaiting() { wxASSERT_MSG( m_fd != INVALID_SOCKET, "invalid socket ready for reading?" ); // we need to disable the read notifications until we read all the data // already available for the socket, otherwise we're going to keep getting // them continuously which is worse than inefficient: as IO notifications // have higher priority than idle events in e.g. GTK+, our pending events // whose handlers typically call Read() which would consume the data and so // stop the notifications flood would never be dispatched at all if the // notifications were not disabled DisableEvents(wxSOCKET_INPUT_FLAG); // find out what are we going to notify about exactly wxSocketNotify notify; // TCP listening sockets become ready for reading when there is a pending // connection if ( m_server && m_stream ) { notify = wxSOCKET_CONNECTION; } else // check if there is really any input available { switch ( CheckForInput() ) { case 1: notify = wxSOCKET_INPUT; break; case 0: // reading 0 bytes for a TCP socket means that the connection // was closed by peer but for UDP it just means that we got an // empty datagram notify = m_stream ? wxSOCKET_LOST : wxSOCKET_INPUT; break; default: wxFAIL_MSG( "unexpected CheckForInput() return value" ); wxFALLTHROUGH; case -1: if ( GetLastError() == wxSOCKET_WOULDBLOCK ) { // just a spurious wake up EnableEvents(wxSOCKET_INPUT_FLAG); return; } notify = wxSOCKET_LOST; } } OnStateChange(notify); }
int wxComboBox::DoInsert(const wxString &item, unsigned int pos) { wxCHECK_MSG( !(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list")); wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") ); wxCHECK_MSG( IsValidInsert(pos), -1, wxT("invalid index") ); unsigned int count = GetCount(); if (pos == count) return Append(item); #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); gtk_combo_box_insert_text( combobox, pos, wxGTK_CONV( item ) ); } else #endif { DisableEvents(); GtkWidget *list = GTK_COMBO(m_widget)->list; GtkWidget *list_item = gtk_list_item_new_with_label( wxGTK_CONV( item ) ); GList *gitem_list = g_list_alloc (); gitem_list->data = list_item; gtk_list_insert_items( GTK_LIST (list), gitem_list, pos ); if (GTK_WIDGET_REALIZED(m_widget)) { gtk_widget_realize( list_item ); gtk_widget_realize( GTK_BIN(list_item)->child ); ApplyWidgetStyle(); } gtk_widget_show( list_item ); EnableEvents(); } count = GetCount(); if ( m_clientDataList.GetCount() < count ) m_clientDataList.Insert( pos, (wxObject*) NULL ); if ( m_clientObjectList.GetCount() < count ) m_clientObjectList.Insert( pos, (wxObject*) NULL ); InvalidateBestSize(); return pos; }
void wxChoice::SetSelection( int n ) { wxCHECK_RET( m_widget != NULL, wxT("invalid control") ); DisableEvents(); GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); gtk_combo_box_set_active( combobox, n ); EnableEvents(); }
int wxComboBox::DoAppend( const wxString &item ) { wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") ); #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); gtk_combo_box_append_text( combobox, wxGTK_CONV( item ) ); } else #endif { DisableEvents(); GtkWidget *list = GTK_COMBO(m_widget)->list; GtkWidget *list_item = gtk_list_item_new_with_label( wxGTK_CONV( item ) ); gtk_container_add( GTK_CONTAINER(list), list_item ); if (GTK_WIDGET_REALIZED(m_widget)) { gtk_widget_realize( list_item ); gtk_widget_realize( GTK_BIN(list_item)->child ); } // Apply current widget style to the new list_item GtkRcStyle *style = CreateWidgetStyle(); if (style) { gtk_widget_modify_style( GTK_WIDGET( list_item ), style ); GtkBin *bin = GTK_BIN( list_item ); GtkWidget *label = GTK_WIDGET( bin->child ); gtk_widget_modify_style( label, style ); gtk_rc_style_unref( style ); } gtk_widget_show( list_item ); EnableEvents(); } const unsigned int count = GetCount(); if ( m_clientDataList.GetCount() < count ) m_clientDataList.Append( (wxObject*) NULL ); if ( m_clientObjectList.GetCount() < count ) m_clientObjectList.Append( (wxObject*) NULL ); InvalidateBestSize(); return count - 1; }
void wxComboBox::SetSelection( int n ) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); DisableEvents(); GtkWidget *list = GTK_COMBO(m_widget)->list; gtk_list_unselect_item( GTK_LIST(list), m_prevSelection ); gtk_list_select_item( GTK_LIST(list), n ); m_prevSelection = n; EnableEvents(); }
void wxComboBox::Delete(unsigned int n) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { wxCHECK_RET( IsValid(n), wxT("invalid index") ); GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); gtk_combo_box_remove_text( combobox, n ); } else #endif { GtkList *listbox = GTK_LIST( GTK_COMBO(m_widget)->list ); GList *child = g_list_nth( listbox->children, n ); if (!child) { wxFAIL_MSG(wxT("wrong index")); return; } DisableEvents(); GList *list = g_list_append( (GList*) NULL, child->data ); gtk_list_remove_items( listbox, list ); g_list_free( list ); EnableEvents(); } wxList::compatibility_iterator node = m_clientObjectList.Item( n ); if (node) { wxClientData *cd = (wxClientData*)node->GetData(); if (cd) delete cd; m_clientObjectList.Erase( node ); } node = m_clientDataList.Item( n ); if (node) m_clientDataList.Erase( node ); InvalidateBestSize(); }
void wxComboBox::DoClear() { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); DisableEvents(); GtkWidget *list = GTK_COMBO(m_widget)->list; gtk_list_clear_items( GTK_LIST(list), 0, (int)GetCount() ); m_clientObjectList.Clear(); m_clientDataList.Clear(); EnableEvents(); InvalidateBestSize(); }
void wxChoice::DoClear() { wxCHECK_RET( m_widget != NULL, wxT("invalid control") ); DisableEvents(); GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); GtkTreeModel* model = gtk_combo_box_get_model( combobox ); gtk_list_store_clear(GTK_LIST_STORE(model)); m_clientData.Clear(); if (m_strings) m_strings->Clear(); EnableEvents(); InvalidateBestSize(); }
void wxComboBox::SetSelection( int n ) { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); DisableEvents(); #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); gtk_combo_box_set_active( combobox, n ); } else #endif { GtkWidget *list = GTK_COMBO(m_widget)->list; gtk_list_unselect_item( GTK_LIST(list), m_prevSelection ); gtk_list_select_item( GTK_LIST(list), n ); m_prevSelection = n; } EnableEvents(); }
void wxComboBox::Clear() { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); DisableEvents(); GtkWidget *list = GTK_COMBO(m_widget)->list; gtk_list_clear_items( GTK_LIST(list), 0, (int)GetCount() ); wxList::compatibility_iterator node = m_clientObjectList.GetFirst(); while (node) { wxClientData *cd = (wxClientData*)node->GetData(); if (cd) delete cd; node = node->GetNext(); } m_clientObjectList.Clear(); m_clientDataList.Clear(); EnableEvents(); InvalidateBestSize(); }
void wxComboBox::Clear() { wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") ); DisableEvents(); #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); const unsigned int count = GetCount(); for (unsigned int i = 0; i < count; i++) gtk_combo_box_remove_text( combobox, 0 ); } else // GTK+ < 2.4.0 #endif // __WXGTK24__ { GtkWidget *list = GTK_COMBO(m_widget)->list; gtk_list_clear_items( GTK_LIST(list), 0, GetCount() ); } wxList::compatibility_iterator node = m_clientObjectList.GetFirst(); while (node) { wxClientData *cd = (wxClientData*)node->GetData(); delete cd; node = node->GetNext(); } m_clientObjectList.Clear(); m_clientDataList.Clear(); EnableEvents(); InvalidateBestSize(); }
int wxComboBox::DoInsertItems(const wxArrayStringsAdapter& items, unsigned int pos, void **clientData, wxClientDataType type) { wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid combobox") ); DisableEvents(); GtkWidget *list = GTK_COMBO(m_widget)->list; GtkRcStyle *style = CreateWidgetStyle(); const unsigned int count = items.GetCount(); for( unsigned int i = 0; i < count; ++i, ++pos ) { GtkWidget * list_item = gtk_list_item_new_with_label( wxGTK_CONV( items[i] ) ); if ( pos == GetCount() ) { gtk_container_add( GTK_CONTAINER(list), list_item ); } else // insert, not append { GList *gitem_list = g_list_alloc (); gitem_list->data = list_item; gtk_list_insert_items( GTK_LIST (list), gitem_list, pos ); } if (GTK_WIDGET_REALIZED(m_widget)) { gtk_widget_realize( list_item ); gtk_widget_realize( GTK_BIN(list_item)->child ); if (style) { gtk_widget_modify_style( GTK_WIDGET( list_item ), style ); GtkBin *bin = GTK_BIN( list_item ); GtkWidget *label = GTK_WIDGET( bin->child ); gtk_widget_modify_style( label, style ); } } gtk_widget_show( list_item ); if ( m_clientDataList.GetCount() < GetCount() ) m_clientDataList.Insert( pos, NULL ); if ( m_clientObjectList.GetCount() < GetCount() ) m_clientObjectList.Insert( pos, NULL ); AssignNewItemClientData(pos, clientData, i, type); } if ( style ) gtk_rc_style_unref( style ); EnableEvents(); InvalidateBestSize(); return pos - 1; }