forked from enlightenment/terminology
fix focus issue with ctxpopup. Closes T2455
This commit is contained in:
parent
bd9f8591e1
commit
231ff2514a
|
@ -881,13 +881,15 @@ _cb_ctxp_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
||||||
Termio *sd = data;
|
Termio *sd = data;
|
||||||
EINA_SAFETY_ON_NULL_RETURN(sd);
|
EINA_SAFETY_ON_NULL_RETURN(sd);
|
||||||
sd->ctxpopup = NULL;
|
sd->ctxpopup = NULL;
|
||||||
elm_object_focus_set(sd->self, EINA_TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_cb_ctxp_dismissed(void *data EINA_UNUSED, Evas_Object *obj,
|
_cb_ctxp_dismissed(void *data EINA_UNUSED, Evas_Object *obj,
|
||||||
void *event EINA_UNUSED)
|
void *event EINA_UNUSED)
|
||||||
{
|
{
|
||||||
|
Termio *sd = data;
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN(sd);
|
||||||
|
sd->ctxpopup = NULL;
|
||||||
evas_object_del(obj);
|
evas_object_del(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,7 +897,12 @@ static void
|
||||||
_cb_ctxp_link_preview(void *data, Evas_Object *obj, void *event EINA_UNUSED)
|
_cb_ctxp_link_preview(void *data, Evas_Object *obj, void *event EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *term = data;
|
Evas_Object *term = data;
|
||||||
|
Termio *sd = evas_object_smart_data_get(term);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN(sd);
|
||||||
|
|
||||||
_activate_link(term, EINA_TRUE);
|
_activate_link(term, EINA_TRUE);
|
||||||
|
|
||||||
|
sd->ctxpopup = NULL;
|
||||||
evas_object_del(obj);
|
evas_object_del(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,7 +910,11 @@ static void
|
||||||
_cb_ctxp_link_open(void *data, Evas_Object *obj, void *event EINA_UNUSED)
|
_cb_ctxp_link_open(void *data, Evas_Object *obj, void *event EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *term = data;
|
Evas_Object *term = data;
|
||||||
|
Termio *sd = evas_object_smart_data_get(term);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN(sd);
|
||||||
_activate_link(term, EINA_FALSE);
|
_activate_link(term, EINA_FALSE);
|
||||||
|
|
||||||
|
sd->ctxpopup = NULL;
|
||||||
evas_object_del(obj);
|
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);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(sd->link.string);
|
EINA_SAFETY_ON_NULL_RETURN(sd->link.string);
|
||||||
_take_selection_text(sd, ELM_SEL_TYPE_CLIPBOARD, sd->link.string);
|
_take_selection_text(sd, ELM_SEL_TYPE_CLIPBOARD, sd->link.string);
|
||||||
|
|
||||||
|
sd->ctxpopup = NULL;
|
||||||
evas_object_del(obj);
|
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);
|
Termio *sd = evas_object_smart_data_get(data);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(sd);
|
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");
|
edje_object_signal_emit(sd->cursor.obj, "focus,out", "terminology");
|
||||||
if (!sd->win) return;
|
if (!sd->win) return;
|
||||||
sd->pty->selection.last_click = 0;
|
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);
|
ecore_imf_context_input_panel_hide(sd->khdl.imf);
|
||||||
}
|
}
|
||||||
_remove_links(sd, obj);
|
_remove_links(sd, obj);
|
||||||
|
term_unfocus(sd->term);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3921,7 +3933,11 @@ _handle_mouse_down_single_click(Termio *sd,
|
||||||
static void
|
static void
|
||||||
_cb_ctxp_sel_copy(void *data, Evas_Object *obj, void *event EINA_UNUSED)
|
_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);
|
termio_take_selection(data, ELM_SEL_TYPE_CLIPBOARD);
|
||||||
|
sd->ctxpopup = NULL;
|
||||||
evas_object_del(obj);
|
evas_object_del(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3929,7 +3945,6 @@ static void
|
||||||
_handle_right_click(Evas_Object *obj, Evas_Event_Mouse_Down *ev, Termio *sd,
|
_handle_right_click(Evas_Object *obj, Evas_Event_Mouse_Down *ev, Termio *sd,
|
||||||
int cx, int cy)
|
int cx, int cy)
|
||||||
{
|
{
|
||||||
elm_object_focus_set(obj, EINA_TRUE);
|
|
||||||
if (_mouse_in_selection(sd, cx, cy))
|
if (_mouse_in_selection(sd, cx, cy))
|
||||||
{
|
{
|
||||||
Evas_Object *ctxp;
|
Evas_Object *ctxp;
|
||||||
|
|
|
@ -459,6 +459,7 @@ static Eina_Bool
|
||||||
_win_is_focused(Win *wn)
|
_win_is_focused(Win *wn)
|
||||||
{
|
{
|
||||||
Term_Container *tc;
|
Term_Container *tc;
|
||||||
|
|
||||||
if (!wn)
|
if (!wn)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
|
||||||
|
@ -2671,6 +2672,18 @@ _term_focus(Term *term)
|
||||||
tc->focus(tc, tc);
|
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 *
|
||||||
term_prev_get(Term *term)
|
term_prev_get(Term *term)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@ typedef struct _Term Term;
|
||||||
|
|
||||||
|
|
||||||
Eina_Bool main_term_popup_exists(const 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 *main_term_evas_object_get(Term *term);
|
||||||
Evas_Object *term_miniview_get(Term *term);
|
Evas_Object *term_miniview_get(Term *term);
|
||||||
|
|
Loading…
Reference in New Issue