// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "window.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
// hack: we need something to pass to gtk_menu_popup, so we store the time of
// the last click here
+#ifndef __WXGTK20__
static guint32 gs_timeLastClick = 0;
+#endif
extern bool g_mainThreadLocked;
if ( btnCancel )
{
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
- event.SetEventObject(btnCancel);
- ret = btnCancel->GetEventHandler()->ProcessEvent(event);
+ wxCommandEvent eventClick(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
+ eventClick.SetEventObject(btnCancel);
+ ret = btnCancel->GetEventHandler()->ProcessEvent(eventClick);
}
}
if ( !g_captureWindow )
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
+#ifndef __WXGTK20__
gs_timeLastClick = gdk_event->time;
-#ifndef __WXGTK20__
if (event_type == wxEVT_LEFT_DCLICK)
{
// GTK 1.2 crashes when intercepting double
return FALSE;
}
}
-#endif
+#endif // !__WXGTK20__
if (win->GetEventHandler()->ProcessEvent( event ))
{
// the mouse changed window
g_captureWindowHasMouse = hasMouse;
- wxMouseEvent event(g_captureWindowHasMouse ? wxEVT_ENTER_WINDOW
- : wxEVT_LEAVE_WINDOW);
- InitMouseEvent(win, event, gdk_event);
- event.SetEventObject(win);
- win->GetEventHandler()->ProcessEvent(event);
+ wxMouseEvent eventM(g_captureWindowHasMouse ? wxEVT_ENTER_WINDOW
+ : wxEVT_LEAVE_WINDOW);
+ InitMouseEvent(win, eventM, gdk_event);
+ eventM.SetEventObject(win);
+ win->GetEventHandler()->ProcessEvent(eventM);
}
}
else // no capture
gdk_ic_attr_destroy (m_icattr);
#endif
+#ifdef __WXGTK20__
+ // delete before the widgets to avoid a crash on solaris
+ delete m_imData;
+#endif
+
if (m_wxwindow)
{
gtk_widget_destroy( m_wxwindow );
gtk_widget_destroy( m_widget );
m_widget = (GtkWidget*) NULL;
}
-
-#ifdef __WXGTK20__
- delete m_imData;
-#endif
}
bool wxWindowGTK::PreCreation( wxWindowGTK *parent, const wxPoint &pos, const wxSize &size )
gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" );
}
+void wxWindowGTK::GtkUpdateScrollbar(int orient)
+{
+ GtkAdjustment *adj = orient == wxHORIZONTAL ? m_hAdjust : m_vAdjust;
+ GtkSignalFunc fn = orient == wxHORIZONTAL
+ ? (GtkSignalFunc)gtk_window_hscroll_callback
+ : (GtkSignalFunc)gtk_window_vscroll_callback;
+
+ gtk_signal_disconnect_by_func(GTK_OBJECT(adj), fn, (gpointer)this);
+ gtk_signal_emit_by_name(GTK_OBJECT(adj), "value_changed");
+ gtk_signal_connect(GTK_OBJECT(adj), "value_changed", fn, (gpointer)this);
+}
+
void wxWindowGTK::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) )
{
wxCHECK_RET( m_widget != NULL, wxT("invalid window") );
-
wxCHECK_RET( m_wxwindow != NULL, wxT("window needs client area for scrolling") );
- if (orient == wxHORIZONTAL)
- {
- float fpos = (float)pos;
- if (fpos > m_hAdjust->upper - m_hAdjust->page_size) fpos = m_hAdjust->upper - m_hAdjust->page_size;
- if (fpos < 0.0) fpos = 0.0;
- m_oldHorizontalPos = fpos;
+ GtkAdjustment *adj = orient == wxHORIZONTAL ? m_hAdjust : m_vAdjust;
- if (fabs(fpos-m_hAdjust->value) < 0.2) return;
- m_hAdjust->value = fpos;
- }
- else
- {
- float fpos = (float)pos;
- if (fpos > m_vAdjust->upper - m_vAdjust->page_size) fpos = m_vAdjust->upper - m_vAdjust->page_size;
- if (fpos < 0.0) fpos = 0.0;
- m_oldVerticalPos = fpos;
+ float fpos = (float)pos;
+ if (fpos > adj->upper - adj->page_size)
+ fpos = adj->upper - adj->page_size;
+ if (fpos < 0.0)
+ fpos = 0.0;
+ *(orient == wxHORIZONTAL ? &m_oldHorizontalPos : &m_oldVerticalPos) = fpos;
- if (fabs(fpos-m_vAdjust->value) < 0.2) return;
- m_vAdjust->value = fpos;
- }
+ if (fabs(fpos-adj->value) < 0.2)
+ return;
+ adj->value = fpos;
- if (m_wxwindow->window)
+ if ( m_wxwindow->window )
{
- if (orient == wxHORIZONTAL)
- {
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_hAdjust),
- (GtkSignalFunc) gtk_window_hscroll_callback, (gpointer) this );
-
- gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "value_changed" );
-
- gtk_signal_connect( GTK_OBJECT(m_hAdjust), "value_changed",
- (GtkSignalFunc) gtk_window_hscroll_callback, (gpointer) this );
- }
- else
- {
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_vAdjust),
- (GtkSignalFunc) gtk_window_vscroll_callback, (gpointer) this );
-
- gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "value_changed" );
-
- gtk_signal_connect( GTK_OBJECT(m_vAdjust), "value_changed",
- (GtkSignalFunc) gtk_window_vscroll_callback, (gpointer) this );
- }
}
}