Skip to content

Commit 4fbf2ce

Browse files
committed
Uninstall sources v1.10.11.0
1 parent c46033e commit 4fbf2ce

File tree

15 files changed

+410
-122
lines changed

15 files changed

+410
-122
lines changed

Uninstall/src/FarLang.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ enum {
1111
MEnterWaitCompletion,
1212
MUseElevation,
1313
MLowPriority,
14+
MForceMsiUse,
1415
MEnterAction,
1516
MShiftEnterAction,
1617
MActionUninstallWait,
@@ -38,6 +39,7 @@ enum {
3839
MMenuBottomLine1,
3940
MMenuBottomLine2,
4041
MMenuTopLine,
42+
MMenuTopLineN,
4143
MListHKLMx86,
4244
MListHKLMx64,
4345
MListHKLM,

Uninstall/src/Lang.templ

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ MLowPriority
8383
"Запуск с &низким приоритетом"
8484
"Start with &low priority"
8585

86+
MForceMsiUse
87+
"&Всегда использовать MsiExec"
88+
"&Force use MsiExec"
89+
8690
MEnterAction
8791
"Ente&r: "
8892
"Ente&r: "
@@ -175,8 +179,8 @@ MInstallDate
175179

176180
MBottomLine
177181
l:// Menu's top and bottom lines
178-
"[Shift-]Enter: run, F8: del entry, F3: info, Ctrl-R: update"
179-
"[Shift-]Enter: run, F8: del entry, F3: info, Ctrl-R: update"
182+
"[Shift-]Enter: run, F8: del entry, F2: sort, F3: info, Ctrl-R: update"
183+
"[Shift-]Enter: run, F8: del entry, F2: sort, F3: info, Ctrl-R: update"
180184

181185
MFilter
182186
"Filter: [%s], Entries: [%d/%d]"
@@ -187,13 +191,17 @@ MMenuBottomLine1
187191
"{Normal priority} F7"
188192

189193
MMenuBottomLine2
190-
"{Low priority} F7"
191-
"{Low priority} F7"
194+
" {Low priority} F7"
195+
" {Low priority} F7"
192196

193197
MMenuTopLine
194198
"Выберите действие"
195199
"Select action"
196200

201+
MMenuTopLineN
202+
"Действие для %u элементов"
203+
"Action for %u items"
204+
197205
MListHKLMx86
198206
l:// Install location (registry)
199207
"Mx86"

Uninstall/src/UnInstall.cpp

Lines changed: 134 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -116,27 +116,70 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
116116

117117
ListSize = 0;
118118
int NewPos = -1;
119-
for (int i=0;i<nCount;i++)
119+
if (OldPos >= 0 && OldPos < nCount)
120120
{
121-
const TCHAR* DispName = p[i].Keys[DisplayName];
122-
if (strstri(DispName,Filter)) //áåç ó÷åòà ðåãèñòðà â OEM êîäèðîâêå
121+
if (!*Filter || strstri(p[OldPos].Keys[DisplayName],Filter)) //áåç ó÷åòà ðåãèñòðà â OEM êîäèðîâêå
122+
NewPos = OldPos;
123+
}
124+
for (int i = 0; i < nCount; i++)
125+
{
126+
const TCHAR* DispName = p[i].Keys[DisplayName], *Find;
127+
if (*Filter)
128+
Find = strstri(DispName,Filter);
129+
else
130+
Find = DispName;
131+
if (Find != nullptr) //áåç ó÷åòà ðåãèñòðà â OEM êîäèðîâêå
123132
{
124133
FLI[i].Flags &= ~LIF_HIDDEN;
134+
if (Param2 && (i == OldPos))
135+
{
136+
if (FLI[i].Flags & LIF_CHECKED)
137+
{
138+
FLI[i].Flags &= ~LIF_CHECKED;
139+
}
140+
else
141+
{
142+
FLI[i].Flags |= LIF_CHECKED;
143+
}
144+
}
125145
//áåç ó÷åòà ðåãèñòðà - à êîäèðîâêà ANSI
126-
if (NewPos == -1 && strstri(DispName,Filter) == DispName)
146+
if (NewPos == -1 && Find == DispName)
127147
NewPos = i;
128148
ListSize++;
129149
}
130150
else
131151
FLI[i].Flags |= LIF_HIDDEN;
132152
}
133-
if (NewPos == -1) NewPos = OldPos;
153+
if (Param1 == 0 && Param2)
154+
{
155+
// Ñíÿòèå èëè óñòàíîâêà ïîìåòêè (Ins)
156+
if (Param2 == 1)
157+
{
158+
for (int i = (OldPos+1); i < nCount; i++)
159+
{
160+
if (!(FLI[i].Flags & LIF_HIDDEN))
161+
{
162+
OldPos = i; break;
163+
}
164+
}
165+
NewPos = OldPos;
166+
}
167+
// Ñíÿòèå èëè óñòàíîâêà ïîìåòêè (RClick)
168+
else if (Param2 == 2)
169+
{
170+
NewPos = OldPos;
171+
}
172+
}
173+
else if (NewPos == -1)
174+
{
175+
NewPos = OldPos;
176+
}
134177

135178
Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);
136179

137180
Info.SendDlgMessage(hDlg,DM_LISTSET,LIST_BOX,reinterpret_cast<LONG_PTR>(&FL));
138181

139-
FSF.sprintf(spFilter,GetMsg(MFilter),Filter,ListSize,nCount);
182+
StringCchPrintf(spFilter,ARRAYSIZE(spFilter), GetMsg(MFilter),Filter,ListSize,nCount);
140183
ListTitle.Title = spFilter;
141184
ListTitle.TitleLen = lstrlen(spFilter);
142185
Info.SendDlgMessage(hDlg,DM_LISTSETTITLES,LIST_BOX,reinterpret_cast<LONG_PTR>(&ListTitle));
@@ -169,24 +212,32 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
169212

170213
case DN_MOUSECLICK:
171214
{
172-
if (Param1 == LIST_BOX) {
215+
if (Param1 == LIST_BOX)
216+
{
173217
MOUSE_EVENT_RECORD *mer = (MOUSE_EVENT_RECORD *)Param2;
174-
if (mer->dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) {
218+
if (mer->dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
219+
{
175220
// find list on-screen coords (excluding frame and border)
176221
SMALL_RECT list_rect;
177222
Info.SendDlgMessage(hDlg, DM_GETDLGRECT, 0, reinterpret_cast<LONG_PTR>(&list_rect));
178223
list_rect.Left += 2;
179224
list_rect.Top += 1;
180225
list_rect.Right -= 2;
181226
list_rect.Bottom -= 1;
182-
if ((mer->dwEventFlags == 0) && (mer->dwMousePosition.X > list_rect.Left) && (mer->dwMousePosition.X < list_rect.Right) && (mer->dwMousePosition.Y > list_rect.Top) && (mer->dwMousePosition.Y < list_rect.Bottom)) {
227+
if ((mer->dwEventFlags == 0) && (mer->dwMousePosition.X > list_rect.Left) && (mer->dwMousePosition.X < list_rect.Right) && (mer->dwMousePosition.Y > list_rect.Top) && (mer->dwMousePosition.Y < list_rect.Bottom))
228+
{
183229
DlgProc(hDlg, DN_KEY, LIST_BOX, KEY_ENTER);
184230
return TRUE;
185231
}
186232
// pass message to scrollbar if needed
187233
if ((mer->dwMousePosition.X == list_rect.Right) && (mer->dwMousePosition.Y > list_rect.Top) && (mer->dwMousePosition.Y < list_rect.Bottom)) return FALSE;
188234
return TRUE;
189235
}
236+
else if (mer->dwButtonState == RIGHTMOST_BUTTON_PRESSED)
237+
{
238+
Info.SendDlgMessage(hDlg,DMU_UPDATE,0,2);
239+
return TRUE;
240+
}
190241
}
191242
}
192243
break;
@@ -199,7 +250,7 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
199250
if (ListSize)
200251
{
201252
TCHAR DlgText[MAX_PATH + 200];
202-
FSF.sprintf(DlgText, GetMsg(MConfirm), p[Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL)].Keys[DisplayName]);
253+
StringCchPrintf(DlgText, ARRAYSIZE(DlgText), GetMsg(MConfirm), p[Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL)].Keys[DisplayName]);
203254
if (EMessage((const TCHAR * const *) DlgText, 0, 2) == 0)
204255
{
205256
if (!DeleteEntry(static_cast<int>(Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL))))
@@ -211,6 +262,7 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
211262
return TRUE;
212263

213264
case (KEY_F9|KEY_SHIFT|KEY_ALT):
265+
case (KEY_F9):
214266
{
215267
Configure(0);
216268
}
@@ -222,19 +274,74 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
222274
}
223275
return TRUE;
224276

277+
case KEY_INS:
278+
{
279+
Info.SendDlgMessage(hDlg,DMU_UPDATE,0,1);
280+
}
281+
return TRUE;
282+
225283
case KEY_ENTER:
226284
case KEY_SHIFTENTER:
227285
{
228286
if (ListSize)
229287
{
230288
int liChanged = 0;
231-
int pos = static_cast<int>(Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL));
232-
if (Param2 == KEY_ENTER)
233-
liChanged = ExecuteEntry(pos, Opt.EnterAction, (Opt.RunLowPriority!=0));
234-
else if (Param2 == KEY_SHIFTENTER)
235-
liChanged = ExecuteEntry(pos, Opt.ShiftEnterAction, (Opt.RunLowPriority!=0));
289+
int liSelected = 0, liFirst = -1;
290+
291+
for (int i = 0; i < nCount; i++)
292+
{
293+
if (FLI[i].Flags & LIF_CHECKED)
294+
{
295+
if (liFirst == -1)
296+
liFirst = i;
297+
liSelected++;
298+
}
299+
}
300+
301+
if (liSelected <= 1)
302+
{
303+
int liAction = (Param2 == KEY_ENTER) ? Opt.EnterAction : Opt.ShiftEnterAction;
304+
int pos = (liFirst == -1) ? static_cast<int>(Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,LIST_BOX,NULL)) : liFirst;
305+
liChanged = ExecuteEntry(pos, liAction, (Opt.RunLowPriority!=0));
306+
}
307+
else
308+
{
309+
int liAction = (Param2 == KEY_ENTER) ? Opt.EnterAction : Opt.ShiftEnterAction;
310+
bool LowPriority = (Opt.RunLowPriority!=0);
311+
312+
// Îáÿçàòåëüíî îæèäàíèå - äâà èíñòàëëÿòîðà ñðàçó íåäîïóñêàþòñÿ
313+
if (liAction == Action_Menu)
314+
{
315+
if (EntryMenu(0, liAction, LowPriority, liSelected) < 0)
316+
return TRUE;
317+
}
318+
else if (liAction == Action_Uninstall)
319+
liAction = Action_UninstallWait;
320+
else if (liAction == Action_Modify)
321+
liAction = Action_ModifyWait;
322+
else if (liAction == Action_Repair)
323+
liAction = Action_RepairWait;
324+
325+
for (int pos = 0; pos < nCount; pos++)
326+
{
327+
if (!(FLI[pos].Flags & LIF_CHECKED))
328+
continue;
329+
struct FarListPos FLP;
330+
FLP.SelectPos = pos;
331+
FLP.TopPos = -1;
332+
Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,LIST_BOX,reinterpret_cast<LONG_PTR>(&FLP));
333+
int li = ExecuteEntry(pos, liAction, LowPriority);
334+
if (li == -1)
335+
break; // îòìåíà
336+
if (li == 1)
337+
liChanged = 1;
338+
}
339+
}
340+
236341
if (liChanged == 1)
342+
{
237343
Info.SendDlgMessage(hDlg,DMU_UPDATE,1,0);
344+
}
238345
}
239346
}
240347
return TRUE;
@@ -273,6 +380,7 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
273380
return TRUE;
274381

