devilhorns pushed a commit to branch master.

commit a48c4cd064b377223203053bd02c29490633b9a5
Author: Chris Michael <[email protected]>
Date:   Wed Jul 24 09:15:43 2013 +0100

    Check for valid text_input object before trying to call wayland
    functions on it.
    
    NB: Wayland (internal) functions typically do not do Any object
    validity checking, so lets be proactive and do it here first.
    
    Signed-off-by: Chris Michael <[email protected]>
---
 src/modules/ecore_imf/wayland/wayland_imcontext.c | 56 ++++++++++++++---------
 1 file changed, 35 insertions(+), 21 deletions(-)

diff --git a/src/modules/ecore_imf/wayland/wayland_imcontext.c 
b/src/modules/ecore_imf/wayland/wayland_imcontext.c
index 3052994..a3e88d3 100644
--- a/src/modules/ecore_imf/wayland/wayland_imcontext.c
+++ b/src/modules/ecore_imf/wayland/wayland_imcontext.c
@@ -102,8 +102,9 @@ update_state(WaylandIMContext *imcontext)
    /* cursor_pos is a byte index */
    if (ecore_imf_context_surrounding_get(imcontext->ctx, &surrounding, 
&cursor_pos))
      {
-       wl_text_input_set_surrounding_text(imcontext->text_input, surrounding, 
-                                           cursor_pos, cursor_pos);
+        if (imcontext->text_input)
+          wl_text_input_set_surrounding_text(imcontext->text_input, 
surrounding, 
+                                             cursor_pos, cursor_pos);
         free(surrounding);
      }
 
@@ -117,13 +118,16 @@ update_state(WaylandIMContext *imcontext)
    EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "canvas (x: %d, y: %d)", 
                      canvas_x, canvas_y);
 
-   wl_text_input_set_cursor_rectangle(imcontext->text_input,
-                                      imcontext->cursor_location.x + canvas_x,
-                                      imcontext->cursor_location.y + canvas_y,
-                                      imcontext->cursor_location.width,
-                                      imcontext->cursor_location.height);
+   if (imcontext->text_input)
+     {
+        wl_text_input_set_cursor_rectangle(imcontext->text_input,
+                                           imcontext->cursor_location.x + 
canvas_x,
+                                           imcontext->cursor_location.y + 
canvas_y,
+                                           imcontext->cursor_location.width,
+                                           imcontext->cursor_location.height);
 
-   wl_text_input_commit_state(imcontext->text_input, ++imcontext->serial);
+        wl_text_input_commit_state(imcontext->text_input, ++imcontext->serial);
+     }
 }
 
 static Eina_Bool
@@ -507,7 +511,8 @@ text_input_leave(void                 *data,
 {
    WaylandIMContext *imcontext = (WaylandIMContext *)data;
 
-   wl_text_input_hide_input_panel(text_input);
+   if (text_input)
+     wl_text_input_hide_input_panel(text_input);
 
    /* clear preedit */
    commit_preedit(imcontext);
@@ -574,8 +579,9 @@ wayland_im_context_add(Ecore_IMF_Context *ctx)
 
    imcontext->text_input = 
      wl_text_input_manager_create_text_input(imcontext->text_input_manager);
-   wl_text_input_add_listener(imcontext->text_input, 
-                              &text_input_listener, imcontext);
+   if (imcontext->text_input)
+     wl_text_input_add_listener(imcontext->text_input, 
+                                &text_input_listener, imcontext);
 }
 
 EAPI void
@@ -585,7 +591,8 @@ wayland_im_context_del(Ecore_IMF_Context *ctx)
 
    EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "context_del");
 
-   wl_text_input_destroy(imcontext->text_input);
+   if (imcontext->text_input)
+     wl_text_input_destroy(imcontext->text_input);
 
    clear_preedit(imcontext);
 }
@@ -598,7 +605,8 @@ wayland_im_context_reset(Ecore_IMF_Context *ctx)
    commit_preedit(imcontext);
    clear_preedit(imcontext);
 
-   wl_text_input_reset(imcontext->text_input);
+   if (imcontext->text_input)
+     wl_text_input_reset(imcontext->text_input);
 
    update_state(imcontext);
 
@@ -619,10 +627,13 @@ wayland_im_context_focus_in(Ecore_IMF_Context *ctx)
    if (!input || !input->seat)
      return;
 
-   wl_text_input_show_input_panel(imcontext->text_input);
-   wl_text_input_activate(imcontext->text_input,
-                          input->seat,
-                          ecore_wl_window_surface_get(imcontext->window));
+   if (imcontext->text_input)
+     {
+        wl_text_input_show_input_panel(imcontext->text_input);
+        wl_text_input_activate(imcontext->text_input,
+                               input->seat,
+                               ecore_wl_window_surface_get(imcontext->window));
+     }
 }
 
 EAPI void
@@ -634,8 +645,9 @@ wayland_im_context_focus_out(Ecore_IMF_Context *ctx)
 
    if (!imcontext->window) return;
 
-   wl_text_input_deactivate(imcontext->text_input,
-                            imcontext->window->display->input->seat);
+   if (imcontext->text_input)
+     wl_text_input_deactivate(imcontext->text_input,
+                              imcontext->window->display->input->seat);
 }
 
 EAPI void
@@ -738,7 +750,8 @@ wayland_im_context_show(Ecore_IMF_Context *ctx)
 
    EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "context_show");
 
-   wl_text_input_show_input_panel(imcontext->text_input);
+   if (imcontext->text_input)
+     wl_text_input_show_input_panel(imcontext->text_input);
 }
 
 EAPI void
@@ -748,7 +761,8 @@ wayland_im_context_hide(Ecore_IMF_Context *ctx)
 
    EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "context_hide");
 
-   wl_text_input_hide_input_panel(imcontext->text_input);
+   if (imcontext->text_input)
+     wl_text_input_hide_input_panel(imcontext->text_input);
 }
 
 EAPI Eina_Bool

-- 

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

Reply via email to