X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6308151359ba88ae05d8d61ad82adf6d51c19fc0..f22e0c3c3f90510f1a92ab148f20b2453e338626:/src/gtk/window.cpp?ds=inline diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 756fc35801..6be2cdd8c5 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -223,18 +223,21 @@ static gint gtk_debug_focus_in_callback( GtkWidget *WXUNUSED(widget), void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar *window ) { -/* - wxString tmp = name; - tmp += wxT(" FROM "); - tmp += window; + // suppress warnings about gtk_debug_focus_in_callback being unused with + // this "if ( 0 )" + if ( 0 ) + { + wxString tmp = name; + tmp += wxT(" FROM "); + tmp += window; - wxChar *s = new wxChar[tmp.Length()+1]; + wxChar *s = new wxChar[tmp.Length()+1]; - wxStrcpy( s, tmp ); + wxStrcpy( s, tmp ); - gtk_signal_connect( GTK_OBJECT(widget), "focus_in_event", - GTK_SIGNAL_FUNC(gtk_debug_focus_in_callback), (gpointer)s ); -*/ + gtk_signal_connect( GTK_OBJECT(widget), "focus_in_event", + GTK_SIGNAL_FUNC(gtk_debug_focus_in_callback), (gpointer)s ); + } } #endif // Debug @@ -595,9 +598,6 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp gdk_event->area.width, gdk_event->area.height ); - if (gdk_event->count > 0) - return; - /* wxPrintf( "OnExpose from " ); if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) @@ -608,6 +608,9 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp (int)gdk_event->area.height ); */ + if (gdk_event->count > 0) + return; + wxEraseEvent eevent( win->GetId() ); eevent.SetEventObject( win ); win->GetEventHandler()->ProcessEvent(eevent); @@ -669,17 +672,12 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e if (g_blockEventsOnDrag) return FALSE; /* + wxString tmp; + tmp += (char)gdk_event->keyval; + printf( "KeyDown-Code is: %s.\n", tmp.c_str() ); printf( "KeyDown-ScanCode is: %d.\n", gdk_event->keyval ); - if (gdk_event->state & GDK_SHIFT_MASK) - printf( "ShiftDown.\n" ); - else - printf( "ShiftUp.\n" ); - if (gdk_event->state & GDK_CONTROL_MASK) - printf( "ControlDown.\n" ); - else - printf( "ControlUp.\n" ); - printf( "\n" ); */ + int x = 0; int y = 0; GdkModifierType state; @@ -946,8 +944,8 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton event.m_middleDown = (gdk_event->state & GDK_BUTTON2_MASK); event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK); - event.m_x = (long)gdk_event->x; - event.m_y = (long)gdk_event->y; + event.m_x = (wxCoord)gdk_event->x; + event.m_y = (wxCoord)gdk_event->y; // Some control don't have their own X window and thus cannot get // any events. @@ -1073,8 +1071,8 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto event.m_leftDown = (gdk_event->state & GDK_BUTTON1_MASK); event.m_middleDown = (gdk_event->state & GDK_BUTTON2_MASK); event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK); - event.m_x = (long)gdk_event->x; - event.m_y = (long)gdk_event->y; + event.m_x = (wxCoord)gdk_event->x; + event.m_y = (wxCoord)gdk_event->y; // Some control don't have their own X window and thus cannot get // any events. @@ -1193,8 +1191,8 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion event.m_middleDown = (gdk_event->state & GDK_BUTTON2_MASK); event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK); - event.m_x = (long)gdk_event->x; - event.m_y = (long)gdk_event->y; + event.m_x = (wxCoord)gdk_event->x; + event.m_y = (wxCoord)gdk_event->y; // Some control don't have their own X window and thus cannot get // any events. @@ -1314,6 +1312,11 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED( panel->SetLastFocus(win); } +#ifdef HAVE_XIM + if (win->m_ic) + gdk_im_begin(win->m_ic, win->m_wxwindow->window); +#endif + wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() ); event.SetEventObject( win ); @@ -1352,6 +1355,11 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED printf( ".\n" ); */ +#ifdef HAVE_XIM + if (win->m_ic) + gdk_im_end(); +#endif + wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() ); event.SetEventObject( win ); @@ -1398,8 +1406,8 @@ static gint gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_ event.m_middleDown = (state & GDK_BUTTON2_MASK); event.m_rightDown = (state & GDK_BUTTON3_MASK); - event.m_x = (long)x; - event.m_y = (long)y; + event.m_x = x; + event.m_y = y; if (win->GetEventHandler()->ProcessEvent( event )) { @@ -1444,8 +1452,8 @@ static gint gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_ event.m_middleDown = (state & GDK_BUTTON2_MASK); event.m_rightDown = (state & GDK_BUTTON3_MASK); - event.m_x = (long)x; - event.m_y = (long)y; + event.m_x = x; + event.m_y = y; if (win->GetEventHandler()->ProcessEvent( event )) { @@ -1617,8 +1625,8 @@ wxWindow *wxWindowBase::FindFocus() // "realize" from m_widget //----------------------------------------------------------------------------- -/* we cannot set colours and fonts before the widget has - been realized, so we do this directly after realization */ +/* We cannot set colours and fonts before the widget has + been realized, so we do this directly after realization. */ static gint gtk_window_realized_callback( GtkWidget *WXUNUSED(m_widget), wxWindow *win ) @@ -1642,6 +1650,42 @@ gtk_window_realized_callback( GtkWidget *WXUNUSED(m_widget), wxWindow *win ) return FALSE; } +//----------------------------------------------------------------------------- +// "size_allocate" +//----------------------------------------------------------------------------- + +#ifdef HAVE_XIM + #define WXUNUSED_UNLESS_XIM(param) param +#else + #define WXUNUSED_UNLESS_XIM(param) WXUNUSED(param) +#endif + +/* Resize XIM window */ + +static +void gtk_wxwindow_size_callback( GtkWidget * WXUNUSED_UNLESS_XIM(widget), + GtkAllocation * WXUNUSED_UNLESS_XIM(alloc), + wxFrame * WXUNUSED_UNLESS_XIM(win) ) +{ + if (g_isIdle) + wxapp_install_idle_handler(); + +#ifdef HAVE_XIM + if (!win->m_ic) + return; + + if (gdk_ic_get_style (win->m_ic) & GDK_IM_PREEDIT_POSITION) + { + gint width, height; + + gdk_window_get_size (widget->window, &width, &height); + win->m_icattr->preedit_area.width = width; + win->m_icattr->preedit_area.height = height; + gdk_ic_set_attr (win->m_ic, win->m_icattr, GDK_IC_PREEDIT_AREA); + } +#endif // HAVE_XIM +} + //----------------------------------------------------------------------------- // "realize" from m_wxwindow //----------------------------------------------------------------------------- @@ -1649,12 +1693,13 @@ gtk_window_realized_callback( GtkWidget *WXUNUSED(m_widget), wxWindow *win ) /* Initialize XIM support */ static gint -gtk_wxwindow_realized_callback( GtkWidget *widget, wxWindow *win ) +gtk_wxwindow_realized_callback( GtkWidget * WXUNUSED_UNLESS_XIM(widget), + wxWindow * WXUNUSED_UNLESS_XIM(win) ) { if (g_isIdle) wxapp_install_idle_handler(); -#ifdef USE_XIM +#ifdef HAVE_XIM if (win->m_ic) return FALSE; if (!widget) return FALSE; if (!gdk_im_ready()) return FALSE; @@ -1666,16 +1711,17 @@ gtk_wxwindow_realized_callback( GtkWidget *widget, wxWindow *win ) GdkEventMask mask; GdkColormap *colormap; GdkICAttr *attr = win->m_icattr; - GdkICAttributesType attrmask = GDK_IC_ALL_REQ; + unsigned attrmask = GDK_IC_ALL_REQ; GdkIMStyle style; - GdkIMStyle supported_style = GDK_IM_PREEDIT_NONE | + GdkIMStyle supported_style = (GdkIMStyle) + (GDK_IM_PREEDIT_NONE | GDK_IM_PREEDIT_NOTHING | GDK_IM_PREEDIT_POSITION | GDK_IM_STATUS_NONE | - GDK_IM_STATUS_NOTHING; + GDK_IM_STATUS_NOTHING); if (widget->style && widget->style->font->type != GDK_FONT_FONTSET) - supported_style &= ~GDK_IM_PREEDIT_POSITION; + supported_style = (GdkIMStyle)(supported_style & ~GDK_IM_PREEDIT_POSITION); attr->style = style = gdk_im_decide_style (supported_style); attr->client_window = widget->window; @@ -1713,22 +1759,21 @@ gtk_wxwindow_realized_callback( GtkWidget *widget, wxWindow *win ) attr->preedit_fontset = widget->style->font; break; - } + } - win->m_ic = gdk_ic_new (attr, attrmask); + win->m_ic = gdk_ic_new (attr, (GdkICAttributesType)attrmask); if (win->m_ic == NULL) g_warning ("Can't create input context."); else { mask = gdk_window_get_events (widget->window); - mask |= gdk_ic_get_events (win->m_ic); + mask = (GdkEventMask)(mask | gdk_ic_get_events (win->m_ic)); gdk_window_set_events (widget->window, mask); if (GTK_WIDGET_HAS_FOCUS(widget)) gdk_im_begin (win->m_ic, widget->window); } - } #endif return FALSE; @@ -2111,11 +2156,15 @@ void wxWindow::PostCreation() gtk_signal_connect( GTK_OBJECT(connect_widget), "realize", GTK_SIGNAL_FUNC(gtk_window_realized_callback), (gpointer) this ); - /* Initialize XIM support. */ if (m_wxwindow) { + /* Initialize XIM support. */ gtk_signal_connect( GTK_OBJECT(m_wxwindow), "realize", GTK_SIGNAL_FUNC(gtk_wxwindow_realized_callback), (gpointer) this ); + + /* And resize XIM window. */ + gtk_signal_connect( GTK_OBJECT(m_wxwindow), "size_allocate", + GTK_SIGNAL_FUNC(gtk_wxwindow_size_callback), (gpointer)this ); } m_hasVMT = TRUE; @@ -2154,6 +2203,11 @@ bool wxWindow::Destroy() return wxWindowBase::Destroy(); } +void wxWindow::DoMoveWindow(int x, int y, int width, int height) +{ + gtk_pizza_set_size( GTK_PIZZA(m_parent->m_wxwindow), m_widget, x, y, width, height ); +} + void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { wxASSERT_MSG( (m_widget != NULL), wxT("invalid window") ); @@ -2214,12 +2268,10 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags ) bottom_border = 5; } - gtk_pizza_set_size( GTK_PIZZA(m_parent->m_wxwindow), - m_widget, - m_x-border, - m_y-border, - m_width+2*border, - m_height+border+bottom_border ); + DoMoveWindow( m_x-border, + m_y-border, + m_width+2*border, + m_height+border+bottom_border ); } /* @@ -2727,8 +2779,7 @@ void wxWindow::WarpPointer( int x, int y ) void wxWindow::Refresh( bool eraseBackground, const wxRect *rect ) { - wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - + if (!m_widget) return; if (!m_widget->window) return; if (eraseBackground && m_wxwindow && m_wxwindow->window) @@ -3281,6 +3332,10 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) ) wxCHECK_RET( m_wxwindow != NULL, wxT("window needs client area for scrolling") ); +/* + printf( "ScrollWindow: %d %d\n", dx, dy ); +*/ + gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy ); /*