X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/354aa1e366a57d896e2cf0943c687b24e8db688c..266b635a2862975cb4a470e72d6d4d2f8e637f14:/src/gtk1/window.cpp?ds=inline diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 1b7eca62e5..3a99320b83 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -333,7 +333,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win ) if (win->HasFlag(wxSIMPLE_BORDER)) { GdkGC *gc; - gc = gdk_gc_new( widget->window ); + gc = gdk_gc_new( widget->window ); gdk_gc_set_foreground( gc, &widget->style->black ); gdk_draw_rectangle( widget->window, gc, FALSE, dx, dy, @@ -465,9 +465,9 @@ static long map_to_unmodified_wx_keysym( KeySym keysym ) { if (keysym <= 0xFF) { - guint upper = gdk_keyval_to_upper( keysym ); + guint upper = gdk_keyval_to_upper( (guint)keysym ); keysym = (upper != 0 ? upper : keysym ); /* to be MSW compatible */ - key_code = keysym; + key_code = (guint)keysym; } } } @@ -564,7 +564,7 @@ static long map_to_wx_keysym( KeySym keysym ) { if (keysym <= 0xFF) { - key_code = keysym; + key_code = (guint)keysym; } } } @@ -614,7 +614,8 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp // "draw" of m_wxwindow //----------------------------------------------------------------------------- -static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxWindow *win ) +static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), + GdkRectangle *rect, wxWindow *win ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -634,7 +635,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW (int)rect->width, (int)rect->height ); */ - + wxEraseEvent eevent( win->GetId() ); eevent.SetEventObject( win ); win->GetEventHandler()->ProcessEvent(eevent); @@ -707,8 +708,8 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e ret = ancestor->GetEventHandler()->ProcessEvent( command_event ); break; } - if (ancestor->m_isFrame) - break; + if (ancestor->m_isFrame) + break; ancestor = ancestor->GetParent(); } } @@ -739,9 +740,12 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e /* win is a control: tab can be propagated up */ if ( (!ret) && ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab)) && - (win->HasFlag(wxTE_PROCESS_TAB) == 0)) + (!win->HasFlag(wxTE_PROCESS_TAB)) && + (win->GetParent()) && + (win->GetParent()->HasFlag( wxTAB_TRAVERSAL)) ) { wxNavigationKeyEvent new_event; + new_event.SetEventObject( win ); /* GDK reports GDK_ISO_Left_Tab for SHIFT-TAB */ new_event.SetDirection( (gdk_event->keyval == GDK_Tab) ); /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */ @@ -791,29 +795,6 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e */ #endif -/* - Damn, I forgot why this didn't work, but it didn't work. - - // win is a panel: up can be propagated to the panel - if ((!ret) && (win->m_wxwindow) && (win->m_parent) && (win->m_parent->AcceptsFocus()) && - (gdk_event->keyval == GDK_Up)) - { - win->m_parent->SetFocus(); - ret = TRUE; - } - - // win is a panel: left/right can be propagated to the panel - if ((!ret) && (win->m_wxwindow) && - ((gdk_event->keyval == GDK_Right) || (gdk_event->keyval == GDK_Left) || - (gdk_event->keyval == GDK_Up) || (gdk_event->keyval == GDK_Down))) - { - wxNavigationKeyEvent new_event; - new_event.SetDirection( (gdk_event->keyval == GDK_Right) || (gdk_event->keyval == GDK_Down) ); - new_event.SetCurrentFocus( win ); - ret = win->GetEventHandler()->ProcessEvent( new_event ); - } -*/ - if (ret) { gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" ); @@ -964,23 +945,23 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton if (!g_captureWindow) { - int x = event.m_x; - int y = event.m_y; + wxCoord x = event.m_x; + wxCoord y = event.m_y; if (win->m_wxwindow) { GtkPizza *pizza = GTK_PIZZA(win->m_wxwindow); - x += pizza->xoffset; - y += pizza->yoffset; + x += pizza->xoffset; + y += pizza->yoffset; } wxNode *node = win->GetChildren().First(); while (node) { wxWindow *child = (wxWindow*)node->Data(); - + node = node->Next(); - if (!child->IsShown()) - continue; + if (!child->IsShown()) + continue; if (child->m_isStaticBox) { @@ -1091,13 +1072,13 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto if (!g_captureWindow) { - int x = event.m_x; - int y = event.m_y; + wxCoord x = event.m_x; + wxCoord y = event.m_y; if (win->m_wxwindow) { GtkPizza *pizza = GTK_PIZZA(win->m_wxwindow); - x += pizza->xoffset; - y += pizza->yoffset; + x += pizza->xoffset; + y += pizza->yoffset; } wxNode *node = win->GetChildren().First(); @@ -1106,8 +1087,8 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto wxWindow *child = (wxWindow*)node->Data(); node = node->Next(); - if (!child->IsShown()) - continue; + if (!child->IsShown()) + continue; if (child->m_isStaticBox) { @@ -1211,13 +1192,13 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion if (!g_captureWindow) { - int x = event.m_x; - int y = event.m_y; + wxCoord x = event.m_x; + wxCoord y = event.m_y; if (win->m_wxwindow) { GtkPizza *pizza = GTK_PIZZA(win->m_wxwindow); - x += pizza->xoffset; - y += pizza->yoffset; + x += pizza->xoffset; + y += pizza->yoffset; } wxNode *node = win->GetChildren().First(); @@ -1226,8 +1207,8 @@ static gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion wxWindow *child = (wxWindow*)node->Data(); node = node->Next(); - if (!child->IsShown()) - continue; + if (!child->IsShown()) + continue; if (child->m_isStaticBox) { @@ -1295,21 +1276,6 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED( g_focusWindow = win; - if (win->m_wxwindow) - { - if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow)) - { - GTK_WIDGET_SET_FLAGS (win->m_wxwindow, GTK_HAS_FOCUS); -/* - printf( "SetFocus flag from " ); - if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) - printf( win->GetClassInfo()->GetClassName() ); - printf( ".\n" ); -*/ - } - } - - /* printf( "OnSetFocus from " ); if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) @@ -1319,6 +1285,12 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, GdkEvent *WXUNUSED( printf( ".\n" ); */ + wxPanel *panel = wxDynamicCast(win->GetParent(), wxPanel); + if (panel) + { + panel->SetLastFocus(win); + } + wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() ); event.SetEventObject( win ); @@ -1343,12 +1315,6 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED if (!win->m_hasVMT) return FALSE; if (g_blockEventsOnDrag) return FALSE; - if (win->m_wxwindow) - { - if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow)) - GTK_WIDGET_UNSET_FLAGS (win->m_wxwindow, GTK_HAS_FOCUS); - } - /* printf( "OnKillFocus from " ); if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) @@ -1671,13 +1637,6 @@ static void wxInsertChildInWindow( wxWindow* parent, wxWindow* child ) child->m_y, child->m_width, child->m_height ); - - if (parent->HasFlag(wxTAB_TRAVERSAL)) - { - /* we now allow a window to get the focus as long as it - doesn't have any children. */ - GTK_WIDGET_UNSET_FLAGS( parent->m_wxwindow, GTK_CAN_FOCUS ); - } } //----------------------------------------------------------------------------- @@ -1761,7 +1720,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) { wxFAIL_MSG( wxT("wxWindow creation failed") ); - return FALSE; + return FALSE; } m_insertCallback = wxInsertChildInWindow; @@ -1832,18 +1791,8 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, } #endif // GTK_MINOR_VERSION - if (HasFlag(wxTAB_TRAVERSAL)) - { - /* we now allow a window to get the focus as long as it - doesn't have any children. */ - GTK_WIDGET_SET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); - m_acceptsFocus = FALSE; - } - else - { - GTK_WIDGET_SET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); - m_acceptsFocus = TRUE; - } + GTK_WIDGET_SET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); + m_acceptsFocus = TRUE; #if (GTK_MINOR_VERSION == 0) // shut the viewport up @@ -1980,15 +1929,15 @@ void wxWindow::PostCreation() if (m_wxwindow) { if (!m_noExpose) - { + { /* these get reported to wxWindows -> wxPaintEvent */ gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event", GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this ); gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw", GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this ); - } - + } + #if (GTK_MINOR_VERSION > 0) /* these are called when the "sunken" or "raised" borders are drawn */ gtk_signal_connect( GTK_OBJECT(m_widget), "expose_event", @@ -2069,7 +2018,7 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags ) else { GtkPizza *pizza = GTK_PIZZA(m_parent->m_wxwindow); - + if ((sizeFlags & wxSIZE_ALLOW_MINUS_ONE) == 0) { if (x != -1) m_x = x + pizza->xoffset; @@ -2143,10 +2092,10 @@ void wxWindow::OnInternalIdle() if (cursor.Ok()) { /* I now set the cursor anew in every OnInternalIdle call - as setting the cursor in a parent window also effects the - windows above so that checking for the current cursor is - not possible. */ - + as setting the cursor in a parent window also effects the + windows above so that checking for the current cursor is + not possible. */ + if (m_wxwindow) { GdkWindow *window = GTK_PIZZA(m_wxwindow)->bin_window; @@ -2340,8 +2289,8 @@ void wxWindow::DoGetPosition( int *x, int *y ) const if (m_parent && m_parent->m_wxwindow) { GtkPizza *pizza = GTK_PIZZA(m_parent->m_wxwindow); - dx = pizza->xoffset; - dy = pizza->yoffset; + dx = pizza->xoffset; + dy = pizza->yoffset; } if (x) (*x) = m_x - dx; @@ -2486,27 +2435,16 @@ void wxWindow::SetFocus() { wxCHECK_RET( (m_widget != NULL), wxT("invalid window") ); - wxNode *node = m_children.First(); - while (node) - { - wxWindow *child = (wxWindow*) node->Data(); - if (child->AcceptsFocus()) - { - child->SetFocus(); - return; - } - node = node->Next(); - } - if (m_wxwindow) { - gtk_widget_grab_focus (m_wxwindow); + if (!GTK_WIDGET_HAS_FOCUS (m_wxwindow)) + gtk_widget_grab_focus (m_wxwindow); return; } if (m_widget) { - if (GTK_WIDGET_CAN_FOCUS(m_widget) /*&& !GTK_WIDGET_HAS_FOCUS (connect_widget)*/ ) + if (GTK_WIDGET_CAN_FOCUS(m_widget) && !GTK_WIDGET_HAS_FOCUS (m_widget) ) { gtk_widget_grab_focus (m_widget); } @@ -2516,7 +2454,7 @@ void wxWindow::SetFocus() } else { - // ? + // ? } } } @@ -2614,7 +2552,7 @@ void wxWindow::WarpPointer( int x, int y ) window = GTK_PIZZA(m_wxwindow)->bin_window; else window = GetConnectWidget()->window; - + if (window) gdk_window_warp_pointer( window, x, y ); } @@ -2645,15 +2583,15 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect ) if (!rect) { if (m_wxwindow) - { - GtkPizza *pizza = GTK_PIZZA(m_wxwindow); - gboolean old_clear = pizza->clear_on_draw; - gtk_pizza_set_clear( pizza, FALSE ); - + { + GtkPizza *pizza = GTK_PIZZA(m_wxwindow); + gboolean old_clear = pizza->clear_on_draw; + gtk_pizza_set_clear( pizza, FALSE ); + gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL ); - - gtk_pizza_set_clear( pizza, old_clear ); - } + + gtk_pizza_set_clear( pizza, old_clear ); + } else gtk_widget_draw( m_widget, (GdkRectangle*) NULL ); } @@ -2666,15 +2604,15 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect ) gdk_rect.height = rect->height; if (m_wxwindow) - { - GtkPizza *pizza = GTK_PIZZA(m_wxwindow); - gboolean old_clear = pizza->clear_on_draw; - gtk_pizza_set_clear( pizza, FALSE ); - + { + GtkPizza *pizza = GTK_PIZZA(m_wxwindow); + gboolean old_clear = pizza->clear_on_draw; + gtk_pizza_set_clear( pizza, FALSE ); + gtk_widget_draw( m_wxwindow, &gdk_rect ); - - gtk_pizza_set_clear( pizza, old_clear ); - } + + gtk_pizza_set_clear( pizza, old_clear ); + } else gtk_widget_draw( m_widget, &gdk_rect ); } @@ -2723,7 +2661,7 @@ bool wxWindow::SetBackgroundColour( const wxColour &colour ) window = GTK_PIZZA(m_wxwindow)->bin_window; else window = GetConnectWidget()->window; - + if (!window) { // indicate that a new style has been set @@ -2775,7 +2713,7 @@ bool wxWindow::SetForegroundColour( const wxColour &colour ) window = GTK_PIZZA(m_wxwindow)->bin_window; else window = GetConnectWidget()->window; - + if (!window) { // indicate that a new style has been set @@ -2820,7 +2758,7 @@ void wxWindow::SetWidgetStyle() if (m_foregroundColour.Ok()) { - m_foregroundColour.CalcPixel( gdk_window_get_colormap( m_widget->window ) ); + m_foregroundColour.CalcPixel( gtk_widget_get_colormap( m_widget ) ); style->fg[GTK_STATE_NORMAL] = *m_foregroundColour.GetColor(); style->fg[GTK_STATE_PRELIGHT] = *m_foregroundColour.GetColor(); style->fg[GTK_STATE_ACTIVE] = *m_foregroundColour.GetColor(); @@ -2828,7 +2766,7 @@ void wxWindow::SetWidgetStyle() if (m_backgroundColour.Ok()) { - m_backgroundColour.CalcPixel( gdk_window_get_colormap( m_widget->window ) ); + m_backgroundColour.CalcPixel( gtk_widget_get_colormap( m_widget ) ); style->bg[GTK_STATE_NORMAL] = *m_backgroundColour.GetColor(); style->base[GTK_STATE_NORMAL] = *m_backgroundColour.GetColor(); style->bg[GTK_STATE_PRELIGHT] = *m_backgroundColour.GetColor(); @@ -2856,15 +2794,16 @@ static void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting static void SetInvokingWindow( wxMenu *menu, wxWindow *win ) { menu->SetInvokingWindow( win ); - wxNode *node = menu->GetItems().First(); + wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst(); while (node) { - wxMenuItem *menuitem = (wxMenuItem*)node->Data(); + wxMenuItem *menuitem = node->GetData(); if (menuitem->IsSubMenu()) { SetInvokingWindow( menuitem->GetSubMenu(), win ); } - node = node->Next(); + + node = node->GetNext(); } } @@ -2907,7 +2846,7 @@ bool wxWindow::DoPopupMenu( wxMenu *menu, int x, int y ) 0, // button used to activate it gs_timeLastClick // the time of activation ); - + while (is_waiting) { while (gtk_events_pending()) @@ -2957,26 +2896,7 @@ bool wxWindow::SetFont( const wxFont &font ) if (!wxWindowBase::SetFont(font)) { - // don't leave if the GTK widget has just - // been realized - if (!m_delayedFont) return FALSE; - } - - GdkWindow *window = (GdkWindow*) NULL; - if (m_wxwindow) - window = GTK_PIZZA(m_wxwindow)->bin_window; - else - window = GetConnectWidget()->window; - - if (!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 - return TRUE; + return FALSE; } wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE ); @@ -3005,7 +2925,7 @@ void wxWindow::CaptureMouse() window = GTK_PIZZA(m_wxwindow)->bin_window; else window = GetConnectWidget()->window; - + if (!window) return; gdk_pointer_grab( window, FALSE, @@ -3016,7 +2936,7 @@ void wxWindow::CaptureMouse() GDK_POINTER_MOTION_MASK), (GdkWindow *) NULL, m_cursor.GetCursor(), - GDK_CURRENT_TIME ); + (guint32)GDK_CURRENT_TIME ); g_captureWindow = this; } @@ -3031,10 +2951,11 @@ void wxWindow::ReleaseMouse() window = GTK_PIZZA(m_wxwindow)->bin_window; else window = GetConnectWidget()->window; - - if (!window) return; + + if (!window) + return; - gdk_pointer_ungrab ( GDK_CURRENT_TIME ); + gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME ); g_captureWindow = (wxWindow*) NULL; }