/////////////////////////////////////////////////////////////////////////////
-// Name: gtk/window.cpp
+// Name: src/gtk/window.cpp
// Purpose:
// Author: Robert Roebling
// Id: $Id$
#include "wx/settings.h"
#include "wx/log.h"
#include "wx/fontutil.h"
-#include "wx/stattext.h"
#ifdef __WXDEBUG__
#include "wx/thread.h"
gint y)
{
if (!window)
- window = GDK_ROOT_PARENT();
+ window = gdk_get_default_root_window();
if (!GDK_WINDOW_DESTROYED(window))
{
gdk_draw_rectangle( widget->window, gc, FALSE,
dx, dy,
widget->allocation.width-dw-1, widget->allocation.height-dh-1 );
- gdk_gc_unref( gc );
+ g_object_unref (G_OBJECT (gc));
return;
}
#endif // __WXUNIVERSAL__
break;
case GDK_Prior: // == GDK_Page_Up
- key_code = WXK_PRIOR;
+ key_code = WXK_PAGEUP;
break;
case GDK_Next: // == GDK_Page_Down
- key_code = WXK_NEXT;
+ key_code = WXK_PAGEDOWN;
break;
case GDK_End:
break;
case GDK_KP_Prior: // == GDK_KP_Page_Up
- key_code = isChar ? WXK_PRIOR : WXK_NUMPAD_PRIOR;
+ key_code = isChar ? WXK_PAGEUP : WXK_NUMPAD_PAGEUP;
break;
case GDK_KP_Next: // == GDK_KP_Page_Down
- key_code = isChar ? WXK_NEXT : WXK_NUMPAD_NEXT;
+ key_code = isChar ? WXK_PAGEDOWN : WXK_NUMPAD_PAGEDOWN;
break;
case GDK_KP_End:
window, window->m_imData->lastKeyEvent);
}
-#if wxUSE_UNICODE
- const wxWCharBuffer data = wxConvUTF8.cMB2WC( (char*)str );
-#else
- const wxWCharBuffer wdata = wxConvUTF8.cMB2WC( (char*)str );
- const wxCharBuffer data = wxConvLocal.cWC2MB( wdata );
-#endif // wxUSE_UNICODE
- if( !(const wxChar*)data )
+ const wxWxCharBuffer data(wxGTK_CONV_BACK(str));
+ if( !data )
return;
bool ret = false;
// Rewrite cursor handling here (away from idle).
}
}
-
+
if (win->GetEventHandler()->ProcessEvent( event ))
{
g_signal_stop_emission_by_name (widget, "motion_notify_event");
// Rewrite cursor handling here (away from idle).
}
}
-
+
if (win->GetEventHandler()->ProcessEvent( event ))
{
g_signal_stop_emission_by_name (widget, "enter_notify_event");
{
gint width, height;
- gdk_window_get_size (widget->window, &width, &height);
+ gdk_drawable_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);
break;
}
- gdk_window_get_size (widget->window, &width, &height);
+ gdk_drawable_get_size (widget->window, &width, &height);
attrmask |= GDK_IC_PREEDIT_POSITION_REQ;
attr->spot_location.x = 0;
if (GTK_WIDGET_VISIBLE (widget))
gtk_widget_queue_resize (widget);
}
- else
+ else
#endif
if (m_parent->m_wxwindow == NULL) // i.e. wxNotebook
{
PangoLayout *layout = pango_layout_new(context);
pango_layout_set_font_description(layout, desc);
{
-#if wxUSE_UNICODE
- const wxCharBuffer data = wxConvUTF8.cWC2MB( string );
- pango_layout_set_text(layout, (const char*) data, strlen( (const char*) data ));
-#else
- const wxWCharBuffer wdata = wxConvLocal.cMB2WC( string );
- const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata );
- pango_layout_set_text(layout, (const char*) data, strlen( (const char*) data ));
-#endif
+ const wxCharBuffer data = wxGTK_CONV( string );
+ if ( data )
+ pango_layout_set_text(layout, data, strlen(data));
}
PangoRectangle rect;
wxapp_install_idle_handler();
}
+bool wxWindowGTK::GTKWidgetNeedsMnemonic() const
+{
+ // none needed by default
+ return false;
+}
+
+void wxWindowGTK::GTKWidgetDoSetMnemonic(GtkWidget* WXUNUSED(w))
+{
+ // nothing to do by default since none is needed
+}
+
void wxWindowGTK::RealizeTabOrder()
{
if (m_wxwindow)
{
if ( !m_children.empty() )
{
-#if wxUSE_STATTEXT
// we don't only construct the correct focus chain but also use
- // this opportunity to update the mnemonic widgets for all labels
- //
- // it would be nice to extract this code from here and put it in
- // stattext.cpp to reduce dependencies but there is no really easy
- // way to do it unfortunately
- wxStaticText *lastLabel = NULL;
-#endif // wxUSE_STATTEXT
+ // this opportunity to update the mnemonic widgets for the widgets
+ // that need them
GList *chain = NULL;
+ wxWindowGTK* mnemonicWindow = NULL;
for ( wxWindowList::const_iterator i = m_children.begin();
i != m_children.end();
++i )
{
wxWindowGTK *win = *i;
-#if wxUSE_STATTEXT
- if ( lastLabel )
+
+ if ( mnemonicWindow )
{
if ( win->AcceptsFocusFromKeyboard() )
{
- GtkLabel *l = GTK_LABEL(lastLabel->m_widget);
- gtk_label_set_mnemonic_widget(l, win->m_widget);
- lastLabel = NULL;
+ // wxComboBox et al. needs to focus on on a different
+ // widget than m_widget, so if the main widget isn't
+ // focusable try the connect widget
+ GtkWidget* w = win->m_widget;
+ if ( !GTK_WIDGET_CAN_FOCUS(w) )
+ {
+ w = win->GetConnectWidget();
+ if ( !GTK_WIDGET_CAN_FOCUS(w) )
+ w = NULL;
+ }
+
+ if ( w )
+ {
+ mnemonicWindow->GTKWidgetDoSetMnemonic(w);
+ mnemonicWindow = NULL;
+ }
}
}
- else // check if this one is a label
+ else if ( win->GTKWidgetNeedsMnemonic() )
{
- lastLabel = wxDynamicCast(win, wxStaticText);
+ mnemonicWindow = win;
}
-#endif // wxUSE_STATTEXT
chain = g_list_prepend(chain, win->m_widget);
}
bool wxWinModule::OnInit()
{
- // g_eraseGC = gdk_gc_new( GDK_ROOT_PARENT() );
+ // g_eraseGC = gdk_gc_new( gdk_get_default_root_window() );
// gdk_gc_set_fill( g_eraseGC, GDK_SOLID );
return true;
void wxWinModule::OnExit()
{
if (g_eraseGC)
- gdk_gc_unref( g_eraseGC );
+ g_object_unref (G_OBJECT (g_eraseGC));
}
-