Author: iratqq
Date: Thu Jan 22 07:28:52 2009
New Revision: 5779

Modified:
   trunk/gtk/gtk-im-uim.c
   trunk/scm/action.scm
   trunk/xim/ximserver.cpp

Log:
* scm/action.scm (context-propagate-prop-list-update):
  - Avoid overwrite custom-value.
  (bridge-show-input-state-with-on?): New value.
* xim/ximserver.cpp (InputContext::update_prop_list):
* gtk/gtk-im-uim.c (update_prop_list_cb):
  - Check bridge-show-input-state-mode-on?.


Modified: trunk/gtk/gtk-im-uim.c
==============================================================================
--- trunk/gtk/gtk-im-uim.c      (original)
+++ trunk/gtk/gtk-im-uim.c      Thu Jan 22 07:28:52 2009
@@ -619,6 +619,8 @@
   GString *prop_list;
   uim_bool show_state;
   char *show_state_with;
+  uim_bool show_state_mode;
+  uim_bool show_state_mode_on;

   if (uic != focused_context || disable_focused_context)
     return;
@@ -631,8 +633,11 @@

   show_state = uim_scm_symbol_value_bool("bridge-show-input-state?");
show_state_with = uim_scm_c_symbol(uim_scm_symbol_value("bridge-show-with?"));
+  show_state_mode = (strcmp(show_state_with, "mode") == 0);
+ show_state_mode_on = uim_scm_symbol_value_bool("bridge-show-input-state-mode-on?");
+
   if (uic->win) {
-    if (show_state) {
+    if (show_state && !(show_state_mode && !show_state_mode_on)) {
       gint timeout;
       gint x, y;
       GString *label;
@@ -641,13 +646,16 @@
       label = get_caret_state_label_from_prop_list(str);
caret_state_indicator_update(uic->caret_state_indicator, x, y, label->str);
       g_string_free(label, TRUE);
- timeout = uim_scm_symbol_value_int("bridge-show-input-state-time-length");
+      if (strcmp(show_state_with, "time") == 0)
+       timeout = 
uim_scm_symbol_value_int("bridge-show-input-state-time-length");
+      else
+       timeout = 0;

       if (timeout != 0)
        caret_state_indicator_set_timeout(uic->caret_state_indicator,
                                        timeout * 1000);
       gtk_widget_show_all(uic->caret_state_indicator);
-    } else if (strcmp(show_state_with, "mode") == 0) {
+    } else if (show_state_mode && !show_state_mode_on) {
       gtk_widget_hide(uic->caret_state_indicator);
     }
   }

Modified: trunk/scm/action.scm
==============================================================================
--- trunk/scm/action.scm        (original)
+++ trunk/scm/action.scm        Thu Jan 22 07:28:52 2009
@@ -353,6 +353,8 @@
       (if (not (null? (filter-map widget-update-state! widgets)))
           (context-propagate-widget-states context)))))

+(define bridge-show-input-state-mode-on? #f)
+
 (define context-propagate-prop-list-update
   (lambda (context)
     (let* ((widgets (context-widgets context))
@@ -362,10 +364,8 @@
       (if (eq? bridge-show-with?
                'mode)
           (if (eq? (context-current-mode context) 0)
-              (set! bridge-show-input-state? #f)
-              (begin
-                (set! bridge-show-input-state-time-length 0)
-                (set! bridge-show-input-state? #t))))
+              (set! bridge-show-input-state-mode-on? #f)
+              (set! bridge-show-input-state-mode-on? #t)))
       (im-update-prop-list context widget-config-tree))))

 ;; API for uim developers

Modified: trunk/xim/ximserver.cpp
==============================================================================
--- trunk/xim/ximserver.cpp     (original)
+++ trunk/xim/ximserver.cpp     Thu Jan 22 07:28:52 2009
@@ -1098,7 +1098,10 @@
        uim_scm_symbol_value_bool("bridge-show-input-state?");
     char *show_caret_with =
        uim_scm_c_symbol(uim_scm_symbol_value("bridge-show-with?"));
-    if (show_caret_state == UIM_TRUE) {
+    uim_bool show_caret_mode = (strcmp(show_caret_with, "mode") == 0);
+ uim_bool show_caret_mode_on = uim_scm_symbol_value_bool("bridge-show-input-state-mode-on?");
+
+ if (show_caret_state == UIM_TRUE && !(show_caret_mode && !show_caret_mode_on)) {
        char *label;
        int timeout;
        Canddisp *disp = canddisp_singleton();
@@ -1109,7 +1112,7 @@
        disp->show_caret_state(label, timeout);
        free(label);
        mCaretStateShown = true;
-    } else if (strcmp(show_caret_with, "mode") == 0) {
+    } else if (show_caret_mode && !show_caret_mode_on) {
        Canddisp *disp = canddisp_singleton();
        disp->hide_caret_state();
     }

Reply via email to