275382
case KEY_F3:
383+
case KEY_F4:
276384
{
277385
if (ListSize)
278386
{
@@ -282,6 +390,13 @@ static LONG_PTR WINAPI DlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
282390
}
283391
return TRUE;
284392

393+
case KEY_F2:
394+
{
395+
Opt.SortByDate = !Opt.SortByDate;
396+
Info.SendDlgMessage(hDlg,DMU_UPDATE,1,0);
397+
}
398+
return TRUE;
399+
285400
case KEY_BS:
286401
{
287402
if (lstrlen(Filter))
@@ -372,12 +487,14 @@ int WINAPI Configure(int ItemNumber)
372487
//BOOL bEnterWaitCompletion = (Opt.EnterFunction != 0);
373488
BOOL bUseElevation = (Opt.UseElevation != 0);
374489
BOOL bLowPriority = (Opt.RunLowPriority != 0);
490+
BOOL bForceMsiUse = (Opt.ForceMsiUse != 0);
375491

376492
Config.AddCheckbox(MShowInEditor, &bShowInEditor);
377493
Config.AddCheckbox(MShowInViewer, &bShowInViewer);
378494
//Config.AddCheckbox(MEnterWaitCompletion, &bEnterWaitCompletion);
379495
Config.AddCheckbox(MUseElevation, &bUseElevation);
380496
Config.AddCheckbox(MLowPriority, &bUseElevation);
497+
Config.AddCheckbox(MForceMsiUse, &bForceMsiUse);
381498

382499
Config.AddSeparator();
383500

@@ -411,12 +528,14 @@ int WINAPI Configure(int ItemNumber)
411528
//Opt.EnterFunction = bEnterWaitCompletion;
412529
Opt.UseElevation = bUseElevation;
413530
Opt.RunLowPriority = bLowPriority;
531+
Opt.ForceMsiUse = bForceMsiUse;
414532

415533
SetRegKey(HKCU,_T(""),_T("WhereWork"),(DWORD) Opt.WhereWork);
416534
SetRegKey(HKCU,_T(""),_T("EnterAction"),(DWORD) Opt.EnterAction);
417535
SetRegKey(HKCU,_T(""),_T("ShiftEnterAction"),(DWORD) Opt.ShiftEnterAction);
418536
SetRegKey(HKCU,_T(""),_T("UseElevation"),(DWORD) Opt.UseElevation);
419537
SetRegKey(HKCU,_T(""),_T("RunLowPriority"),(DWORD) Opt.RunLowPriority);
538+
SetRegKey(HKCU,_T(""),_T("ForceMsiUse"),(DWORD) Opt.ForceMsiUse);
420539
}
421540

422541
return FALSE;

0 commit comments

Comments
 (0)