Bug 15842 - state-rows wrong behaviour
Summary: state-rows wrong behaviour
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: alterator-browser-qt (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Sergey V Turchin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-05-30 12:54 MSD by inger@altlinux.org
Modified: 2008-06-02 17:24 MSD (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description inger@altlinux.org 2008-05-30 12:54:43 MSD
в checklistbox state-rows будучи вызванным в обработчике 'selected' возвращает
предыдущее состояние, а не текущее.

(define clb (make-widget "checklistbox"))

(let ((rows (make-attribute 'rows)))
  (document:id c
    (clb  rows '("a" #t "b" #f "c" #t)
          (when selected
            (let ((slist (c state-rows)))
              (format #t "slist=~S~%" (c state-rows)))))))
---
При первом же клике печатается:
slist=(#t #f #t)
Что соответствует предыдущему состоянию а не текущему.

Кроме того: для того чтобы можно было использовать этот виджет в alterator-pkg
мне явно не хватает current (чтобы узнать какой элемент был кликнут).
Comment 1 Sergey V Turchin 2008-05-30 13:21:06 MSD
(In reply to comment #0)
> Кроме того: для того чтобы можно было использовать этот виджет в alterator-pkg
> мне явно не хватает current (чтобы узнать какой элемент был кликнут).
При множественном выборе может быть "кликнуто" сразу несколько элементов,
поэтому для *listbox c множественным выбором -- current-rows, а с единичным --
current
Comment 2 Sergey V Turchin 2008-05-30 14:29:38 MSD
state-rows исправил, но обрати на вывод от

(let ((rows (make-attribute 'rows)))
  (document:id c
    (clb  rows '("a" #t "b" #f "c" #t)
          (when selected
		(format #t "current-rows=~S~%" (c current-rows))
		(format #t "state-rows=~S~%" (c state-rows))
            ))))

ставим исправленный browser
все выделяем и начинаем снимать выделение по порядку сверху вниз

alListBox::postData< (state-rows . ( #f #t #t)) (current-rows . ( 1 2))>
current-rows=(1 2)
state-rows=(#f #t #t)
alListBox::postData< (state-rows . ( #f #f #t)) (current-rows . ( 2))>
current-rows=(2)
state-rows=(#f #f #t)
alListBox::postData< (state-rows . ( #f #f #f)) (current-rows . ())>
current-rows=(2)
state-rows=(#f #f #f)

последний current-rows остается "2"
Comment 3 Sergey V Turchin 2008-06-02 17:24:31 MSD
alterator-browser-qt-2.9.83-alt1