From 07f5b19a15a8664abad7b5176c0260aacbbbc174 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sun, 2 Jan 2000 16:25:28 +0000 Subject: [PATCH] wxSpinCtrl no longer emits event when changed programmatically. Some GUI thread things and tests, Change for borders around cmposite controls. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5173 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/gtk/changes.txt | 5 +++++ include/wx/gtk/spinctrl.h | 2 ++ include/wx/gtk1/spinctrl.h | 2 ++ samples/controls/controls.cpp | 2 +- samples/thread/test.cpp | 21 +++++++++++++++++---- src/gtk/app.cpp | 2 +- src/gtk/spinctrl.cpp | 26 +++++++++++++++++++++----- src/gtk/window.cpp | 6 +++--- src/gtk1/app.cpp | 2 +- src/gtk1/spinctrl.cpp | 26 +++++++++++++++++++++----- src/gtk1/window.cpp | 6 +++--- 11 files changed, 77 insertions(+), 23 deletions(-) diff --git a/docs/gtk/changes.txt b/docs/gtk/changes.txt index 8148fdf3ea..2c748f0ea3 100644 --- a/docs/gtk/changes.txt +++ b/docs/gtk/changes.txt @@ -6,6 +6,11 @@ and/or 16 bit colour mode? I need this for testing purposes, i.e. this person could help me by running a small testprogram and sending me the output. +Added Calendar control. + +Added classes for recoding text (e.g. from Windows encoding to ISO encoding +and for converting to and from Unicode). + Updated the 64-bit long class (a class that substitutes a 64-bit int type on platforms which don't provide a native one). diff --git a/include/wx/gtk/spinctrl.h b/include/wx/gtk/spinctrl.h index e51437430c..14065fb96a 100644 --- a/include/wx/gtk/spinctrl.h +++ b/include/wx/gtk/spinctrl.h @@ -65,6 +65,8 @@ public: bool IsOwnGtkWindow( GdkWindow *window ); void ApplyWidgetStyle(); + void GtkDisableEvents(); + void GtkEnableEvents(); GtkAdjustment *m_adjust; float m_oldPos; diff --git a/include/wx/gtk1/spinctrl.h b/include/wx/gtk1/spinctrl.h index e51437430c..14065fb96a 100644 --- a/include/wx/gtk1/spinctrl.h +++ b/include/wx/gtk1/spinctrl.h @@ -65,6 +65,8 @@ public: bool IsOwnGtkWindow( GdkWindow *window ); void ApplyWidgetStyle(); + void GtkDisableEvents(); + void GtkEnableEvents(); GtkAdjustment *m_adjust; float m_oldPos; diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index ac99563156..68df474759 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -530,7 +530,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) panel = new wxPanel(m_notebook); (void)new wxStaticBox( panel, -1, "Box around combobox", wxPoint(5, 5), wxSize(150, 100)); - m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(20,20), wxSize(120,-1), 5, choices, wxCB_READONLY ); + m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(20,25), wxSize(120,-1), 5, choices, wxCB_READONLY ); (void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) ); (void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) ); (void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) ); diff --git a/samples/thread/test.cpp b/samples/thread/test.cpp index 7996d8f532..8133847ac5 100644 --- a/samples/thread/test.cpp +++ b/samples/thread/test.cpp @@ -235,11 +235,21 @@ void *MyWorkerThread::Entry() if ( TestDestroy() ) break; + wxString text; + text.Printf("[%u] Thread 0x%x here!!", m_count, GetId()); + + // create any type of command event here wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, WORKER_EVENT ); event.SetInt( WORKER_EVENT ); + event.SetString( text ); + + // send in a thread-safe way wxPostEvent( m_frame, event ); + + // same as: + // m_frame->AddPendingEvent( event ); - // wxSleep() can't be called from non-GUI thread! + // wxSleep() can't be called from non-main thread! wxThread::Sleep(1000); } @@ -495,7 +505,8 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) { wxMessageDialog dialog(this, "wxWindows multithreaded application sample\n" "(c) 1998 Julian Smart, Guilhem Lavaux\n" - "(c) 1999 Vadim Zeitlin", + "(c) 1999 Vadim Zeitlin\n" + "(c) 2000 Robert Roebling", "About wxThread sample", wxOK | wxICON_INFORMATION); @@ -519,8 +530,10 @@ void MyFrame::OnStartWorker(wxCommandEvent& WXUNUSED(event)) thread->Run(); } -void MyFrame::OnWorkerEvent(wxCommandEvent& WXUNUSED(event)) +void MyFrame::OnWorkerEvent(wxCommandEvent& event) { - WriteText( "Got message from worker thread\n" ); + WriteText( "Got message from worker thread: " ); + WriteText( event.GetString() ); + WriteText( "\n" ); } diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index 43a5a92aa9..7bc83fdbd7 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -178,7 +178,7 @@ void wxapp_install_thread_wakeup() { if (wxTheApp->m_wakeUpTimerTag) return; - wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 500, wxapp_wakeup_timerout_callback, (gpointer) NULL ); + wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 50, wxapp_wakeup_timerout_callback, (gpointer) NULL ); } void wxapp_uninstall_thread_wakeup() diff --git a/src/gtk/spinctrl.cpp b/src/gtk/spinctrl.cpp index 766b1c58ae..80f42b1354 100644 --- a/src/gtk/spinctrl.cpp +++ b/src/gtk/spinctrl.cpp @@ -101,11 +101,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id, gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget), (int)(m_windowStyle & wxSP_WRAP) ); - gtk_signal_connect( GTK_OBJECT (m_adjust), - "value_changed", - (GtkSignalFunc) gtk_spinctrl_callback, - (gpointer) this ); - + GtkEnableEvents(); m_parent->DoAddChild( this ); PostCreation(); @@ -119,6 +115,22 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id, return TRUE; } +void wxSpinCtrl::GtkDisableEvents() +{ + gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust), + GTK_SIGNAL_FUNC(gtk_spinctrl_callback), + (gpointer) this ); + +} + +void wxSpinCtrl::GtkEnableEvents() +{ + gtk_signal_connect( GTK_OBJECT (m_adjust), + "value_changed", + GTK_SIGNAL_FUNC(gtk_spinctrl_callback), + (gpointer) this ); +} + int wxSpinCtrl::GetMin() const { wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); @@ -153,7 +165,9 @@ void wxSpinCtrl::SetValue( const wxString& value ) else { // invalid number - set text as is (wxMSW compatible) + GtkDisableEvents(); gtk_entry_set_text( GTK_ENTRY(m_widget), value.mbc_str() ); + GtkEnableEvents(); } } @@ -167,7 +181,9 @@ void wxSpinCtrl::SetValue( int value ) m_adjust->value = fpos; + GtkDisableEvents(); gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" ); + GtkEnableEvents(); } void wxSpinCtrl::SetRange(int minVal, int maxVal) diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 6be2cdd8c5..a1484b1489 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -327,7 +327,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win ) GTK_STATE_NORMAL, GTK_SHADOW_OUT, dx, dy, - win->m_width-dw, win->m_height-dh ); + widget->allocation.width-dw, widget->allocation.height-dh ); return; } @@ -338,7 +338,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win ) GTK_STATE_NORMAL, GTK_SHADOW_IN, dx, dy, - win->m_width-dw, win->m_height-dh ); + widget->allocation.width-dw, widget->allocation.height-dh ); return; } @@ -349,7 +349,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win ) gdk_gc_set_foreground( gc, &widget->style->black ); gdk_draw_rectangle( widget->window, gc, FALSE, dx, dy, - win->m_width-dw-1, win->m_height-dh-1 ); + widget->allocation.width-dw-1, widget->allocation.height-dh-1 ); gdk_gc_unref( gc ); return; } diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index 43a5a92aa9..7bc83fdbd7 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -178,7 +178,7 @@ void wxapp_install_thread_wakeup() { if (wxTheApp->m_wakeUpTimerTag) return; - wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 500, wxapp_wakeup_timerout_callback, (gpointer) NULL ); + wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 50, wxapp_wakeup_timerout_callback, (gpointer) NULL ); } void wxapp_uninstall_thread_wakeup() diff --git a/src/gtk1/spinctrl.cpp b/src/gtk1/spinctrl.cpp index 766b1c58ae..80f42b1354 100644 --- a/src/gtk1/spinctrl.cpp +++ b/src/gtk1/spinctrl.cpp @@ -101,11 +101,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id, gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget), (int)(m_windowStyle & wxSP_WRAP) ); - gtk_signal_connect( GTK_OBJECT (m_adjust), - "value_changed", - (GtkSignalFunc) gtk_spinctrl_callback, - (gpointer) this ); - + GtkEnableEvents(); m_parent->DoAddChild( this ); PostCreation(); @@ -119,6 +115,22 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id, return TRUE; } +void wxSpinCtrl::GtkDisableEvents() +{ + gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust), + GTK_SIGNAL_FUNC(gtk_spinctrl_callback), + (gpointer) this ); + +} + +void wxSpinCtrl::GtkEnableEvents() +{ + gtk_signal_connect( GTK_OBJECT (m_adjust), + "value_changed", + GTK_SIGNAL_FUNC(gtk_spinctrl_callback), + (gpointer) this ); +} + int wxSpinCtrl::GetMin() const { wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); @@ -153,7 +165,9 @@ void wxSpinCtrl::SetValue( const wxString& value ) else { // invalid number - set text as is (wxMSW compatible) + GtkDisableEvents(); gtk_entry_set_text( GTK_ENTRY(m_widget), value.mbc_str() ); + GtkEnableEvents(); } } @@ -167,7 +181,9 @@ void wxSpinCtrl::SetValue( int value ) m_adjust->value = fpos; + GtkDisableEvents(); gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" ); + GtkEnableEvents(); } void wxSpinCtrl::SetRange(int minVal, int maxVal) diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 6be2cdd8c5..a1484b1489 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -327,7 +327,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win ) GTK_STATE_NORMAL, GTK_SHADOW_OUT, dx, dy, - win->m_width-dw, win->m_height-dh ); + widget->allocation.width-dw, widget->allocation.height-dh ); return; } @@ -338,7 +338,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win ) GTK_STATE_NORMAL, GTK_SHADOW_IN, dx, dy, - win->m_width-dw, win->m_height-dh ); + widget->allocation.width-dw, widget->allocation.height-dh ); return; } @@ -349,7 +349,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win ) gdk_gc_set_foreground( gc, &widget->style->black ); gdk_draw_rectangle( widget->window, gc, FALSE, dx, dy, - win->m_width-dw-1, win->m_height-dh-1 ); + widget->allocation.width-dw-1, widget->allocation.height-dh-1 ); gdk_gc_unref( gc ); return; }