1. wxStaticLine implemented (generic (ugly) and MSW versions)

2. wxTextDialog looks fine under MSW again
3. startup tips added: code, sample, docs
4. read-only text controls don't participate in TAB traversal


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2919 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-06-28 21:39:49 +00:00
parent b6bff3019e
commit c50f1fb922
61 changed files with 5596 additions and 1092 deletions

View File

@@ -183,23 +183,23 @@ void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window
void
gdk_window_warp_pointer (GdkWindow *window,
gint x,
gint y)
gint x,
gint y)
{
GdkWindowPrivate *priv;
if (!window)
window = (GdkWindow*) &gdk_root_parent;
priv = (GdkWindowPrivate*) window;
if (!priv->destroyed)
{
XWarpPointer (priv->xdisplay,
XWarpPointer (priv->xdisplay,
None, /* not source window -> move from anywhere */
priv->xwindow, /* dest window */
priv->xwindow, /* dest window */
0, 0, 0, 0, /* not source window -> move from anywhere */
x, y );
x, y );
}
}
@@ -218,139 +218,139 @@ extern bool g_isIdle;
/* these functions are copied verbatim from GTK 1.2 */
static void
gdkx_XConvertCase (KeySym symbol,
KeySym *lower,
KeySym *upper)
KeySym *lower,
KeySym *upper)
{
register KeySym sym = symbol;
g_return_if_fail (lower != NULL);
g_return_if_fail (upper != NULL);
*lower = sym;
*upper = sym;
switch (sym >> 8)
{
#if defined (GDK_A) && defined (GDK_Ooblique)
#if defined (GDK_A) && defined (GDK_Ooblique)
case 0: /* Latin 1 */
if ((sym >= GDK_A) && (sym <= GDK_Z))
*lower += (GDK_a - GDK_A);
*lower += (GDK_a - GDK_A);
else if ((sym >= GDK_a) && (sym <= GDK_z))
*upper -= (GDK_a - GDK_A);
*upper -= (GDK_a - GDK_A);
else if ((sym >= GDK_Agrave) && (sym <= GDK_Odiaeresis))
*lower += (GDK_agrave - GDK_Agrave);
*lower += (GDK_agrave - GDK_Agrave);
else if ((sym >= GDK_agrave) && (sym <= GDK_odiaeresis))
*upper -= (GDK_agrave - GDK_Agrave);
*upper -= (GDK_agrave - GDK_Agrave);
else if ((sym >= GDK_Ooblique) && (sym <= GDK_Thorn))
*lower += (GDK_oslash - GDK_Ooblique);
*lower += (GDK_oslash - GDK_Ooblique);
else if ((sym >= GDK_oslash) && (sym <= GDK_thorn))
*upper -= (GDK_oslash - GDK_Ooblique);
*upper -= (GDK_oslash - GDK_Ooblique);
break;
#endif /* LATIN1 */
#if defined (GDK_Aogonek) && defined (GDK_tcedilla)
#endif /* LATIN1 */
#if defined (GDK_Aogonek) && defined (GDK_tcedilla)
case 1: /* Latin 2 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (sym == GDK_Aogonek)
*lower = GDK_aogonek;
*lower = GDK_aogonek;
else if (sym >= GDK_Lstroke && sym <= GDK_Sacute)
*lower += (GDK_lstroke - GDK_Lstroke);
*lower += (GDK_lstroke - GDK_Lstroke);
else if (sym >= GDK_Scaron && sym <= GDK_Zacute)
*lower += (GDK_scaron - GDK_Scaron);
*lower += (GDK_scaron - GDK_Scaron);
else if (sym >= GDK_Zcaron && sym <= GDK_Zabovedot)
*lower += (GDK_zcaron - GDK_Zcaron);
*lower += (GDK_zcaron - GDK_Zcaron);
else if (sym == GDK_aogonek)
*upper = GDK_Aogonek;
*upper = GDK_Aogonek;
else if (sym >= GDK_lstroke && sym <= GDK_sacute)
*upper -= (GDK_lstroke - GDK_Lstroke);
*upper -= (GDK_lstroke - GDK_Lstroke);
else if (sym >= GDK_scaron && sym <= GDK_zacute)
*upper -= (GDK_scaron - GDK_Scaron);
*upper -= (GDK_scaron - GDK_Scaron);
else if (sym >= GDK_zcaron && sym <= GDK_zabovedot)
*upper -= (GDK_zcaron - GDK_Zcaron);
*upper -= (GDK_zcaron - GDK_Zcaron);
else if (sym >= GDK_Racute && sym <= GDK_Tcedilla)
*lower += (GDK_racute - GDK_Racute);
*lower += (GDK_racute - GDK_Racute);
else if (sym >= GDK_racute && sym <= GDK_tcedilla)
*upper -= (GDK_racute - GDK_Racute);
*upper -= (GDK_racute - GDK_Racute);
break;
#endif /* LATIN2 */
#if defined (GDK_Hstroke) && defined (GDK_Cabovedot)
#endif /* LATIN2 */
#if defined (GDK_Hstroke) && defined (GDK_Cabovedot)
case 2: /* Latin 3 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (sym >= GDK_Hstroke && sym <= GDK_Hcircumflex)
*lower += (GDK_hstroke - GDK_Hstroke);
*lower += (GDK_hstroke - GDK_Hstroke);
else if (sym >= GDK_Gbreve && sym <= GDK_Jcircumflex)
*lower += (GDK_gbreve - GDK_Gbreve);
*lower += (GDK_gbreve - GDK_Gbreve);
else if (sym >= GDK_hstroke && sym <= GDK_hcircumflex)
*upper -= (GDK_hstroke - GDK_Hstroke);
*upper -= (GDK_hstroke - GDK_Hstroke);
else if (sym >= GDK_gbreve && sym <= GDK_jcircumflex)
*upper -= (GDK_gbreve - GDK_Gbreve);
*upper -= (GDK_gbreve - GDK_Gbreve);
else if (sym >= GDK_Cabovedot && sym <= GDK_Scircumflex)
*lower += (GDK_cabovedot - GDK_Cabovedot);
*lower += (GDK_cabovedot - GDK_Cabovedot);
else if (sym >= GDK_cabovedot && sym <= GDK_scircumflex)
*upper -= (GDK_cabovedot - GDK_Cabovedot);
*upper -= (GDK_cabovedot - GDK_Cabovedot);
break;
#endif /* LATIN3 */
#if defined (GDK_Rcedilla) && defined (GDK_Amacron)
#endif /* LATIN3 */
#if defined (GDK_Rcedilla) && defined (GDK_Amacron)
case 3: /* Latin 4 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (sym >= GDK_Rcedilla && sym <= GDK_Tslash)
*lower += (GDK_rcedilla - GDK_Rcedilla);
*lower += (GDK_rcedilla - GDK_Rcedilla);
else if (sym >= GDK_rcedilla && sym <= GDK_tslash)
*upper -= (GDK_rcedilla - GDK_Rcedilla);
*upper -= (GDK_rcedilla - GDK_Rcedilla);
else if (sym == GDK_ENG)
*lower = GDK_eng;
*lower = GDK_eng;
else if (sym == GDK_eng)
*upper = GDK_ENG;
*upper = GDK_ENG;
else if (sym >= GDK_Amacron && sym <= GDK_Umacron)
*lower += (GDK_amacron - GDK_Amacron);
*lower += (GDK_amacron - GDK_Amacron);
else if (sym >= GDK_amacron && sym <= GDK_umacron)
*upper -= (GDK_amacron - GDK_Amacron);
*upper -= (GDK_amacron - GDK_Amacron);
break;
#endif /* LATIN4 */
#if defined (GDK_Serbian_DJE) && defined (GDK_Cyrillic_yu)
#endif /* LATIN4 */
#if defined (GDK_Serbian_DJE) && defined (GDK_Cyrillic_yu)
case 6: /* Cyrillic */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (sym >= GDK_Serbian_DJE && sym <= GDK_Serbian_DZE)
*lower -= (GDK_Serbian_DJE - GDK_Serbian_dje);
*lower -= (GDK_Serbian_DJE - GDK_Serbian_dje);
else if (sym >= GDK_Serbian_dje && sym <= GDK_Serbian_dze)
*upper += (GDK_Serbian_DJE - GDK_Serbian_dje);
*upper += (GDK_Serbian_DJE - GDK_Serbian_dje);
else if (sym >= GDK_Cyrillic_YU && sym <= GDK_Cyrillic_HARDSIGN)
*lower -= (GDK_Cyrillic_YU - GDK_Cyrillic_yu);
*lower -= (GDK_Cyrillic_YU - GDK_Cyrillic_yu);
else if (sym >= GDK_Cyrillic_yu && sym <= GDK_Cyrillic_hardsign)
*upper += (GDK_Cyrillic_YU - GDK_Cyrillic_yu);
*upper += (GDK_Cyrillic_YU - GDK_Cyrillic_yu);
break;
#endif /* CYRILLIC */
#if defined (GDK_Greek_ALPHAaccent) && defined (GDK_Greek_finalsmallsigma)
#endif /* CYRILLIC */
#if defined (GDK_Greek_ALPHAaccent) && defined (GDK_Greek_finalsmallsigma)
case 7: /* Greek */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (sym >= GDK_Greek_ALPHAaccent && sym <= GDK_Greek_OMEGAaccent)
*lower += (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);
*lower += (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);
else if (sym >= GDK_Greek_alphaaccent && sym <= GDK_Greek_omegaaccent &&
sym != GDK_Greek_iotaaccentdieresis &&
sym != GDK_Greek_upsilonaccentdieresis)
*upper -= (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);
sym != GDK_Greek_iotaaccentdieresis &&
sym != GDK_Greek_upsilonaccentdieresis)
*upper -= (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);
else if (sym >= GDK_Greek_ALPHA && sym <= GDK_Greek_OMEGA)
*lower += (GDK_Greek_alpha - GDK_Greek_ALPHA);
*lower += (GDK_Greek_alpha - GDK_Greek_ALPHA);
else if (sym >= GDK_Greek_alpha && sym <= GDK_Greek_omega &&
sym != GDK_Greek_finalsmallsigma)
*upper -= (GDK_Greek_alpha - GDK_Greek_ALPHA);
sym != GDK_Greek_finalsmallsigma)
*upper -= (GDK_Greek_alpha - GDK_Greek_ALPHA);
break;
#endif /* GREEK */
#endif /* GREEK */
}
}
static guint
gdk_keyval_to_upper (guint keyval)
gdk_keyval_to_upper (guint keyval)
{
if (keyval)
{
KeySym lower_val = 0;
KeySym upper_val = 0;
gdkx_XConvertCase (keyval, &lower_val, &upper_val);
return upper_val;
}
@@ -368,12 +368,12 @@ static long map_to_unmodified_wx_keysym( KeySym keysym )
case GDK_Shift_R: key_code = WXK_SHIFT; break;
case GDK_Control_L:
case GDK_Control_R: key_code = WXK_CONTROL; break;
case GDK_Meta_L:
case GDK_Meta_R:
case GDK_Alt_L:
case GDK_Alt_R:
case GDK_Super_L:
case GDK_Super_R: key_code = WXK_ALT; break;
case GDK_Meta_L:
case GDK_Meta_R:
case GDK_Alt_L:
case GDK_Alt_R:
case GDK_Super_L:
case GDK_Super_R: key_code = WXK_ALT; break;
case GDK_Menu: key_code = WXK_MENU; break;
case GDK_Help: key_code = WXK_HELP; break;
case GDK_BackSpace: key_code = WXK_BACK; break;
@@ -440,7 +440,7 @@ static long map_to_unmodified_wx_keysym( KeySym keysym )
case GDK_KP_Subtract: key_code = WXK_NUMPAD_SUBTRACT; break;
case GDK_KP_Decimal: key_code = WXK_NUMPAD_DECIMAL; break;
case GDK_KP_Divide: key_code = WXK_NUMPAD_DIVIDE; break;
case GDK_F1: key_code = WXK_F1; break;
case GDK_F2: key_code = WXK_F2; break;
case GDK_F3: key_code = WXK_F3; break;
@@ -539,7 +539,7 @@ static long map_to_wx_keysym( KeySym keysym )
case GDK_KP_Subtract: key_code = '-'; break;
case GDK_KP_Decimal: key_code = '.'; break;
case GDK_KP_Divide: key_code = '/'; break;
case GDK_F1: key_code = WXK_F1; break;
case GDK_F2: key_code = WXK_F2; break;
case GDK_F3: key_code = WXK_F3; break;
@@ -692,7 +692,7 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp
static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT)
@@ -714,7 +714,7 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle
static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
@@ -738,13 +738,13 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
if (gdk_event->window) gdk_window_get_pointer(gdk_event->window, &x, &y, &state);
long key_code = map_to_unmodified_wx_keysym( gdk_event->keyval );
/* sending unknown key events doesn't really make sense */
if (key_code == 0) return FALSE;
bool ret = FALSE;
wxKeyEvent event( wxEVT_KEY_DOWN );
wxKeyEvent event( wxEVT_KEY_DOWN );
event.SetTimestamp( gdk_event->time );
event.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK);
event.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK);
@@ -756,7 +756,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
event.m_y = y;
event.SetEventObject( win );
ret = win->GetEventHandler()->ProcessEvent( event );
key_code = map_to_wx_keysym( gdk_event->keyval );
#if wxUSE_ACCEL
@@ -781,7 +781,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
will only be sent if it is not a menu accelerator. */
if ((key_code != 0) && ! ret )
{
wxKeyEvent event2( wxEVT_CHAR );
wxKeyEvent event2( wxEVT_CHAR );
event2.SetTimestamp( gdk_event->time );
event2.m_shiftDown = (gdk_event->state & GDK_SHIFT_MASK);
event2.m_controlDown = (gdk_event->state & GDK_CONTROL_MASK);
@@ -818,7 +818,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
new_event.SetEventObject( win );
ret = win->GetEventHandler()->ProcessEvent( new_event );
}
#if (GTK_MINOR_VERSION > 0)
/* pressing F10 will activate the menu bar of the top frame */
if ( (!ret) &&
@@ -828,22 +828,22 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
while (ancestor)
{
if (wxIsKindOf(ancestor,wxFrame))
{
wxFrame *frame = (wxFrame*) ancestor;
{
wxFrame *frame = (wxFrame*) ancestor;
wxMenuBar *menubar = frame->GetMenuBar();
if (menubar)
{
if (menubar)
{
wxNode *node = menubar->GetMenus().First();
if (node)
{
// doesn't work correctly
if (node)
{
// doesn't work correctly
// wxMenu *firstMenu = (wxMenu*) node->Data();
// gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) );
// ret = TRUE;
break;
}
}
}
// gtk_menu_item_select( GTK_MENU_ITEM(firstMenu->m_owner) );
// ret = TRUE;
break;
}
}
}
ancestor = ancestor->GetParent();
}
}
@@ -887,7 +887,7 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e
static gint gtk_window_key_release_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
@@ -907,7 +907,7 @@ static gint gtk_window_key_release_callback( GtkWidget *widget, GdkEventKey *gdk
*/
long key_code = map_to_unmodified_wx_keysym( gdk_event->keyval );
/* sending unknown key events doesn't really make sense */
if (key_code == 0) return FALSE;
@@ -943,7 +943,7 @@ static gint gtk_window_key_release_callback( GtkWidget *widget, GdkEventKey *gdk
static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
/*
@@ -1097,7 +1097,7 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton
static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButton *gdk_event, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
@@ -1205,7 +1205,7 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto
static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_event, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
@@ -1316,7 +1316,7 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion
static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
@@ -1366,7 +1366,7 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED(
static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
@@ -1403,7 +1403,7 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED
static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
@@ -1449,14 +1449,14 @@ static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_
static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (!win->m_hasVMT) return FALSE;
if (g_blockEventsOnDrag) return FALSE;
if (!win->IsOwnGtkWindow( gdk_event->window )) return FALSE;
wxMouseEvent event( wxEVT_LEAVE_WINDOW );
#if (GTK_MINOR_VERSION > 0)
event.SetTimestamp( gdk_event->time );
@@ -1495,7 +1495,7 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_
static void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (g_blockEventsOnDrag) return;
@@ -1539,7 +1539,7 @@ static void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *
static void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (g_blockEventsOnDrag) return;
@@ -1582,7 +1582,7 @@ static void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *
static void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (g_blockEventsOnDrag) return;
@@ -1602,7 +1602,7 @@ static void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxW
static void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (g_blockEventsOnDrag) return;
@@ -1624,7 +1624,7 @@ static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget),
GdkEventButton *WXUNUSED(gdk_event),
wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
// don't test here as we can release the mouse while being over
@@ -1683,7 +1683,7 @@ wxWindow *wxWindowBase::FindFocus()
static gint
gtk_window_realized_callback( GtkWidget * WXUNUSED(widget), wxWindow *win )
{
if (g_isIdle)
if (g_isIdle)
wxapp_install_idle_handler();
if (win->m_delayedFont)
@@ -1696,7 +1696,7 @@ gtk_window_realized_callback( GtkWidget * WXUNUSED(widget), wxWindow *win )
win->SetForegroundColour( win->GetForegroundColour() );
win->SetCursor( win->GetCursor() );
wxWindowCreateEvent event( win );
event.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( event );
@@ -1962,25 +1962,25 @@ wxWindow::~wxWindow()
if (m_widgetStyle)
{
gtk_style_unref( m_widgetStyle );
m_widgetStyle = (GtkStyle*) NULL;
m_widgetStyle = (GtkStyle*) NULL;
}
if (m_scrollGC)
{
gdk_gc_unref( m_scrollGC );
m_scrollGC = (GdkGC*) NULL;
m_scrollGC = (GdkGC*) NULL;
}
if (m_wxwindow)
{
gtk_widget_destroy( m_wxwindow );
m_wxwindow = (GtkWidget*) NULL;
m_wxwindow = (GtkWidget*) NULL;
}
if (m_widget)
{
gtk_widget_destroy( m_widget );
m_widget = (GtkWidget*) NULL;
m_widget = (GtkWidget*) NULL;
}
}
@@ -2049,7 +2049,7 @@ void wxWindow::PostCreation()
/* we cannot set colours, fonts and cursors before the widget has
been realized, so we do this directly after realization */
gtk_signal_connect( GTK_OBJECT(connect_widget), "realize",
GTK_SIGNAL_FUNC(gtk_window_realized_callback), (gpointer) this );
GTK_SIGNAL_FUNC(gtk_window_realized_callback), (gpointer) this );
m_hasVMT = TRUE;
}
@@ -2142,42 +2142,42 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
int border = 0;
int bottom_border = 0;
int bottom_border = 0;
if (GTK_WIDGET_CAN_DEFAULT(m_widget))
{
/* the default button has a border around it */
border = 6;
bottom_border = 5;
}
{
/* the default button has a border around it */
border = 6;
bottom_border = 5;
}
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
gtk_myfixed_set_size( GTK_MYFIXED(m_parent->m_wxwindow),
m_widget,
m_x-border,
m_y-border,
m_width+2*border,
m_height+border+bottom_border );
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
gtk_myfixed_set_size( GTK_MYFIXED(m_parent->m_wxwindow),
m_widget,
m_x-border,
m_y-border,
m_width+2*border,
m_height+border+bottom_border );
}
m_sizeSet = TRUE;
@@ -2196,13 +2196,13 @@ void wxWindow::OnInternalIdle()
{
wxCursor cursor = m_cursor;
if (g_globalCursor.Ok()) cursor = g_globalCursor;
if (cursor.Ok() && m_currentGdkCursor != cursor)
{
gdk_window_set_cursor( window, cursor.GetCursor() );
m_currentGdkCursor = cursor;
}
}
if (cursor.Ok() && m_currentGdkCursor != cursor)
{
gdk_window_set_cursor( window, cursor.GetCursor() );
m_currentGdkCursor = cursor;
}
}
UpdateWindowUI();
}
@@ -2513,7 +2513,7 @@ bool wxWindow::AcceptsFocus() const
bool wxWindow::Reparent( wxWindow *newParent )
{
wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
wxWindow *oldParent = m_parent;
if ( !wxWindowBase::Reparent(newParent) )
@@ -2523,27 +2523,27 @@ bool wxWindow::Reparent( wxWindow *newParent )
{
gtk_container_remove( GTK_CONTAINER(oldParent->m_wxwindow), m_widget );
}
if (newParent)
{
/* insert GTK representation */
(*(newParent->m_insertCallback))(newParent, this);
}
return TRUE;
}
void wxWindow::DoAddChild(wxWindow *child)
void wxWindow::DoAddChild(wxWindow *child)
{
wxASSERT_MSG( (m_widget != NULL), _T("invalid window") );
wxASSERT_MSG( (child != NULL), _T("invalid child window") );
wxASSERT_MSG( (m_insertCallback != NULL), _T("invalid child insertion function") );
/* add to list */
AddChild( child );
/* insert GTK representation */
(*m_insertCallback)(this, child);
}
@@ -2576,16 +2576,16 @@ bool wxWindow::SetCursor( const wxCursor &cursor )
// been realized
if (!m_delayedCursor) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedCursor = TRUE;
// pretend we have done something
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedCursor = TRUE;
// pretend we have done something
return TRUE;
}
@@ -2603,7 +2603,7 @@ void wxWindow::WarpPointer( int x, int y )
if (connect_widget->window)
{
/* we provide this function ourselves as it is
missing in GDK */
missing in GDK */
gdk_window_warp_pointer( connect_widget->window, x, y );
}
}
@@ -2687,16 +2687,16 @@ bool wxWindow::SetBackgroundColour( const wxColour &colour )
// been realized
if (!m_delayedBackgroundColour) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedBackgroundColour = TRUE;
// pretend we have done something
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedBackgroundColour = TRUE;
// pretend we have done something
return TRUE;
}
@@ -2734,16 +2734,16 @@ bool wxWindow::SetForegroundColour( const wxColour &colour )
// been realized
if (!m_delayedForegroundColour) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedForegroundColour = TRUE;
// pretend we have done something
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedForegroundColour = TRUE;
// pretend we have done something
return TRUE;
}
@@ -2890,7 +2890,7 @@ bool wxWindow::IsOwnGtkWindow( GdkWindow *window )
bool wxWindow::SetFont( const wxFont &font )
{
wxCHECK_MSG( m_widget != NULL, FALSE, _T( "invalid window") );
wxCHECK_MSG( m_widget != NULL, FALSE, _T( "invalid window") );
if (!wxWindowBase::SetFont(font))
{
@@ -2898,16 +2898,16 @@ bool wxWindow::SetFont( const wxFont &font )
// been realized
if (!m_delayedFont) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedFont = TRUE;
// pretend we have done something
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedFont = TRUE;
// pretend we have done something
return TRUE;
}
@@ -2934,7 +2934,7 @@ void wxWindow::CaptureMouse()
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return;
gdk_pointer_grab( connect_widget->window, FALSE,
(GdkEventMask)
(GDK_BUTTON_PRESS_MASK |
@@ -2954,7 +2954,7 @@ void wxWindow::ReleaseMouse()
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return;
gdk_pointer_ungrab ( GDK_CURRENT_TIME );
g_captureWindow = (wxWindow*) NULL;
}
@@ -3114,16 +3114,16 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
m_scrollGC = gdk_gc_new( m_wxwindow->window );
gdk_gc_set_exposures( m_scrollGC, TRUE );
}
wxNode *node = m_children.First();
while (node)
{
wxWindow *child = (wxWindow*) node->Data();
int sx = 0;
int sy = 0;
child->GetSize( &sx, &sy );
child->SetSize( child->m_x + dx, child->m_y + dy, sx, sy, wxSIZE_ALLOW_MINUS_ONE );
node = node->Next();
int sx = 0;
int sy = 0;
child->GetSize( &sx, &sy );
child->SetSize( child->m_x + dx, child->m_y + dy, sx, sy, wxSIZE_ALLOW_MINUS_ONE );
node = node->Next();
}
int cw = 0;
@@ -3131,7 +3131,7 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
GetClientSize( &cw, &ch );
int w = cw - abs(dx);
int h = ch - abs(dy);
if ((h < 0) || (w < 0))
{
Refresh();