From: Mattia Barbon Date: Sun, 30 Mar 2003 19:32:00 +0000 (+0000) Subject: Inherit LoadFile and SaveFile from wxTextCtrlBase, reduce X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ccb234b4d0b4f52ddb3100b55b53b32d1ea78d52 Inherit LoadFile and SaveFile from wxTextCtrlBase, reduce flicker caused by SetValue (the text itself still flickers a bit, but now borders don't). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19885 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/motif/textctrl.h b/include/wx/motif/textctrl.h index 59d3510eb1..113a3f301c 100644 --- a/include/wx/motif/textctrl.h +++ b/include/wx/motif/textctrl.h @@ -87,8 +87,6 @@ public: virtual void GetSelection(long* from, long* to) const; virtual bool IsEditable() const ; - virtual bool LoadFile(const wxString& file); - virtual bool SaveFile(const wxString& file); virtual void WriteText(const wxString& text); virtual void AppendText(const wxString& text); virtual void DiscardEdits(); diff --git a/src/motif/textctrl.cpp b/src/motif/textctrl.cpp index ced2808927..26d60b1878 100644 --- a/src/motif/textctrl.cpp +++ b/src/motif/textctrl.cpp @@ -208,7 +208,8 @@ bool wxTextCtrl::Create(wxWindow *parent, WXWidget wxTextCtrl::GetTopWidget() const { - return ((m_windowStyle & wxTE_MULTILINE) ? (WXWidget) XtParent((Widget) m_mainWidget) : m_mainWidget); + return IsMultiLine() ? (WXWidget)XtParent((Widget)m_mainWidget) + : m_mainWidget; } wxString wxTextCtrl::GetValue() const @@ -249,9 +250,15 @@ void wxTextCtrl::SetValue(const wxString& value) // do this instead... MB // + // with (at least) OpenMotif 2.1 this causes a lot of flicker +#if 0 XtVaSetValues( (Widget) m_mainWidget, XmNvalue, wxConstCast(value.c_str(), char), NULL); +#endif + + Clear(); + AppendText( value ); m_inSetValue = FALSE; } @@ -381,85 +388,6 @@ void wxTextCtrl::SetSelection(long from, long to) (Time) 0); } -bool wxTextCtrl::LoadFile(const wxString& file) -{ - if (!wxFileExists(file)) - return FALSE; - - m_fileName = file; - - Clear(); - - Widget textWidget = (Widget) m_mainWidget; - FILE *fp = 0; - - struct stat statb; - if ((stat (wxConstCast(file.c_str(), char), &statb) == -1) || (statb.st_mode & S_IFMT) != S_IFREG || - !(fp = fopen (wxConstCast(file.c_str(), char), "r"))) - { - return FALSE; - } - else - { - long len = statb.st_size; - char *text; - if (!(text = XtMalloc ((unsigned) (len + 1)))) - { - fclose (fp); - return FALSE; - } - if (fread (text, sizeof (char), len, fp) != (size_t) len) - { - } - fclose (fp); - - text[len] = 0; - XmTextSetString (textWidget, text); - // m_textPosition = len; - XtFree (text); - m_modified = FALSE; - return TRUE; - } -} - -// If file is null, try saved file name first -// Returns TRUE if succeeds. -bool wxTextCtrl::SaveFile(const wxString& file) -{ - wxString theFile(file); - if (theFile == "") - theFile = m_fileName; - if (theFile == "") - return FALSE; - m_fileName = theFile; - - Widget textWidget = (Widget) m_mainWidget; - FILE *fp; - - if (!(fp = fopen (wxConstCast(theFile.c_str(), char), "w"))) - { - return FALSE; - } - else - { - char *text = XmTextGetString (textWidget); - long len = XmTextGetLastPosition (textWidget); - - if (fwrite (text, sizeof (char), len, fp) != (size_t) len) - { - // Did not write whole file - } - // Make sure newline terminates the file - if (text[len - 1] != '\n') - fputc ('\n', fp); - - fclose (fp); - XtFree (text); - m_modified = FALSE; - return TRUE; - } -} - void wxTextCtrl::WriteText(const wxString& text) { long textPosition = GetInsertionPoint() + strlen (text); @@ -848,6 +776,9 @@ wxTextWindowModifyProc (Widget WXUNUSED(w), XtPointer clientData, XmTextVerifyCa } } + if(tw->InSetValue()) + return; + // If we're already within an OnChar, return: probably a programmatic // insertion. if (tw->m_tempCallbackStruct)