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;