]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxFFileStream base on wxFFile (as opposed to wxFile)
authorRobert Roebling <robert@roebling.de>
Sun, 22 Aug 1999 16:12:48 +0000 (16:12 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 22 Aug 1999 16:12:48 +0000 (16:12 +0000)
  Implemented the "endl" thing for text streams,
  Corrected cursor display for text ctrls,
  Corrected the strange spin button behaviour when dynamically
    changing its range
  Corrcected bug in wxListBox when programmatically unselecting
   an item in multi-select mode (bug reports are getting esoteric)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3440 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

17 files changed:
docs/latex/wx/strmfile.tex
docs/latex/wx/txtstrm.tex
include/wx/gtk/textctrl.h
include/wx/gtk1/textctrl.h
include/wx/txtstrm.h
include/wx/wfstream.h
samples/controls/controls.cpp
samples/text/Makefile.in
src/common/wfstream.cpp
src/gtk/listbox.cpp
src/gtk/spinbutt.cpp
src/gtk/textctrl.cpp
src/gtk/window.cpp
src/gtk1/listbox.cpp
src/gtk1/spinbutt.cpp
src/gtk1/textctrl.cpp
src/gtk1/window.cpp

index fdbf8bae0846cacf9f3dbc26df31988cccb75bf2..8e66bfdcecbe571aebafc46b0c1dba03394c8f31 100644 (file)
@@ -3,6 +3,13 @@
 % -----------------------------------------------------------------------------
 \section{\class{wxFileInputStream}}\label{wxfileinputstream}
 
+This classes represent data streams to and from a file. There are actually
+two such groups of classes: those documented here, and another group called
+wxFFileInputStream, wxFFileOutputStream and wxFFileStream which are not
+based on file descriptors (and their wxWindows equivalent wxFile) but the
+FILE* type (and wxFFile). Apart from the different constructor ("FILE *file"
+instead if "int fd") their interface is identical.
+
 \wxheading{Derived from}
 
 \helpref{wxInputStream}{wxinputstream}
index a2e4e5413690825e4c2f205924f420bae7f4cad0..559209c18264f6bcfcd363c75d3fec3d35f23702 100644 (file)
@@ -91,14 +91,14 @@ $\backslash$n or $\backslash$r$\backslash$n or $\backslash$r.
 This class provides functions that write text datas using an output stream.
 So, you can write \it{text} floats, integers.
 
-For example:
+You can also simulate the C++ cout class:
 \begin{verbatim}
-  wxFileOutputStream output( "mytext.txt" );
-  wxTextOutputStream text( output );
+  wxFFileOutputStream output( stderr );
+  wxTextOutputStream cout( output );
 
-  output << "This is a text line" << endl;
-  output << 1234;
-  output << 1.23456;
+  cout << "This is a text line" << endl;
+  cout << 1234;
+  cout << 1.23456;
 \end{verbatim}
 
 The wxTextOutputStream writes text files (or streams) on DOS, Macintosh
index 8844ee99fecb436f3c2d2db2aa452138190e6847..c437884c3cfc12d4ac456bbee1e194539e8bb881 100644 (file)
@@ -127,6 +127,7 @@ public:
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
     void CalculateScrollbar();
+    void OnInternalIdle();
 
     void SetModified() { m_modified = TRUE; }
 
index 8844ee99fecb436f3c2d2db2aa452138190e6847..c437884c3cfc12d4ac456bbee1e194539e8bb881 100644 (file)
@@ -127,6 +127,7 @@ public:
     bool IsOwnGtkWindow( GdkWindow *window );
     void ApplyWidgetStyle();
     void CalculateScrollbar();
+    void OnInternalIdle();
 
     void SetModified() { m_modified = TRUE; }
 
index aa2378fb52e6f471a84373d59f131da9d4626129..afa18e3bce7a95364247873b6d4cb357fb26e434 100644 (file)
 
 #if wxUSE_STREAMS
 
+class WXDLLEXPORT wxTextInputStream;
+class WXDLLEXPORT wxTextOutputStream;
+
+typedef wxTextInputStream& (*__wxTextInputManip)(wxTextInputStream&);
+typedef wxTextOutputStream& (*__wxTextOutputManip)(wxTextOutputStream&);
+
+WXDLLEXPORT wxTextOutputStream &endl( wxTextOutputStream &stream );
+
 class WXDLLEXPORT wxTextInputStream {
 public:
   wxTextInputStream(wxInputStream& s);
@@ -40,7 +48,9 @@ public:
   wxTextInputStream& operator>>(wxUint32& i);
   wxTextInputStream& operator>>(double& i);
   wxTextInputStream& operator>>(float& f);
-
+  
+  wxTextInputStream& operator>>( __wxTextInputManip func) { return func(*this); }
+  
  protected:
   wxInputStream *m_input;
   
@@ -69,12 +79,12 @@ class WXDLLEXPORT wxTextOutputStream {
   wxTextOutputStream& operator<<(double f);
   wxTextOutputStream& operator<<(float f);
  
+  wxTextOutputStream& operator<<( __wxTextOutputManip func) { return func(*this); }
+  
  protected:
   wxOutputStream *m_output;
 };
 
-wxTextOutputStream &endl( wxTextOutputStream &stream );
-
 #endif
   // wxUSE_STREAMS
 
index 33217d75b5fc64dad716a2a5016a1f7a6f2f3b2c..49fd49d00a8b3d92ebc95bc150391dbbe73448d1 100644 (file)
 #include "wx/string.h"
 #include "wx/stream.h"
 #include "wx/file.h"
+#include "wx/ffile.h"
+
+// ----------------------------------------------------------------------------
+// wxFileStream using wxFile
+// ----------------------------------------------------------------------------
 
 class wxFileInputStream: public wxInputStream {
  public:
@@ -81,6 +86,65 @@ class wxFileStream: public wxFileInputStream, public wxFileOutputStream {
   wxFileStream(const wxString& fileName);
 };
 
+// ----------------------------------------------------------------------------
+// wxFFileStream using wxFFile
+// ----------------------------------------------------------------------------
+
+class wxFFileInputStream: public wxInputStream {
+ public:
+  wxFFileInputStream(const wxString& ifileName);
+  wxFFileInputStream(wxFFile& file);
+  wxFFileInputStream(FILE *file);
+  ~wxFFileInputStream();
+
+  size_t GetSize() const;
+
+  bool Ok() const { return m_file->IsOpened(); }
+
+ protected:
+  wxFFileInputStream();
+
+  size_t OnSysRead(void *buffer, size_t size);
+  off_t OnSysSeek(off_t pos, wxSeekMode mode);
+  off_t OnSysTell() const;
+
+ protected:
+  wxFFile *m_file;
+  bool m_file_destroy;
+};
+
+class wxFFileOutputStream: public wxOutputStream {
+ public:
+  wxFFileOutputStream(const wxString& fileName);
+  wxFFileOutputStream(wxFFile& file);
+  wxFFileOutputStream(FILE *file);
+  virtual ~wxFFileOutputStream();
+
+  // To solve an ambiguity on GCC
+//  inline wxOutputStream& Write(const void *buffer, size_t size)
+//     { return wxOutputStream::Write(buffer, size); }
+
+  void Sync();
+  size_t GetSize() const;
+
+  bool Ok() const { return m_file->IsOpened(); }
+
+ protected:
+  wxFFileOutputStream();
+
+  size_t OnSysWrite(const void *buffer, size_t size);
+  off_t OnSysSeek(off_t pos, wxSeekMode mode);
+  off_t OnSysTell() const;
+
+ protected:
+  wxFFile *m_file;
+  bool m_file_destroy;
+};
+
+class wxFFileStream: public wxFFileInputStream, public wxFFileOutputStream {
+ public:
+  wxFFileStream(const wxString& fileName);
+};
 #endif
   // wxUSE_STREAMS && wxUSE_FILE
 
index 85d378f7666ab8d343d56e8c032de63db077fd77..e0531d76f880793b2b66c17c0b75e2f0c363ea0d 100644 (file)
@@ -518,9 +518,9 @@ void MyPanel::OnPageChanging( wxNotebookEvent &event )
     int selOld = event.GetOldSelection();
     if ( selOld == 2 )
     {
-        if ( wxMessageBox("This demonstrates how a program may prevent the "
-                          "page change from taking place - if you select "
-                          "[No] the current page will stay the third one",
+        if ( wxMessageBox("This demonstrates how a program may prevent the\n"
+                          "page change from taking place - if you select\n"
+                          "[No] the current page will stay the third one\n",
                           "Control sample",
                           wxICON_QUESTION | wxYES_NO) != wxYES )
         {
index 52eaf8abd2ee1605ce5b1187c4d521fc74e2b59b..fc853c6528718b5c34c8801d0ad5abdd7ac4c1d4 100644 (file)
@@ -15,7 +15,7 @@ program_dir = samples/text
 
 DATAFILES = text.cpp
 
-PROGRAM=controls
+PROGRAM=text
 
 OBJECTS=$(PROGRAM).o
 
index f9694ca3067bdd514d75f8022caeb8bbbe5e9aaa..b43ddb3fba3cddc29897d8278995081f8774fb98 100644 (file)
@@ -169,6 +169,148 @@ wxFileStream::wxFileStream(const wxString& fileName)
 {
 }
 
+// ----------------------------------------------------------------------------
+// wxFFileInputStream
+// ----------------------------------------------------------------------------
+
+wxFFileInputStream::wxFFileInputStream(const wxString& fileName)
+  : wxInputStream()
+{
+  m_file = new wxFFile(fileName, "r");
+  m_file_destroy = TRUE;
+}
+
+wxFFileInputStream::wxFFileInputStream()
+  : wxInputStream()
+{
+  m_file_destroy = FALSE;
+  m_file = NULL;
+}
+
+wxFFileInputStream::wxFFileInputStream(wxFFile& file)
+{
+  m_file = &file;
+  m_file_destroy = FALSE;
+}
+
+wxFFileInputStream::wxFFileInputStream(FILE *file)
+{
+  m_file = new wxFFile(file);
+  m_file_destroy = TRUE;
+}
+
+wxFFileInputStream::~wxFFileInputStream()
+{
+  if (m_file_destroy)
+    delete m_file;
+}
+
+size_t wxFFileInputStream::GetSize() const
+{
+  return m_file->Length();
+}
+
+size_t wxFFileInputStream::OnSysRead(void *buffer, size_t size)
+{
+  off_t ret;
+
+  ret = m_file->Read(buffer, size);
+
+  if (m_file->Eof())
+    m_lasterror = wxStream_EOF;
+  if (ret == wxInvalidOffset) {
+    m_lasterror = wxStream_READ_ERR;
+    ret = 0;
+  } 
+
+  return ret;
+}
+
+off_t wxFFileInputStream::OnSysSeek(off_t pos, wxSeekMode mode)
+{
+  return m_file->Seek(pos, mode);
+}
+
+off_t wxFFileInputStream::OnSysTell() const
+{
+  return m_file->Tell();
+}
+
+// ----------------------------------------------------------------------------
+// wxFFileOutputStream
+// ----------------------------------------------------------------------------
+
+wxFFileOutputStream::wxFFileOutputStream(const wxString& fileName)
+{
+  m_file = new wxFFile(fileName, "w+");
+  m_file_destroy = TRUE;
+}
+
+wxFFileOutputStream::wxFFileOutputStream(wxFFile& file)
+{
+  m_file = &file;
+  m_file_destroy = FALSE;
+}
+
+wxFFileOutputStream::wxFFileOutputStream()
+  : wxOutputStream()
+{
+  m_file_destroy = FALSE;
+  m_file = NULL;
+}
+
+wxFFileOutputStream::wxFFileOutputStream(FILE *file)
+{
+  m_file = new wxFFile(file);
+  m_file_destroy = TRUE;
+}
+
+wxFFileOutputStream::~wxFFileOutputStream()
+{
+  if (m_file_destroy) {
+    Sync();
+    delete m_file;
+  }
+}
+
+size_t wxFFileOutputStream::OnSysWrite(const void *buffer, size_t size)
+{
+  size_t ret = m_file->Write(buffer, size);
+  if (m_file->Error())
+    m_lasterror = wxStream_WRITE_ERR;
+  else
+    m_lasterror = wxStream_NOERROR;
+  return ret;
+}
+
+off_t wxFFileOutputStream::OnSysTell() const
+{
+  return m_file->Tell();
+}
+
+off_t wxFFileOutputStream::OnSysSeek(off_t pos, wxSeekMode mode)
+{
+  return m_file->Seek(pos, mode);
+}
+
+void wxFFileOutputStream::Sync()
+{
+  wxOutputStream::Sync();
+  m_file->Flush();
+}
+
+size_t wxFFileOutputStream::GetSize() const
+{
+  return m_file->Length();
+}
+
+// ----------------------------------------------------------------------------
+// wxFFileStream
+// ----------------------------------------------------------------------------
+wxFFileStream::wxFFileStream(const wxString& fileName)
+ : wxFFileInputStream(fileName), wxFFileOutputStream(*wxFFileInputStream::m_file)
+{
+}
 #endif
   // wxUSE_STREAMS && wxUSE_FILE
 
index d99c53a4b5cab006589c7f58b69f957267d4acff..fe31b2e16d2b2610dada85197fdaea425737373f 100644 (file)
@@ -193,6 +193,13 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
 // "select" and "deselect"
 //-----------------------------------------------------------------------------
 
+static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox );
+
+static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox )
+{
+    gtk_listitem_select_callback( widget, listbox );
+}
+
 static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
 {
     if (g_isIdle) wxapp_install_idle_handler();
@@ -310,7 +317,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
 
         if (style & wxLB_MULTIPLE)
             gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
-              GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+              GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
 
         gtk_signal_connect( GTK_OBJECT(list_item),
                             "button_press_event",
@@ -480,7 +487,7 @@ void wxListBox::AppendCommon( const wxString &item )
 
     if (HasFlag(wxLB_MULTIPLE))
         gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
-          GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+          GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
 
     gtk_signal_connect( GTK_OBJECT(list_item),
                         "button_press_event",
@@ -917,7 +924,7 @@ void wxListBox::DisableEvents()
 
         if (HasFlag(wxLB_MULTIPLE))
             gtk_signal_disconnect_by_func( GTK_OBJECT(child->data),
-              GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+              GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
 
         child = child->next;
     }
@@ -933,7 +940,7 @@ void wxListBox::EnableEvents()
 
         if (HasFlag(wxLB_MULTIPLE))
             gtk_signal_connect( GTK_OBJECT(child->data), "deselect",
-              GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+              GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
          
         child = child->next;
     }
index 898eb4f4b935bce55eaa5aa3ad19c09de99503f4..762d4cc3be54b5e710e6a1e2d74349dd4c2a197a 100644 (file)
@@ -189,6 +189,10 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
     m_adjust->upper = fmax;
 
     gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
+    
+    // these two calls are required due to some bug in GTK
+    Refresh();
+    SetFocus();
 }
 
 void wxSpinButton::OnSize( wxSizeEvent &WXUNUSED(event) )
index 04809dc1931a3779e3d6896874dea17ab5790a73..c9c22b2e0f7927d81b6fd9bcdf9945e21fd46d0b 100644 (file)
@@ -35,7 +35,8 @@ extern bool g_isIdle;
 // data
 //-----------------------------------------------------------------------------
 
-extern bool   g_blockEventsOnDrag;
+extern bool       g_blockEventsOnDrag;
+extern wxCursor   g_globalCursor;
 
 //-----------------------------------------------------------------------------
 //  "changed"
@@ -248,6 +249,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
     SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
     SetForegroundColour( parent->GetForegroundColour() );
 
+    m_cursor = wxCursor( wxCURSOR_IBEAM );
+    
     Show( TRUE );
 
     return TRUE;
@@ -922,3 +925,30 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
 {
     event.Enable( CanRedo() );
 }
+
+void wxTextCtrl::OnInternalIdle()
+{
+    wxCursor cursor = m_cursor;
+    if (g_globalCursor.Ok()) cursor = g_globalCursor;
+
+    if (cursor.Ok() && m_currentGdkCursor != cursor)
+    {
+        m_currentGdkCursor = cursor;
+       
+        GdkWindow *window = (GdkWindow*) NULL;
+       if (HasFlag(wxTE_MULTILINE))
+            window = GTK_TEXT(m_text)->text_area;
+        else
+            window = GTK_ENTRY(m_text)->text_area;
+           
+        if (window)
+            gdk_window_set_cursor( window, cursor.GetCursor() );
+
+        if (!g_globalCursor.Ok())
+            cursor = *wxSTANDARD_CURSOR;
+
+        window = m_widget->window;
+        if (window)
+            gdk_window_set_cursor( window, cursor.GetCursor() );
+    }
+}
index 93a1debab423220391d1c3386632da3924bc0f35..1cc1b40434972962de461bff551aa0f74b5cf33b 100644 (file)
@@ -132,7 +132,7 @@ extern bool       g_blockEventsOnDrag;
 extern bool       g_blockEventsOnScroll;
 extern wxCursor   g_globalCursor;
 static wxWindow  *g_captureWindow = (wxWindow*) NULL;
-wxWindow  *g_focusWindow = (wxWindow*) NULL;
+       wxWindow  *g_focusWindow = (wxWindow*) NULL;
 
 /* hack: we need something to pass to gtk_menu_popup, so we store the time of
    the last click here */
index d99c53a4b5cab006589c7f58b69f957267d4acff..fe31b2e16d2b2610dada85197fdaea425737373f 100644 (file)
@@ -193,6 +193,13 @@ gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxLis
 // "select" and "deselect"
 //-----------------------------------------------------------------------------
 
+static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox );
+
+static void gtk_listitem_deselect_callback( GtkWidget *widget, wxListBox *listbox )
+{
+    gtk_listitem_select_callback( widget, listbox );
+}
+
 static void gtk_listitem_select_callback( GtkWidget *WXUNUSED(widget), wxListBox *listbox )
 {
     if (g_isIdle) wxapp_install_idle_handler();
@@ -310,7 +317,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
 
         if (style & wxLB_MULTIPLE)
             gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
-              GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+              GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
 
         gtk_signal_connect( GTK_OBJECT(list_item),
                             "button_press_event",
@@ -480,7 +487,7 @@ void wxListBox::AppendCommon( const wxString &item )
 
     if (HasFlag(wxLB_MULTIPLE))
         gtk_signal_connect( GTK_OBJECT(list_item), "deselect",
-          GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+          GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
 
     gtk_signal_connect( GTK_OBJECT(list_item),
                         "button_press_event",
@@ -917,7 +924,7 @@ void wxListBox::DisableEvents()
 
         if (HasFlag(wxLB_MULTIPLE))
             gtk_signal_disconnect_by_func( GTK_OBJECT(child->data),
-              GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+              GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
 
         child = child->next;
     }
@@ -933,7 +940,7 @@ void wxListBox::EnableEvents()
 
         if (HasFlag(wxLB_MULTIPLE))
             gtk_signal_connect( GTK_OBJECT(child->data), "deselect",
-              GTK_SIGNAL_FUNC(gtk_listitem_select_callback), (gpointer)this );
+              GTK_SIGNAL_FUNC(gtk_listitem_deselect_callback), (gpointer)this );
          
         child = child->next;
     }
index 898eb4f4b935bce55eaa5aa3ad19c09de99503f4..762d4cc3be54b5e710e6a1e2d74349dd4c2a197a 100644 (file)
@@ -189,6 +189,10 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
     m_adjust->upper = fmax;
 
     gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" );
+    
+    // these two calls are required due to some bug in GTK
+    Refresh();
+    SetFocus();
 }
 
 void wxSpinButton::OnSize( wxSizeEvent &WXUNUSED(event) )
index 04809dc1931a3779e3d6896874dea17ab5790a73..c9c22b2e0f7927d81b6fd9bcdf9945e21fd46d0b 100644 (file)
@@ -35,7 +35,8 @@ extern bool g_isIdle;
 // data
 //-----------------------------------------------------------------------------
 
-extern bool   g_blockEventsOnDrag;
+extern bool       g_blockEventsOnDrag;
+extern wxCursor   g_globalCursor;
 
 //-----------------------------------------------------------------------------
 //  "changed"
@@ -248,6 +249,8 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
     SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW) );
     SetForegroundColour( parent->GetForegroundColour() );
 
+    m_cursor = wxCursor( wxCURSOR_IBEAM );
+    
     Show( TRUE );
 
     return TRUE;
@@ -922,3 +925,30 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
 {
     event.Enable( CanRedo() );
 }
+
+void wxTextCtrl::OnInternalIdle()
+{
+    wxCursor cursor = m_cursor;
+    if (g_globalCursor.Ok()) cursor = g_globalCursor;
+
+    if (cursor.Ok() && m_currentGdkCursor != cursor)
+    {
+        m_currentGdkCursor = cursor;
+       
+        GdkWindow *window = (GdkWindow*) NULL;
+       if (HasFlag(wxTE_MULTILINE))
+            window = GTK_TEXT(m_text)->text_area;
+        else
+            window = GTK_ENTRY(m_text)->text_area;
+           
+        if (window)
+            gdk_window_set_cursor( window, cursor.GetCursor() );
+
+        if (!g_globalCursor.Ok())
+            cursor = *wxSTANDARD_CURSOR;
+
+        window = m_widget->window;
+        if (window)
+            gdk_window_set_cursor( window, cursor.GetCursor() );
+    }
+}
index 93a1debab423220391d1c3386632da3924bc0f35..1cc1b40434972962de461bff551aa0f74b5cf33b 100644 (file)
@@ -132,7 +132,7 @@ extern bool       g_blockEventsOnDrag;
 extern bool       g_blockEventsOnScroll;
 extern wxCursor   g_globalCursor;
 static wxWindow  *g_captureWindow = (wxWindow*) NULL;
-wxWindow  *g_focusWindow = (wxWindow*) NULL;
+       wxWindow  *g_focusWindow = (wxWindow*) NULL;
 
 /* hack: we need something to pass to gtk_menu_popup, so we store the time of
    the last click here */