diff -urNX xclude orig/libhildon-2.2.19/hildon/hildon-app-menu.c libhildon-2.2.19/hildon/hildon-app-menu.c --- orig/libhildon-2.2.19/hildon/hildon-app-menu.c 2010-04-15 18:44:04.000000000 +0300 +++ libhildon-2.2.19/hildon/hildon-app-menu.c 2010-05-25 20:42:49.000000000 +0300 @@ -98,6 +98,7 @@ #include #include #include +#include #include "hildon-gtk.h" #include "hildon-app-menu.h" @@ -585,12 +586,22 @@ g_return_val_if_fail (HILDON_IS_APP_MENU (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); + if((event->keyval==GDK_Escape)||(event->keyval==GDK_BackSpace)) { + gtk_widget_hide(widget); + } + + if (GTK_WIDGET_CLASS (hildon_app_menu_parent_class)->key_press_event (widget, event)) return TRUE; priv = HILDON_APP_MENU_GET_PRIVATE (widget); parent_window = priv->parent_window; + if((event->hardware_keycode>=24)&&(event->hardware_keycode<=33)){ + void *d=g_list_nth_data(priv->buttons, event->hardware_keycode-24); + if(d) gtk_button_clicked(d); + } + if (parent_window) { guint accel_key, accel_mods; GdkModifierType consumed_modifiers; diff -urNX xclude orig/libhildon-2.2.19/hildon/hildon-live-search.c libhildon-2.2.19/hildon/hildon-live-search.c --- orig/libhildon-2.2.19/hildon/hildon-live-search.c 2010-04-15 18:44:05.000000000 +0300 +++ libhildon-2.2.19/hildon/hildon-live-search.c 2010-05-25 21:48:39.000000000 +0300 @@ -459,6 +459,38 @@ HildonLiveSearchPrivate *priv; gboolean handled = FALSE; + g_warning("HLS : key press %d %d", event->keyval, event->hardware_keycode); + +#if 1 + switch(event->keyval) { + case GDK_Left: // LEFT + case GDK_Right: // RIGHT + case GDK_Up: // UP + case GDK_Down: // DOWN + case GDK_Prior: // PGUP + case GDK_Next: // PGDOWN + case GDK_Home: // HOME + case GDK_End: // END + return FALSE; // Let parent handle this evene + default: + break; + } +#else + switch(event->hardware_keycode) { + case 113: // LEFT + case 114: // RIGHT + case 111: // UP + case 116: // DOWN + case 112: // PGUP + case 117: // PGDOWN + case 110: // HOME + case 115: // END + return FALSE; // Let parent handle this evene + default: + break; + } +#endif + g_return_val_if_fail (HILDON_IS_LIVE_SEARCH (live_search), FALSE); priv = live_search->priv; diff -urNX xclude orig/libhildon-2.2.19/hildon/hildon-pannable-area.c libhildon-2.2.19/hildon/hildon-pannable-area.c --- orig/libhildon-2.2.19/hildon/hildon-pannable-area.c 2010-04-15 18:44:05.000000000 +0300 +++ libhildon-2.2.19/hildon/hildon-pannable-area.c 2010-05-25 21:06:31.000000000 +0300 @@ -45,6 +45,7 @@ #include #endif #include +#include #include "hildon-pannable-area.h" #include "hildon-marshalers.h" @@ -55,7 +56,7 @@ #define SCROLL_BAR_MIN_SIZE 5 #define RATIO_TOLERANCE 0.000001 #define SCROLL_FADE_IN_TIMEOUT 50 -#define SCROLL_FADE_TIMEOUT 100 +#define SCROLL_FADE_TIMEOUT 10000 #define MOTION_EVENTS_PER_SECOND 25 #define CURSOR_STOPPED_TIMEOUT 200 #define MAX_SPEED_THRESHOLD 280 @@ -301,6 +302,8 @@ GdkEventCrossing *event); static gboolean hildon_pannable_area_key_release_cb (GtkWidget * widget, GdkEventKey * event); +static gboolean hildon_pannable_area_key_press_cb (GtkWidget * widget, + GdkEventKey * event); static gboolean hildon_pannable_area_button_release_cb (GtkWidget * widget, GdkEventButton * event); static gboolean hildon_pannable_area_scroll_cb (GtkWidget *widget, @@ -341,6 +344,7 @@ widget_class->button_press_event = hildon_pannable_area_button_press_cb; widget_class->button_release_event = hildon_pannable_area_button_release_cb; widget_class->key_release_event = hildon_pannable_area_key_release_cb; + widget_class->key_press_event = hildon_pannable_area_key_press_cb; widget_class->motion_notify_event = hildon_pannable_area_motion_notify_cb; widget_class->leave_notify_event = hildon_pannable_leave_notify_event; widget_class->scroll_event = hildon_pannable_area_scroll_cb; @@ -2017,6 +2021,8 @@ HildonPannableArea *area = HILDON_PANNABLE_AREA (widget); HildonPannableAreaPrivate *priv = area->priv; +g_warning("HPA button press x=%d y=%d", event->x, event->y); + priv->selection_movement = (event->state & GDK_SHIFT_MASK) && (event->time == priv->last_time) && @@ -2793,6 +2799,8 @@ { HildonPannableArea *area = HILDON_PANNABLE_AREA (widget); + g_warning("HPA key release %d %d %s", event->keyval, event->hardware_keycode, event->string); + if (G_UNLIKELY (area->priv->center_on_child_focus_pending)) { hildon_pannable_area_center_on_child_focus (area); area->priv->center_on_child_focus_pending = FALSE; @@ -2802,6 +2810,74 @@ } static gboolean +hildon_pannable_area_key_press_cb (GtkWidget * widget, + GdkEventKey * event) +{ + HildonPannableArea *area = HILDON_PANNABLE_AREA (widget); + HildonPannableAreaPrivate *priv=area->priv; + + g_warning("HPA key press %d %d %s", event->keyval, event->hardware_keycode, event->string); + +/* keyvals do not work in Xephyr */ +#if 1 + switch(event->keyval) { + case GDK_Left: // LEFT + hildon_pannable_area_jump_to(area,priv->hadjust->value-priv->hadjust->step_increment,-1); + break; + case GDK_Right: // RIGHT + hildon_pannable_area_jump_to(area,priv->hadjust->value+priv->hadjust->page_size+priv->hadjust->step_increment,-1); + break; + case GDK_Up: // UP + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value-priv->vadjust->step_increment); + break; + case GDK_Down: // DOWN + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value+priv->vadjust->page_size+priv->vadjust->step_increment); + break; + case GDK_Prior: // PGUP + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value-priv->vadjust->page_increment); + break; + case GDK_Next: // PGDOWN + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value+priv->vadjust->page_size+priv->vadjust->page_increment); + break; + case GDK_Home: // HOME + hildon_pannable_area_jump_to(area,-1,0); + break; + case GDK_End: // END + hildon_pannable_area_jump_to(area,-1,0x7fffffff); + break; + } +#else + switch(event->hardware_keycode) { + case 113: // LEFT + hildon_pannable_area_jump_to(area,priv->hadjust->value-priv->hadjust->step_increment,-1); + break; + case 114: // RIGHT + hildon_pannable_area_jump_to(area,priv->hadjust->value+priv->hadjust->page_size+priv->hadjust->step_increment,-1); + break; + case 111: // UP + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value-priv->vadjust->step_increment); + break; + case 116: // DOWN + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value+priv->vadjust->page_size+priv->vadjust->step_increment); + break; + case 112: // PGUP + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value-priv->vadjust->page_increment); + break; + case 117: // PGDOWN + hildon_pannable_area_jump_to(area,-1,priv->vadjust->value+priv->vadjust->page_size+priv->vadjust->page_increment); + break; + case 110: // HOME + hildon_pannable_area_jump_to(area,-1,0); + break; + case 115: // END + hildon_pannable_area_jump_to(area,-1,0x7fffffff); + break; + } +#endif + return FALSE; +} + +static gboolean hildon_pannable_area_button_release_cb (GtkWidget * widget, GdkEventButton * event) {