2008-03-06 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-entry.h: * clutter/clutter-entry.c: (clutter_entry_handle_key_event_internal), (clutter_entry_key_press), (clutter_entry_class_init), (clutter_entry_handle_key_event): Handle a default class handler for the key-press-event, so that giving key focus to an entry will automatically make it work. This deprecates the clutter_entry_handle_key_event() function. (#824) * tests/test-entry.c (main): Remove the handle_key_event() machinery, and just give focus to the entry.
This commit is contained in:
parent
781661e9c3
commit
daea8af85e
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
|||||||
|
2008-03-06 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/clutter-entry.h:
|
||||||
|
* clutter/clutter-entry.c:
|
||||||
|
(clutter_entry_handle_key_event_internal),
|
||||||
|
(clutter_entry_key_press), (clutter_entry_class_init),
|
||||||
|
(clutter_entry_handle_key_event): Handle a default class handler
|
||||||
|
for the key-press-event, so that giving key focus to an entry will
|
||||||
|
automatically make it work. This deprecates the
|
||||||
|
clutter_entry_handle_key_event() function. (#824)
|
||||||
|
|
||||||
|
* tests/test-entry.c (main): Remove the handle_key_event()
|
||||||
|
machinery, and just give focus to the entry.
|
||||||
|
|
||||||
2008-03-06 Chris Lord <chris@openedhand.com>
|
2008-03-06 Chris Lord <chris@openedhand.com>
|
||||||
|
|
||||||
* clutter/clutter-model.c: (clutter_model_set_sorting_column):
|
* clutter/clutter-model.c: (clutter_model_set_sorting_column):
|
||||||
|
@ -30,11 +30,6 @@
|
|||||||
*
|
*
|
||||||
* #ClutterEntry is a #ClutterTexture that allows single line text entry.
|
* #ClutterEntry is a #ClutterTexture that allows single line text entry.
|
||||||
*
|
*
|
||||||
* In order to update the contents of the entry with the text inserted
|
|
||||||
* by the user you should connect to the ClutterStage::key-press-event and
|
|
||||||
* forward the #ClutterKeyEvent received by the #ClutterStage to the
|
|
||||||
* #ClutterEntry you want to update, using clutter_entry_handle_key_event().
|
|
||||||
*
|
|
||||||
* #ClutterEntry is available since Clutter 0.4.
|
* #ClutterEntry is available since Clutter 0.4.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -498,6 +493,93 @@ clutter_entry_request_coords (ClutterActor *self,
|
|||||||
CLUTTER_ACTOR_CLASS (clutter_entry_parent_class)->request_coords (self, box);
|
CLUTTER_ACTOR_CLASS (clutter_entry_parent_class)->request_coords (self, box);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
clutter_entry_handle_key_event_internal (ClutterEntry *entry,
|
||||||
|
ClutterKeyEvent *event)
|
||||||
|
{
|
||||||
|
ClutterEntryPrivate *priv = entry->priv;
|
||||||
|
gint pos = priv->position;
|
||||||
|
gint len = 0;
|
||||||
|
gint keyval = clutter_key_event_symbol (event);
|
||||||
|
|
||||||
|
if (priv->text)
|
||||||
|
len = g_utf8_strlen (priv->text, -1);
|
||||||
|
|
||||||
|
switch (keyval)
|
||||||
|
{
|
||||||
|
case CLUTTER_Return:
|
||||||
|
case CLUTTER_KP_Enter:
|
||||||
|
case CLUTTER_ISO_Enter:
|
||||||
|
g_signal_emit (entry, entry_signals[ACTIVATE], 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_Escape:
|
||||||
|
case CLUTTER_Up:
|
||||||
|
case CLUTTER_KP_Up:
|
||||||
|
case CLUTTER_Down:
|
||||||
|
case CLUTTER_KP_Down:
|
||||||
|
case CLUTTER_Shift_L:
|
||||||
|
case CLUTTER_Shift_R:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_BackSpace:
|
||||||
|
if (pos != 0 && len != 0)
|
||||||
|
clutter_entry_delete_chars (entry, 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_Delete:
|
||||||
|
case CLUTTER_KP_Delete:
|
||||||
|
if (len && pos != -1)
|
||||||
|
clutter_entry_delete_text (entry, pos, pos+1);;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_Left:
|
||||||
|
case CLUTTER_KP_Left:
|
||||||
|
if (pos != 0 && len != 0)
|
||||||
|
{
|
||||||
|
if (pos == -1)
|
||||||
|
clutter_entry_set_cursor_position (entry, len - 1);
|
||||||
|
else
|
||||||
|
clutter_entry_set_cursor_position (entry, pos - 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_Right:
|
||||||
|
case CLUTTER_KP_Right:
|
||||||
|
if (pos != -1 && len != 0)
|
||||||
|
{
|
||||||
|
if (pos != len)
|
||||||
|
clutter_entry_set_cursor_position (entry, pos + 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_End:
|
||||||
|
case CLUTTER_KP_End:
|
||||||
|
clutter_entry_set_cursor_position (entry, -1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_Begin:
|
||||||
|
case CLUTTER_Home:
|
||||||
|
case CLUTTER_KP_Home:
|
||||||
|
clutter_entry_set_cursor_position (entry, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
clutter_entry_insert_unichar (entry,
|
||||||
|
clutter_keysym_to_unicode (keyval));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
clutter_entry_key_press (ClutterActor *actor,
|
||||||
|
ClutterKeyEvent *event)
|
||||||
|
{
|
||||||
|
clutter_entry_handle_key_event_internal (CLUTTER_ENTRY (actor), event);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_entry_dispose (GObject *object)
|
clutter_entry_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
@ -545,6 +627,7 @@ clutter_entry_class_init (ClutterEntryClass *klass)
|
|||||||
|
|
||||||
actor_class->paint = clutter_entry_paint;
|
actor_class->paint = clutter_entry_paint;
|
||||||
actor_class->request_coords = clutter_entry_request_coords;
|
actor_class->request_coords = clutter_entry_request_coords;
|
||||||
|
actor_class->key_press_event = clutter_entry_key_press;
|
||||||
|
|
||||||
gobject_class->finalize = clutter_entry_finalize;
|
gobject_class->finalize = clutter_entry_finalize;
|
||||||
gobject_class->dispose = clutter_entry_dispose;
|
gobject_class->dispose = clutter_entry_dispose;
|
||||||
@ -744,9 +827,7 @@ clutter_entry_class_init (ClutterEntryClass *klass)
|
|||||||
* @entry: the actor which received the event
|
* @entry: the actor which received the event
|
||||||
*
|
*
|
||||||
* The ::activate signal is emitted each time the entry is 'activated'
|
* The ::activate signal is emitted each time the entry is 'activated'
|
||||||
* by the user, normally by pressing the 'Enter' key. This signal will
|
* by the user, normally by pressing the 'Enter' key.
|
||||||
* only be emitted when you are adding text to the entry via
|
|
||||||
* clutter_entry_handle_key_event().
|
|
||||||
*
|
*
|
||||||
* Since: 0.4
|
* Since: 0.4
|
||||||
*/
|
*/
|
||||||
@ -1269,81 +1350,17 @@ clutter_entry_get_cursor_position (ClutterEntry *entry)
|
|||||||
* ClutterStage::key-press-event or ClutterStage::key-release-event.
|
* ClutterStage::key-press-event or ClutterStage::key-release-event.
|
||||||
*
|
*
|
||||||
* Since: 0.4
|
* Since: 0.4
|
||||||
|
*
|
||||||
|
* Deprecated: 0.8: The key events will automatically be handled when
|
||||||
|
* giving the key focus to an entry using clutter_stage_set_key_focus().
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
clutter_entry_handle_key_event (ClutterEntry *entry,
|
clutter_entry_handle_key_event (ClutterEntry *entry,
|
||||||
ClutterKeyEvent *kev)
|
ClutterKeyEvent *kev)
|
||||||
{
|
{
|
||||||
ClutterEntryPrivate *priv;
|
|
||||||
gint pos = 0;
|
|
||||||
gint len = 0;
|
|
||||||
gint keyval = clutter_key_event_symbol (kev);
|
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_ENTRY (entry));
|
g_return_if_fail (CLUTTER_IS_ENTRY (entry));
|
||||||
|
|
||||||
priv = entry->priv;
|
clutter_entry_handle_key_event_internal (entry, kev);
|
||||||
|
|
||||||
pos = priv->position;
|
|
||||||
|
|
||||||
if (priv->text)
|
|
||||||
len = g_utf8_strlen (priv->text, -1);
|
|
||||||
|
|
||||||
switch (keyval)
|
|
||||||
{
|
|
||||||
case CLUTTER_Return:
|
|
||||||
case CLUTTER_KP_Enter:
|
|
||||||
case CLUTTER_ISO_Enter:
|
|
||||||
g_signal_emit (entry, entry_signals[ACTIVATE], 0);
|
|
||||||
break;
|
|
||||||
case CLUTTER_Escape:
|
|
||||||
case CLUTTER_Up:
|
|
||||||
case CLUTTER_KP_Up:
|
|
||||||
case CLUTTER_Down:
|
|
||||||
case CLUTTER_KP_Down:
|
|
||||||
case CLUTTER_Shift_L:
|
|
||||||
case CLUTTER_Shift_R:
|
|
||||||
break;
|
|
||||||
case CLUTTER_BackSpace:
|
|
||||||
if (pos != 0 && len != 0)
|
|
||||||
clutter_entry_delete_chars (entry, 1);
|
|
||||||
break;
|
|
||||||
case CLUTTER_Delete:
|
|
||||||
case CLUTTER_KP_Delete:
|
|
||||||
if (len && pos != -1)
|
|
||||||
clutter_entry_delete_text (entry, pos, pos+1);;
|
|
||||||
break;
|
|
||||||
case CLUTTER_Left:
|
|
||||||
case CLUTTER_KP_Left:
|
|
||||||
if (pos != 0 && len != 0)
|
|
||||||
{
|
|
||||||
if (pos == -1)
|
|
||||||
clutter_entry_set_cursor_position (entry, len - 1);
|
|
||||||
else
|
|
||||||
clutter_entry_set_cursor_position (entry, pos - 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CLUTTER_Right:
|
|
||||||
case CLUTTER_KP_Right:
|
|
||||||
if (pos != -1 && len != 0)
|
|
||||||
{
|
|
||||||
if (pos != len)
|
|
||||||
clutter_entry_set_cursor_position (entry, pos + 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CLUTTER_End:
|
|
||||||
case CLUTTER_KP_End:
|
|
||||||
clutter_entry_set_cursor_position (entry, -1);
|
|
||||||
break;
|
|
||||||
case CLUTTER_Begin:
|
|
||||||
case CLUTTER_Home:
|
|
||||||
case CLUTTER_KP_Home:
|
|
||||||
clutter_entry_set_cursor_position (entry, 0);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
clutter_entry_insert_unichar (entry,
|
|
||||||
clutter_keysym_to_unicode (keyval));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -129,8 +129,6 @@ PangoAlignment clutter_entry_get_alignment (ClutterEntry *ent
|
|||||||
void clutter_entry_set_cursor_position (ClutterEntry *entry,
|
void clutter_entry_set_cursor_position (ClutterEntry *entry,
|
||||||
gint position);
|
gint position);
|
||||||
gint clutter_entry_get_cursor_position (ClutterEntry *entry);
|
gint clutter_entry_get_cursor_position (ClutterEntry *entry);
|
||||||
void clutter_entry_handle_key_event (ClutterEntry *entry,
|
|
||||||
ClutterKeyEvent *kev);
|
|
||||||
void clutter_entry_insert_unichar (ClutterEntry *entry,
|
void clutter_entry_insert_unichar (ClutterEntry *entry,
|
||||||
gunichar wc);
|
gunichar wc);
|
||||||
void clutter_entry_delete_chars (ClutterEntry *entry,
|
void clutter_entry_delete_chars (ClutterEntry *entry,
|
||||||
@ -155,6 +153,11 @@ void clutter_entry_set_max_length (ClutterEntry *ent
|
|||||||
gint max);
|
gint max);
|
||||||
gint clutter_entry_get_max_length (ClutterEntry *entry);
|
gint clutter_entry_get_max_length (ClutterEntry *entry);
|
||||||
|
|
||||||
|
#ifndef CLUTTER_DISABLE_DEPRECATED
|
||||||
|
void clutter_entry_handle_key_event (ClutterEntry *entry,
|
||||||
|
ClutterKeyEvent *kev);
|
||||||
|
#endif
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* _HAVE_CLUTTER_ENTRY_H */
|
#endif /* _HAVE_CLUTTER_ENTRY_H */
|
||||||
|
@ -1,24 +1,5 @@
|
|||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
#if 0
|
|
||||||
static void
|
|
||||||
on_entry_text_changed (ClutterEntry *entry)
|
|
||||||
{
|
|
||||||
g_print ("Text changed\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
|
||||||
on_key_release_cb (ClutterStage *stage, ClutterEvent *event, ClutterEntry *entry)
|
|
||||||
{
|
|
||||||
if (event->type == CLUTTER_KEY_RELEASE)
|
|
||||||
{
|
|
||||||
ClutterKeyEvent* kev = (ClutterKeyEvent *) event;
|
|
||||||
clutter_entry_handle_key_event (entry, kev);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_entry_activated (ClutterEntry *entry, gpointer null)
|
on_entry_activated (ClutterEntry *entry, gpointer null)
|
||||||
{
|
{
|
||||||
@ -52,15 +33,10 @@ main (int argc, char *argv[])
|
|||||||
/*clutter_entry_set_max_length (CLUTTER_ENTRY (entry), 50);*/
|
/*clutter_entry_set_max_length (CLUTTER_ENTRY (entry), 50);*/
|
||||||
|
|
||||||
clutter_group_add (CLUTTER_GROUP (stage), entry);
|
clutter_group_add (CLUTTER_GROUP (stage), entry);
|
||||||
|
clutter_stage_set_key_focus (CLUTTER_STAGE (stage), entry);
|
||||||
|
|
||||||
clutter_actor_show_all (stage);
|
clutter_actor_show_all (stage);
|
||||||
|
|
||||||
g_signal_connect (stage, "key-release-event",
|
|
||||||
G_CALLBACK (on_key_release_cb), entry);
|
|
||||||
|
|
||||||
/*
|
|
||||||
g_signal_connect (entry, "text-changed",
|
|
||||||
G_CALLBACK (on_entry_text_changed), NULL);
|
|
||||||
*/
|
|
||||||
g_signal_connect (entry, "activate",
|
g_signal_connect (entry, "activate",
|
||||||
G_CALLBACK (on_entry_activated), NULL);
|
G_CALLBACK (on_entry_activated), NULL);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user