static struct newresource *customdialogres;
static HWND customdialoghwnd;
+static int CustomCreateDialogBox(int templ, HWND hDlg, DLGPROC proc);
+
void HtmlHelp(const TCHAR *panel)
{
TCHAR help_file[MAX_DPATH];
void CustomDialogClose(HWND hDlg, int status)
{
+ if (hGUIWnd) {
+ EnableWindow(hGUIWnd, TRUE);
+ }
customdialogactive = status;
customdialoghwnd = NULL;
freescaleresource(customdialogres);
return h;
}
-static void enableparent(HWND parent)
-{
- if (parent) {
- EnableWindow(parent, TRUE);
- }
-}
-
-static HWND disableparent(HWND owner)
-{
- HWND parent = NULL;
- HWND disabled_owner = NULL;
- /*
- * Owner needs to be top level window. We need to duplicate the logic from server,
- * because we need to disable it before creating dialog window. Note that we do that
- * even if dialog has WS_CHILD, but only for modal dialogs, which matched what
- * Windows does.
- */
- while ((GetWindowLongW(owner, GWL_STYLE) & (WS_POPUP | WS_CHILD)) == WS_CHILD) {
- parent = GetParent(owner);
- if (!parent || parent == GetDesktopWindow())
- break;
- owner = parent;
- }
- if (!parent)
- parent = GetAncestor(owner, GA_ROOT);
- if (parent)
- {
- owner = parent;
- if (IsWindowEnabled(owner))
- {
- HWND captured = NULL;
- disabled_owner = owner;
- EnableWindow(disabled_owner, FALSE);
- captured = GetCapture();
- if (captured)
- SendMessageW(captured, WM_CANCELMODE, 0, 0);
- }
- }
- return disabled_owner;
-}
-
-int CustomCreateDialogBox(int templ, HWND hDlg, DLGPROC proc)
+static int CustomCreateDialogBox(int templ, HWND hDlg, DLGPROC proc)
{
struct newresource *res;
customdialogactive = 1;
+ if (hGUIWnd) {
+ EnableWindow(hGUIWnd, FALSE);
+ }
HWND hwnd = CustomCreateDialog(&res, templ, hDlg, proc);
if (!hwnd) {
+ if (hGUIWnd) {
+ EnableWindow(hGUIWnd, TRUE);
+ }
return 0;
}
- HWND owner = disableparent(hDlg);
customdialogres = res;
customdialoghwnd = hwnd;
while (customdialogactive == 1) {
break;
}
}
- enableparent(owner);
+ if (hGUIWnd) {
+ if (!IsWindowEnabled(hGUIWnd)) {
+ EnableWindow(hGUIWnd, TRUE);
+ }
+ }
return customdialogactive;
}
extern void freescaleresource (struct newresource*);
extern void scaleresource_setsize (int w, int h, int fs);
extern HWND CustomCreateDialog (struct newresource **, int templ, HWND hDlg, DLGPROC proc);
-extern int CustomCreateDialogBox(int templ, HWND hDlg, DLGPROC proc);
extern void CustomDialogClose(HWND, int);
extern INT_PTR CustomDialogBox (int templ, HWND hDlg, DLGPROC proc);
extern struct newresource *getresource (int tmpl);