Revision: 6443
Author: deton.kih
Date: Sun Jun 13 00:54:35 2010
Log: * Add workaround to adjust display_limit for table style candidate window
  [uim-ja 236]
* scm/tutcode.scm
- (tutcode-get-candidate-handler): Add adjustment of tutcode-nr-candidate-max
    for table style candidate window
* gtk/gtk-im-uim.c
  - (cand_activate_cb): Add adjustment of display_limit for UIMCandWinTblGtk
* xim/ximserver.cpp
  - (InputContext::candidate_activate): Add adjustment of display_limit
    for uim-candwin-tbl-gtk
* xim/canddisp.cpp
  - (Canddisp::adjust_display_limit): New function
* xim/canddisp.h
  - (Canddisp): Add adjust_display_limit()

http://code.google.com/p/uim/source/detail?r=6443

Modified:
 /trunk/gtk/gtk-im-uim.c
 /trunk/scm/tutcode.scm
 /trunk/xim/canddisp.cpp
 /trunk/xim/canddisp.h
 /trunk/xim/ximserver.cpp

=======================================
--- /trunk/gtk/gtk-im-uim.c     Sun Jun 13 00:30:03 2010
+++ /trunk/gtk/gtk-im-uim.c     Sun Jun 13 00:54:35 2010
@@ -720,6 +720,18 @@

   uic->cwin_is_active = TRUE;

+  /* XXX: adjust display_limit for UIMCandWinTblGtk */
+  if (UIM_IS_CAND_WIN_TBL_GTK(uic->cwin) && nr > display_limit) {
+    uim_candidate c;
+    const char *s;
+    c = uim_get_candidate(uic->uc, 0, -1);
+    s = uim_candidate_get_annotation_str(c);
+#define LEN_DISPLAY_LIMIT 14
+    if (strncmp(s, "display_limit=", LEN_DISPLAY_LIMIT) == 0) {
+      display_limit = atoi(s + LEN_DISPLAY_LIMIT);
+    }
+    uim_candidate_free(c);
+  }
 #if !IM_UIM_USE_NEW_PAGE_HANDLING
   for (i = 0; i < nr; i++) {
cand = uim_get_candidate(uic->uc, i, display_limit ? i % display_limit : i);
=======================================
--- /trunk/scm/tutcode.scm      Fri May 21 20:00:51 2010
+++ /trunk/scm/tutcode.scm      Sun Jun 13 00:54:35 2010
@@ -1049,6 +1049,16 @@
 ;;; ¸õÊ䥦¥£¥ó¥É¥¦¤¬¸õÊäʸ»úÎó¤ò¼èÆÀ¤¹¤ë¤¿¤á¤Ë¸Æ¤Ö´Ø¿ô
 (define (tutcode-get-candidate-handler tc idx accel-enum-hint)
   (cond
+ ((= accel-enum-hint -1) ;XXX ɽ·Á¼°¸õÊ䥦¥£¥ó¥É¥¦¤«¤é¤Îdisplay_limitÄ´À°»þ + (set! tutcode-nr-candidate-max (length tutcode-heading-label-char-list))
+      (set! tutcode-nr-candidate-max-for-kigou-mode
+        (length tutcode-heading-label-char-list-for-kigou-mode))
+      (list "" ""
+        (string-append "display_limit="
+          (number->string
+            (if (eq? (tutcode-context-state tc) 'tutcode-state-kigou)
+              tutcode-nr-candidate-max-for-kigou-mode
+              tutcode-nr-candidate-max)))))
     ((eq? (tutcode-context-state tc) 'tutcode-state-kigou)
       (let* ((cand (tutcode-get-nth-candidate-for-kigou-mode tc idx))
              (n (remainder
=======================================
--- /trunk/xim/canddisp.cpp     Sun Apr 25 19:21:52 2010
+++ /trunk/xim/canddisp.cpp     Sun Jun 13 00:54:35 2010
@@ -123,6 +123,26 @@

 Canddisp::~Canddisp() {
 }
+
+/* XXX: adjust display_limit for uim-candwin-tbl-gtk */
+int Canddisp::adjust_display_limit(uim_context uc, int display_limit)
+{
+    uim_candidate cand;
+    const char *s;
+    int ret = display_limit;
+
+    if (strstr(command, "/uim-candwin-tbl-") == NULL)
+        return display_limit;
+
+    cand = uim_get_candidate(uc, 0, -1);
+    s = uim_candidate_get_annotation_str(cand);
+#define LEN_DISPLAY_LIMIT 14
+    if (strncmp(s, "display_limit=", LEN_DISPLAY_LIMIT) == 0) {
+      ret = atoi(s + LEN_DISPLAY_LIMIT);
+    }
+    uim_candidate_free(cand);
+    return ret;
+}

void Canddisp::activate(std::vector<const char *> candidates, int display_limit)
 {
=======================================
--- /trunk/xim/canddisp.h       Sun Apr  4 20:35:54 2010
+++ /trunk/xim/canddisp.h       Sun Jun 13 00:54:35 2010
@@ -55,6 +55,7 @@
     void set_page_candidates(int page, CandList candidates);
     void show_page(int page);
 #endif
+    int adjust_display_limit(uim_context uc, int display_limit);
 private:
     void check_connection();
 };
=======================================
--- /trunk/xim/ximserver.cpp    Tue Apr 20 12:14:41 2010
+++ /trunk/xim/ximserver.cpp    Sun Jun 13 00:54:35 2010
@@ -818,6 +818,8 @@

     Canddisp *disp = canddisp_singleton();

+    if (nr > display_limit)
+        display_limit = disp->adjust_display_limit(mUc, display_limit);
     mDisplayLimit = display_limit;
     if (display_limit)
        mNumPage = (nr - 1) / display_limit + 1;

Reply via email to