fix focus issue with ctxpopup. Closes T2455

This commit is contained in:
Boris Faure 2015-05-31 17:38:02 +02:00
parent bd9f8591e1
commit 231ff2514a
3 changed files with 33 additions and 5 deletions

View File

@ -881,13 +881,15 @@ _cb_ctxp_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
Termio *sd = data;
EINA_SAFETY_ON_NULL_RETURN(sd);
sd->ctxpopup = NULL;
elm_object_focus_set(sd->self, EINA_TRUE);
}
static void
_cb_ctxp_dismissed(void *data EINA_UNUSED, Evas_Object *obj,
void *event EINA_UNUSED)
{
Termio *sd = data;
EINA_SAFETY_ON_NULL_RETURN(sd);
sd->ctxpopup = NULL;
evas_object_del(obj);
}
@ -895,7 +897,12 @@ static void
_cb_ctxp_link_preview(void *data, Evas_Object *obj, void *event EINA_UNUSED)
{
Evas_Object *term = data;
Termio *sd = evas_object_smart_data_get(term);
EINA_SAFETY_ON_NULL_RETURN(sd);
_activate_link(term, EINA_TRUE);
sd->ctxpopup = NULL;
evas_object_del(obj);
}
@ -903,7 +910,11 @@ static void
_cb_ctxp_link_open(void *data, Evas_Object *obj, void *event EINA_UNUSED)
{
Evas_Object *term = data;
Termio *sd = evas_object_smart_data_get(term);
EINA_SAFETY_ON_NULL_RETURN(sd);
_activate_link(term, EINA_FALSE);
sd->ctxpopup = NULL;
evas_object_del(obj);
}
@ -915,6 +926,8 @@ _cb_ctxp_link_copy(void *data, Evas_Object *obj, void *event EINA_UNUSED)
EINA_SAFETY_ON_NULL_RETURN(sd);
EINA_SAFETY_ON_NULL_RETURN(sd->link.string);
_take_selection_text(sd, ELM_SEL_TYPE_CLIPBOARD, sd->link.string);
sd->ctxpopup = NULL;
evas_object_del(obj);
}
@ -3398,8 +3411,6 @@ _smart_cb_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
Termio *sd = evas_object_smart_data_get(data);
EINA_SAFETY_ON_NULL_RETURN(sd);
if (sd->ctxpopup) return; /* ctxp triggers focus out we should ignore */
edje_object_signal_emit(sd->cursor.obj, "focus,out", "terminology");
if (!sd->win) return;
sd->pty->selection.last_click = 0;
@ -3412,6 +3423,7 @@ _smart_cb_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
ecore_imf_context_input_panel_hide(sd->khdl.imf);
}
_remove_links(sd, obj);
term_unfocus(sd->term);
}
static void
@ -3921,7 +3933,11 @@ _handle_mouse_down_single_click(Termio *sd,
static void
_cb_ctxp_sel_copy(void *data, Evas_Object *obj, void *event EINA_UNUSED)
{
Evas_Object *term = data;
Termio *sd = evas_object_smart_data_get(term);
termio_take_selection(data, ELM_SEL_TYPE_CLIPBOARD);
sd->ctxpopup = NULL;
evas_object_del(obj);
}
@ -3929,7 +3945,6 @@ static void
_handle_right_click(Evas_Object *obj, Evas_Event_Mouse_Down *ev, Termio *sd,
int cx, int cy)
{
elm_object_focus_set(obj, EINA_TRUE);
if (_mouse_in_selection(sd, cx, cy))
{
Evas_Object *ctxp;

View File

@ -459,6 +459,7 @@ static Eina_Bool
_win_is_focused(Win *wn)
{
Term_Container *tc;
if (!wn)
return EINA_FALSE;
@ -2671,6 +2672,18 @@ _term_focus(Term *term)
tc->focus(tc, tc);
}
void
term_unfocus(Term *term)
{
Term_Container *tc;
if (!_term_is_focused(term))
return;
tc = term->container;
tc->unfocus(tc, tc);
}
Term *
term_prev_get(Term *term)
{

View File

@ -9,7 +9,7 @@ typedef struct _Term Term;
Eina_Bool main_term_popup_exists(const Term *term);
void main_term_focus(Term *term);
void term_unfocus(Term *term);
Evas_Object *main_term_evas_object_get(Term *term);
Evas_Object *term_miniview_get(Term *term);