// data
//-----------------------------------------------------------------------------
-extern bool g_blockEventsOnDrag;
-extern bool g_blockEventsOnScroll;
+// Don't allow event propagation during drag
+bool g_blockEventsOnDrag;
+// Don't allow mouse event propagation during scroll
+bool g_blockEventsOnScroll;
extern wxCursor g_globalCursor;
// mouse capture state: the window which has it and if the mouse is currently
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
// This callback gets called in drawing-idle time under
// GTK 2.0, so we don't need to defer anything to idle
// time anymore.
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
if (!win->m_hasVMT)
return FALSE;
if (g_blockEventsOnDrag)
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
if (!win->m_hasVMT)
return FALSE;
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
if (!m_hasVMT)
return FALSE;
if (g_blockEventsOnDrag)
if ( ret )
return TRUE;
+ if ((event_type == wxEVT_LEFT_DOWN) && !win->IsOfStandardClass() &&
+ (g_focusWindow != win) && win->CanAcceptFocus())
+ {
+ gtk_widget_grab_focus( win->m_wxwindow );
+ }
+
if (event_type == wxEVT_RIGHT_DOWN)
{
// generate a "context menu" event: this is similar to right mouse
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
if (gdk_event->direction != GDK_SCROLL_UP &&
gdk_event->direction != GDK_SCROLL_DOWN)
{
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
if (win->m_imData)
gtk_im_context_focus_in(win->m_imData->context);
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
if (win->m_imData)
gtk_im_context_focus_out(win->m_imData->context);
{
DEBUG_MAIN_THREAD
- // don't need to install idle handler, its done from "event" signal
-
g_blockEventsOnScroll = true;
win->m_mouseButtonDown = true;
// "realize" from m_widget
//-----------------------------------------------------------------------------
-/* We cannot set colours and fonts before the widget has
- been realized, so we do this directly after realization. */
-
static void
gtk_window_realized_callback( GtkWidget *m_widget, wxWindow *win )
{
DEBUG_MAIN_THREAD
- if (g_isIdle)
- wxapp_install_idle_handler();
-
if (win->m_imData)
{
GtkPizza *pizza = GTK_PIZZA( m_widget );
pizza->bin_window );
}
+ // We cannot set colours and fonts before the widget
+ // been realized, so we do this directly after realization
+ // or otherwise in idle time
+
+ if (win->m_needsStyleChange)
+ {
+ win->SetBackgroundStyle(win->GetBackgroundStyle());
+ win->m_needsStyleChange = false;
+ }
+
wxWindowCreateEvent event( win );
event.SetEventObject( win );
win->GTKProcessEvent( event );
GtkAllocation *alloc,
wxWindow *win )
{
- if (g_isIdle)
- wxapp_install_idle_handler();
-
int client_width = 0;
int client_height = 0;
win->GetClientSize( &client_width, &client_height );
child->m_y += gtk_pizza_get_yoffset( pizza );
gtk_pizza_put( GTK_PIZZA(parent->m_wxwindow),
- GTK_WIDGET(child->m_widget),
+ child->m_widget,
child->m_x,
child->m_y,
child->m_width,
m_sizeSet = false;
m_hasVMT = false;
- m_needParent = true;
m_isBeingDeleted = false;
m_showOnIdle= false;
bool wxWindowGTK::PreCreation( wxWindowGTK *parent, const wxPoint &pos, const wxSize &size )
{
- wxCHECK_MSG( !m_needParent || parent, false, wxT("Need complete parent.") );
+ if ( GTKNeedsParent() )
+ {
+ wxCHECK_MSG( parent, false, wxT("Must have non-NULL parent") );
+ }
// Use either the given size, or the default if -1 is given.
// See wxWindowBase for these functions.
}
+void wxWindowGTK::ConstrainSize()
+{
+#ifdef __WXGPE__
+ // GPE's window manager doesn't like size hints at all, esp. when the user
+ // has to use the virtual keyboard, so don't constrain size there
+ if (!IsTopLevel())
+#endif
+ {
+ const wxSize minSize = GetMinSize();
+ const wxSize maxSize = GetMaxSize();
+ if (minSize.x > 0 && m_width < minSize.x) m_width = minSize.x;
+ if (minSize.y > 0 && m_height < minSize.y) m_height = minSize.y;
+ if (maxSize.x > 0 && m_width > maxSize.x) m_width = maxSize.x;
+ if (maxSize.y > 0 && m_height > maxSize.y) m_height = maxSize.y;
+ }
+}
+
void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags )
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") );
if (height != -1)
m_height = height;
- int minWidth = GetMinWidth(),
- minHeight = GetMinHeight(),
- maxWidth = GetMaxWidth(),
- maxHeight = GetMaxHeight();
-
- if ((minWidth != -1) && (m_width < minWidth )) m_width = minWidth;
- if ((minHeight != -1) && (m_height < minHeight)) m_height = minHeight;
- if ((maxWidth != -1) && (m_width > maxWidth )) m_width = maxWidth;
- if ((maxHeight != -1) && (m_height > maxHeight)) m_height = maxHeight;
+ ConstrainSize();
#if wxUSE_TOOLBAR_NATIVE
if (wxDynamicCast(GetParent(), wxToolBar))
{
// don't take the x,y values, they're wrong because toolbar sets them
- GtkWidget *widget = GTK_WIDGET(m_widget);
+ GtkWidget *widget = m_widget;
gtk_widget_set_size_request (widget, m_width, m_height);
}
else
{
wxWindowBase::AddChild(child);
m_dirtyTabOrder = true;
- if (g_isIdle)
- wxapp_install_idle_handler();
+ wxTheApp->WakeUpIdle();
}
void wxWindowGTK::RemoveChild(wxWindowBase *child)
{
wxWindowBase::RemoveChild(child);
m_dirtyTabOrder = true;
- if (g_isIdle)
- wxapp_install_idle_handler();
+ wxTheApp->WakeUpIdle();
}
/* static */
wxLayoutDirection wxWindowGTK::GTKGetLayout(GtkWidget *widget)
{
- return gtk_widget_get_direction(GTK_WIDGET(widget)) == GTK_TEXT_DIR_RTL
+ return gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL
? wxLayout_RightToLeft
: wxLayout_LeftToRight;
}
{
wxASSERT_MSG( dir != wxLayout_Default, _T("invalid layout direction") );
- gtk_widget_set_direction(GTK_WIDGET(widget),
+ gtk_widget_set_direction(widget,
dir == wxLayout_RightToLeft ? GTK_TEXT_DIR_RTL
: GTK_TEXT_DIR_LTR);
}
{
wxWindowBase::DoMoveInTabOrder(win, move);
m_dirtyTabOrder = true;
- if (g_isIdle)
- wxapp_install_idle_handler();
+ wxTheApp->WakeUpIdle();
}
bool wxWindowGTK::DoNavigateIn(int flags)
{
DEBUG_MAIN_THREAD
- if (g_isIdle)
- wxapp_install_idle_handler();
-
wxASSERT(range == m_scrollBar[0] || range == m_scrollBar[1]);
const int barIndex = range == m_scrollBar[1];