View Issue Details

IDProjectCategoryView StatusLast Update
0001755Far ManagerDialogpublic2011-10-01 06:58
Reporter2useven10 Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0001755: Невозможно изменить фокус в обработчике клика на RadioButton
DescriptionВ диалоге поика вьювера хотел сделать режим автоматичекого фокусирования на строке поиска. Т.е. после нажатия на check-box и radio-button активным должно быть окно ввода искомого текста. Для этого я использовал SendDlgMessage(hDlg, DM_SETFOCUS, SD_EDIT_..., 0); Для чек-боксов всё работает как мне хочется, а радио батон переставляет фокус на себя, игнорируя мой DM_SETFOCUS. Порывшись в коде причину я нашел: FocusPos = ProcessRadioButton(...).
Прилагаемый патч решает проблему.
Additional InformationЯ плохо разбираюсь в UI фара. Возможно так делать нельзя или проблему можно решить другим способом...
Хотелось бы услышать мнение специалистов.
TagsNo tags attached.
Build2046

Activities

2useven10

2011-04-25 10:17

developer  

dialog.cpp.diff (703 bytes)   
Index: dialog.cpp
===================================================================
--- dialog.cpp	(revision 5989)
+++ dialog.cpp	(working copy)
@@ -3610,6 +3610,8 @@
 
 	Item[CurRB]->Selected=1;
 
+	unsigned ret = CurRB, focus = FocusPos;
+
 	/* $ 28.07.2000 SVS
 	  ��� ��������� ������� ������� �������� ������� ��������
 	  ����������� ������ SendDlgMessage - � ��� ������� ���!
@@ -3620,10 +3622,10 @@
 		// ������ �����, ���� ���������� �� ������...
 		Item[CurRB]->Selected=0;
 		Item[PrevRB]->Selected=1;
-		return PrevRB;
+		ret = PrevRB;
 	}
 
-	return CurRB;
+	return (focus == FocusPos ? ret : FocusPos); // ���� ����� �������� - ����� ��� ����!
 }
 
 
dialog.cpp.diff (703 bytes)   

2useven10

2011-05-23 10:35

developer   bugnote:0007002

Last edited: 2011-05-23 10:48

напоминалка :)
это последнее из 'посторонних' изменений для вьювера.
правки минимальны:
 если в пользовательской части обработчика клика на радиобатон
 был изменен фокус не меняем его после ProcessRadioButton()

2useven10

2011-05-23 10:46

developer  

dialog.cpp-refresh.diff (859 bytes)   
Index: dialog.cpp
===================================================================
--- dialog.cpp	(revision 6263)
+++ dialog.cpp	(working copy)
@@ -3610,20 +3610,22 @@
 
 	Item[CurRB]->Selected=1;
 
+	unsigned ret = CurRB, focus = FocusPos;
+
 	/* $ 28.07.2000 SVS
 	  ��� ��������� ������� ������� �������� ������� ��������
 	  ����������� ������ SendDlgMessage - � ��� ������� ���!
 	*/
 	if (!SendDlgMessage(this,DN_BTNCLICK,PrevRB,0) ||
-	        !SendDlgMessage(this,DN_BTNCLICK,CurRB,ToPtr(1)))
+		!SendDlgMessage(this,DN_BTNCLICK,CurRB,ToPtr(1)))
 	{
 		// ������ �����, ���� ���������� �� ������...
 		Item[CurRB]->Selected=0;
 		Item[PrevRB]->Selected=1;
-		return PrevRB;
+		ret = PrevRB;
 	}
 
-	return CurRB;
+	return (focus == FocusPos ? ret : FocusPos); // ���� ����� �������� - ����� ��� ����!
 }
 
 
dialog.cpp-refresh.diff (859 bytes)   

DrKnS

2011-05-23 10:53

administrator   bugnote:0007003

> хотел сделать режим автоматичекого фокусирования на строке поиска. Т.е. после нажатия на check-box и radio-button активным должно быть окно ввода искомого текста

Баг багом, но лучше так не делать. Если пользователь, например, переключает чекбокс "Учитывать регистр", то после этого он вполне может захотеть переключить и "Только целые слова", нажав для перехода стрелку вниз, вправо или Tab.
Внезапное же перемещение фокуса в строку ввода способно сильно испортить карму.

2useven10

2011-05-23 11:12

developer   bugnote:0007004

Last edited: 2011-05-23 11:15

умолчательное поведение не изменится.
фича включается по флагу.
К тому же Alt+C, Alt+W - удобнее (IMHO)

JohnDoe

2011-05-23 11:31

updater   bugnote:0007005

> хотел сделать режим автоматичекого фокусирования на строке поиска.
Это ж и намакросить можно.

vskirdin

2011-05-23 12:19

administrator   bugnote:0007006

build 2046

Issue History

Date Modified Username Field Change
2011-04-25 10:17 2useven10 New Issue
2011-04-25 10:17 2useven10 File Added: dialog.cpp.diff
2011-05-23 10:35 2useven10 Note Added: 0007002
2011-05-23 10:46 2useven10 File Added: dialog.cpp-refresh.diff
2011-05-23 10:48 2useven10 Note Edited: 0007002
2011-05-23 10:53 DrKnS Note Added: 0007003
2011-05-23 11:12 2useven10 Note Added: 0007004
2011-05-23 11:13 2useven10 Note Edited: 0007004
2011-05-23 11:15 2useven10 Note Edited: 0007004
2011-05-23 11:31 JohnDoe Note Added: 0007005
2011-05-23 12:19 vskirdin Note Added: 0007006
2011-05-23 12:19 vskirdin Assigned To => vskirdin
2011-05-23 12:19 vskirdin Status new => feedback
2011-09-30 22:24 2useven10 Status feedback => resolved
2011-10-01 06:58 vskirdin Build => 2046
2011-10-01 06:58 vskirdin Status resolved => closed
2011-10-01 06:58 vskirdin Resolution open => fixed
2011-10-01 06:58 vskirdin Fixed in Version => 3.0