Call _set_content_type in _create_input_context_done in im-ibus.so
authorfujiwarat <takao.fujiwara1@gmail.com>
Fri, 30 Aug 2013 09:25:42 +0000 (18:25 +0900)
committerfujiwarat <takao.fujiwara1@gmail.com>
Fri, 30 Aug 2013 09:25:42 +0000 (18:25 +0900)
TEST=password dialog in gnome-shell

Review URL: https://codereview.appspot.com/13255047

client/gtk2/ibusimcontext.c

index 5eb0414..b6fe2c0 100644 (file)
@@ -865,13 +865,12 @@ ibus_im_context_focus_in (GtkIMContext *context)
 
     ibusimcontext->has_focus = TRUE;
     if (ibusimcontext->ibuscontext) {
+        _set_content_type (ibusimcontext);
         ibus_input_context_focus_in (ibusimcontext->ibuscontext);
     }
 
     gtk_im_context_focus_in (ibusimcontext->slave);
 
-    _set_content_type (ibusimcontext);
-
     /* set_cursor_location_internal() will get origin from X server,
      * it blocks UI. So delay it to idle callback. */
     gdk_threads_add_idle_full (G_PRIORITY_DEFAULT_IDLE,
@@ -1567,6 +1566,13 @@ _create_input_context_done (IBusBus       *bus,
         ibus_input_context_set_capabilities (ibusimcontext->ibuscontext, ibusimcontext->caps);
 
         if (ibusimcontext->has_focus) {
+            /* The time order is _create_input_context() ->
+             * ibus_im_context_notify() -> ibus_im_context_focus_in() ->
+             * _create_input_context_done()
+             * so _set_content_type() is called at the beginning here
+             * because ibusimcontext->ibuscontext == NULL before. */
+            _set_content_type (ibusimcontext);
+
             ibus_input_context_focus_in (ibusimcontext->ibuscontext);
             _set_cursor_location_internal (ibusimcontext);
         }