X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4fcfa27cb34a2c1f81090c8a928f8248cc728cd2..9c112555198f51fcec71106530cddba95a17f3dc:/src/gtk1/listbox.cpp?ds=sidebyside diff --git a/src/gtk1/listbox.cpp b/src/gtk1/listbox.cpp index 3865a4f20c..31bbf3815a 100644 --- a/src/gtk1/listbox.cpp +++ b/src/gtk1/listbox.cpp @@ -67,7 +67,8 @@ struct wxlistbox_idle_struct gint m_tag; }; -extern "C" gint wxlistbox_idle_callback( gpointer gdata ) +extern "C" { +static gint wxlistbox_idle_callback( gpointer gdata ) { wxlistbox_idle_struct* data = (wxlistbox_idle_struct*) gdata; gdk_threads_enter(); @@ -88,11 +89,13 @@ extern "C" gint wxlistbox_idle_callback( gpointer gdata ) return TRUE; } +} //----------------------------------------------------------------------------- // "focus_in_event" //----------------------------------------------------------------------------- +extern "C" { static gint gtk_listitem_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win ) @@ -120,11 +123,13 @@ static gint gtk_listitem_focus_in_callback( GtkWidget *widget, return FALSE; } +} //----------------------------------------------------------------------------- // "focus_out_event" //----------------------------------------------------------------------------- +extern "C" { static gint gtk_listitem_focus_out_callback( GtkWidget *widget, GdkEventFocus *gdk_event, wxWindowGTK *win ) { if (g_isIdle) @@ -150,6 +155,7 @@ static gint gtk_listitem_focus_out_callback( GtkWidget *widget, GdkEventFocus *g return FALSE; } +} //----------------------------------------------------------------------------- // "button_release_event" @@ -161,6 +167,7 @@ static gint gtk_listitem_focus_out_callback( GtkWidget *widget, GdkEventFocus *g this can lead to race conditions so that we emit the dclick event after the GDK_BUTTON_RELEASE event after the GDK_2BUTTON_PRESS event */ +extern "C" { static gint gtk_listbox_button_release_callback( GtkWidget * WXUNUSED(widget), GdkEventButton * WXUNUSED(gdk_event), @@ -200,11 +207,13 @@ gtk_listbox_button_release_callback( GtkWidget * WXUNUSED(widget), return FALSE; } +} //----------------------------------------------------------------------------- // "button_press_event" //----------------------------------------------------------------------------- +extern "C" { static gint gtk_listbox_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, @@ -237,11 +246,16 @@ gtk_listbox_button_press_callback( GtkWidget *widget, (((listbox->GetWindowStyleFlag() & wxLB_MULTIPLE) != 0) || ((listbox->GetWindowStyleFlag() & wxLB_EXTENDED) != 0)) ) { - if (listbox->IsSelected(sel)) - { - gtk_list_unselect_item( GTK_LIST(listbox->m_list), sel ); - return true; - } + listbox->m_blockEvent = TRUE; + + int i; + for (i = 0; i < (int)listbox->GetCount(); i++) + if (i != sel) + gtk_list_unselect_item( GTK_LIST(listbox->m_list), i ); + + listbox->m_blockEvent = FALSE; + + return false; } /* emit wxEVT_COMMAND_LISTBOX_DOUBLECLICKED later */ @@ -249,11 +263,13 @@ gtk_listbox_button_press_callback( GtkWidget *widget, return FALSE; } +} //----------------------------------------------------------------------------- // "key_press_event" //----------------------------------------------------------------------------- +extern "C" { static gint gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxListBox *listbox ) { @@ -344,23 +360,12 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis return FALSE; } +} //----------------------------------------------------------------------------- // "select" and "deselect" //----------------------------------------------------------------------------- -static void gtk_listitem_select_cb( GtkWidget *widget, wxListBox *listbox, bool is_selection ); - -static void gtk_listitem_select_callback( GtkWidget *widget, wxListBox *listbox ) -{ - gtk_listitem_select_cb( widget, listbox, TRUE ); -} - -static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox ) -{ - gtk_listitem_select_cb( widget, listbox, FALSE ); -} - static void gtk_listitem_select_cb( GtkWidget *widget, wxListBox *listbox, bool is_selection ) @@ -411,10 +416,25 @@ static void gtk_listitem_select_cb( GtkWidget *widget, listbox->GetEventHandler()->ProcessEvent( event ); } +extern "C" { +static void gtk_listitem_select_callback( GtkWidget *widget, wxListBox *listbox ) +{ + gtk_listitem_select_cb( widget, listbox, TRUE ); +} +} + +extern "C" { +static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox ) +{ + gtk_listitem_select_cb( widget, listbox, FALSE ); +} +} + //----------------------------------------------------------------------------- // wxListBox //----------------------------------------------------------------------------- +extern "C" { static gint gtk_listbox_realized_callback( GtkWidget *m_widget, wxListBox *win ) { @@ -427,6 +447,7 @@ gtk_listbox_realized_callback( GtkWidget *m_widget, wxListBox *win ) return false; } +} //----------------------------------------------------------------------------- // wxListBox