LCL, fix message dialogs hidding behind modal dialogs issue #32249

git-svn-id: trunk@55848 -
This commit is contained in:
jesus 2017-09-13 00:17:56 +00:00
parent 57e8304b23
commit d34180dc08
3 changed files with 22 additions and 7 deletions

View File

@ -73,6 +73,19 @@ var
var var
Styles : TStrings; Styles : TStrings;
const
//(bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin);
GtkWindowTypeHints: array[TFormBorderStyle] of TGdkWindowTypeHint = (
GDK_WINDOW_TYPE_HINT_NOTIFICATION,
GDK_WINDOW_TYPE_HINT_NORMAL,
GDK_WINDOW_TYPE_HINT_NORMAL,
GDK_WINDOW_TYPE_HINT_DIALOG,
GDK_WINDOW_TYPE_HINT_UTILITY,
GDK_WINDOW_TYPE_HINT_UTILITY
);
var
DefaultPangoLayout: PPangoLayout = nil; DefaultPangoLayout: PPangoLayout = nil;
const const

View File

@ -1276,12 +1276,13 @@ begin
gtk_window_set_title(PGtkWindow(Dialog), PGChar(Title)); gtk_window_set_title(PGtkWindow(Dialog), PGChar(Title));
end; end;
if (gtk_major_version = 2) and (gtk_minor_version <= 12) then ActiveWindow := GetActiveWindow;
begin if ActiveWindow <> 0 then
ActiveWindow := GetActiveWindow; gtk_window_set_transient_for(PGtkWindow(Dialog), {%H-}PGtkWindow(ActiveWindow));
if ActiveWindow <> 0 then // the following line keeps the old behaviour making the dialog appear
gtk_window_set_transient_for(PGtkWindow(Dialog), {%H-}PGtkWindow(ActiveWindow)); // at screen center instead of at ActiveWindow center
end; gtk_window_set_position(PGtkWindow(Dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run(PGtkDialog(Dialog)); gtk_dialog_run(PGtkDialog(Dialog));
gtk_widget_destroy(Dialog); gtk_widget_destroy(Dialog);
Result := ADialogResult; Result := ADialogResult;

View File

@ -725,6 +725,8 @@ begin
if AForm.HandleObjectShouldBeVisible and if AForm.HandleObjectShouldBeVisible and
GTK_IS_WINDOW({%H-}PGtkWindow(AForm.Handle)) then GTK_IS_WINDOW({%H-}PGtkWindow(AForm.Handle)) then
begin begin
gtk_window_set_type_hint({%H-}PGtkWindow(AForm.Handle),
GtkWindowTypeHints[AForm.BorderStyle]);
gtk_window_set_keep_above({%H-}PGtkWindow(AForm.Handle), gtk_window_set_keep_above({%H-}PGtkWindow(AForm.Handle),
GBoolean(AForm.FormStyle in fsAllStayOnTop)) GBoolean(AForm.FormStyle in fsAllStayOnTop))
end end
@ -739,7 +741,6 @@ begin
begin begin
gtk_window_set_default_size(GtkWindow, Max(1,AForm.Width), Max(1,AForm.Height)); gtk_window_set_default_size(GtkWindow, Max(1,AForm.Width), Max(1,AForm.Height));
gtk_widget_set_uposition(PGtkWidget(GtkWindow), AForm.Left, AForm.Top); gtk_widget_set_uposition(PGtkWidget(GtkWindow), AForm.Left, AForm.Top);
gtk_window_set_type_hint(GtkWindow, GDK_WINDOW_TYPE_HINT_DIALOG);
GtkWindowShowModal(AForm, GtkWindow); GtkWindowShowModal(AForm, GtkWindow);
end else end else
begin begin