Fix "keysym-index-changed" callback of EekGtkKeyboard.

This commit is contained in:
Daiki Ueno
2011-01-22 16:50:15 +09:00
parent fa08da847a
commit 192cab67e9

View File

@ -64,6 +64,8 @@ static void on_keysym_index_changed (EekKeyboard *keyboard,
gint group, gint group,
gint level, gint level,
gpointer user_data); gpointer user_data);
static void render_pressed_key (GtkWidget *widget,
EekKey *key);
static void static void
eek_gtk_keyboard_real_realize (GtkWidget *self) eek_gtk_keyboard_real_realize (GtkWidget *self)
@ -113,6 +115,10 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
eek_renderer_render_keyboard (priv->renderer, cr); eek_renderer_render_keyboard (priv->renderer, cr);
/* redraw dragged key */
if (priv->dragged_key)
render_pressed_key (self, priv->dragged_key);
#if GTK_CHECK_VERSION (2, 91, 2) #if GTK_CHECK_VERSION (2, 91, 2)
GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->draw (self, cr); GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->draw (self, cr);
#endif /* GTK_CHECK_VERSION (2, 91, 2) */ #endif /* GTK_CHECK_VERSION (2, 91, 2) */
@ -289,18 +295,12 @@ magnify_bounds (EekBounds *bounds, EekBounds *large_bounds, gdouble scale)
} }
static void static void
on_key_pressed (EekKeyboard *keyboard, render_pressed_key (GtkWidget *widget,
EekKey *key, EekKey *key)
gpointer user_data)
{ {
GtkWidget *widget = user_data;
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget); EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
cairo_t *cr;
EekBounds bounds, large_bounds; EekBounds bounds, large_bounds;
cairo_t *cr;
/* renderer may have not been set yet if the widget is a popup */
if (!priv->renderer)
return;
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget))); cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
@ -312,6 +312,21 @@ on_key_pressed (EekKeyboard *keyboard,
cairo_destroy (cr); cairo_destroy (cr);
} }
static void
on_key_pressed (EekKeyboard *keyboard,
EekKey *key,
gpointer user_data)
{
GtkWidget *widget = user_data;
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
/* renderer may have not been set yet if the widget is a popup */
if (!priv->renderer)
return;
render_pressed_key (widget, key);
}
static void static void
on_key_released (EekKeyboard *keyboard, on_key_released (EekKeyboard *keyboard,
EekKey *key, EekKey *key,
@ -347,18 +362,6 @@ on_keysym_index_changed (EekKeyboard *keyboard,
gpointer user_data) gpointer user_data)
{ {
GtkWidget *widget = user_data; GtkWidget *widget = user_data;
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
cairo_t *cr;
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget))); gtk_widget_queue_draw (widget);
g_signal_emit_by_name (widget, "draw", cr);
cairo_destroy (cr);
/* redraw dragged key */
if (priv->dragged_key) {
guint keysym;
keysym = eek_key_get_keysym (priv->dragged_key);
on_key_pressed (keyboard, priv->dragged_key, NULL);
}
} }