diff -u netbook-launcher-efl-0.2.6/debian/changelog netbook-launcher-efl-0.2.6/debian/changelog --- netbook-launcher-efl-0.2.6/debian/changelog +++ netbook-launcher-efl-0.2.6/debian/changelog @@ -1,3 +1,17 @@ +netbook-launcher-efl (0.2.6-0ubuntu2~asac1) lucid; urgency=low + + [ Michael Terry ] + * src/launcher/win.c: + - Backported patch from trunk to fix focus for newly launched apps. + LP: #528887 + + [ Alexander Sack ] + * src/launcher/places_storage.c: + - fix LP: #558648 - netbook-launcher-efl occasionally displays cryptic + error messages; we display proper error message rather than error uuid + + -- Alexander Sack Mon, 26 Apr 2010 11:39:05 +0200 + netbook-launcher-efl (0.2.6-0ubuntu1) lucid; urgency=low * New upstream release. only in patch2: unchanged: --- netbook-launcher-efl-0.2.6.orig/src/launcher/places_storage.c +++ netbook-launcher-efl-0.2.6/src/launcher/places_storage.c @@ -209,7 +209,7 @@ uid = strings[0]; message = strings[1]; _places_storage_ecore_item_done(ctxt, uid); - error_show(uid); + error_show(message); } static Eina_Bool only in patch2: unchanged: --- netbook-launcher-efl-0.2.6.orig/src/launcher/win.c +++ netbook-launcher-efl-0.2.6/src/launcher/win.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -837,6 +838,99 @@ fprintf(stderr, "EDJE-SIGNAL-DEBUG: '%s'\n", source); } +static void +_time_set(Evas_Object *win, unsigned int timestamp) +{ + Ecore_X_Window xwin; + GdkWindow *gdkwin, *topwin; + xwin = elm_win_xwindow_get(win); + if (!xwin) + return; + gdkwin = gdk_window_foreign_new(xwin); + if (!gdkwin) + return; + topwin = gdkwin; + while (gdk_window_get_parent(topwin)) + { + topwin = gdk_window_get_parent(topwin); + topwin = gdk_window_get_toplevel(topwin); + } + gdk_x11_window_set_user_time(topwin, timestamp); + g_object_unref(gdkwin); +} + +static int +_time_kdown(void *data, int type, void *ev) +{ + Evas_Event_Key_Down *event = (Evas_Event_Key_Down *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + +static int +_time_kup(void *data, int type, void *ev) +{ + Evas_Event_Key_Up *event = (Evas_Event_Key_Up *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + +static int +_time_mdown(void *data, int type, void *ev) +{ + Evas_Event_Mouse_Down *event = (Evas_Event_Mouse_Down *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + +static int +_time_mup(void *data, int type, void *ev) +{ + Evas_Event_Mouse_Up *event = (Evas_Event_Mouse_Up *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + +static int +_time_mmove(void *data, int type, void *ev) +{ + Evas_Event_Mouse_Move *event = (Evas_Event_Mouse_Move *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + +static int +_time_min(void *data, int type, void *ev) +{ + Evas_Event_Mouse_In *event = (Evas_Event_Mouse_In *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + +static int +_time_mout(void *data, int type, void *ev) +{ + Evas_Event_Mouse_Out *event = (Evas_Event_Mouse_Out *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + +static int +_time_mwheel(void *data, int type, void *ev) +{ + Evas_Event_Mouse_Wheel *event = (Evas_Event_Mouse_Wheel *)ev; + struct win_context *ctxt = (struct win_context *)data; + _time_set(ctxt->win, event->timestamp); + return ECORE_CALLBACK_RENEW; +} + Evas_Object * win_add(void) { @@ -926,6 +1020,17 @@ evas_object_event_callback_add (layout, EVAS_CALLBACK_KEY_DOWN, _win_key_down, ctxt); + /* Tell the window manager the timestamp of any user events. + This fixes focus issues when launching apps. */ + ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _time_kdown, ctxt); + ecore_event_handler_add(ECORE_EVENT_KEY_UP, _time_kup, ctxt); + ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _time_mdown, ctxt); + ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _time_mup, ctxt); + ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _time_mmove, ctxt); + ecore_event_handler_add(ECORE_EVENT_MOUSE_IN, _time_min, ctxt); + ecore_event_handler_add(ECORE_EVENT_MOUSE_OUT, _time_mout, ctxt); + ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, _time_mwheel, ctxt); + key = edje_object_data_get(edje, "contents_anim"); if (key && atoi(key)) ctxt->contents_anim = 1;