diff --git a/lcl/interfaces/gtk2/gtk2globals.pp b/lcl/interfaces/gtk2/gtk2globals.pp index b81d641be5..b63ac85b7d 100644 --- a/lcl/interfaces/gtk2/gtk2globals.pp +++ b/lcl/interfaces/gtk2/gtk2globals.pp @@ -73,6 +73,19 @@ var var 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; const diff --git a/lcl/interfaces/gtk2/gtk2lclintf.inc b/lcl/interfaces/gtk2/gtk2lclintf.inc index d1283a7b50..805cbae197 100644 --- a/lcl/interfaces/gtk2/gtk2lclintf.inc +++ b/lcl/interfaces/gtk2/gtk2lclintf.inc @@ -1276,12 +1276,13 @@ begin gtk_window_set_title(PGtkWindow(Dialog), PGChar(Title)); end; - if (gtk_major_version = 2) and (gtk_minor_version <= 12) then - begin - ActiveWindow := GetActiveWindow; - if ActiveWindow <> 0 then - gtk_window_set_transient_for(PGtkWindow(Dialog), {%H-}PGtkWindow(ActiveWindow)); - end; + ActiveWindow := GetActiveWindow; + if ActiveWindow <> 0 then + gtk_window_set_transient_for(PGtkWindow(Dialog), {%H-}PGtkWindow(ActiveWindow)); + // the following line keeps the old behaviour making the dialog appear + // at screen center instead of at ActiveWindow center + gtk_window_set_position(PGtkWindow(Dialog), GTK_WIN_POS_CENTER); + gtk_dialog_run(PGtkDialog(Dialog)); gtk_widget_destroy(Dialog); Result := ADialogResult; diff --git a/lcl/interfaces/gtk2/gtk2wsforms.pp b/lcl/interfaces/gtk2/gtk2wsforms.pp index aa61c2e91f..16774fecf0 100644 --- a/lcl/interfaces/gtk2/gtk2wsforms.pp +++ b/lcl/interfaces/gtk2/gtk2wsforms.pp @@ -725,6 +725,8 @@ begin if AForm.HandleObjectShouldBeVisible and GTK_IS_WINDOW({%H-}PGtkWindow(AForm.Handle)) then begin + gtk_window_set_type_hint({%H-}PGtkWindow(AForm.Handle), + GtkWindowTypeHints[AForm.BorderStyle]); gtk_window_set_keep_above({%H-}PGtkWindow(AForm.Handle), GBoolean(AForm.FormStyle in fsAllStayOnTop)) end @@ -739,7 +741,6 @@ begin begin 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_window_set_type_hint(GtkWindow, GDK_WINDOW_TYPE_HINT_DIALOG); GtkWindowShowModal(AForm, GtkWindow); end else begin